教程:Python量子計算入門

教程:Python量子计算入门

量子計算機可能聽起來有點神秘而且遠在未來,但實際上,現在可以在雲端訪問它們或通過仿真器為每個人編寫量子代碼。在本教程中,我們將介紹如何編寫一個簡單的量子計算機程序來產生隨機數。

這是用Python進行量子計算系列教程的第一部分,並介紹了量子編程的基本原理。

DataEspresso量子計算系列教程的概述。

● 第一部分:通過產生隨機數開始量子計算(Python)

● 第二部分:使用量子隱形傳態給鮑伯發送消息(Python)

● 第三部分:訂閱我們的簡訊以便通知您

這個示例可以在任何仿真器或量子計算機上完成。這篇博文,使用了免費且開源的Python庫ProjectQ。

ProjectQ 可以在任何CPU上模擬量子計算機,或連接到IBM的量子計算機作為後端。

開始前,只需要通過pip或者按照安裝指南安裝ProjectQ

教程:Python量子计算入门

量子計算機編程

編寫一個量子程序有點不同於以往我們創建經典程序,我們必須深入計算機抽象層次,使用邏輯門來操縱數據,與Alan Turing創造著名的圖靈機器時使用的心態相同,它描述了經典機器對經典比特進行經典計算。

量子圖靈機描述了一種可以在量子比特上進行量子計算的計算機,其中量子計算是指將量子邏輯門如Pauli-X、CNOT等應用於量子比特。

這意味著任何可能在經典計算機上寫入的程序都可以在量子計算機上運行,反之亦然,但這並不意味著任何程序在量子計算機上都會更有效,事實上,一些程序在量子計算機將運行得更慢並且量子計算機將不得不與一臺經典的計算機並行工作以處理經典計算機的計算不足,諸如矩陣乘法運算或尋找破解密碼學的主要因素。

用量子門創建一個隨機生成器

創建(偽)隨機數是計算機科學課程中教的第一件事。通常,它會導入一個稱為"Random"之類的預先創建的庫,然後調用合適的函數。

在量子計算中,我們還沒有達到這樣的抽象水平,但是使用量子邏輯門來創建隨機數幾乎同樣容易。

量子門類似於我們從經典計算中知道的的邏輯門。例如:AND,OR,NAND,XOR等。

對於那些不熟悉這個概念的人來說,邏輯門是用於通過布爾函數操縱輸入的一組輸入和輸出。

例如,如果我們給或門輸入兩個數字,其中一個或兩個都是一,輸出將是真,如果我們輸入兩個零,輸出將是假。

教程:Python量子计算入门

上面的表顯示了或門的真值表,其中A和B是輸入,Q是輸出。想象一下,只有當燈被點燃時,門才會打開,當兩盞燈關閉時,門將保持關閉。

邏輯門可以用來計算任何操作,並且在量子計算中,我們可以使用稱為Hadamard的邏輯門來創建隨機數(1或0)。

Hadamard門取一個輸入,並將輸出映射為等於1或0的相等概率,即創建一個疊加,其中輸入可以同時為1或0。

基態 |0⟩被映射為:

教程:Python量子计算入门

基態 |1⟩被映射為:

教程:Python量子计算入门

Hadamard門由Hadamard矩陣表示,表明行是相互正交的。

教程:Python量子计算入门

在維基百科上閱讀關於Hadamard矩陣和其他量子邏輯門的更多信息

本質上,Hadamard門擲硬幣,而硬幣在空氣中,這是一個疊加,在這個意義上,硬幣可以是正面和背面,直到它落地,我們向下看它-人為的方式來衡量硬幣的狀態。

我們的量子隨機生成器在幾個簡單的步驟中加上硬幣模擬

1.創建一個新量子比特

  • 從口袋裡掏出一枚硬幣

2.將Hadamard門應用於量子比特,將其疊加成等於0和1的相等概率。

  • 把硬幣拋向空中,現在可以是正面,也可以是背面。

3.測量該量子比特

  • 硬幣終於落地了,看是它的正面還是背面。

首先,導入projectQ的Hadamard門和測量函數。我們在本教程中使用了projectQ,在其他庫和系統中也可以遵循同樣的方法,雖然代碼語法會有所不同,但是理論是一樣的。

教程:Python量子计算入门

我們使用仿真器初始化後端,但是也可以使用如IBMs量子計算機。然後創建一個新的量子比特來應用計算。

教程:Python量子计算入门

我們現在有一個量子比特,它被初始化並準備疊加。記住這裡硬幣的比喻,在這裡我們撿到一枚硬幣,現在準備扔在空中。

然後我們將Hadamard門應用到量子比特,這是指我們把硬幣拋向空中的步驟。

這樣做的語法將在每個庫和工具之間有所不同,但在ProjectQ中,它只按照以下方式完成。

教程:Python量子计算入门

這裡要注意的一件有趣的事情是,我們直接將門應用到量子比特,而不是創建一個副本。這是因為不同於經典比特,量子比特不能被物理學的基本定律所複製。

然而,它有可能將量子態從一個位置傳送到另一個位置,但這是下一個教程的內容。

隨著量子比特的疊加,我們現在可以測量它,這指的是步驟硬幣落到桌子上並看是它的正面還是背面。在projectQ中,測量是用下面的命令完成的。

教程:Python量子计算入门

測量的量子比特現在可以打印出來 將返回0或1。

教程:Python量子計算入門這一切都包含在一個完整的Python代碼的一個for循環中,這表明我們投擲硬幣的隨機性。

教程:Python量子计算入门

來自隨機生成器的一些輸出。

教程:Python量子计算入门

這是對Python中創建一個帶有量子門的隨機生成器的簡單介紹。請在下面的評論區中發表任何評論,關注或問題。

英文原文:http://dataespresso.com/en/2018/07/22/Tutorial-Generating-random-numbers-with-a-quantum-computer-Python/
譯者:張新英


分享到:


相關文章: