你当前正在访问 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#中所有程序内所有入口、测量和量子比特的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% 位翻转噪声,直方图与纯噪声无法区分。
向单个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]);... |