你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。

稀疏量子模拟器

稀疏模拟器利用量子状态向量的稀疏表示形式。 稀疏量子状态是大部分振幅系数为零的状态。 稀疏表示形式允许稀疏模拟器最大程度地减少表示量子状态所需的内存占用量,从而允许模拟超过大量量子比特。 稀疏模拟器对于在计算基中呈稀疏性的量子态所对应的程序,具有较高的运行效率。 稀疏模拟器允许用户探索比全状态模拟器更大的应用程序,因为后者在指数级数量的零振幅上浪费了内存和时间。

有关稀疏模拟器的详细信息,请参阅 Jaques 和 Häner (arXiv:2105.01533)。

调用稀疏模拟器

稀疏模拟器是 MicrosoftQuantum 开发工具包 (QDK) 扩展中的默认本地模拟器,适用于 Visual Studio Code (VS Code)。 如何使用稀疏模拟器取决于开发环境。

开发环境 如何调用稀疏模拟器
在 VS Code 中的 Q# 或 OpenQASM程序中 运行Q#或OpenQASM文件
在带 qdk 包的 Python 程序中 qsharp.run
或
openqasm.run
或
qiskit.QSharpBackend
%%qsharp在笔记本单元格中 调用程序入口操作,例如:
Main()

在 VS Code 中的稀疏模拟器中添加 Pauli 噪声

稀疏模拟器支持通过 VS Code 扩展向 Q# 程序的模拟中添加 Pauli 噪声。 使用此功能可以模拟干扰对量子运算和度量的影响。 若要在 Q# 程序中指定噪音模型,请使用函数 ConfigurePauliNoise 。 该函数设置Pauli运算符 X、Y 和 Z 的噪声发生概率。 还可以在扩展设置中配置全局干扰模型。

使用 VS Code 设置添加 Pauli 噪声

若要为 VS Code 中的 Q# 程序设置全局 Pauli 噪声,请为 QDK 扩展配置Q#>模拟:Pauli噪声用户设置。

此屏幕截图显示了Q#中QDK扩展模块的全局VS Code噪声设置。

噪声设置适用于 VS Code 中所有 Q# 程序内的所有门、测量结果和量子比特的直方图结果。

例如,未配置噪声的以下 GHz 示例程序的直方图显示结果中约有一半测量结果是 $\ket{00000}$,另一半是 $\ket{11111}$。

import Std.Diagnostics.*;
import Std.Measurement.*;

operation Main() : Result []{
    let num = 5;
    return GHzSample(num);
}
operation GHzSample(n: Int) : Result[] {
    use qs = Qubit[n];
    H(qs[0]);
    ApplyCNOTChain(qs);
    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

屏幕截图显示无干扰的结果。

如果添加 1% 的位翻转噪声率,则结果会开始变得分散。 由于 25% 位翻转噪声,直方图与纯噪声无法区分。

VS Code 中的 QDK 的屏幕截图显示了位翻转噪声率为 1% 和 25% 的程序的直方图结果。

向单个 Q# 程序添加 Pauli 噪声

使用 ConfigurePauliNoise 函数设置或修改单个 Q# 程序的噪音模型。 该 ConfigurePauliNoise 函数可让你控制程序中发生 Q# 噪音的时间和位置。

注释

如果在设置中 VS Code 配置干扰,则干扰将应用于所有 Q# 程序。 但是,该 ConfigurePauliNoise 函数会覆盖调用该函数的程序的 VS Code 干扰设置。

例如,在上一个程序中,可以在量子比特分配后立即添加干扰。

operation GHzSample(n: Int) : Result[] {
    use qs = Qubit[n];

     // 5% bit-flip noise applies to all operations
    ConfigurePauliNoise(0.05, 0.0, 0.0);

    H(qs[0]);
    ApplyCNOTChain(qs);
    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

显示直方图结果的屏幕截图,其中在量子位分配后添加了噪声。

或者,可以仅向度量操作添加噪声。

operation GHzSample(n: Int) : Result[] {
    use qs = Qubit[n];
    H(qs[0]);
    ApplyCNOTChain(qs);

    // Noise applies to only the measurement operation
    ConfigurePauliNoise(0.05, 0.0, 0.0);

    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

显示直方图结果的屏幕截图,其中在测量前添加了噪声。

若要修改或清除程序中不同点的干扰配置,请多次调用 ConfigurePauliNoise 。 例如,可以为 Hadamard 门设置 5% 位翻转噪声,并为程序的其余部分设置无噪声。

operation GHzSample(n: Int) : Result[] {
    use qs = Qubit[n];

    // Noise applies to the H operation
    ConfigurePauliNoise(0.05, 0.0, 0.0);
    
    H(qs[0]);

     // Clear the noise settings
    ConfigurePauliNoise(0.0, 0.0, 0.0);
    
    ApplyCNOTChain(qs);
    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

其他 Q# 噪声函数

该 ConfigureNoiseFunction 函数足以对程序中的 Pauli 任何类型的干扰进行建模,但 Q# 还有其他干扰函数,你也可以使用。 Std.Diagnostics 库中提供了以下函数来配置 Q# 程序中的噪声:

功能 Description Example
ConfigurePauliNoise 为模拟器运行配置 Pauli 噪声。 参数表示 X、Y 和 Z 门 Pauli 干扰的概率。 噪声配置适用于 Q# 程序中的所有后续门、测量结果和量子比特。 覆盖 VS Code 扩展噪声设置。 后续对 ConfigurePauliNoise 的调用会覆盖先前调用所设置的噪声。 ConfigurePauliNoise(0.1, 0.0, 0.5)
或
ConfigurePauliNoise(BitFlipNoise(0.1))
BitFlipNoise 配置仅 X 门噪声,并指定其发生概率。 10% 位翻转噪声:
ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0)
PhaseFlipNoise 仅配置具有指定概率的 Z 门噪声。 10% 相位翻转噪声
ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1)
DepolarizingNoise 配置 X、Y 或 Z 门的噪声,并使其概率相等。 6% 退极化噪声:
ConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.2, 0.2, 0.2)
NoNoise 将干扰模型重置为无干扰。 ConfigurePauliNoise(NoNoise()) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.0)
ApplyIdleNoise 在模拟期间将配置的干扰应用于单个量子比特。 ...
use q = Qubit[2];
ConfigurePauliNoise(0.1, 0.0, 0.0);
ApplyIdleNoise(q[0]);
...