• 沒有找到結果。

第三章、 設計與實作

3.2 程式流程

3.2.4 展開

當節點要展開時,必頇在許多候選步中選擇一個,但是並不是每個候選步都 是合適的。如 3.2.2 節提到的,九路棋局一開始雖然有八十一個空點可以選擇,

但是依據圍棋知識,並非八十一個空點都是適合的。因此,對於候選步有篩選的 必要。將不合理或勝率過低的候選步予以去除,篩選的作用可以減少樹的分支,

在相同的時間或相同的模擬棋局次數,可以增加搜尋的深度。

但是如果同一個節點每次展開時都要執行篩選的動作,將有不必要的重複動 作產生,進而造成時間上的浪費。因此,當一個節點第一次要展開產生子節點時,

先對候選步進行篩選,將篩選後的候選步紀錄在節點中,再由紀錄在節點中的候 選步選擇一個來展開。而此篩選步驟稱為「節點第一次展開時的候選步篩選」。

棋局開始時,節點只有根節點,盤面上有八十一個空點可供選擇,但是只有 二十五個空點為合適的候選步(圖 3.5),此為第一步粗略的篩選。再更進一步,由 於對稱的點可以視為同一個,所以,僅七個候選步需要測試。如此一來,樹分支 由原本的八十一縮減成七。

23

圖 3.5 七個需要測試的候選步

對於任何樹節點,在第一次展開子節點之前,皆執行候選步篩選,去除不合 適的候選步,能減少樹分支,增加搜尋深度,進而提高搜尋結果的準確性。但是,

篩選的進行需要圍棋知識的輔助,而且,不當的篩選有可能把合適甚至是最佳的 候選步予以去除,造成無法挽救的錯誤。因此,對於候選步的篩選必頇謹慎地進 行,不僅篩選的條件必頇嚴謹,更需要經過測試驗證以確認不會造成不必要的副 作用。目前 HappyGO 中所使用的候選步篩選僅依據圍棋基本規則,將不合法及不 適合的候選步予以去除。

目前歸納共有五種棋步,第一種如圖 3.6 的 A1,A9,… 等棋點對黑棋而言是 自殺的著手,由於使用中國圍棋規則,因此自殺著手是禁著的一種。第二種是劫, 如圖 3.7 的 H1,由於上一步黑棋下 G2 吃掉 H1,白棋不能下,這稱為打劫立即反 提著手,也是禁著的一種,打劫立即反提著手是圍棋規則中避免棋局無法結束的 一項規定,如果沒有這項規定,黑白雙方將會因為互相吃掉對方的子而不斷地循環 而讓棋局無法結束。第三種是真眼,如圖 3.6 中的 A6,C9,D8,…等為白棋的真 眼,是棋串死活重要的部份,白棋沒有理由把自己的真眼填掉,對白棋而言是不 合適的著手,對黑棋而言則是禁著。第四種是已活棋串的封閉區域,如圖 3.6 中 的 C4,C5,C6,D5 是白棋已活的封閉區域,已活棋串表示此棋串已是不可能被吃掉 的,而其所圍住的封閉區域,也是屬於此棋串的領域,在此封閉區域下子,對此 棋串並無任何影響,只是浪費一手而已,因此,在已活棋串的封閉區域落子是不 合理而無意義的,是不合適的著手。第五種是迴圈著手,如圖 3.8 中(a)至(g),

如果不加以限制,將造成無窮迴圈而無法結束棋局,尤其是在棋局模擬中,將造 成程式陷入無窮迴圈甚至造成錯誤而當掉。

24

圖 3.6 禁著及已活區域 圖 3.7 打劫著手

(a) (b) (c) (d)

(e) (f) (g) 圖 3.8 循環棋局

以圖 3.9 為例,盤面上有二十四個空點都可以是黑棋的候選步,但是並不是 每個候選步都是合法且合適的,使用上述的候選步篩選將發現 C1,C3,E5,F1…

等是不合法或不合適的候選步,而剩下 A1,A2,A3,A5,A6…等十六個候選步是 合適的。因此,節點在展開時將在篩選後的十六個候選步中選擇一個來展開。

圖 3.9 候選步篩選例子

25

相關文件