第三章、 研究方法
3.2 展開節點
在本章節對於展開節點會做分析,可以對於好步的篩選而優先展開,並且對 於壞步會進行過濾。因為在好步篩選時,會依照好型來判斷好步,所以在 3.2.1 會先介紹本論文採用的鑽石型模組。在 3.2.2 章節中,會介紹封閉區域的概念,
封閉區域可以讓本論文實作的電腦程式可以更早得知已活棋串。在 3.2.3 章節中,
會介紹本論文實作的電腦程式 AI 好步篩選的機制。在 3.2.4 會介紹壞步的過濾。
23
3.2.1 鑽石型模組(Diamond Pattern)
3.2.1.1 會介紹鑽石型模組。3.2.1.2 介紹鑽石型模組目錄(Diamond Pattern Table)大小和資料結構。3.2.1.3 對於鑽石型模組與 3*3 模組做比較。
3.2.1.1 鑽石型模組
鑽石型是由距離中心點相距兩個點的所有點所組成。總共有 12 個點[3]。圖 24 “o”即為此 12 個點。
圖 24 鑽石型模組
相較於 3*3 模組,會額外增加四個點可以判斷。
3.2.1.2 鑽石型模組目錄
每一個點可能有黑子、白子、空點三種狀況,邊界部分我們拆成各種模組來 分析,總共會有六種模組狀況,如圖 25。
24
圖 25 鑽石型所有型態模組
大小分別為:(a)312 (b)有四個方向,311*4(c)有四個方向,38*4 (d)有四個方向,
310*4 (e)有八個方向,37*8 (f)有四個方向,35*4。因此加起來總共是需要 1,520,937 個項目,才能包含所有模組。
鑽石型模組目錄的資料結構:因此資料結構每增加一個 Byte,就會佔用記 憶體 1,520,937Byte。模組輸入的方式有人工輸入與程式自動產生。人工輸入只 需要輸入一個方向的模組後,就會自動產生八個方向。
人工輸入:
1. 真眼:可以直接比對真眼模組來判斷此棋點是否為真眼,如圖 26。
圖 26 真眼模組
2. 假眼:可以直接比對假眼模組來判斷此棋點是否為真眼,如圖 27。
圖 27 假眼模組
25
3. 好型:可以判斷此棋點是否為好型,如圖 28。
圖 28 好型模組
4. 假眼提升成真眼:判斷此棋點為假眼時,可以找出下哪個棋點可以使得他 成為真眼,如圖 29。
圖 29 假眼提升成真眼模組
5. 產生虎型:判斷此棋點下了之後,有沒有機會成為虎型,如圖 30。
圖 30 產生虎型模組
6. 撲:在一子撲的判斷中,為了避免無用的自殺著,本論文認為有用的一子 撲分為四類。消眼、反提、打劫、殺子,如圖 31。除此之外,本論文都 認為是無用的自殺著。根據這四種狀況,我們可以依照這四種狀況建立模 組,以利本論文實作的電腦圍棋對於撲的判斷更有效率,如圖 32。
26
(a) (b )
(c) (d)
圖 31 撲(a)消眼(b)反提(c)打劫(d)殺子
圖 32 一子撲
程式自動產生:周圍黑子、白子、空點的數量。圖 33,周圍 1 黑子、2 白子、1 空點。
圖 33 周圍黑子、白子、空點數量
27
28
表格 4 Diamond 與 3*3 效能比較
3. 鑽石型模組額外的棋型應用:
A. 產生虎型。
B. 好型。
C. 一子撲。
3.2.2 封閉區域
在這章節會對於封閉區域做定義介紹,3.2.2.1 介紹封閉區域,3.2.2.2 會介紹 搜尋封閉區域的機制。
3.2.2.1 封閉區域介紹
封閉區域是由相同棋串所圍成的區域且無相異顏色的棋串,目的是可以更快 得知棋串的死活狀況,因為封閉區域在某些條件下,可以列為至少一眼,如圖 35。
29
圖 35 封閉區域
3.2.2.2 封閉區域搜尋機制
使用模組的方式進行比對,因為使用模組比對時,可以很快得知下一次要比 對的空點方向,以及有無對方子,因此可以得到更好的效率。封閉區域的大小本 篇論文限制為八子以下,因為超過八子時,可能對方可以在封閉區域內做出活型,
如圖 36。
圖 36 九子封閉區域
搜尋封閉區域的模組主要是依據 Corner0(C0), Corner1(C1), Corner2(C2),
Corner 的意義代表周圍有棋子的角狀況,當一個角周圍有子時,且角的棋點為空 點或與周圍棋子不同顏色,則稱為缺角。如果在一個棋點的 3*3 大小內看到一 個缺角,稱為缺一角。看到兩個缺角,稱為缺兩角。Corner0 代表無缺角,因此 都由 Corner0 而成的封閉區域,是沒有缺角的,如圖 37。Corner1 代表此棋點顯 示邊界缺一角,因此有一個或多個 Corner1 而成的封閉區域,會有一個或多個缺 角,如圖 38。Corner2 代表缺兩角,因此有一個或多個 Corner2 而成的封閉區域,
會有兩倍 Corner2 的缺角,如圖 39。
30
圖 37 C0
圖 38 C1
31
圖 39 C2
至於 Corner3(C3), Corner4(C4),分別代表缺三角與缺四角(圖 40)。由 C3 與 C4 所組成的封閉區域必定只有一個空點,而且為假眼,本篇論文認為假眼與封 閉區域在分析上會有不同狀況,因此在搜尋封閉區域時,不比對 C3 與 C4。
圖 40 C3, C4
圖 41 顯示封閉區域內,標明棋點屬於 C0, C1, C2 的種類。0 代表為 C0,1 代表 為 C1,2 代表為 C2。
圖 41 封閉區域內部種類
32
3.2.3 好步篩選
在這章節會對於本論文實作在電腦圍棋程式的好步判斷做介紹。3.2.3.1 二氣 棋串增加氣點篩選。3.2.3.2 一氣做活篩選。3.2.3.3 好型篩選。3.2.3.4 攻擊二氣棋 串篩選。3.2.3.5 提子篩選。3.2.3.6 點眼篩選。3.2.3.7 假眼提升成真眼篩選。
3.2.3.1 二氣增加氣點
對於我方剩兩氣的棋串詴著增加氣數。增加氣數的方式有提子、叫吃、延長 氣點,如圖 42。
(a) (b) (c)
圖 42 (a)A 為提子,(b)A 為叫吃,(c)A、B 為延長氣
3.2.3.2 詴著一氣做活
對於我方剩一氣的氣串詴著做活。做活方式有提子、延長氣,在延長氣的部 分必頇判斷是否會造成征子,如果征子成立,則不進行長氣,如圖 43。
(a) (b) (c)
圖 43 (a)A 為提子,(b)A 為延長氣,(c)A 需征子判斷
33
在征子的判斷[19],假設我方代表逃跑方,則在逃跑的路線上,只要有我方 子,就認定征子不利。相反地,都無我方子,代表征子成立。征子的路線部分,
在二線逃跑時,路線是梯型路線。在一線逃跑時,路線是直線,如圖 44。
(a) (b)
圖 44 (a)二線以上征子,(b)一線逃跑
3.2.3.3 好型
由對方上一部周圍的 12 個點進行好型的比對。在此篇論文中的好型的模組,
是由業餘五段棋力的人進行分析。如果期點模組吻合好型,則就認定這會是一個 好點,如圖 45。
(a) (b)
圖 45 (a)二線以上征子,(b)一線逃跑
3.2.3.4 攻擊二氣棋串
對方剩餘兩氣的氣串,且判斷對方無法逃跑[17][18][20],則會詴著叫吃或者
34
門吃[7][4]。但是在此要注意雙活狀況[16],因為當叫吃對方時,如果我方反而剩 一氣,則必頇針對我方棋串的棋型來分析是否為雙活,如圖 46。
(a) (b) (c)
圖 46 (a)A 為征子攻擊點,(b)A 為門吃,(c)A 為雙活的氣點
3.2.3.5 提子
對方剩餘一氣的棋串,則提掉對方,如圖 47。
圖 47 提子
3.2.3.6 點眼
當上一步對方提子之後,則判斷對方周圍的棋串是否有額外的眼位,如果沒 有,則可下中心點,以利對方無法或較困難的做出兩眼活,如圖 48。
圖 48 點眼
35
3.2.3.7 假眼提升成真眼
當假眼存在時,判斷四個斜對角,如果已經佔據兩個斜對角,則另外兩個斜 對角若有至少一個為空點,則此空點可以使假眼變成真眼,如圖 49。
圖 49 假眼提升成真眼
3.2.4 壞步過濾
在這章節會對於本論文實作在電腦圍棋程式的壞步過濾做介紹。3.2.4.1 征子 過濾。3.2.4.2 自殺步過濾。3.2.4.3 安全封閉區域過濾。
3.2.4.1 征子
在 3.2.3.2 介紹了征子的判斷,如果征子成立時,則將逃跑的氣點列為壞著。
3.2.4.2 自殺步
對於我方下一子之後,會造成我方棋串變為 1 氣,則必頇進行判斷。判斷在 下了自殺著之後,我方可否依據點眼來使得對方棋串只剩一眼,如果沒法點眼,
則自殺步列為壞著。3.2.1.2 時介紹了撲,撲也是下了一子之後,我方棋串剩 1 氣。撲如果沒有任何效果,也就是沒有消眼、反提、打劫、殺子的情況下,都列 為壞著,如圖 50。
36
(a) (b)
圖 50 (a)A 為無用自殺著,(b)A 為有用自殺著,B 為無用自殺著
3.2.4.2 安全封閉區域
當封閉區域都是由 C0 組成時,可以定為至少一眼。如果封閉區域內部的空 點沒有在一線的棋點,則可以容許 1 個 C1 存在時,依然是至少一眼。因此當封 閉區域周圍的棋串都至少兩眼時,則封閉區域算是安全的,此內部的空點歸列為 壞著。如 51 圖上邊白子棋串,具有兩個封閉區域,且兩個都由 C0 所組成,因 此都各自至少一眼,加起來就是至少兩眼,所以上邊白棋為已活棋串。兩個封閉 區域因為都由 C0 組成且周圍的白棋棋串為活棋,所以兩個封閉區域都判斷為安 全封閉區域[15]。
圖 51 安全封閉區域
37