共用方式為


如何使用 Q 視覺化量子電路圖#

量子電路圖是量子作業的視覺表示法。 電路圖顯示量子位元在量子程式中的流動,包括程式對量子位元套用的閘極與測量。

在本文中,你將學習如何使用Azure Quantum Development Kit(QDK)的量子電路圖,並利用Visual Studio Code(VS Code)和Jupyter Notebook來視覺化呈現量子演算法。

欲了解更多量子電路圖相關資訊,請參閱 量子電路慣例

必要條件

可視化量子電路 VS Code

若要將 中的 Q# 程式 VS Code量子電路視覺化,請完成下列步驟。

檢視 Q# 程式的電路圖

  1. 在 中 VS Code開啟 Q# 檔案,或 載入其中一個量子範例

  2. 選擇在進入點操作之前的程式碼透鏡中的電路命令

    在 Visual Studio Code 中顯示 Q# 檔案的截圖,展示了如何找到 Code Lens 電路命令的位置。

Q# 電路視窗會出現,顯示你程式的電路圖。 例如,下列電路對應至將量子位元置於疊加態,然後測量量子位元的作業。 電路圖顯示一個初始化為 $\ket{0}$ 狀態的量子位暫存器。 然後,將 Hadamard 閘應用於量子位元,然後進行 測量操作,該操作由儀表符號表示。 在這種情況下,測量結果為零。

Q# 電路視窗的截圖,顯示隨機位元操作的電路圖。

小提示

在 Q# 和 OpenQASM 檔案中,選擇電路圖中的一個元素,以標示產生該電路元件的程式碼。

查看個別操作的電路圖

要在 Q# 檔案中視覺化單一操作的量子電路,請從操作前的程式碼透鏡中選擇 Circuit 指令。

截圖 Visual Studio Code 展示了如何在 Q# 程式中視覺化單一 Q# 操作的電路。

偵錯時檢視電路圖

當你在 Q# 程式中使用 VS Code 除錯器時,你可以根據目前除錯器斷點的程式狀態來視覺化量子電路。

  1. 選擇位於進入點操作之前的程式碼鏡像中的除錯指令。
  2. 執行與除錯面板中,展開 VARIABLES 選單中的量子電路下拉選單。 QDK電路面板會打開,當你在程式中逐步操作時,會顯示電路。
  3. 設定中斷點並逐步執行程式碼,以查看程式執行時線路的更新方式。

在Jupyter Notebook的量子電路

在 Jupyter Notebook中,你可以用 qdk.qsharpqdk.widgets Python 模組來視覺化量子電路。 該 widgets 模組提供一個小工具,能將量子電路圖渲染為 SVG 影像。

檢視輸入運算式的電路圖

  1. 在 VS Code中,開啟「檢視」功能表,然後選擇「命令選項板」。

  2. 輸入後選取建立:新建Jupyter Notebook

  3. 在筆記本的第一個儲存格中,執行下列程式碼以匯入 qsharp 套件。

    from qdk import qsharp
    
  4. 建立新的儲存格,然後輸入您的 Q# 代碼。 例如,下列程式碼會準備 Bell State:

    %%qsharp
    
    // Prepare a Bell State.
    operation BellState() : Unit {
        use register = Qubit[2];
        H(register[0]);
        CNOT(register[0], register[1]);
    }
    
  5. 若要根據程式的目前狀態顯示簡單的量子電路,請將進入點運算式傳遞至 qsharp.circuit 函數。 例如,上述程式碼的電路圖顯示兩個初始化為 $\ket{0}$ 狀態的量子位暫存器。 然後,將 Hadamard 閘套用至第一個量子位元。 最後,會套用 CNOT 閘門,其中第一個量子位元是控制項,以點表示,第二個量子位元是目標,以 X 表示。

    qsharp.circuit("BellState()")
    
    q_0    ── H ──── ● ──
    q_1    ───────── X ──
    
  6. 若要將量子電路視覺化為 SVG 影像,請使用該 widgets 模組。 建立新的儲存格,然後執行下列程式碼,以視覺化您在上一個儲存格中建立的電路。

    from qdk.widgets import Circuit
    
    Circuit(qsharp.circuit("BellState()"))
    

    這是一張顯示如何視覺化 Q# 運算電路的截圖 Jupyter Notebook 。

檢視使用量子位元作業的電路圖

您可以產生採用量子位元或量子位元陣列作為輸入的作業電路圖。 此圖顯示每個輸入量子位的線路,以及您在作業中配置的其他量子位元的線路。 當作業採用量子位數組時,線路會將數位顯示為2個量子位 (Qubit[])的緩存器。

  1. 新增儲存格,然後複製並執行下列 Q# 程式碼。 此程式代碼會準備 cat 狀態。

    %%qsharp
    
    operation PrepareCatState(register : Qubit[]) : Unit {
        H(register[0]);
        ApplyToEach(CNOT(register[0], _), register[1...]);
    }
    
  2. 新增數據格並執行下列程序代碼,以可視化作業的 PrepareCatState 線路。

    Circuit(qsharp.circuit(operation="PrepareCatState"))
    

動態電路電路圖

電路圖是在 Q# 程式內執行傳統邏輯,並追蹤所有已配置和套用的閘門來產生。 當迴圈和條件句只處理經典值時,會被支援。

不過,包含迴圈和使用量子位測量結果的條件表達式的程式比較棘手,以電路圖表示。 例如,請考慮下列運算式:

if (M(q) == One) {
   X(q)
}

此表達式無法用簡單的電路圖表示,因為閘門取決於測量結果。 具有依賴測量結果的閘極的電路稱為動態電路。

您可以在量子模擬器中執行程式,並在閘門被應用時追蹤它們,以生成動態電路的圖表。 此稱為追蹤模式,因為在模擬過程中會追蹤量子位元與閘。

追蹤電路的缺點是它們只能擷取單一模擬的量測結果和隨之而來的閘極應用。 在上面的範例中,如果測量結果是 Zero,則 X 閘門不在圖表中。 如果您再次運行模擬,那麼您可能會得到不同的電路。