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

1.2.6 QIf與QWhile

量子線路的本質是一個量子邏輯門的執行序列,它是從左至右依次執行的。在經典計算中,人們經常會使用if、for、while等判斷或循環操作。自然地,人們會考慮在量子計算機的層面是否存在與經典計算機中相似的循環和分支語句。因此,就有了QIf 和QWhile。

在量子計算中,QIf 和QWhile 的判斷條件的信息并不是量子比特,而是一個經典的信息。這個經典的信息是基于測量的。在執行量子程序時,測量語句會先對量子比特施加一個測量操作,再將這個量子比特的測量結果保存到經典寄存器中。最后,可以根據這個經典寄存器的值,選擇接下來要進行的操作。一段簡單的QIf示例如代碼1.3所示。

代碼1.3 QIf示例

 1  import pyqpanda as pq
 2  
 3  if __name__ == "__main__":
 4  
 5      qvm = pq.CPUQVM()
 6      qvm.init_qvm()
 7      qubits = qvm.qAlloc_many(4)
 8      cbits = qvm.cAlloc_many(4)
 9  
10      prog = pq.QProg()
11      branch_true = pq.QProg()
12      branch_false = pq.QProg()
13      prog << pq.X(qubits[3]) << pq.Measure(qubits[3],cbits[3])
14      # 構建QIf的正確分支及錯誤分支
15      branch_true << pq.H(qubits[0])\
16                  << pq.H(qubits[1])\
17                  << pq.H(qubits[2])\
18                  << pq.Measure(qubits[0],cbits[0])\
19                  << pq.Measure(qubits[1],cbits[1])
20      branch_false << pq.H(qubits[0]) \
21                   << pq.CNOT(qubits[0], qubits[1])\
22                   << pq.CNOT(qubits[1], qubits[2])\
23                   << pq.Measure(qubits[0],cbits[0])\
24                   << pq.Measure(qubits[1],cbits[1])\
25                   << pq.Measure(qubits[2],cbits[2])
26  
27      # 構建QIf
28      qif = pq.QIfProg(cbits[3] ==1 , branch_true, branch_false)
29  
30      # 將QIf插入量子程序
31      prog << qif
32  
33      # 進行蒙特卡羅測量,并返回目標比特的測量結果,下標為二進制
34      result = qvm.run_with_configuration(prog, cbits, 1000)
35  
36      # 打印測量結果
37      print(result)

代碼1.3構建了一個包含QIf的量子程序。首先,對qubits[·]施加一個X門,使其狀態從翻轉為,然后對其執行測量操作,并把測量得到的值放在cbits[3]中。接下來,構建QIf的正確分支和錯誤分支,正確分支是通過H門制備qubits[0]和qubits[1]的疊加態,錯誤分支是制備qubits[0]到qubits[2]的GHZ態。最后,通過QIfProg構建量子判斷程序,判斷條件為當cbits的值為1時執行正確分支,否則執行錯誤分支。代碼1.3的計算結果如下。

 1      '1000': 254, '1001': 236, '1010': 236, '1011': 274

從結果可以看出,程序很好地執行了量子判斷,達到了預期效果。

主站蜘蛛池模板: 岗巴县| 阿克陶县| 浙江省| 延长县| 石狮市| 新余市| 隆尧县| 灵寿县| 墨脱县| 绥中县| 同仁县| 陆川县| 湟中县| 花莲市| 红河县| 莱州市| 洪洞县| 宁武县| 兰坪| 安化县| 吴忠市| 舞钢市| 长顺县| 永川市| 武宣县| 仁寿县| 眉山市| 额济纳旗| 信丰县| 涡阳县| 霸州市| 吉林省| 高阳县| 西贡区| 晋宁县| 湄潭县| 徐闻县| 桃源县| 边坝县| 兴文县| 绥滨县|