稀疏量子模擬器

稀疏模擬器利用稀疏的量子態向量表示。 稀疏量子態是指大多數振幅係數為零的狀態。 稀疏表示使稀疏模擬器能減少表示量子態所需的記憶體佔用,從而能在更多量子位元上進行模擬。 稀疏模擬器對於計算基底中量子態稀疏的程式來說非常高效。 稀疏模擬器讓使用者能探索比全狀態模擬器更大的應用,因為全狀態模擬器會浪費大量零振幅的記憶體與時間。

欲了解更多關於稀疏模擬器的資訊,請參見 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、XY 和雜訊的發生機率Z。 你也可以在擴充功能設定中設定全域噪音模型。

使用VS Code設定加入Pauli噪音

若要設定Pauli程式的Q#全域VS Code雜訊,請配置Q#> 擴充套件的 Simulation:Pauli Noise 使用者設定QDK。

顯示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% 位元翻轉噪聲中,直方圖與純噪聲無異。

顯示程式中 1% 和 25% 位元翻轉雜訊率的直方圖結果的截圖QDKVS Code。

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