藉助開源軟體開發包嘗試量子計算編程
經典計算機是基於二進位數的,二進位數有 0 和 1 兩種形式。這並不是由於二進位邏輯系統比有更多基本狀態的邏輯系統(甚至包括模擬計算機)有內在優勢。而是,對電路元件的開關操作很容易實現,而且藉助先進的半導體技術,可以製造出體積小且價格低廉的計算機。
但它們並非沒有局限性。經典計算機求解某些問題的效率並不高,主要是那些時間或內存成本隨著問題的規模(O)呈指數級增長的問題。我們把這種問題稱為 O(2 n)(大 O 表示法)。
大部分現代加密方法甚至依賴這一特性。把兩個大素數相乘,耗費的成本低(O(n 2)),但進行反向操作就非常耗時。所以只要使用的數字足夠大,對它分解質因數就非常困難。
進入量子世界
量子計算的基礎數學和力學知識不在本文的探討範圍內。然而,還是有一些基礎知識需要預先說明。
量子計算機以 量子比特 代替了二進位比特 —— 量子比特是體現量子屬性的可控計算單元。構成量子比特的通常是超導元件,或自然界中存在的量子實物(例如電子)。量子比特可以以「 疊加 」狀態存在,疊加態是 0 和 1 以某種方式組合起來的複雜狀態。你可能聽說過,量子比特既為 1 又為 0,這種說法並不準確。真實情況是,如果進行測量,量子比特的狀態會坍縮為 0 或 1。在數學上,量子比特未測量的狀態可以看作 布洛赫球面 的幾何表示上的一個點。
儘管對習慣使用經典計算機的任何人來說,疊加態是一個全新的概念,但一個量子比特本身並沒有什麼趣味性。量子計算的第二個概念是「 干涉 」。真正的量子計算機本質上是統計性質的。量子演算法對干涉圖案進行編碼,增加了可以測量編碼方案的狀態的概率。
疊加和干涉的概念雖然新穎,但在物理世界中也有對應的現象。而量子力學中的「 糾纏 」卻沒有,但它是實現指數級量子加速的真正關鍵。藉助量子糾纏,對一個微觀粒子的測量可以影響後續對其他被糾纏的粒子的測量結果 —— 即使是那些物理上沒有關聯的粒子。
量子計算能做什麼?
今天的量子計算機就其包含的量子比特的數量而言是相當小的,只有幾十到幾百個。因此,雖然人們不斷開發新的演算法,但比同級別經典計算機運行得快的硬體還未問世。
但是在很多領域,量子計算機能帶來很大好處。例如,它能提供較好的方法來模擬自然界的量子系統,例如分子,其複雜程度超過了經典計算機的建模能力。量子計算也跟線性代數有關,它是機器學習和很多其他現代優化問題的基礎。因此,我們有理由認為量子計算也可以很好地適用於此。
在量子演算法相對於普通演算法的優勢方面,Shor 演算法 是經常被提及的例子,它在較早時候就用於分解質因數。它由 MIT 的數學家 Peter Shor 於 1994 年發明,量子計算機目前還不能在較大的問題上運行該演算法。但它已經被證明可以在 O(n 3) 時間內完成工作,而不像經典演算法那樣需要指數級的時間。
從使用 Qiskit 開始
你可能在想:「我身邊沒有量子計算機,但我很想嘗試一下。能做到嗎?」
我們來了解一下名稱為 Qiskit 的開源項目(採用 Apache 2.0 許可證)。它是一個軟體開發包(SDK),用於訪問 IBM 量子實驗室的量子計算模擬器和物理硬體(免費)。你只需要註冊獲得一個 API 密鑰。
當然,如果要深入研究 Qiskit,需要很多其他方面的知識,線性代數只是其中一部分,這些都遠遠超出了本文的範圍。如果你需要深入學習,網上有很多免費資源,其中也不乏完整的教科書。然而,體驗一下也很簡單,只需要一些 Python 和 Jupyter notebook 的基礎知識即可。
為了增加趣味性,我們全程使用 Qiskit 教程 的 「Hello, World!」 程序:
首先,安裝教程的相關工具和部件:
pip install git+https://github.com/qiskit-community/qiskit-textbook.git#subdirectory=qiskit-textbook-src
下一步,進行軟體包的導入:
from qiskit import QuantumCircuit, assemble, Aer
from math import pi, sqrt
from qiskit.visualization import plot_bloch_multivector, plot_histogram
Aer
是本地模擬器。Qiskit 包括四個組件:Aer
、基礎組件 Terra
、用於實際的量子系統上的噪音和錯誤處理的 Ignis
,以及用於演算法開發的 Aqua
。
# Let's do an X-gate on a |0> qubit
qc = QuantumCircuit(1)
qc.x(0)
qc.draw()
雖然底層數學原理還涉及到矩陣乘法,量子計算機中 X 門也可以認為類似於經典計算機中的非門。(事實上,它經常被稱為 "非門")。
現在,運行並測量它。結果跟你預期的一樣,因為量子比特的初始狀態是 |0>
,接著反轉,然後被測量。(使用 |0>
和 |1>
與經典計算機中的比特區分開來。)
# Let's see the result
svsim = Aer.get_backend('statevector_simulator')
qobj = assemble(qc)
state = svsim.run(qobj).result().get_statevector()
plot_bloch_multivector(state)
![Bloch sphere showing the expected result](/data/attachment/album/202302/18/173849zpxc3tpgojd4dcg7.png "Bloch sphere showing the expected result")
布洛赫球體顯示了預期的運行結果
結論
在某些方面,你可以把量子計算看作用於經典計算機的一種獨特的協處理器,跟 GPU 和 FPGA 一樣。不同的是,在可預見的未來,量子計算機可以被用戶像網路資源一樣訪問到。另一個差異是,它們的工作有本質的不同,所以不像很多其他你熟悉的加速器那樣。因此,人們對演算法開發如此感興趣,並投入大量資源來研究量子在何時何地的性能最好。了解一下這些東西也無妨。
via: https://opensource.com/article/21/6/qiskit
作者:Gordon Haff 選題:lujun9972 譯者:cool-summer-021 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive