写点什么

量子编程实践:Bell Pair 电路及 Deutsch 算法

  • 2022-11-04
    广东
  • 本文字数:2545 字

    阅读完需:约 8 分钟

QuTrunk 使用教程之 Bell Pair 电路及 Deutsch 算法

QuTrunk是启科量子自主研发的量子编程框架。QuTrunk 基于 Python 提供了量子编程 API,对量子编程相关的基本概念做了代码层面的抽象封装和实现,如 Qubit 代表单个量子比特,每个量子比特默认持有一个经典比特,方便存放量子比特对测量结果,例如 num_qubits = 15,输出 print("num_qubits:", num_qubits, "num_elems:", num_elems, "num_reps:", num_reps)。量子编程框架 QuTrunk 中的门操作是量子算法的基本组成单元,其中主要包括 H, Measure, CNOT, Toffoli, P, R, Rx, Ry, Rz, S, Sdg, T, Tdg, X, Y, Z, NOT, Swap, SqrtSwap, SqrtX, All, C, Rxx, Ryy, Rzz。下文将以 Bell Pair(贝尔线路)和 Deutsch 算法算法为例,主要介绍如何使用 QuTrunk 实现各种量子门操作。下文的解析内容包括如何利用 QuTrunk 准备量子编程所需的环境、定义量子函数、量子逻辑门的操作及各指令的作用等。

Github 开源地址:http://github.com/qudoor/qutrunk

1.量子逻辑门:H 与 CNOT 实例

1.1Bell Pair

步骤 1:环境准备
  • 代码块


    from qutrunk.circuit import QCircuit    from qutrunk.circuit.gates import H, CNOT, Measure
复制代码


  • 量子线路:以上代码模块中core.circuit提供量子线路功能。

  • 量子逻辑门操作from qutrunk.core.gates import H, CNOT, Measure可以准备 H 门、CNOT 门和测量操作。

步骤 2:初始化量子线路,分配量子寄存器
  • 代码块


    qc = QCircuit()    qr = qc.allocate(2)
复制代码
步骤 3:应用量子逻辑门
  • 代码块


    H * qr[0]    CNOT * (qr[0], qr[1])    Measure * qr[0]    Measure * qr[1]
# print circuit qc.print()
复制代码


  • 量子逻辑门的表示方式 1量子逻辑门+qr[量子态]。如H * qr[0]表示将哈达玛门作用于|0〉态上,产生量子叠加态 $2^{-1/2}(|0〉+|1〉)$;CNOT * (qr[0], qr[1])表示将 CNOT 门分别作用于与|0〉态和|1〉态上,其中|0〉处在控制位、|1〉处在目标位,只有当控制位为|1〉态时目标位发生翻转;Measure * qr[1]


CNOT门—————-●(控制位)————————      |—————-⊕(目标位)————————
复制代码


  • 打印线路:量子线路部分代码编辑好之后,直接打印量子线路。

  • 根据逻辑门操作预测所得结果:|00〉+|10〉态。

  • 量子逻辑门的表示方式 2:除将量子逻辑线路直接以代码形式编辑外,还可以使用启科量子的自研量子可视化编辑器。


首先,下载 QuBranch 后,点击【命令】选项;



其次,在框内输入quan,一键选择quan:量子编程可视化



拖拽量子逻辑门置于量子比特的时序线之上,此时会发现右侧代码编辑栏自动显示相应代码,且编辑器底部显示相应的量子态概率柱状图;



完整的 Bell-Pair 量子线路如下:


步骤 4:Bell Pair 量子线路运行及结果返回
  • 代码块


    # run circuit    res = qc.run(shots=1024)
# print result print(res.get_measure()) print(res.get_counts())
复制代码


目前 QuTrunk 已经通过运行代码直接可以输出量子线路图。

步骤 5:输出运行结果
  • 结果显示


    *qreg q[2]      creg c[2]      H * q[0]      MCX(1) * (q[0], q[1])      Measure * q[0]      Measure * q[1]      [{"00": 505}, {"11": 519}]*  
复制代码


  • 定义量子寄存器:以上定义量子寄存器是通过 qreg 操作完成的。指令为qreg q[2]表示定义一个名为 q 的 2 位量子寄存器;同理,指令creg c[2]表示定义一个名为 c 的经典寄存器。

  • 测量结果:测量结果为[{"00": 505}, {"11": 519}]。该结果表示量子线路运行次数分别为 505、519,共计运行 1024 次。对以上程序进行多次运行,发现结果都不相同,比如第二、三次的运行结果分别为[{"00": 507}, {"11": 517}]、[{"00": 528}, {"11": 496}]。

1.2Deutsch 算法

1.2.1 问题描述

Deutsch 算法主要解决判断函数类型问题。对两个不同类型的函数,通过两个输入和最后的结果输出,判断函数属于常数函数还是平衡函数。Deutsch 算法最大的贡献在于为之后的量子算法提供了启发性的思路,并不能具体解决实际问题。

1.2.2Deutsch 算法

步骤 1:环境准备
  • 代码块


    from qutrunk.circuit import QCircuit    from qutrunk.circuit.gates import H, Measure, All, X, CNOT
# allocate qc = QCircuit() qureg = qc.allocate(2)
复制代码


  • 量子线路:以上代码模块中qutrunk.circuit提供量子线路功能。

  • 量子逻辑门操作from qutrunk.circuit.gates import H, Measure, All, X, CNOT可以准备 H 门、CNOT 门和测量操作。

步骤 2:逻辑门操作
  • 代码块


    X * qureg[1]    All(H) * qureg    CNOT * (qureg[0], qureg[1])    H * qureg[0]    All(Measure) * qureg
复制代码



图片来源于:https://www.cnblogs.com/RabbitHu/p/Deutsch-Jozsa.html


  • 如量子线路图所示,首先需要将|0⟩态操作为|1⟩态。这时需要使用 X 门操作,X 门计算公式为:|0⟩→|1⟩,|1⟩→|0⟩。代码块中的指令X | qureg[1]操作后将可得到一个|1⟩态。Deutsch 算法的量子线路如上图所示。本文中的 Deutsch 算法示例暂时只使用两个量子比特。


|0⟩——————X——————|1⟩
复制代码


  • 对单个量子比特进行 H 门或者 CNOT 门操作并储存,可以使用指令H | qureg[0]或者CNOT | (qureg[0], qureg[1])。对多个量子比特进行门操作 $H^{⊕n}$,可以直接使用指令All(逻辑操作) | qureg,如All(Measure) | qureg。当量子比特数较少时,也可以参照 Bell-Pair 线路分别对量子比特进行门操作,比如Measure * qr[0];Measure * qr[1]

步骤 3:输出结果
  • **输出结果如下:**输出结果可以看成三个部分,分别为比特存储及逻辑门计算操作部分、测量部分、结果部分


>   *qreg q[2]      creg c[2]      X * q[1]      H * q[0]      H * q[1]      MCX(1) * (q[0], q[1])      H * q[0]      Measure * q[0]      Measure * q[1]    The result of Deutsch:  1*
复制代码


  • 寄存操作部分:表示对比特位为 2 的量子比特寄存操作。


    *qreg q[2]    creg c[2]
复制代码


  • 输出结果为"执行 Deutsch 算法,测量得到的结果是:1":最终的结果为概率值即振幅的平方。当最后结果为 0 时,可判断函数为常数函数;当最后结果为 1 时,可判断函数为平衡函数。经过多次运行,该程序的最终结果始终为 1。

结尾

以上案例中仅涉及到少量的量子逻辑门使用如 H, X,CNOT 和逻辑操作 Measure 等。QuTrunk 使用教程系列还将继续以具体算法为例解析更多其他量子逻辑门的使用。

发布于: 刚刚阅读数: 3
用户头像

量子计算技术交流 2022-06-10 加入

关注量子计算软件技术最新动态 启科量子开发者官方网站:http://developer.queco.cn GitHub开源地址:https://github.com/qudoor

评论

发布
暂无评论
量子编程实践:Bell Pair电路及Deutsch算法_#python_启科量子开发者官方号_InfoQ写作社区