1.2.4 量子线路
量子线路又称量子逻辑电路,是最常用的通用量子计算模型,它表示在抽象概念下,对量子比特进行操作的线路。量子线路的组成包括量子比特、线路(时间线),以及各种量子逻辑门,最后常需要通过量子测量将结果读取出来。与传统电路用金属线进行连接以传递电压信号或电流信号不同,在量子线路中,线路是由时间连接,即量子比特的状态随着时间自然演化,这个过程遵循哈密顿算符(Hamiltonian Operator)的指示,直到遇上量子逻辑门而被操作。由于组成量子线路的每一个量子逻辑门都是一个酉算符,所以整个量子线路整体也是一个大的酉算符。下面看几个具体的例子。
对于1个控制比特和1个目标比特,受控 U门由图1.6所示线路表示。
4个控制比特和3个目标比特下的受控操作如图1.7所示。
图1.6 受控U门
图1.7 受控操作示例
对于三比特门,当、和(NOT门)时,可得到Toffoli门:
(1.43)
Toffoli门的线路表示如图1.8所示。
当、且U门为SWAP门时,可得到Fredkin门:
(1.44)
Fredkin门的线路表示如图1.9所示。
图1.8 Toffoli门的线路表示
图1.9 Fredkin门的线路表示
在QPanda中,QCircuit类(量子线路类)是一个仅加载量子逻辑门的容器类型。初始化一个QCircuit对象的方式如下。
1 cir = QCircuit()
读者可以通过如下方式向QCircuit对象的尾部填充量子逻辑门。这里,QPanda重载了运算符“”,用于向量子线路中插入量子操作。
1 cir << X(qubits)
QCircuit的使用方式如代码1.1所示(PyQPanda是Python版的QPanda)。
代码1.1 QCircuit的使用方式
1 import pyqpanda as pq 2 3 4 if __name__ == '__main__': 5 6 qvm = pq.CPUQVM() 7 qvm.initQVM() 8 qubits = qvm.qAlloc_many(2) 9 cubits = qvm.cAlloc_many(2) 10 # 申请量子线路容器 11 cir = pq.QCircuit() 12 prog = pq.QProg() 13 # 给量子线路插入量子逻辑门,量子线路中不能包含量子逻辑门之外的任何操作,包括测量操作 14 cir << pq.H(qbits[0])\ 15 << pq.CNOT(qubits[0],qubits[1]) 16 prog << cir\ 17 << pq.measure_all(qubits,cbits) 18 result = qvm.run_with_configuration(prog,cbits,1000) 19 print(result)
代码1.1申请了一个量子线路cir,并向cir中插入了H门和CNOT门。需要注意的是,量子线路中不能包含量子逻辑门之外的操作(如测量操作),所以想要在量子计算机中运行量子线路并获取计算结果,就需要把量子线路放到量子程序中。