![QPanda量子计算编程](https://wfqqreader-1252317822.image.myqcloud.com/cover/363/52204363/b_52204363.jpg)
1.2.4 量子线路
量子线路又称量子逻辑电路,是最常用的通用量子计算模型,它表示在抽象概念下,对量子比特进行操作的线路。量子线路的组成包括量子比特、线路(时间线),以及各种量子逻辑门,最后常需要通过量子测量将结果读取出来。与传统电路用金属线进行连接以传递电压信号或电流信号不同,在量子线路中,线路是由时间连接,即量子比特的状态随着时间自然演化,这个过程遵循哈密顿算符(Hamiltonian Operator)的指示,直到遇上量子逻辑门而被操作。由于组成量子线路的每一个量子逻辑门都是一个酉算符,所以整个量子线路整体也是一个大的酉算符。下面看几个具体的例子。
对于1个控制比特和1个目标比特,受控 U门由图1.6所示线路表示。
4个控制比特和3个目标比特下的受控操作如图1.7所示。
![](https://epubservercos.yuewen.com/DE4208/30904213107324706/epubprivate/OEBPS/Images/1-6.jpg?sign=1738865058-IQPjdzswph9Vgr94t3ZlJYm0PYuAcd1D-0-fa1cb90a59a81f0e77c383be93112ff4)
图1.6 受控U门
![](https://epubservercos.yuewen.com/DE4208/30904213107324706/epubprivate/OEBPS/Images/1-7.jpg?sign=1738865058-kSB6IXXjwGBhtdtp0Hza3vM0roFN8Vot-0-b1f997ea28dbec6e6e4c91f6d2742570)
图1.7 受控操作示例
对于三比特门,当、
和
(NOT门)时,可得到Toffoli门:
![](https://epubservercos.yuewen.com/DE4208/30904213107324706/epubprivate/OEBPS/Images/tx01117.jpg?sign=1738865058-9HoL7ToJOrc7x93UxHHxe2vubxvjpaMB-0-c7ab9334692ee6e511ff4b8c58d76746)
(1.43)
Toffoli门的线路表示如图1.8所示。
当、
且U门为SWAP门时,可得到Fredkin门:
![](https://epubservercos.yuewen.com/DE4208/30904213107324706/epubprivate/OEBPS/Images/tx01128.jpg?sign=1738865058-CeJuWnxPWp6k02tS2Gr8p9jX3QvUdpEm-0-4e37b98378e59c87cbf5546441d86221)
(1.44)
Fredkin门的线路表示如图1.9所示。
![](https://epubservercos.yuewen.com/DE4208/30904213107324706/epubprivate/OEBPS/Images/1-8.jpg?sign=1738865058-aps4WQNm7k5gnMlZhC8zqgXohgY0Yomy-0-5d0bec68387fcd5bff2294e16b31b095)
图1.8 Toffoli门的线路表示
![](https://epubservercos.yuewen.com/DE4208/30904213107324706/epubprivate/OEBPS/Images/1-9.jpg?sign=1738865058-3WQwQnvxe1zAyr5iYTc1Q72kYYPq9Tc3-0-f8bdf6e5a79c3c71838189227e2e6f25)
图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门。需要注意的是,量子线路中不能包含量子逻辑门之外的操作(如测量操作),所以想要在量子计算机中运行量子线路并获取计算结果,就需要把量子线路放到量子程序中。