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

稀疏量子模拟器

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

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

调用稀疏模拟器

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

开发环境 如何调用稀疏模拟器
在一个Q#或OpenQASM程序中VS Code 运行Q#或OpenQASM文件
Python在包含包的程序中qdk qsharp.run

openqasm.run

qiskit.QSharpBackend
%%qsharp在笔记本单元格中 调用程序入口操作,例如:
Main()

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

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

使用Pauli设置添加VS Code干扰

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

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

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

例如,未配置干扰的以下 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% 位翻转噪声,直方图与纯噪声无法区分。

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

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

使用 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 。 例如,可以将 5% 位翻转噪声设置给 Hadamard 门,并为程序的其余部分设置无噪声。

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]);
...