上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