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

如何使用 Q 可视化量子线路图#

量子线路图是量子操作的可视表示形式。 线路图显示量子比特通过量子程序流动,包括程序应用于量子比特的入口和度量值。

本文介绍了如何在Azure Quantum Development Kit(QDK)中使用Visual Studio Code(VS Code)和Jupyter Notebook量子线路图来直观地表示量子算法。

有关量子线路图的详细信息,请参阅 Quantum 线路约定

先决条件

  • 最新版本的VS Code,或打开 Web 上的VS Code

  • 安装在QDK中的扩展、Jupyter、和的最新版本。

  • Python 库的 qdk 最新版本具有可选 jupyter 附加功能。

    python -m pip install --upgrade qdk[jupyter]
    

在 VS Code 中可视化量子线路

若要可视化 Q# 程序的 VS Code量子线路,请完成以下步骤。

查看 Q# 程序的线路图

  1. 打开 VS CodeQ# 文件,或 加载其中一个量子样本

  2. 从入口点作前的代码镜头中选择 “线路 ”命令。

    Q# 文件的屏幕截图, Visual Studio Code 其中显示了在何处查找代码镜头线路命令。

此时会显示 Q# 线路窗口,并显示程序的线路图。 例如,以下电路对应一个操作,该操作将量子比特置于叠加态,然后测量量子比特。 线路图显示了初始化为 $\ket{0}$ 状态的一个量子位寄存器。 然后,Hadamard 门(Hadamard gate)将应用于量子比特,后跟测量操作,该测量操作由计量符号表示。 在这种情况下,度量结果为零。

Q# 电路窗口中显示随机位操作的电路图的屏幕截图。

小窍门

在 Q# 和 OpenQASM 文件中,选择线路图中的元素以突出显示创建线路元素的代码。

查看各个具体操作的线路图

若要在 Q# 文件中可视化单个操作的量子电路,请从操作前面的代码透镜中选择 “电路” 命令。

包含 Visual Studio Code 的屏幕截图,显示了如何在 Q# 程序中可视化单个 Q# 操作的电路。

调试时查看线路图

在 Q# 程序中使用 VS Code 调试器时,可以根据当前调试器断点的程序状态可视化量子线路。

  1. 从你的入口点操作前面的码透镜中选择“调试”命令。
  2. “运行和调试”窗格中,展开“变量”菜单中的“量子线路”下拉列表。 “ QDK 线路 ”面板随即打开,其中显示了单步执行程序时的线路。
  3. 设置断点并逐行调试代码,以查看程序运行时电路的更新。

Jupyter Notebook 中的量子线路

在 Jupyter Notebook 中,可以使用 Python 模块 qdk.qsharpqdk.widgets 可视化量子线路。 该 widgets 模块提供一个小组件,用于将量子线路图呈现为 SVG 图像。

查看输入表达式的电路图

  1. 在 VS Code中,打开 “视图 ”菜单,然后选择 “命令面板”。

  2. 输入并选择创建:新建Jupyter Notebook

  3. 在笔记本的第一个单元中,运行以下代码来导入 qsharp 包。

    from qdk import qsharp
    
  4. 创建新单元格并输入 Q# 代码。 例如,以下代码准备贝尔态:

    %%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()"))
    

    Jupyter Notebook

查看关于量子位操作的线路图

可以生成以量子比特或量子比特数组为输入的操作电路图。 该图显示了每个输入量子比特的线路,以及您在操作中分配的其他量子比特的线路。 当操作采用量子比特 (Qubit[])数组时,线路会将该数组显示为 2 个量子比特的寄存器。

  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 门不在关系图中。 如果再次运行模拟,可能会获得其他线路。