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

1.2.5 量子程序

量子程序设计用于编写与构造量子算法,一般可以将它理解为一个操作序列。由于量子算法中会包含经典计算,因而设想量子计算机是混合结构的,它包含两大部分:一部分是经典计算设备,负责执行经典计算与控制;另一部分是量子设备,负责执行量子计算。所以,QPanda的量子程序与量子线路的区别在于前者可以包含一部分经典操作(如测量操作、经典逻辑运算操作等)。量子程序的定义更好地兼容了量子计算与经典计算。除了量子计算,它把一部分简单的经典计算也纳入了量子计算机的框架中,在量子计算机底层硬件的支持下,可以大大减少量子计算机与经典计算机之间频繁的数据交互。

在QPanda中,声明一个量子程序可以用QProg对象,它是一个容器,可以用来承载量子逻辑门、量子线路、测量等操作。初始化QProg的操作如下。

 1      prog = QProg()

读者还可以用已有的量子操作来构建量子程序。

 1      qubit = qAlloc()
 2      gate = H(qubit)
 3      prog = QProg(gate)

在QPanda中,读者可以通过运算符“”向QProg对象的尾部插入新的量子操作。

 1      prog << H(qubit)

读者可以通过运算符“”向QProg对象的尾部插入量子逻辑门、测量、量子线路及其他的量子程序。QProg的使用方式如代码1.2所示。

代码1.2 QProg的使用方式

 1  import pyqpanda as pq
 2  
 3  
 4  if __name__ == '__main__':
 5  
 6      qvm = pq.CPUQVM()
 7      qvm.initQVM()
 8      qubits = qvm.qAlloc_many(3)
 9      cbits = qvm.cAlloc_many(3)
10      #申请量子程序
11      prog = pq.QProg()
12      #给量子程序插入量子门和测量操作
13      prog << pq.H(qubits[0])\
14           << pq.CNOT(qubits[0],qubits[1])\
15           << pq.CNOT(qubits[1],qubits[2])\
16           << pq.measure_all(qubits,cbits)
17      result = qvm.run_with_configuration(prog,cbits,1000)
18      print(result)

代码1.2使用QProg构建的量子程序制备了3量子比特的GHZ态,形式如式(1.45)所示。

(1.45)

3量子比特的GHZ态可以通过1个H门和2个CNOT门制备得到,量子程序的计算结果如下。

 1     '000': 513, '111': 487