第六屆·2024 MindSpore 量子計算黑客松熱身賽賽題解讀

第六屆·2024 MindSpore量子計算黑客松火熱進行中。本次大賽由量子信息網絡產業聯盟主辦,昇思MindSpore Quantum社區承辦,多所高校和單位聯合舉辦。開發者將全面體驗全新一代通用量子計算框架MindSpore Quantum。

熱身賽爲量子計算基礎學習和編程演練。完成熱身賽的前100名選手將有機會獲得定製文化衫1件,數量有限,不容錯過。

第一步:關注MindQuantum代碼倉,參見量子軟件編程指南

第二步:註冊並完成華爲雲賬號實名認證

第三步:登錄HiQ量子計算雲平臺進行在線答題。

熱身賽參考文檔:https://competition.huaweicloud.com/information/1000042022/noise

每道題目的上方都有兩個鏈接:MindQuantum教程MindQuantum API參考。兩個鏈接中都能找到題目的解答。小技巧:在MindQuantum API參考中搜索題目中的關鍵詞,可以快速找到對應的內容。

熱身賽通過攻略視頻回放:https://www.koushare.com/live/details/33684

第一題

這道題考的是如何在線路中用on的方式添加量子門,在MindQuantum中,每個量子門都有on方法,比如X.on(0, 1)就意味着將X門作用在第0個比特上,並且受第1個比特控制。本題要求X門作用在第2個比特上,受第0個和第1個比特控制。因此可以用X.on(2, [0, 1])來表示。可以看到,on方法的第二個參數可以接受包含多個控制位的列表,因此可以方便的添加多控制門。詳細用法可以參考 on方法的API文檔

第二題

這道題考的是如何對量子線路進行壓縮。在MindSpore Quantum中,Circuit類是量子線路模塊,其中實現了很多操作量子線路的方法。其中就有一個方法可以壓縮線路,接口名就叫作compress()。因此,這道題調用compress()方法就可以成功通過了。

第三題

這道題考的是線路翻轉,也就是說,我們需要將線路的比特順序上下顛倒。題中給出了一個很長的線路,但是我們並不需要關心線路的具體內容,因爲Circuit類中有一個方法可以直接實現線路翻轉的功能——reverse_qubits(),我們在代碼中直接調用該方法就可以成功通過了。

第四題

這道題考的是如何給參數化量子線路中的變量名添加後綴,掌握這種技巧就可以很方便的搭建變分量子線路了。在mindquantum.core.circuit模塊中,add_suffix()函數就可以實現添加後綴的功能。具體來說,它需要接受一個量子線路和一個後綴字符串作爲輸入參數,然後返回一個添加了後綴的新的量子線路。選手只需要將這個新的量子線路通過+=的方式添加到新構造的線路後面,就可以構造出多層的變分線路了。題中的代碼如下:

首先我們需要將add_suffix()函數 import 進來。題目中需要搭建3層線路,因此可以用一個循環實現,在每次循環中都對 new_circ 用+=的方式添加add_suffix()函數返回的新線路,後綴字符串設置爲循環計數器的值p,就可以成功通過題目了。

第五題

題目中給出了所有需要用到模塊的鏈接,點擊即可查看用法。其中,第三個門——RY受控門可以用RY門簡單搭建出來:circ += RY(0.1).on(1, 0) 。QubitOperator可以構造泡利算子,Hamiltonian則是構造哈密頓量的類,因此題中的哈密頓量可以這樣構建:ham = Hamiltonian(QubitOperator(“X0 Y1”)) 。最後,運行 sim.get_expectation(ham, circ) 就得到哈密頓量的期望值了。

第六題

mindquantum.algorithm.nisq 中可以看到各種已實現的Ansatz線路,只需要傳入比特數和層數即可構造(題中ansatz爲RYCascade),構造完成後,circ = RYCascade(n_qubits, depth).circuit 就得到ansatz線路了。

第七題

這題考的是Rn門的構造,以及如何求變分線路參數關於哈密頓量的期望值和梯度。Rn門有3個參數,因此可以像這樣構造含參線路: circ += Rn(‘a’,’b’,’c’).on(0) ,哈密頓量的構造方法與第五題類似:ham = Hamiltonian(QubitOperator(“Z0”)) ,梯度算子需要調用模擬器的類方法來得到:grad_ops = sim.get_expectation_with_grad(ham, circ) ,得到的梯度算子可以傳入線路參數的具體數值,並返回相應的期望值和梯度: f, g = grad_ops(np.array([alpha, beta, gamma])) ,由於題目需要求α的導數值,最後將得到的梯度值的第一個參數的實部返回即可:return np.real(g[0,0,0]) 。

第八題

此題中涉及的數學概念較多,但總的來說考的是TimeEvolution模塊的使用,下面我們詳細分析一下。

TimeEvolution類屬於mindquantum.core.operator模塊,主要功能是根據哈密頓量生成式子對應的量子線路。它接受兩個輸入參數:第一個是哈密頓量H,第二個是演化時間t。調用TimeEvolution().circuit方法將返回一個量子線路,對應於算符。在某些情況下,生成的線路只是理論值的一種近似,因此會出現精度問題,而這種近似可以通過增加近似階數 n 來提高精度(具體近似公式如題中所述)。在本題中,我們需要用TimeEvolution生成 n 階的近似線路,並與理論計算得到的精確值相比較。

可以看到,在題目代碼中已經給出了哈密頓量H(第7行)和精確值 m1(第8行),並且在循環中給出了線路對應的矩陣m2(第14行),以及m1與m2比較的代碼(第15行)。我們只需要補充第12行,即:用TimeEvolution生成 n 階的近似線路。

在近似公式中可以發現,所謂n階近似,就是將演化時間t除以n,變成,再將該式子作用 n次,即。這個式子可以這樣構造:括號中的式子可以用TimeEvolution模塊生成量子線路,然後將該線路重複n次,即可得到n階近似線路。我們可以很簡潔的實現整個過程:TimeEvolution(h, 1.0/n).circuit*n,一行簡短的代碼就構造出了n階近似。

之後這個線路的矩陣m2會與理論解m1相比較,如果達到精度1e-2的話,則跳出循環,這樣就得到了達到精度所需的最小的n。

第九題

本題考的是如何在線路中添加噪聲。在MindQuantum中,通過ChannelAdder可以構建噪聲模型。首先我們通過GateSelector設置需要添加噪聲的門,然後用MixerAdder結合想要添加的噪聲,例如:MixerAdder([GateSelector('x'),DepolarizingChannelAdder(0.05, 1)]) 。Y門和CNOT門以此類推,最後,通過SequentialAdder結合成一個噪聲模型:

第十題

本題考慮的是運行真實量子硬件的情況,此時我們無法直接求得關於哈密頓量的期望值,只能通過處理多次採樣獲得的比特串來得到結果。 假設線路末態爲

,則期望值爲(因爲)。在採樣10000次後,得到的比特串分佈應當近似於相應的係數,因此可以認爲:a=res.data.get('00', 0)/shots,以此類推,最後將計算出的期望值返回即可。

大賽報名&邀請好友參賽

點擊查看獎品和操作步驟:https://competition.huaweicloud.com/information/1000042022/invite

獎品圖片僅做參考,以實際收到獎品爲準,數量有限,先到先得!

大賽鏈接:https://competition.huaweicloud.com/information/1000042022/introduction

點擊關注,第一時間瞭解華爲雲新鮮技術~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章