Day16 Bouzy's 5/21 Algorithm ===  突然想起Day6說到會分享利用Morphology做圍棋形式判斷,剛好昨天講到了用Monte Carlo Method來評估局勢,所以在介紹MCTS之前趕緊鬼轉,回頭介紹一下利用Morphology來靜態評估圍棋局勢。 ## Mathematical Morphology 這邊指的Morphology是Mathematical Morphology (數學形態學),廣泛應用於影像處理,這邊只簡單介紹一下基本操作,因為後續也只會用到基本概念。 ### 基本操作 * Dilation (膨脹) 膨脹擴展圖像中的前景區域。用一個結構元素(Structure element)在圖像上滑動,結構元素滑過圖像時,任何與前景像素重疊的區域都會使該像素變為前景像素。這會擴大物體並填補細小的間隙。 $A \oplus B = \left\{ z \mid \left( \hat{B} \right)_z \cap A \neq \emptyset \right\}$  * Erosion (侵蝕) 侵蝕會縮小圖像中的前景區域,將圖像中的物體邊緣「吃掉」。用一個結構元素在圖像上滑動,如果結構元素的所有像素都與前景像素重合,則該像素保持不變,否則被移除。這有助於消除小物體或斑點。 $A \Theta B = \left\{ z \mid \left( \hat{B} \right)_z \subseteq A \right\}$  大多數Morphology的方法都是使用這兩個運算去組合變形而成。 ### Opening 其實就是先做Erosion 再做 Dilation,用結構元素在目標圖形內掃描,結構元素掃不到的範圍就會被刪除掉,可以將圖形凸出的銳角給鈍化。 $A \circ B = (A \Theta B) \oplus B$  ### Closing 跟Opening反過來,是先做Dilation 再 Erosion,結構元素在目標圖形外部掃描,掃不到的範圍就填滿,可以將圖形內陷的銳角給鈍化。 $A \bullet B = (A \oplus B) \Theta B$  圖片皆取自Steven大大的簡報,但網路上找到的資料很多也都是這幾張圖,我不知道原始出處,麻煩知道的人可以留言跟我說。 ### 形態學濾波應用 * 噪聲去除:Opening可用來移除小的噪聲點或孤立像素,保持較大區域的完整性,常用於去除二值化圖像中的雜訊。 * 物體邊界提取:Erosion操作可以縮小物體,然後再用Dilation還原,這有助於獲得物體的邊界輪廓。 * 填補空洞:Closing能填補圖像中物體內部的細小間隙,使物體看起來更加連貫。 * 形狀分析:形態學濾波還可以應用於分析物體形狀特徵,例如骨架化和區域提取等。 在圍棋中,Dilation可以用來辨識棋串的「氣」,Closing能夠辨識「眼」。 (但這邊辨識出的眼僅限於一般情況的眼,圍棋的例外有點太多了。) ## 圍棋形勢判斷 下圍棋最重要也最困難的一點就是**形勢判斷**,圍棋是個比誰圍到的地盤多的遊戲,但是在還沒有完全把地盤包圍住時,很難去評估到底哪裡算是誰的地盤,尤其是愈往棋盤中間的地盤通常愈難判斷。 這樣的審局函數就會比較難設計,象棋、西洋棋很多都是用評估子力的方式做審局函數,比如「車」在象棋中的影響力非常大,我用一隻兵換掉你一隻車,評估起來可能就是我賺了,但圍棋不是這麼一回事,你吃我一顆子跟我吃你兩顆子,可能吃兩顆子的還虧了,因為必須要考慮到周圍領地的問題,每顆棋子對於周圍領地的影響力就很難評估。 ### Zobrist's Model Zobrist提出的一個棋子影響力模型,將棋盤上的點標記,黑棋標記為 +50,白棋標記為 -50,空點標記為 0。 從正負數的點開始往外擴張出去,將相鄰的點 +1 或 -1,然後重複四次。 ``` 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1. 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 50 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 2. 0 0 0 0 0 0 1 0 0 0 0 1 2 1 0 0 0 0 1 2 54 2 1 0 0 0 0 1 2 1 0 0 0 0 1 0 0 0 0 0 0 3. 0 0 1 0 0 1 2 1 0 0 1 3 6 3 1 0 0 1 2 6 58 6 2 1 0 0 1 3 6 3 1 0 0 1 2 1 0 0 1 0 0 4. 1 2 2 2 2 4 6 4 2 2 4 8 10 8 4 2 1 2 6 10 62 10 6 2 1 2 4 8 10 8 4 2 2 4 6 4 2 2 2 2 1 ``` ### Bouzy's 5/21 Algorithm Bouzy改進了Zobrist's Model發明了Bouzy's 5/21 Algorithm,其實他就是用了5次Dilation加上21次的Erosion,來模擬人類對圍棋領地判斷,平衡棋子的影響力和領地界限。 在使用這個演算法前要先清除棋盤上的死子,像是昨天介紹到的Sabaki使用Monte Carlo Method來清除死子。 此演算法的流程為: 1. 將棋盤上的點標記,黑棋標記為 +128,白棋標記為 -128,空點標記為 0。 2. 進行 5 次Dilation: 對於每個點,如果該點的值大於等於 0 並且其相鄰的點沒有小於 0 的值,則將相鄰大於 0 的點數加到該點。如果交點的值小於等於 0 並且其相鄰的點沒有大於 0 的值,則減去相鄰小於 0 的點數。 3. 進行 21 次Erosion: 對於每個點,如果其值大於 0(或小於 0),則減去(或加上)相鄰點的值,直到值變為 0。 比如現在棋盤上有兩顆隔了一格的黑棋。  ``` 128 0 128 1 dilation : 1 1 1 128 2 128 1 1 1 2 dilations : 1 1 2 2 3 2 2 1 2 132 4 132 2 1 2 2 3 2 2 1 1 3 dilations : 1 1 2 2 3 2 2 2 4 6 6 6 4 2 1 2 6 136 8 136 6 2 1 2 4 6 6 6 4 2 2 2 3 2 2 1 1 3 dilations and 1 erosion : 2 2 2 0 4 6 6 6 4 0 2 6 136 8 136 6 2 0 4 6 6 6 4 2 2 2 3 dilations and 2 erosions : 1 2 6 6 6 2 6 136 8 136 6 2 6 6 6 2 1 3 dil. / 3 erosions : 5 6 5 5 136 8 136 5 5 6 5 3/4 : 3 5 3 2 136 8 136 2 3 5 3 3/5 : 1 4 1 136 8 136 1 4 1 3/6 : 3 135 8 135 3 3/7 : 132 8 132 ``` 這樣最後剩下來在兩個黑棋中間的點就是黑棋的領地。 這邊有一個公式:Erosion次數應為 1 + n(n-1),其中 n 為Dilation次數,按照這個公式可以保證孤立的棋子不會被誤判定為領地。 至於為什麼是5跟21這兩個神秘的數字呢? 按照公式的話3/7跟4/13次也是可以,只是會在第六線以上的領地判斷效果不佳,透過人類經驗修正後得到5/21次是較佳的作法。 論文我放在底下了,有興趣的可以再自行去深入研究。 ## 實際案例 今天就不放程式碼了,直接來看一盤實際案例吧,主要注意兩個部分: 1. 邊角 2. 中央 下圖是按照Bouzy's 5/21 Algorithm所實作出來的形式判斷,其實左下角的白棋的評估我認為稍微有點過於保守了,還有對於中央空曠地區也是偏保守。  下圖為知名圍棋對弈網:野狐圍棋 這是它內建的形式判斷功能,蠻多人會使用這個功能的,具體使用了什麼演算法不知道,但想來也是各種Bouzy's 5/21 Algorithm變形,我們可以注意到他對棋盤中間空曠地方的評估其實是很寬鬆的,對於左下角的判斷也是比較符合一般人類的判斷。  下圖為我與Steven實作的形式判斷,我們對於中央的判斷較為野狐保守,對於邊角則較野狐更寬鬆,我們認為這個結果可能與人類的判斷更為相近。 Steven就是之前提到過的UCLA博士生,碩士畢業後工作了幾年,毅然決然的到美國讀博,現在是光學AI大師,他說我寫文章就寫文章不要亂吹捧他,所以我把這段藏在文章中間XDD  棋譜選自29屆LG盃世界棋王戰8強:柯潔(黑)vs韓相朝(白) 就是今天9/30剛下完熱騰騰的棋譜。 ## Reference * [Mathematical morphology applied to computer go](https://helios2.mi.parisdescartes.fr/~bouzy/publications/Bouzy-IJPRAI.pdf) * [數學形態學](https://zh.wikipedia.org/zh-tw/%E6%95%B0%E5%AD%A6%E5%BD%A2%E6%80%81%E5%AD%A6) * [Bouzy's 5/21 algorithm](http://gnu.ist.utl.pt/software/gnugo/gnugo_14.html) * [Bouzy Map](https://senseis.xmp.net/?BouzyMap) * [【影像處理】形態學 Morphology](https://jason-chen-1992.weebly.com/home/-morphology)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.