• 沒有找到結果。

2.1 Monte Carlo

Monte Carlo 方法由 Metropolis 及 Ulam 於西元 1949 年提出,原本是為了 物理學研究而發展[5]。主要理論基礎為依據大數法則,在隨機取樣的情況下,可 以獲得有誤差的評估值,取樣的數量愈大,誤差將愈小,評估值愈準確。

西元 1993 年,Brugmann 將 Monte Carlo 方法運用於圍棋程式中[6],使用隨 機的模擬棋局結果(勝/負,或目數)為[評估值],經大量的模擬棋局後,具有最佳 評估值的著手即為所選擇的棋步。

2.2 Bandit Problem (強盜問題)

強盜問題(bandit problem)是一種機器學習(machine learning)問題,可以 使用吃角子老虎機(slot machine)的報酬率來類比說明:

1. 單一目標強盜問題(One-armed bandit problem)

當只有一台機器時,每次拉下拉桿,都會有報酬,在多次的拉下拉桿後,可 以得到平均的報酬,表示如下:

X = 1S si=1Xi (1)

S 是測試的次數,Xi是第 i 次的報酬。

2. 多目標強盜問題(K-armed bandit problem) 當有多台機器時,平均報酬可以表示如下:

X j,s = 1S si=1Xj,i (2)

J 是機器的編號, 1 ≤ j ≤ K。S 是編號 j 的機器被測試的次數。簡化後表示 為: X j = X j,Tj(n) , Tj(n)是第 j 台機器被測試的次數。

12

2.3 UCB1

針對多目標強盜問題(K-armed bandit problem)在有限時間內的分析研究,

Peter Auer 等人提出 UCB1[7]配置策略,公式如下:

X j + 2 log nT

j(n) (3)

X j是第 j 台機器的平均報酬,Tj(n) 是第 j 台機器被測試的次數,n 是所有機器目 前被測試的總次數。讓公式(3)的值最大的機器將是下一個被選擇來測試的機器。

2.4 UCB1-TUNED

Peter Auer 同時提出另一個實驗結果較佳的 UCB1-TUNED[7]配置策略,

UCB1-TUNED 的公式如下:

Vj s = 1s sγ=1Xj,γ2 − X j,s2 + 2 log ns (4)

X j + Tlog n

j(n)min 14, Vj Tj n (5)

讓公式(5)的值最大的機器將是下一個被選擇來測試的機器。

2.5 UCT 演算法

UCT(UCB1 for Tree Search)[8]演算法使用極小極大遊戲樹(minimax tree) 搭配節點選擇公式(UCB1, UCB1-TUNED, … 等),選擇樹節點,展開要測試的節 點,然後使用 Monte Carlo 方法執行模擬棋局,模擬棋局的結果即是審局函數的 結果,最後將模擬棋局的結果回饋更新。流程示意圖如圖 2.1。

13

圖 2.1 UCT 演算法

2.6 MoGo

MoGo 為第一個發表使用 UCT 演算法的圍棋程式[9]。12th 電腦奧林匹克圍棋 比賽獲得十九路冠軍,九路亞軍,13th 電腦奧林匹克圍棋比賽獲得十九路亞軍,

九路季軍。MoGo 是世界第一個曾在持黑被讓子之棋局打敗職業圍棋棋士的電腦程 式[10]。2008 年美國圍棋公開賽,MoGo 使用由 800 顆 CPU 所組成的超級電腦,曾 在讓九子持黑的棋局打敗韓國八段職業棋士 Kim Myung Wan[10]。2009 年歐洲魔 圍棋挑戰台灣職業棋士邀請賽,MoGo 使用由 640 顆 CPU 所組成的超級電腦,曾在 讓七子持黑的棋局打敗世界棋王周俊勳[11]。

MoGo 除了使用 UCT 演算法以外,對模擬棋局的實作也有所加強[9],而且也 加入了一些策略,如 RAVE(Rapid Action Value Estimation) [12]。

2.7 MoGo 的模擬棋局加強方法

由於模擬棋局的結果是用來更新目前狀態與決定下一步搜尋與測試的重要依 據,所以模擬棋局的合理性與正確性相當重要。MoGo 所使用的模擬棋局加強方法 有:

1. 被叫吃棋串處理

14

當有棋串被叫吃時,嘗試尋找解救的方法:吃掉相連的棋串或者長氣。

2. 對手所下子周圍八點的棋形比對

在十一組棋形中尋找符合的棋形,若有兩個(含)以上的點符合任一棋形,則隨 機選擇一個,十一組棋形的示意圖分成如圖 2.2 的非一線的棋形,圖 2.3 中的 棋形只適合一線的棋步,最後一種是符合圖 2.4a 但是不能符合圖 2.4b 及不能 符合圖 2.4c。

圖 2.2 非一線棋形

圖 2.3 一線棋形

(a) (b) (c) 圖 2.4 特殊棋形

3. 吃對方棋串

如果盤面上有可以提子的地方,則隨機選擇一個。

當上述條件皆不成立,則隨機選擇一個合法步。而且論文中也提及 MoGo 在實 作上比上述的複雜許多,其中包含一些具備圍棋知識的小函式。

2.8 RAVE(Rapid Action Value Estimation)

RAVE 的主要觀念是所有著手如同第一手(all-move-as-first)[12],對同一 方而言,能夠贏棋的著手就是好的著手,在我方獲勝的模擬棋局中,出現愈多次 的著手,無論是第幾手,都將之視同第一手,如此就能在少量的模擬棋局中,找

15

到好的著手。在圖 2.5 中,D4 是模擬棋局的起點,模擬的結果,除了更新到由 D4 到根節點的路徑上所有節點,同時也更新路徑上有 D4 白棋節點及 E4 黑棋節點的 節點。

圖 2.5 RAVE

16

class GoStone {

int m_color; // 0(空點) 1(黑棋) 2(白棋) int m_xIdx; // X 座標

int m_yIdx; // Y 座標

bool m_isBlackCandidate; // 是否為黑棋的候選步 bool m_isWhiteCandidate; // 是否為白棋的後選步 int m_eyeType; // 0(非眼) 1(真眼) 2(假眼) int m_lineNo; // 棋子所在的線

class GoStone *m_sibling[8]; // 周圍 8 個棋子

class GoStone *m_nextPtr; // 同一個棋串的下一個棋子 class GoBlock *m_blockPtr; // 所屬棋串

};

相關文件