稀疏模擬器利用稀疏的量子態向量表示。 稀疏量子態是指大多數振幅係數為零的狀態。 稀疏表示使稀疏模擬器能減少表示量子態所需的記憶體佔用,從而能在更多量子位元上進行模擬。 稀疏模擬器對於計算基底中量子態稀疏的程式來說非常高效。 稀疏模擬器讓使用者能探索比全狀態模擬器更大的應用,因為全狀態模擬器會浪費大量零振幅的記憶體與時間。
欲了解更多關於稀疏模擬器的資訊,請參見 Jaques 與 Häner(arXiv:2105.01533)。
呼叫稀疏模擬器
稀疏模擬器是 MicrosoftQuantum Development Kit(QDK)擴充套件中Visual Studio Code (VS Code)的預設本地模擬器。 如何使用稀疏模擬器取決於你的開發環境。
| 開發環境 | 如何呼叫稀疏模擬器 |
|---|---|
| 在 Q# 或 OpenQASM 程式 VS Code 中 | 執行 Q# or OpenQASM 檔案 |
在 Python 程式中使用 qdk 函式庫 |
qsharp.run或 openqasm.run或 qiskit.QSharpBackend |
在筆記本牢房裡%%qsharp |
例如,呼叫程式輸入操作:Main() |
在稀疏模擬器中加入 Pauli 雜訊 VS Code
稀疏模擬器支援透過VS Code擴充功能,向您的Q#程式模擬中加入Pauli雜訊。 此功能可讓您模擬雜訊對量子運算和量測的影響。 要在程式 Q# 中指定噪音模型,請使用這個 ConfigurePauliNoise 函數。 該函數設定運算子 Pauli、X、Y 和雜訊的發生機率Z。 你也可以在擴充功能設定中設定全域噪音模型。
使用VS Code設定加入Pauli噪音
若要設定Pauli程式的Q#全域VS Code雜訊,請配置Q#> 擴充套件的 Simulation:Pauli Noise 使用者設定QDK。
噪聲設定適用於所有程式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% 位元翻轉噪聲中,直方圖與純噪聲無異。
為個別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)) $\等價$ ConfigurePauliNoise(0.1, 0.0, 0.0) |
PhaseFlipNoise |
僅以指定機率配置Z閘噪聲。 | 10% 相位翻轉雜訊:ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\等價$ ConfigurePauliNoise(0.0, 0.0, 0.1) |
DepolarizingNoise |
將雜訊配置為 X、Y 或 Z 閘,機率相等。 | 6% 去極化雜訊:ConfigurePauliNoise(DepolarizingNoise(0.06)) $\等價$ ConfigurePauliNoise(0.2, 0.2, 0.2) |
NoNoise |
重置噪音模型為無噪音。 |
ConfigurePauliNoise(NoNoise()) $\等價$ ConfigurePauliNoise(0.0, 0.0, 0.0) |
ApplyIdleNoise |
在模擬期間將設定的雜訊套用至單一量子位元。 | ...use q = Qubit[2];ConfigurePauliNoise(0.1, 0.0, 0.0);ApplyIdleNoise(q[0]);... |