定義問題以及用QUBO表示約束

定義問題以及用QUBO表示約束

D-Wave擅長解決的問題之一就是二值優化(optimization of binary variables)問題。二值變量只有變量 0(NO, or FALSE)和變量 1(YES, or TRUE)。

傳統計算機可以被認爲是由邏輯門(logic gates)組成的,邏輯門是一種簡單的決策裝置,其根據輸入產生輸出。雖然 D-Wave 系統並不是基於門的,但巧合的是一個特殊的門(異或門)形成了系統要解決的第一個優化問題。

異或門內容如下:
假設由兩個二值的輸入a,ba,b 。若a=0b=0a=0 且b=0,則輸出爲 11, 若a=1b=1a=1 且b=1,則輸出爲 11, 其他情況下輸出爲0.

定義目標函數

對於一個有兩個qubit的問題,我們希望在退火之後的 qubits 得到一樣的值。qubit 的狀態有4種情況,如下表所示:

q0q_0 q1q_1
0 0
0 1
1 0
1 1

我們需要定義一個目標函數,使其最終實現狀態(0,0)和(1,1)。在目標函數中,qubit 是變量。bias(qubit 偏置) 和 strengths(couplers 的強度)是線性項和二次項上的係數。兩個 qubit 問題的目標函數有三個項。目標函數的形式如下:

f(s)=a1q1+a2q2+b1,2q1q2(5.1)f(s) = a_1 q_1 + a_2 q_2 + b_{1,2} q_1 q_2 \tag{5.1}

其中 ss 是變量 q=[q1,q2]q=[q_1,q_2] 的向量,a1a_1和$ a_2$ 是 qubit biases,b1,2b_{1,2} 是 coupler 的權重(strengths)。

設置滿足最初目標的 a1,a2,b1,2a_1,a_2,b_{1,2}。首先可以看到,當 q1q_1q2q_2 都等於0(記爲(0,0))時,目標函數的值爲0,也沒有其他可調參數。這就是我們希望得到的狀態,對應於基態的最小能量應該爲0。同時不希望有狀態(0,1)和(1,0)。一種辦法就是給 a1,a2a_1,a_2 兩個 biases 都設置爲 0.1:

q0q_0 q1q_1 Objective Value
0 0 0
0 1 0.1
1 0 0.1
1 1 0.2 + b1,2b_{1,2}

又因爲狀態(1,1)也是我們希望得到的狀態,一種方式就是給coupler權重設置 b1,2=0.2b_{1,2}=-0.2 .最終的目標函數是:

f(s)=0.1q1+0.1q20.2q1q2(5.2)f(s)=0.1q_1 + 0.1q_2 - 0.2q_1q_2 \tag{5.2}

上述表格的輸出就變成如下所示:

q0q_0 q1q_1 Objective Value
0 0 0
0 1 0.1
1 0 0.1
1 1 0

當我們對這個問題在D-Wave系統上運行了很多次退火之後(也稱爲 採樣(samples) or 讀取(reads)),我們希望得到基態(0,0)和(1,1),而不是激發態(0,1)和(1,0)。

把這個問題在D-Wave2000Q系統上運行1000次之後,可以獲得1000個採樣結果。

Energy State Occurrences
0 (0,0) 555
0 (1,1) 443
0.1 (0,1) 1
0,1 (1,0) 1

如果再次運行這個問題,我們期望得到的 energy 0 可能會有不同,但是一定是在500的附近(樣本的50%左右)。

需要注意的是,結果中大多數情況是(0,0)和(1,1),調用足夠多次QPU時,會看到偶爾的(0,1)和(1,0)這樣的解。對於更復雜的 QUBOs ,這種反覆求解同一個問題以獲得一系列答案的過程稱爲採樣(sampling)

問題縮放(Problem Scaling)

考慮另外一個 2-qubit 問題,這次給 qubit biases 和 coupler strength 分別賦值0.5和1,目標函數如下:

f(s)=0.5q1+0.5q2q1q2(5.3)f(s) = 0.5q_1 + 0.5q_2 - q_1q_2 \tag{5.3}

同上,可以得到如下結果:

q0q_0 q1q_1 Objective Value
0 0 0.5
0 1 0.5
1 0 0.5
1 1 0

因爲這個問題的激發態和前面那個問題中的值不同,導致基態和激發態之間的能量差更大(0.5 和 0.1),所以這次可能會看到不同的結果。話句話說,當基態和激發態之間存在較大的間隙(能量差)時,從基態更不容易達到激發態。

前面在第一個問題中,我們在返回的結果中可以看到了一小部分激發態。如果我們多次運行這兩個問題,通常會觀察到相同的結果,但實際是第二個問題(明顯)存在較大差距,這與我們的預期的50%差別有點大。

這一結果是由D-Wave系統的一個稱爲**自動縮放(auto-scaling)**的功能引起的。每個QPU的偏差 aa 和強度 bb 都有一個允許的範圍值。除非我們明確禁用自動縮放,否則D-Wave軟件會調整問題的 aabb 的值,使得把問題發送到QPU之前採用整個可用的(a,b)範圍。因此,在運行這兩個問題時,它們向QPU呈現相同的(a,b)值,因此返回的解決方案實際上是相同的。當在運行結束返回能量值和目標值時,我們使用的是預縮放(pre-scaling)值。

下面來測試一下這個功能。首先運行第一個問題1000次(激發態的值是 0.1),禁用 auto-scaling。這次看到的結果如下所示:

Energy State Occurrences
0 (0,0) 272
0 (1,1) 526
0.1 (0,1) 124
0.1 (1,0) 68

然後運行第二個問題1000次(激發態的值是 0.5),禁用 auto-scaling。這次看到的結果如下所示:

Energy State Occurrences
0 (0,0) 436
0 (1,1) 563
0.5 (0,1) 1
0.5 (1,0) 0

這些結果表明,在沒有自動縮放(auto-scaling)的情況下,第一個問題比第二個問題具有更小的間隙(基態和激發態的能量差),並且返回更多的激發態樣本。間隙越小,從基態變到激發態越容易(激發態的次數越多)

用 QUBO 來表示約束

先用 QUBOs 定義一個簡單的約束(constraints),可以拓展到更大更復雜的問題中。

exactly-one-true 約束是一個布爾(Boolean)可滿足性satisfiability)問題,給定一組變量,我們想知道何時恰好有一個變量爲1(真)。

例如,當優化一個旅行銷售人員通過一系列城市的路線時(TSP),需要一個約束條件,必須強制銷售人員在旅行的每個階段只能在一個地方(exactly one city),同時在多個地方是無效的。

Figure 6.1: The traveling salesperson problem(TSP) is an optimization problem that can be solved using exactly-one-true constraints. Map data © 2017 GeoBasis-DE/BKG (© 2009), Google.

下面就來說明一下如何以D-Wave可以解決的方式來構建一個簡單的 exactly-one-true。步驟如下:

  1. 從目標函數開始:在這個例子中,就是從有三個變量的 exactly-one-true 約束開始,然後建立一個滿足這個目標的真值表。
  2. 建立一個能夠得到所期望的狀態且抑制其他狀態的 QUBO。
  3. 把 QUBO 轉換到一個graph中。

對目標函數建真值表

考慮一個簡單的例子:給定三個變量 a,b,ca,b,c ,我們想知道什麼時候恰好只有一個變量是1。(也就是說,a,b,ca,b,c 中只有一個變量是1,而其他兩個變量是0),真值表表示如下:

aa bb cc Exactly 1
0 0 0 FALSE
1 0 0 TRUE
0 1 0 TRUE
1 1 0 FALSE
0 0 1 TRUE
1 0 1 FALSE
0 1 1 FALSE
1 1 1 FALSE

建立一個只有一個爲真的 QUBO

我們希望找到一個函數 E(a,b,c)E(a,b,c) ,當這個目標爲真時,使得函數是最小的,可以用下式表示:

a+b+c=1 a + b + c = 1

a+b+c1=0 a + b + c - 1 = 0

上述第二個式子表示的含義是,當 a,b,ca,b,c 都爲0時,結果時 -1, 這是一個比 TRUE 狀態更低的能量狀態。避免這個情況出現的方式是,給這個方程加平方:

(a+b+c1)2(a + b + c - 1 )^2

於是就有平方表達式:

E(a,b,c)=(a+b+c1)2 E(a,b,c) = (a + b + c - 1)^2

因爲這些變量都是二值的(0 和 1),有 a2=aa^2 = a於。是我們的目標函數就變成了

E(a,b,c)=2ab+2ac+2bcabc+1E(a,b,c) = 2ab + 2ac + 2bc - a - b - c + 1

其中函數 E(a,b,c)E(a,b,c) 的能量(energy)就是目標函數的值。

加入 energy 這一列之後再看一下真值表。需要注意的是,最低能態和 exactly-one-true 約束是匹配的。解越好,能量越低。

aa bb cc Exactly 1 Energy
0 0 0 FALSE 1
1 0 0 TRUE 0
0 1 0 TRUE 0
1 1 0 FALSE 1
0 0 1 TRUE 0
1 0 1 FALSE 1
0 1 1 FALSE 1
1 1 1 FALSE 4

表達爲 QUBO 的形式則爲:

E(x0,x1,x2)=2x0x1+2x0x2+2x1x2x0x1x2+1E(x_0,x_1,x_2) = 2x_0x_1 + 2x_0x_2 + 2x_1x_2 - x_0 - x_1 -x_2 + 1

把 QUBO 轉換到 Graph 中

QUBO 能量函數能用三角圖表示如圖6.2。每個二值變量都是一個帶有線性係數的 bias 節點。每個二次項都變成節點之間的一條 edge。

Figure 6.2: Triangular graph showing biased nodes and edges.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章