概述:
在經(jīng)典計(jì)算編程領(lǐng)域徘六,軟件框架是一種具有通用軟件功能的抽象形式。使用這些軟件框架的開發(fā)者們可以根據(jù)特定的功能需求對框架代碼重新改寫后,為特定應(yīng)用提供定制化的服務(wù)巡雨。在大數(shù)據(jù)時(shí)代棍辕,經(jīng)典計(jì)算的算力在海量數(shù)據(jù)面前的略顯單薄暮现。而量子計(jì)算因其糾纏與疊加特性在算力加速方面脫穎而出。業(yè)界對于量子編程軟件的研究與設(shè)計(jì)普遍繼承了經(jīng)典程序設(shè)計(jì)思路楚昭,以最大限度的發(fā)揮量子計(jì)算的計(jì)算能力與優(yōu)勢栖袋。
目前,國內(nèi)外已有許多科技企業(yè)紛紛推出量子編程框架軟件抚太,如量子計(jì)算開源軟件框架 ProjectQ塘幅、IBM 公司的開源量子編程開發(fā)工具包 Qiskit昔案、谷歌開源量子算法框架 Criq、Amazon Braket SDK电媳、啟科量子的量子編程框架 QuTrunk 等踏揣。本文主要以Amazon Braket SDK量子軟件開發(fā)包和啟科量子的QuTrunk量子編程框架為例進(jìn)行介紹。
1. 什么是量子編程框架
量子編程框架則更著眼于當(dāng)前技術(shù)條件下量子程序的快速開發(fā)匾乓。量子編程框架通常以傳統(tǒng)編程語言為宿主語言捞稿,在上面添加描述量子計(jì)算體系的變量、函數(shù)拼缝、對象等元素娱局,然后通過對這些元素的程序處理,實(shí)現(xiàn)量子算法并開發(fā)出量子軟件咧七。量子編程框架中也常常包含了常用量子算法軟件庫衰齐,方便量子程序的高效開發(fā)。同時(shí)继阻,由于宿主語言的存在耻涛,量子編程框架技術(shù)可以很方便地實(shí)現(xiàn)量子和經(jīng)典的混合編程。
常用的量子編程框架包括QPanda穴翩、QDK犬第、Cirq、Qiskit芒帕、ProjectQ歉嗓、HiQ以及Forest、Amazon Braket SDK背蟆、QPanda鉴分、QuTrunk等。由于量子編程框架是在經(jīng)典宿主程序語言下引入量子計(jì)算的元素和概念带膀,把量子芯片看作一個(gè)特殊的設(shè)備或?qū)ο笾菊洌虼诉@對于開發(fā)者來說也是相對熟悉的開發(fā)范式。量子編程框架開發(fā)的程序經(jīng)過編譯后垛叨,其中經(jīng)典程序代碼部分轉(zhuǎn)化成機(jī)器指令并后續(xù)在經(jīng)典處理器上執(zhí)行伦糯,而描述量子算法的量子線路代碼部分則通常轉(zhuǎn)化為量子中間表示,并后續(xù)發(fā)送給量子芯片控制系統(tǒng)處理嗽元。
公司 | 量子編程框架 | 支持經(jīng)典語言類型 |
---|---|---|
微軟 | QDK | C# |
IBM | Qiskit | Python |
谷歌 | Cirq | Python |
Xanadu | Strawberry Fields | Python |
Rigetti | Forest | Python |
亞馬遜 | Braket SDK | Python |
華為 | HiQ | Python/C++ |
本源量子 | QPanda | Python/C++ |
啟科量子 | QuTrunk | Python |
量子編程框架類軟件用來編寫運(yùn)行在量子計(jì)算機(jī)中的量子算法和程序敛纲,經(jīng)過封裝后還可提供常用的量子計(jì)算組件和量子算法庫,進(jìn)行量子程序快速開發(fā)剂癌。
2. Amazon Braket SDK介紹
2.1 Amazon Braket
Amazon Braket 是亞馬遜推出的一種全托管式Amazon Web Services(AWS)解決方案淤翔,可幫助研究人員和開發(fā)人員探索潛在的應(yīng)用和評估當(dāng)前的量子計(jì)算技術(shù)。它允許用戶從零開始設(shè)計(jì)自己的量子算法佩谷,或者從一組預(yù)先構(gòu)建的算法庫中進(jìn)行選擇旁壮。定義算法后监嗜,Amazon Braket就會(huì)提供一個(gè)完全托管的模擬服務(wù)來幫助排除故障和驗(yàn)證。
Amazon Braket 可以分為三個(gè)方面(概念澄清):
(1)Build抡谐, 安裝了 Amazon Braket SDK 的 Jupyter 環(huán)境裁奇,進(jìn)行量子編程
(2)Test, 在模擬器中執(zhí)行量子線路,Braket 支持 4 種 Simulator童叠, 其中 local simulator 可以在本地模擬量子環(huán)境
(3)Run框喳, 可以在真實(shí)量子環(huán)境中運(yùn)行量子算法课幕。目前 AWS 量子環(huán)境提供商有 D-Wave, IonQ, OQC. 因?yàn)榱孔佑?jì)算機(jī)噪音影響目前無法完全去除厦坛,AWS 提供了 hybrid 的量子環(huán)境,通過QPU協(xié)同CPU工作乍惊,通過 PennyLane 開源庫杜秸,支持 hybrid 算法。
Amazon Braket工作原理
(1)學(xué)習(xí)
Amazon Braket 提供分步指導(dǎo)润绎、教程和資源庫撬碟,可幫助您快速開始嘗試使用量子計(jì)算。
(2)設(shè)計(jì)
要設(shè)計(jì)量子算法莉撇,您可以直接通過 Amazon Braket 控制臺(tái)使用完全托管的 Jupyter botebook呢蛤。示例筆記本可允許您訪問預(yù)安裝開發(fā)人員工具托呕、示例算法和文檔所坯,從而快速上手。
(3)測試
您可以使用傳統(tǒng)硬件上運(yùn)行的模擬器鳄逾,簡化代碼診斷和設(shè)計(jì)優(yōu)化涂佃,從而加快算法開發(fā)励翼。Amazon Braket 以完全托管服務(wù)方式來運(yùn)行模擬,自動(dòng)設(shè)置所需的計(jì)算實(shí)例辜荠,運(yùn)行模擬汽抚,將結(jié)果發(fā)布至 Amazon S3,并在完成時(shí)關(guān)閉資源伯病。
(4)運(yùn)行
您可以在自己所選擇的量子硬件上執(zhí)行量子算法造烁,且只需按實(shí)際使用量付費(fèi)。如果您選擇運(yùn)行混合量子算法午笛,Amazon Braket 可以自動(dòng)設(shè)置所需的傳統(tǒng)計(jì)算資源惭蟋,并管理傳統(tǒng)任務(wù)與量子任務(wù)之間的工作流程。
(5)分析
完成后季研,系統(tǒng)將會(huì)自動(dòng)通知您敞葛,并將結(jié)果存儲(chǔ)在 Amazon S3 中。Amazon Braket 會(huì)將完成狀態(tài)和運(yùn)行時(shí)間等事件日志和性能指標(biāo)發(fā)布至 Amazon CloudWatch与涡。
Amazon Braket功能點(diǎn)
名稱 | 說明 |
---|---|
QPU | 1.QPU資源有限惹谐,任務(wù)采取排隊(duì)機(jī)制持偏,不會(huì)立刻返回運(yùn)算結(jié)果, 提供API獲取任務(wù)執(zhí)行狀態(tài);2.目前支持 quantum annealing: (D-Wave) 和 gate-model(ionq, Rigetti,OQC) |
Simulator | 1.本地Simulator(免費(fèi))氨肌,集成在Braket SDK中鸿秆;2.On-demand Simulator(收費(fèi)),更高效的模擬服務(wù),支持更多的qubit怎囚,embedded simulator等卿叽; 3.Nosie模擬,支持兩種介入方式:初始化量子線路時(shí)介入以及線路運(yùn)行過程中介入恳守。 |
notebook | 1.可直接創(chuàng)建集成了 Braket SDK的notebook instance考婴; 2.也可下載Braket SDK,在本地部署jupyter催烘。 |
Braket Moment屬性 | moment屬性的目的是以門為單位沥阱,切割一個(gè) circuit,獲取 circuit 在某個(gè)門操作完成后伊群,當(dāng)下相應(yīng)qubit的狀態(tài)考杉,從而分析算法的運(yùn)行過程 |
Task batching | 1.local simulator 不支持;2.On-demand simulator & QPU支持, 允許circuit 并行(并行價(jià)格更高) |
Task Result | 1.有統(tǒng)一的結(jié)果查詢?nèi)肟诮⑹迹奖銡v史結(jié)果查詢崇棠;2.結(jié)果持久化到s3; 3.結(jié)果內(nèi)容包括:task id, task status,device arn, timestamp |
Hybrid jobs | 1.不同Region丸卷,支持的QPU不同枕稀,不能跨Region訪問當(dāng)前Region不支持的QPU; 2.可選擇預(yù)裝了PennyLane (Tensorflow, PyTorch)的container及老; 3.支持BYOC抽莱, 通過 Dockerfile, 自定義 container; 4.創(chuàng)建job instance(EC2), 上傳算法代碼骄恶,Job結(jié)束后食铐,ec2資源自動(dòng)釋放 |
Notification | 聯(lián)合SNS, 可以知道任務(wù)執(zhí)行狀態(tài)以及QPU變化狀態(tài)。 |
Braket Task Flow
(1)為了便于客戶定義僧鲁、提交和監(jiān)控他們的任務(wù)虐呻,Amazon Braket提供預(yù)裝的托管 Jupyter 筆記本電腦。
(2)Amazon Braket開發(fā)工具包寞秃。您可以直接在SDK中構(gòu)建量子電路斟叼,或者對于退火設(shè)備,定義退火問題和參數(shù)春寿。這些區(qū)域有:Amazon BraketSDK 還提供了一個(gè)插件D-Wave’sOcean 工具套件這樣你就可以在原生編程了D-Wave設(shè)備朗涩。定義任務(wù)后,您可以選擇要在其上執(zhí)行的設(shè)備并將其提交到Amazon Braket API绑改。
(3)根據(jù)您選擇的設(shè)備谢床,任務(wù)將排隊(duì)直到設(shè)備可用并將任務(wù)發(fā)送到 QPU 或模擬器執(zhí)行兄一。
(4)Amazon Braket允許您訪問五種不同類型的QPU(D-Wave,IonQ,OQC,Xanadu,Rigetti) 和三個(gè)按需模擬器 (SV1,DM1,TN1)。您的任務(wù)處理完畢后识腿,Amazon Braket將結(jié)果返回到AmazonS3 存儲(chǔ)桶出革,數(shù)據(jù)存儲(chǔ)在您的AWS賬戶。
(5)同時(shí)渡讼,SDK 會(huì)在后臺(tái)輪詢結(jié)果骂束,并在任務(wù)完成時(shí)將其加載到 Jupyter 筆記本中。您還可以在上查看和管理您的任務(wù)任務(wù)頁面中的一頁Amazon Braket控制臺(tái)或使用控制臺(tái)或使用GetQuantumTask的操作Amazon Braket API成箫。Amazon Braket與集成AmazonIdentity and Accccess ManagAmazon CloudWatch,Amazon CloudTrail 和Amazon EventBridge 用于用戶訪問管理展箱、監(jiān)控和記錄以及基于事件的處理
2.2 Braket Python SDK
Amazon Braket Python SDK 是一個(gè)量子軟件開發(fā)包,它提供了一個(gè)框架伟众,可以使用該框架通過亞馬遜 Braket 與量子計(jì)算硬件設(shè)備進(jìn)行交互析藕。
使用Amazon Braket在基于不同技術(shù)(包括D-Wave召廷,IonQ和Rigetti的系統(tǒng))選擇的量子處理器上運(yùn)行其量子算法凳厢。模擬和量子硬件作業(yè)均通過統(tǒng)一的開發(fā)經(jīng)驗(yàn)進(jìn)行管理,客戶只需為使用的計(jì)算資源付費(fèi)竞慢。其中先紫,Amazon Braket SDK的一部分免費(fèi)提供了本地模擬器,該本地模擬器適用于運(yùn)行中小型模擬(通常最多25-qubit)筹煮≌诰客戶可以在使用Amazon EC2計(jì)算資源的量子計(jì)算機(jī)模擬器上運(yùn)行,測試其算法并對其進(jìn)行故障排除败潦。準(zhǔn)備就緒后本冲,客戶便可以在自己選擇的量子計(jì)算機(jī)上運(yùn)行其算法,而無需聘請多個(gè)提供商或采用單一技術(shù)劫扒。
對于需要高性能計(jì)算資源的更大檬洞,更復(fù)雜的算法(最多34-qubit),可以將模擬任務(wù)提交給Braket服務(wù)沟饥,使用Braket模擬器的成本取決于每個(gè)模擬任務(wù)的持續(xù)時(shí)間添怔,以每小時(shí)的費(fèi)率計(jì)費(fèi),以一秒為增量贤旷,最終以執(zhí)行模擬所花費(fèi)的時(shí)間做結(jié)算广料。
2.3 本地模擬量子環(huán)境(local simulator)
本地安裝 Jupyter 即可進(jìn)行量子線路編程。
安裝 AWS Braket SDk幼驶,
pip install amazon-braket-sdk
(1)利用 Jupyter 在本地運(yùn)行 Bell 算法
(2)可視化結(jié)果艾杏,可以使用可視化庫進(jìn)行顯示
AWS 可以支持本地simulor,以及具有高效和支持更多qubit的simulator服務(wù)
2.4 Amazon Braket SDK的特性
(1)Moment 屬性, Braket 有一個(gè) pseudo-time概念盅藻,定義為moment, 含義是一個(gè) qubit 在當(dāng)下的moment购桑,執(zhí)行一個(gè)門操作汹族。moment屬性的目的是以門為單位,切割一個(gè) circuit其兴,從而獲取 circuit 在某個(gè)moment 時(shí)的臨時(shí)狀態(tài)顶瞒,從而分析算法的運(yùn)行過程。代碼如下圖所示:
(2)Braket SDK 返回結(jié)果類型:Braket 返回結(jié)果支持多種類型元旬,針對不同的后端平臺(tái)榴徐,返回結(jié)果類型也有所不同,具體如下表所示:
(3)Verbatim compilation compiler 不做優(yōu)化匀归,算法的每一步都準(zhǔn)確翻譯坑资,保證算法的執(zhí)行與設(shè)計(jì)一致,(編譯階段穆端,即將circuit中的門操作翻譯成QPU native gate階段袱贮,Braket compiler默認(rèn)會(huì)做優(yōu)化),該功能使用場景:例如benchmark 硬件的性能等
(4)支持OpenQASM 3.0 標(biāo)準(zhǔn)
(5)針對不同量子計(jì)算機(jī)平臺(tái)体啰,支持獲取量子連接性查詢接口
(6)Hybrid jobs, Braket 支持PennyLane的 embedded simulators, embedded simulator GPU攒巍。
(7)Hybrid jobs, Braket 針對 hybrid algorithms 提供了Hybrid jobs, 創(chuàng)建 job 時(shí)可上傳量子算法的腳本,以及其他相關(guān)參數(shù)荒勇,job結(jié)果可持久化到s3中柒莉,也可在console, cloud watch中查看。
3. QuTrunk介紹
3.1 QuTrunk框架介紹
啟科量子自主研發(fā)一款量子編程框架 QuTrunk沽翔,為量子編程開發(fā)提供了一個(gè)通用的軟件環(huán)境兢孝。QuTrunk 使用 Python 作為宿主語言,利用 Python 的語法特性實(shí)現(xiàn)針對量子程序的 DSL(領(lǐng)域?qū)S谜Z言)仅偎,所有支持 Python 編程的 IDE 均可安裝使用 QuTrunk跨蟹。
QuTrunk 基于量子邏輯門、量子線路等概念提供量子編程所需的各類 API橘沥。 這些 API 分別由相應(yīng)的模塊實(shí)現(xiàn)窗轩,比如 QCircuit 實(shí)現(xiàn)量子線路功能,Qubit 實(shí)現(xiàn)量子比特威恼,Qureg 實(shí)現(xiàn)量子寄存器品姓,Command 對應(yīng)每個(gè)量子門操作的指令, Backend 代表運(yùn)行量子線路的后端模塊箫措,gate 模塊實(shí)現(xiàn)了各類基礎(chǔ)量子門操作腹备。 同時(shí) QuTrunk 還可以作為其他上層量子計(jì)算應(yīng)用的基礎(chǔ),比如:量子算法斤蔓、量子可視化編程植酥、量子機(jī)器學(xué)習(xí)等。
目前 QuTrunk 以 QuSprout 作為后端。QuSprout 也是啟科量子自研的一款基 于經(jīng)典計(jì)算資源的量子計(jì)算模擬軟件友驮,支持支持多線程漂羊、多節(jié)點(diǎn)、GPU 加速卸留,也可預(yù)安裝在 QuBox 中走越。QuTrunk 為量子編程工作提供了量子編程框架,建立起一套統(tǒng)一的量子編程規(guī)范耻瑟,進(jìn)而實(shí)現(xiàn)量子程序開發(fā)的“降本增效”旨指。
3.2 QuTrunk框架結(jié)構(gòu)解析
QuTrunk的架構(gòu)如下圖所示,用戶可以利用QuBranch進(jìn)行Python語言的直接編譯喳整,模塊化的設(shè)計(jì)能夠讓用戶根據(jù)實(shí)際情況調(diào)整編譯器門組谆构,更好的完成自定義設(shè)計(jì)。目前框都,QuTrunk框架默認(rèn)以BackendLocal做為后端搬素,同時(shí)提供Python和C++兩個(gè)版本的本地后端。優(yōu)先使用C++(需要進(jìn)行源碼編譯)魏保,如果C++版本后端不可用熬尺,則使用Python版本的本地后端。
同時(shí)也支持?jǐn)U展更多后端囱淋,理論上只要是對外開發(fā)了量子計(jì)算訪問接口的后端猪杭,QuTrunk都可以進(jìn)行兼容如,IBM妥衣、lonq等等。用戶可以在QuTrunk進(jìn)行量子編程戒傻,通過QuSL將量子程序轉(zhuǎn)譯成目標(biāo)平臺(tái)指令税手,然后選擇不同的后端進(jìn)行計(jì)算。
3.3 QuTrunk的特性
(1)靈活的后端設(shè)備擴(kuò)展功能
QuTrunk 設(shè)有多種量子計(jì)算后端模塊需纳,如:BackendLocalPy(本地 Python 版本模擬器)芦倒;BackendLocalCpp(本地 C++版本模擬器);BackendQuSprout(量子計(jì)算云服務(wù))不翩;BackendIBM(IBM 量子云計(jì)算平臺(tái))等兵扬。開發(fā)者在使用 QuTrunk 開發(fā)量子程序時(shí),可選擇啟科自研的量子計(jì)算設(shè)備 QuBox 作為后端口蝠,使用豐富的量子模擬資源運(yùn)行量子算法器钟。QuBox 連接方式包括遠(yuǎn)程連接模式和本地模式兩種。在采用遠(yuǎn)程連接方式時(shí)妙蔗,QuBox 只提供量子編程 API傲霸,可維護(hù)量子線路所有狀態(tài),極大減少對本地資源的占用情況。而本地模式可以使 QuTrunk 成為量子編程與量子模擬的全楆甲模框架穆役。QuTrunk 使用的本地量子計(jì)算后端可提供全振幅量子模擬計(jì)算。量子云服務(wù)可提供 OMP 多線程梳凛、多點(diǎn)并行 MPI耿币、GPU 等計(jì)算加速,同時(shí)預(yù)留了對接離子阱量子計(jì)算機(jī)的接口韧拒。
(2)普適的混合量子-經(jīng)典編程形式
QuTrunk 支持混合量子-經(jīng)典程序編寫掰读,已設(shè)計(jì)了量子線路分段執(zhí)行機(jī)制, 提供 QuSL 量子匯編指令標(biāo)準(zhǔn)叭莫,與 Python 代碼完全兼容蹈集。由于量子算法中也包含有部分經(jīng)典計(jì)算,因此在使用 QuTrunk 進(jìn)行編程的過程中雇初,當(dāng)經(jīng)典算法與量子算法產(chǎn)生依賴交互時(shí)拢肆,QuTrunk 可立刻將當(dāng)前線路信息發(fā)送至后端運(yùn)行并獲取運(yùn)行結(jié)果。目前的量子計(jì)算軟件產(chǎn)品大多使用量子模擬器替代量子計(jì)算機(jī)靖诗,在模擬器模擬完成理論中量子比特的全部狀態(tài)后郭怪,返回最終的真實(shí)結(jié)果。
為了能在量子虛擬機(jī)中更好的模擬真實(shí)量子計(jì)算機(jī)帶來的計(jì)算誤差刊橘,QuTrunk 支持在量子線路初始化時(shí)設(shè)置噪聲模型鄙才,可為用戶帶來真實(shí)的量子編程體驗(yàn)。QuTrunk 的全振幅量子模擬功能可以一次性模擬計(jì)算量子態(tài)的所有振幅促绵,在初始化時(shí)配置適當(dāng)?shù)挠?jì)算方式攒庵,即可體驗(yàn)差異化的計(jì)算效率。在通用量子計(jì)算機(jī)正式問世之前败晴,混合量子-經(jīng)典計(jì)算將是量子計(jì)算領(lǐng)域一種很好的發(fā)展思路浓冒。
(3)簡易的編程語言設(shè)計(jì)與豐富的量子門資源
在 QuTrunk 框架設(shè)計(jì)之初,研發(fā)人員充分遵循產(chǎn)品的易用性尖坤、便捷性等設(shè)計(jì)原則稳懒。通過重載“ * ”或“ |”運(yùn)算符為開發(fā)者提供一種近似物理表達(dá)式的運(yùn)算操作方式,讓各種量子門表現(xiàn)形式更加直觀慢味,降低使用門檻场梆。量子邏輯門是量子算法的基本組成單元,QuTrunk 對所有量子邏輯門及量子編程涉及到的基本概念進(jìn)行了封裝與實(shí)現(xiàn)纯路,支持主流的量子算法或油。在使用 QuTrunk 進(jìn)行量子編程時(shí),開發(fā)者只需通過提供的量子編程 API 即可直接調(diào)用量子邏輯門進(jìn)行使用感昼。
(4)提供雙向解析支持和完備的數(shù)據(jù)信息統(tǒng)計(jì)
QuTrunk 框架可在運(yùn)行的同時(shí)不改變整個(gè)狀態(tài)矢量装哆,并獲取線路的狀態(tài)取值,比如計(jì)算某種狀態(tài)出現(xiàn)的概率信息、計(jì)算所有狀態(tài)的概率振幅信息等蜕琴。此外萍桌,QuTrunk 框架還支持量子線路運(yùn)行統(tǒng)計(jì)功能,如量子比特?cái)?shù)凌简、量子門等量子線路信息及運(yùn)行耗時(shí)等設(shè)備信息上炎。QuTrunk 還提供了 QASM 的解析功能,即提供雙向支持:支持導(dǎo)出 OpenQASM雏搂,也支持將 OpenQASM 解析為 QuTrunk 格式藕施。
(5)直觀的量子線路打印與可視化編程功能
QuTrunk 與啟科自研的量子集成開發(fā)環(huán)境 QuBranch 配合使用時(shí),支持可視化量子編程凸郑,只需通過簡單拖拽量子邏輯門符號即可自動(dòng)生成相應(yīng)代碼和量子態(tài)柱狀圖等裳食。QuTrunk 支持量子線路打印功能。使用時(shí)只需要輸入線路打印命令芙沥,即可在終端以字符串方式打印量子線路诲祸。在量子線路的圖形表示中,有多條并排直線分別代表不同的量子比特而昨。其中直線從左到右表示時(shí)間順序救氯,直線上排列的不同符號表示不同的量子邏輯門操作。經(jīng)過各個(gè)邏輯門操作后的量子態(tài)都會(huì)發(fā)生相應(yīng)的改變歌憨。通過 QuTrunk 打印出的量子線路着憨,可以更直觀的了解到量子線路中的線路設(shè)計(jì)。
4. QuTrunk量子編程框架使用實(shí)例
4.1 Demo程序編寫
QuTrunk部署完成后务嫡,可以開始我們的第一個(gè)量子計(jì)算程序的編寫及運(yùn)行了
4.1.1 Python解釋器切換
windows及Linux下執(zhí)行ctrl+shift+p甲抖,macOS下執(zhí)行command+shift+p,打開命令行植袍,輸入quan搜索惧眠,選擇quan:python解釋器切換。python解釋器切換可切換全工作區(qū)或?yàn)閱我豁?xiàng)目切換python環(huán)境于个。
4.1.2 新建工作區(qū)
在需要保存的目錄下新建一個(gè)目錄,示例中Qun-Demo暮顺,在IDE開始界面厅篓,選擇打開文件夾,然后選中新建的文件夾打開,顯示如下:
4.1.3 量子計(jì)算Demo程序編寫及運(yùn)行
從開始界面捶码,選擇新建python文件羽氮,并保存為demo.py,下面的代碼為bell_pair算法例子:
步驟1:環(huán)境準(zhǔn)備
from qutrunk.circuit import QCircuit
from qutrunk.circuit.gates import H, CNOT, Measure
量子線路:以上代碼模塊中core.circuit提供量子線路功能。
量子邏輯門操作:from qutrunk.circuit.gates import H, CNOT, Measure可以準(zhǔn)備H門惫恼、CNOT門和測量操作档押。
步驟2:初始化量子線路,分配量子寄存器
qc = QCircuit()
qr = qc.allocate(2)
步驟3:應(yīng)用量子邏輯門
H * qr[0]
CNOT * (qr[0], qr[1])
Measure * qr[0]
Measure * qr[1]
# print circuit
qc.print()
打印線路:量子線路部分代碼編輯好之后,直接打印量子線路令宿。(用Printer.+自定義函數(shù)叼耙。)
根據(jù)邏輯門操作預(yù)測所得結(jié)果:|00〉+|11〉態(tài)。
步驟4:Bell Pair量子線路運(yùn)行及結(jié)果返回
# run circuit
res = qc.run(shots=1024)
# print result
print(res.get_measure())
print(res.get_counts())
目前QuTrunk已經(jīng)通過運(yùn)行代碼直接可以輸出量子線路圖粒没。
步驟5:輸出運(yùn)行結(jié)果
*qreg q[2]
creg c[2]
H * q[0]
MCX(1) * (q[0], q[1])
Measure * q[0]
Measure * q[1]
[{"00": 505}, {"11": 519}]*
定義量子寄存器:以上定義量子寄存器是通過qreg操作完成的筛婉。指令為qreg q[2]表示定義一個(gè)名為q的2位量子寄存器;同理癞松,指令creg c[2]表示定義一個(gè)名為c的經(jīng)典寄存器爽撒。
測量結(jié)果:測量結(jié)果為[{"00": 505}, {"11": 519}]。該結(jié)果表示量子線路運(yùn)行次數(shù)分別為505响蓉、519硕勿,共計(jì)運(yùn)行1024次。對以上程序進(jìn)行多次運(yùn)行枫甲,發(fā)現(xiàn)結(jié)果都不相同源武,比如第二、三次的運(yùn)行結(jié)果分別為[{"00": 507}, {"11": 517}]言秸、[{"00": 528}, {"11": 496}]软能。
4.2 可視化編程
4.2.1 初始化量子編程工作區(qū)
打開IDE,先初始化量子編程工作區(qū):windows上按ctrl+shift+p举畸,macOS上command+shift+p打開命令行查排,輸入quan搜索,選擇quan:初始化量子編程工作區(qū)抄沮,執(zhí)行初始化跋核。啟動(dòng)初始化可視化編程工作區(qū)功能,將為用戶建立一個(gè)虛擬工作區(qū)用于可視化編程叛买。
4.2.2 啟動(dòng)可視化量子編程
再次按ctrl+shift+p/comand+shift+p砂代,輸入quan搜索,可以看到量子可視化編程已經(jīng)出現(xiàn)率挣,選擇“quan:量子可視化編程“啟動(dòng)量子編程可視化功能刻伊。該功能允許用戶生成多個(gè)可視化編程的qdoor文件,并且切換不同的qdoor文件生成不同的量子電路圖椒功,亦允許您使用編程的方式或者使用可視化拖拽的方式編輯電路圖捶箱,將量子門圖入電路圖中生成電路圖,將量子門從電路圖中拖出可刪除量子門动漾。目前支持H丁屎、NOT、Sdg旱眯、Toffoli晨川、Tdg证九、X、Y共虑、Z愧怜、P、Rx看蚜、Ry叫搁、Rz、R供炎、SqrtX渴逻、T、Measure音诫,其中X惨奕、Y、Z竭钝、P梨撞、Rx、Ry香罐、Rz允許添加一個(gè)控制位卧波,Rx、Ry庇茫、Rz允許變更旋轉(zhuǎn)角港粱。并提供了關(guān)鍵字高亮,代碼提示旦签,代碼自動(dòng)完成等功能查坪。借助Qutrunk的能力用戶可以查看當(dāng)前量子電路圖的量子態(tài)統(tǒng)計(jì)。
4.2.3 開始進(jìn)行可視化編程示例
在可視化編程頁面宁炫,用戶可以通過托拉拽的方式選擇各圖形化編程元素加入或者刪除完成編程偿曙,刪除只需將元素脫出窗外松開即可,可視化編程示例如下:
5.總結(jié)
隨著量子技術(shù)的不斷發(fā)展羔巢,量子編程框架也在被人們不停的完善望忆,使它更易于使用,兼容性也越來越好竿秆。通過上文的介紹炭臭,我們可以看到量子編程框架為開發(fā)人員提供了一個(gè)編程環(huán)境,簡化了很多繁瑣的基礎(chǔ)步驟袍辞,使底層技術(shù)的復(fù)雜性不再是用戶的問題,從而能夠讓更多的人可以參與到量子技術(shù)的研發(fā)上來常摧,有利于推動(dòng)量子技術(shù)的發(fā)展搅吁。