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准备量子编程所需的环境、定义量子函数、量子逻辑门的操作及各指令的作用等。
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门和测量操作。 qc = QCircuit()
qr = qc.allocate(2)
H * qr[0]
CNOT * (qr[0], qr[1])
Measure * qr[0]
Measure * qr[1]
# print circuit
qc.print()
量子逻辑门+qr[量子态]
。如H * qr[0]
表示将哈达玛门作用于|0〉态上,产生量子叠加态 ||CNOT * (qr[0], qr[1])表示将CNOT门分别作用于与|0〉态和|1〉态上,其中|0〉处在控制位、|1〉处在目标位,只有当控制位为|1〉态时目标位发生翻转;Measure * qr[1]
CNOT门如下:
—————-●(控制位)———————— | —————⊕(目标位)————————
首先,下载QuBranch后,点击【命令】选项;
命令.jpg
其次,在框内输入quan
,一键选择quan:量子编程可视化
;
quan.jpg
拖拽量子逻辑门置于量子比特的时序线之上,此时会发现右侧代码编辑栏自动显示相应代码,且编辑器底部显示相应的量子态概率柱状图;
部分拖拽.jpg
完整的Bell-Pair量子线路如下:
完整拖拽.jpg
# run circuit
res = qc.run(shots=1024)
# print result
print(res.get_measure())
print(res.get_counts())
目前QuTrunk已经通过运行代码直接可以输出量子线路图。
*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 q[2]
表示定义一个名为q的2位量子寄存器;同理,指令creg c[2]
表示定义一个名为c的经典寄存器。Deutsch算法主要解决判断函数类型问题。对两个不同类型的函数,通过两个输入和最后的结果输出,判断函数属于常数函数还是平衡函数。Deutsch算法最大的贡献在于为之后的量子算法提供了启发性的思路,并不能具体解决实际问题。
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门和测量操作。 X * qureg[1]
All(H) * qureg
CNOT * (qureg[0], qureg[1])
H * qureg[0]
All(Measure) * qureg
道奇算法.png
图片来源于:https://www.cnblogs.com/RabbitHu/p/Deutsch-Jozsa.html
X | qureg[1]
操作后将可得到一个|1⟩态。Deutsch算法的量子线路如上图所示。本文中的Deutsch算法示例暂时只使用两个量子比特。|0⟩——————X——————|1⟩
> *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*
*qreg q[2]
creg c[2]
以上案例中仅涉及到少量的量子逻辑门使用如H, X,CNOT和逻辑操作Measure等。QuTrunk使用教程系列还将继续以具体算法为例解析更多其他量子逻辑门的使用