官术网_书友最值得收藏!

1.2.4 量子線路

量子線路又稱量子邏輯電路,是最常用的通用量子計算模型,它表示在抽象概念下,對量子比特進行操作的線路。量子線路的組成包括量子比特、線路(時間線),以及各種量子邏輯門,最后常需要通過量子測量將結果讀取出來。與傳統(tǒng)電路用金屬線進行連接以傳遞電壓信號或電流信號不同,在量子線路中,線路是由時間連接,即量子比特的狀態(tài)隨著時間自然演化,這個過程遵循哈密頓算符(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門。需要注意的是,量子線路中不能包含量子邏輯門之外的操作(如測量操作),所以想要在量子計算機中運行量子線路并獲取計算結果,就需要把量子線路放到量子程序中。

主站蜘蛛池模板: 哈密市| 扬中市| 鄂托克前旗| 凯里市| 淮南市| 汉源县| 台东县| 丹江口市| 长子县| 容城县| 邯郸县| 大洼县| 徐闻县| 名山县| 双牌县| 龙陵县| 甘谷县| 绥滨县| 沂源县| 崇左市| 瓮安县| 准格尔旗| 宜黄县| 河津市| 巴南区| 柳江县| 阳信县| 南汇区| 陈巴尔虎旗| 灵丘县| 阿拉尔市| 丁青县| 麻城市| 西乌珠穆沁旗| 勃利县| 蒙自县| 新野县| 阜城县| 长武县| 两当县| 宾阳县|