好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > python使用ProjectQ生成量子算法指令集

python使用ProjectQ生成量子算法指令集

熱門標簽:富錦商家地圖標注 武漢外呼系統平臺 沈陽外呼系統呼叫系統 沈陽人工外呼系統價格 如何申請400電話費用 外呼系統哪些好辦 江西省地圖標注 沈陽防封電銷卡品牌 池州外呼調研線路

輸出算法操作

首先介紹一個最基本的使用方法,就是使用ProjectQ來打印量子算法中所輸入的量子門操作,這里使用到了ProjectQ中的DummyEngine后端用于保存操作的指令。比如最簡單的一個Bell State的制備,可以通過如下代碼實現,并且打印出所保存的基本操作:

from projectq import MainEngine
from projectq.cengines import DummyEngine
from projectq.ops import H, CX, All, Measure

backend = DummyEngine(save_commands=True)
eng = MainEngine(backend=backend)

qureg = eng.allocate_qureg(2)
H | qureg[0]
CX | (qureg[0], qureg[1])

All(Measure) | qureg
eng.flush(deallocate_qubits=True)

for cmd in backend.received_commands:
    print (cmd)

運行結果如下:

Allocate | Qureg[0]
H | Qureg[0]
Allocate | Qureg[1]
CX | ( Qureg[0], Qureg[1] )
Measure | Qureg[0]
Measure | Qureg[1]
Deallocate | Qureg[0]
Deallocate | Qureg[1]

這里有一點需要注意的是,如果是單次運算,我們到Measure就可以結束了。但是如果同一個線程的任務還沒有結束的話,需要在Measure之后加上一個deallocate_qubits=True的配置項,用于解除當前分配的量子比特所占用的內存。

封裝的操作

在量子算法的實現中,我們可以用一些函數或者類來封裝一部分的量子算法操作指令,但是這可能會導致一個問題,那就是在ProjectQ上打印出來的操作指令沒有把封裝的模塊的內容輸出出來,比如如下的案例:

from projectq import MainEngine
from projectq.cengines import DummyEngine
from projectq.ops import H, CX, All, Measure, TimeEvolution, QubitOperator

backend = DummyEngine(save_commands=True)
eng = MainEngine(backend=backend)

qureg = eng.allocate_qureg(3)
H | qureg[0]
CX | (qureg[0], qureg[1])
TimeEvolution(1, QubitOperator('X2 X1')) | qureg

All(Measure) | qureg
eng.flush()

for cmd in backend.received_commands:
    print (cmd)

執行結果如下:

Allocate | Qureg[0]
H | Qureg[0]
Allocate | Qureg[1]
CX | ( Qureg[0], Qureg[1] )
Measure | Qureg[0]
Allocate | Qureg[2]
exp(-1j * (1.0 X0 X1)) | Qureg[1-2]
Measure | Qureg[1]
Measure | Qureg[2]

我們發現這里的含時演化的操作算符沒有被分解,而是直接打印輸出了出來。但是如果在硬件系統中,只能夠識別支持的指令操作,這里的含時演化操作可能并未在量子硬件體系中被實現,因此我們就需要在將指令發送給量子硬件之前,就對其進行分解。

含時演化算符的分解

這里我們直接調用ProjectQ的配置中的restrictedgateset方法進行操作分解,我們將單比特門操作的范圍放寬到所有的操作,但是雙比特操作只允許CX操作,并將這個配置作為engin_list配置到ProjectQ的MainEngine中:

from projectq import MainEngine
from projectq.cengines import DummyEngine
from projectq.ops import H, CX, All, Measure, TimeEvolution, QubitOperator
from projectq.setups import restrictedgateset

engine_list = restrictedgateset.get_engine_list(one_qubit_gates="any",two_qubit_gates=(CX,))
backend = DummyEngine(save_commands=True)
eng = MainEngine(backend=backend,engine_list=engine_list)

qureg = eng.allocate_qureg(3)
H | qureg[0]
CX | (qureg[0], qureg[1])
TimeEvolution(1, QubitOperator('X2 X1')) | qureg

All(Measure) | qureg
eng.flush(deallocate_qubits=True)

for cmd in backend.received_commands:
    print (cmd)

打印輸出的結果如下:

Allocate | Qureg[0]
H | Qureg[0]
Allocate | Qureg[1]
CX | ( Qureg[0], Qureg[1] )
Measure | Qureg[0]
Allocate | Qureg[2]
H | Qureg[2]
H | Qureg[1]
CX | ( Qureg[1], Qureg[2] )
Rz(2.0) | Qureg[2]
CX | ( Qureg[1], Qureg[2] )
H | Qureg[1]
Measure | Qureg[1]
H | Qureg[2]
Measure | Qureg[2]
Deallocate | Qureg[0]
Deallocate | Qureg[1]
Deallocate | Qureg[2]

可以看到含時演化算符已經被分解并輸出了出來。由于已知單比特量子門加上一個CX是一個完備的量子門集合,因此一般我們可以直接使用這個集合來進行量子門操作指令集的限制。

QFT的分解

QFT是ProjectQ中所自帶支持的量子傅里葉變換的量子門操作封裝,跟上一個章節中所介紹的含時演化算符類似的,我們可以用restrictedgateset來具體分解QFT算符:

from projectq import MainEngine
from projectq.cengines import DummyEngine
from projectq.ops import H, CX, All, Measure, TimeEvolution, QubitOperator, QFT
from projectq.setups import restrictedgateset

engine_list = restrictedgateset.get_engine_list(one_qubit_gates="any",two_qubit_gates=(CX,))
backend = DummyEngine(save_commands=True)
eng = MainEngine(backend=backend,engine_list=engine_list)

qureg = eng.allocate_qureg(3)
H | qureg[0]
CX | (qureg[0], qureg[1])
QFT | qureg

All(Measure) | qureg
eng.flush(deallocate_qubits=True)

for cmd in backend.received_commands:
    print (cmd)

輸出的結果如下:

Allocate | Qureg[2]
Allocate | Qureg[1]
H | Qureg[2]
Rz(0.785398163398) | Qureg[2]
Allocate | Qureg[0]
H | Qureg[0]
CX | ( Qureg[0], Qureg[1] )
R(0.785398163398) | Qureg[1]
CX | ( Qureg[1], Qureg[2] )
Rz(11.780972450962) | Qureg[2]
CX | ( Qureg[1], Qureg[2] )
R(0.392699081698) | Qureg[0]
Rz(0.392699081698) | Qureg[2]
CX | ( Qureg[0], Qureg[2] )
H | Qureg[1]
Rz(12.173671532661) | Qureg[2]
CX | ( Qureg[0], Qureg[2] )
R(0.785398163398) | Qureg[0]
Rz(0.785398163398) | Qureg[1]
CX | ( Qureg[0], Qureg[1] )
Rz(11.780972450962) | Qureg[1]
CX | ( Qureg[0], Qureg[1] )
H | Qureg[0]
Measure | Qureg[0]
Measure | Qureg[1]
Measure | Qureg[2]
Deallocate | Qureg[1]
Deallocate | Qureg[2]
Deallocate | Qureg[0]

如果2比特門操作也不加以限制的化,ProjectQ中會自動選取最簡易的分解形式:

from projectq import MainEngine
from projectq.cengines import DummyEngine
from projectq.ops import H, CX, All, Measure, TimeEvolution, QubitOperator, QFT
from projectq.setups import restrictedgateset

engine_list = restrictedgateset.get_engine_list(one_qubit_gates="any",two_qubit_gates="any")
backend = DummyEngine(save_commands=True)
eng = MainEngine(backend=backend,engine_list=engine_list)

qureg = eng.allocate_qureg(3)
H | qureg[0]
CX | (qureg[0], qureg[1])
QFT | qureg

All(Measure) | qureg
eng.flush(deallocate_qubits=True)

for cmd in backend.received_commands:
    print (cmd)

輸出結果如下:

Allocate | Qureg[0]
Allocate | Qureg[1]
H | Qureg[0]
CX | ( Qureg[0], Qureg[1] )
Allocate | Qureg[2]
H | Qureg[2]
CR(1.570796326795) | ( Qureg[1], Qureg[2] )
CR(0.785398163397) | ( Qureg[0], Qureg[2] )
H | Qureg[1]
CR(1.570796326795) | ( Qureg[0], Qureg[1] )
H | Qureg[0]
Measure | Qureg[0]
Measure | Qureg[1]
Measure | Qureg[2]
Deallocate | Qureg[1]
Deallocate | Qureg[2]
Deallocate | Qureg[0]

可以發現使用了CR來替代CX之后,分解出來的線路會更加的簡短。

總結概要

本文主要從工程實現的角度,講解在ProjectQ開源量子計算模擬器框架中,實現量子門操作分解與輸出的方法。通過這個方法,可以限制量子指令集的范圍,將量子算法中不被支持的量子門操作等價(或近似地)變化到量子硬件體系所支持的量子指令集上。

以上就是python使用ProjectQ生成量子算法指令集的詳細內容,更多關于python 用ProjectQ生成算法指令集的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • python 算法題——快樂數的多種解法
  • Python機器學習算法之決策樹算法的實現與優缺點
  • Python集成學習之Blending算法詳解
  • python3實現Dijkstra算法最短路徑的實現
  • Python實現K-means聚類算法并可視化生成動圖步驟詳解
  • Python自然語言處理之切分算法詳解
  • python入門之算法學習
  • Python實現機器學習算法的分類

標簽:黑龍江 銅川 呂梁 阿里 潛江 常德 株洲 通遼

巨人網絡通訊聲明:本文標題《python使用ProjectQ生成量子算法指令集》,本文關鍵詞  python,使用,ProjectQ,生成,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python使用ProjectQ生成量子算法指令集》相關的同類信息!
  • 本頁收集關于python使用ProjectQ生成量子算法指令集的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 屁屁影院CCYYCOM发布地| 日本妻子在线播放| 亚洲综合在线观看一区www| 午夜免费播放观看在线视频 | 国产日韩精品欧美一区喷| 久久天天躁夜夜躁2019| A片扒开双腿猛进入免费涩图| 被爆??18禁止??视频| 美国一级毛片免费看| 短篇巨肉高h文| 韩国电影性生活| 亚洲精品菠萝久久久久久久| 蜜桃狠狠色伊人亚洲综合网站| 综合五月婷婷| 美艳护士婬荡呻吟AV在线观看| AA爱做片免费| 看免费5xxaaa毛片30厘米| 啊啊啊啊啊啊爽| 女的用嘴吸男的jiji的感觉| jiZZjiZZ日本老师水多| 精品国产乱码久久久久久影片| 精品一区二区日本高清| 我?啊高潮了?嗯~出水了欧美| 好爽?好紧?军人H男男视频 | 美女视频黄a全部免费专区一| 无码婬片A片AAA毛片艳谭| 无码亚洲AV日韩美AⅤ最新 | 免费肉体裸交????| 337p粉嫩大胆噜噜噜噜色欲| 国产 丝袜 另类 精品 综合| 国产农村妇女成人精品| 看一级西门庆和潘金莲| 夹好了不许穿内裤去上课小说| 中文字幕av人妻互换| 精品操| 成人一级大片| 18videosex性欧美69超高清| 毛茸茸亚洲人美女高潮| 香港艳情片| 高+N+车多肉多的高| 久久夜色精品亚洲噜噜国产AV|