作者:YK Sugi
原文:http://t.cn/EZAElk0
Hi,大家好!
不久前,我參觀了加拿大溫哥華的D-Wave Systems公司,這是一家製造前沿量子計算機的公司。
我在那裡學到了很多關於量子計算機的知識,所以我寫這篇文章來和大家分享我在那裡所學到的一些知識。
本文的目的是透過一個簡單的例子讓你清楚地瞭解什麼是量子計算機。
本文所講的內容很容易理解,不要求你具備量子物理或電腦科學的知識。
好了,我們開始吧。
什麼是量子計算機?
下麵用一句話來概括什麼是量子計算機:
量子計算機是一種使用量子力學的計算機,它能比普通計算機更高效地執行某些特定的計算。
這句話有很多東西需要解釋,所以讓我用一個簡單的例子來告訴你它到底是什麼。
為瞭解釋什麼是量子計算機,我首先需要解釋一下普通(非量子)計算機。
普通計算機如何儲存資訊
目前一臺普通的計算機是用一系列的0和1來儲存資訊的。
不同型別的資訊,比如數字、文字和影象都可能用這種方式來表示。
0和1系列中的每個單位被稱為位元(bit,中文也叫位),因此一位元可以被設定為0或1。
那麼量子計算機呢?
量子計算機並不是用位元來儲存資訊的,而是用一種叫量子位元(qubit,quantum bit的簡寫,中文也叫量子位)的東西。
每個量子位元不僅能設定為1或0,還可以設定為1和0。但,這究竟是什麼意思呢?
讓我來用一個簡單的例子來解釋一下。這是一個擬人的例子,但它依然可以幫助理解量子機算機如何工作。
一個用來理解量子計算機的例子
現在,假設你現在經營一家旅行社,你需要把一群人從一個地方運送到另一個地方。
為了簡單起見,不妨假設你現在需要運送的只有3人——Alice,Becky和Chris。
並且假設你為此預定了2輛出租車,你得分清楚誰乘坐哪一輛出租車。
另外,你知道誰和誰是朋友關係,誰和誰是敵人關係。
這裡,我們認為她們的關係是這樣的:
◇ Alice和Becky是朋友
◇ Alice和Chris是敵人
◇ Becky和Chris是敵人
現在你要將這3個人分配到2輛出租車,並要達到下麵的標的:
◇ 最大化共用一輛車的朋友對數
◇ 最小化共用一輛車的敵人對數
譯註:朋友/敵人的對數,這裡的“對”是單位,不是指數學中的對數。比如“一對”就是兩人的意思。
好了,這是這個問題的基本前提。讓我們先來思考一下如何用普通計算機解決這個問題。
用普通計算機解決這個問題
為了用普通的非量子計算機來解決這個問題,你首先需要弄清楚如何用位元儲存相關的資訊。
我們先標識這兩輛出租車為出租車#1和出租車#0。
然後,你可以用3個位元表示誰進入哪輛車。
例如,我們可用0和1來表示:
◇ Alice乘坐出租車#0
◇ Becky乘坐出租車#0
◇ Chris乘坐出租車#1
由於每個人都有兩個選擇,因此有2*2*2=8種組合來把她們分配給兩輛車。下麵是所有可能的組合:
A | B | C
0 | 0 | 0
0 | 0 | 1
0 | 1 | 0
0 | 1 | 1
1 | 0 | 0
1 | 0 | 1
1 | 1 | 0
1 | 1 | 1
你可以用3個位元來表示這些組閤中的任意一個。
計算每個組合的分數
現在,用普通計算機我們如何來判斷哪一個組合是最佳組合呢?為此,讓我們來定義如何計算每個組合的得分。這個得分將代表每個組合達到前面提到的兩個標的的程度:
◇ 最大化共用一輛車的朋友對數
◇ 最小化共用一輛車的敵人對數
讓我們簡單地這樣定義我們的分數:
(給定組合的得分)=(#共用一輛車的朋友對數)-(#共用一輛車的敵人對數)
例如,假設Alice,Becky和Chris都乘坐出租車#0,可以用3個位元表示為111。
在這種情況下,只有一對朋友共用一輛車——Alice和Becky。
然而,有兩對敵人共用一輛車——Alice和Chris,Becky和Chris。
所以,這個組合的總分是1-2 = -1。
解決這個問題
有了所有這些預設,我們終於可以著手解決這個問題了。
對於一臺普通的計算機,要找到最好的組合,你基本上需要遍歷所有的組合,看看哪個得分最高。
你可以構建這樣一個表格:
A | B | C | Score
0 | 0 | 0 | -1
0 | 0 | 1 | 1 0 | 1 | 0 | -1
0 | 1 | 1 | -1
1 | 0 | 0 | -1
1 | 0 | 1 | -1
1 | 1 | 0 | 1 1 | 1 | 1 | -1
如你所見,這裡有兩個正確的組合——001和110,都達到了1分。
這是個相當簡單的問題。然而隨著越來越多的人參與到這個問題中來,用一臺普通計算機就很難解決這個問題。
我們看到,3個人需要遍歷8種可能的組合。
如果有4個人呢?在這種情況下,我們需要遍歷2*2*2*2 = 16個組合。
對於n個人,我們需要透過2的n次方個組合來找到最佳組合。
所以,如果有100個人,我們需要遍歷:
2¹⁰⁰ ~= 10³⁰ = 一百萬百萬百萬百萬百萬個組合。
要遍歷這麼多的組合,對普通計算機來說是不現實的。
用量子計算機解決這個問題
我們如何用量子計算機來解決這個問題呢?
讓我們回到把3個人分配給2輛出租車的例子。
正如我們前面看到的,這個問題有8種可能的組合:
A | B | C
0 | 0 | 0
0 | 0 | 1
0 | 1 | 0
0 | 1 | 1
1 | 0 | 0
1 | 0 | 1
1 | 1 | 0
1 | 1 | 1
用一臺普通計算機,用3個位元,我們一次只能表示其中一個組合——例如001。
然而,使用量子計算機,3個量子位元可以同時表示所有8個組合。
關於這個量子位元詞的確切含義存在爭議,但我的看法是這樣的。
首先,檢查這3個量子位元中的第一個量子位元。當你同時將它設定為0和1時,就像是建立了兩個平行世界。(是的,很奇怪,但隨我看下去。)
譯註:一個世界相當於一個普通計算機,理解這點很重要。
在平行世界中,其中一個的量子位元被設定為0,另一個的量子位元被設定為1。
現在,如果你把第二個量子位元也設為0和1呢?然後,這就有點像創造了4個平行世界了。
在第一世界中,兩個量子位元被設定為00,第二個是01,第三個是10,第四個是11。
類似地,如果你將這三個量子位元都設定為0和1,你就建立了8個平行世界——000,001,010,011,100,101,110和111。
這是一種奇怪的思考方式,但它是解釋量子位元在現實世界中的行為的正確方式之一。
現在,當你對這三個量子位元進行某種計算時,你實際上是在同時對這8個平行世界進行同樣的計算。
因此,我們可以同時計算所有組合的分數,而不是按順序遍歷所有這些可能的組合。
有了這個特殊的例子,理論上,你的量子計算機可以在幾毫秒內找到最好的組合, 即我們之前看到的001或110:
A | B | C | Score
0 | 0 | 0 | -1
0 | 0 | 1 | 1 0 | 1 | 0 | -1
0 | 1 | 1 | -1
1 | 0 | 0 | -1
1 | 0 | 1 | -1
1 | 1 | 0 | 1 1 | 1 | 1 | -1
實際上,要解決這個問題,你需要讓你的量子計算機做兩件事情:
◇ 所有可能的組合都用量子位元表示。
◇ 將每個可能的組合轉換成分數的函式。在本例中,這個函式計算共用一輛車的朋友對數和敵人對數。
能做這兩件事,你的量子計算機將在幾毫秒內得出最好的組合。在本例中,最好的組合是分數為1的001或110。
現在,從理論上講,量子計算機每次執行都能找到最好的解。
然而,實際上,在執行量子計算機時會存在錯誤。所以,它可能會找到次優解,第三優解,等等。
隨著問題變得越來越複雜,這些錯誤會變得越來越突出。
因此,在實踐中,你可能希望在量子計算機上數十次甚至數百次地執行相同的操作,然後從你得到的結果中選出最好的。
量子計算機的計算規模如何
即使有我提到的錯誤,量子計算機也沒有和普通計算機那樣的計算規模問題。
當有3個人需要分配給2輛車時,我們需要在量子計算機上執行的操作次數是1。這是因為量子計算機會同時計算所有組合的分數。
當有4個人的時候,操作次數仍然是1。
當有100人的時候,操作次數仍然是1。量子計算機在同一時間計算所有2¹⁰⁰ ~= 10³⁰ = 一百萬百萬百萬百萬百萬個組合的分數只需一次操作。
正如我之前提到的,在實踐中,最好是執行量子計算機幾十次或幾百次,然後從得到的結果中選出最好的結果。
然而,它仍然比在普通計算機上運行同樣的問題並且必須重覆同樣型別的計算一百萬百萬百萬百萬百萬次要好得多。
最後
特別感謝D-Wave Systems公司的每個人耐心地向我解釋這一切。
D-Wave最近推出了一個與量子計算機互動的雲環境。
如果你是一名開發人員,並且想嘗試使用量子計算機,使用雲環境可能是最簡單的方法。
它叫Leap,網址是:
https://cloud.dwavesys.com/leap
你可以免費用它來解決成千上萬的問題,而且一旦你註冊了量子計算機,他們還提供了手把手的教程。
補充說明:
在本文中,我使用術語“普通計算機”來指代非量子計算機。然而,在量子計算領域,非量子計算機通常被稱為經典計算機。