QPanda量子计算编程
上QQ阅读APP看书,第一时间看更新

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门。需要注意的是,量子线路中不能包含量子逻辑门之外的操作(如测量操作),所以想要在量子计算机中运行量子线路并获取计算结果,就需要把量子线路放到量子程序中。