• 沒有找到結果。

相關論文及程式介紹

第二章 文獻探討

2.2 相關論文及程式介紹

首篇電腦暗棋的論文為「電腦暗棋之設計及實作」[1],由國立台灣師範大 學資訊工程研究所謝曜安撰於 2008 年 6 月。在這之前都少有人對電腦暗棋程式 做深入的研究,此篇論文為首篇提出暗棋演算法且對其有深入研究的論文,在當 時作者所製作的電腦暗棋程式已能擊敗市面上大部分的商業暗棋程式了。

該篇論文主要使用棋盤棋子映射結構,以一維陣列紀錄哪些位置上有棋子,

再紀錄每個棋子分別在哪個位置,來作資料的交叉查詢。圖 2.1.1 顯示其棋盤資 料結構,圖 2.1.2 則顯示其棋子編號。

未使用較為直觀的二維陣列表示法的原因是一維陣列表示法處理上較為迅 速,且高階語言的二維陣列在經過編譯程式優化之後仍然會轉變為一維陣列。

24 16 8 0 25 17 9 1 26 18 10 2 27 19 11 3 28 20 12 4 29 21 13 5 30 22 14 6 31 23 15 7

圖 2.1.1 棋盤資料結構

空格 將 士 象 車

Transposition Table:是一個可將已搜尋過的節點資訊儲存起來的 hash table。

節點資訊內含:盤面情形,搜尋深度以及分數,節點類型(min or max)。盤面情 形一般使用 Zobrist Hash 產生的 key 值來標記,可以快速查詢該盤面是否已搜尋

允許空步:暗棋遊戲規則是不允許空步的,在程式實作中我們賦予空步另一 個意義,在還有棋子可翻的盤面時,若每一個合法走步都會使情況變得更糟糕,

此時不應該走子,而去翻棋,而程式中就以走空步代表這個情況。

寧靜搜尋:搜尋至葉節點時不立刻回傳分數,若仍有吃子步則必須繼續展開,

直到呈現寧靜盤面為止,也就是盤面無法產生任何吃子走步,此時回傳的審局分 數會較原本的方式更有參考性,可以克服部分因為水平效應產生的搜尋錯誤,提 升搜尋準度。

Iterative Deepening:於 Alpha-Beta 搜尋時,先對淺層作搜尋,再將最大深度 逐步加深,淺層得到的分數做為較深層走步排序的參考,以利於 Alpha-Beta 截斷,

提升搜尋速度。

翻子與走子的選擇:對可見的棋子先做走子搜尋,之後再對每一個暗子賦予 可能出現的兵種後作較淺層的走子搜尋,比較後取出最有利的位置。若翻棋的分 數較高則翻棋,否則仍然走子。

循環盤面剪裁:以一個具有 128 格的 Hash Table,記錄當前搜尋中走過盤面 的 Zobrist Key 值,每進入一層就會記錄,退回一層時則刪除。預備對當下盤面的 合法走步子樹進行搜尋時,會先進行 Hash Table 內容的檢查,若 Hash Table 內已 有相同的盤面存在,則直接呼叫審局函數並返回該層的審局分數,不需要再對子 樹搜尋,可以提高搜尋的效率。

第二篇論文為「電腦暗棋程式與經驗法則之配合與實作」[2],由國立東華 大學資訊工程研究所賴學誠撰於 2008 年 7 月,概念上使用大量經驗法則,在翻 棋系統上有特別的作法,內容是隔一子期待可以翻出包或炮來吃掉對方的棋子,

反之則是翻出被對方包/炮攻擊較小的位置。另一個特別的創新則是靈氣系統,統 整各子之間互相影響的行為給予分數,給分的基本原則是影響力由近而遠分數遞 減,最多影響到距離為 5 的棋子,影響的行為分為正負兩種,正分是由我方大子 給予小子保護,分數增加;負分則為對手子力的威脅,分數減少。靈氣系統的影 響權重表如圖 2.1.3 所示。

棋種 將 士 象 車 馬 包 卒

帥 120 0 0 0 0 0 108

仕 108 106 0 0 0 0 0

相 60 60 58 0 0 0 0

俥 36 36 36 34 0 0 0

傌 24 24 24 24 22 0 0

炮 48 48 48 48 48 0 0

兵 0 12 12 12 12 0 10

圖 2.1.3 靈氣系統權重表

該程式的搜尋與[1]的程式一樣採用 Alpha-Beta 搭配 Iterative Deepening,但加 上以經驗法則取得的位置分數表(如圖 2.1.4),以求得更正確的審局分。

-10 -5 -5 -10

-5 -5

-5 -5

-5 -5

-5 -5

-5 -5

-5 -5

-10 -5 -5 -10 圖 2.1.4 位置扣分權重圖

第三篇為「暗棋中棋種間食物鏈關係之探討與實作」[3],由國立台灣師範大 學資訊工程研究所謝政孝撰於 2010 年 6 月,本篇論文主要為改善先前[1]的作法,

改善走步產生,並使用食物鏈的概念動態改變棋子分數。食物鏈的基本概念是在 棋子計算分數時,先計算棋子還能夠吃下哪些子(包括已翻和未翻),加總後再 乘上該棋子自身的權重,最後配合所有場上的子加上共同基本分數得出棋子的權 重分。

另一個增加準確度的方式是採用 Flood Fill 的方式偵測棋子之間的相連程度,

若相連則計算威脅與被威脅的程度,來得出盤面棋子相互的關係並給出距離分,

如圖 2.1.5 與圖 2.1.6 所示。

傌 包 █ 車

2 3 3 2

程式命名為 Dark Chess Beta,於 2010 年獲得 Computer Olympiad 亞軍。

第四篇為「電腦暗棋之人工智慧改良」[4],由國立台灣師範大學資訊工程 研究所勞永祥撰於 2011 年 6 月,本篇論文也使用 Alpha-Beta 配合 Iterative Deepening 作為搜尋演算法,在距離分的計算上提出了較為嚴謹且詳細的作法。

計算距離分的目的:

1.了解走子步是否有意義,盤面狀況是否連通,是否可以吃或者壓迫到子。

2.讓棋子確立目標,壓迫最有價值的子,選擇最好的走步。

3.若對方子力較大,可以避開有威脅的大子。

根據經驗上的判斷,可歸納出以下的規則:

1. 未翻子當然可視為障礙物。

2. 若到達目標棋子的路徑上有對方子對自身有威脅,則視為障礙物。

兵 █

圖 2.1.10 距離威脅盤面示意

在此情況中黑士必須通過紅仕才可吃到紅兵,通過時就會被紅仕吃掉,所以 黑仕不會對紅兵產生影響力。

3. 目標棋子子力與自身相等時,具有影響力。如上圖 2.1.10,黑士可以靠近紅仕,

限制紅仕的走步,故仍然對紅仕有影響力。

4. 控制域的產生:棋子的攻擊範圍,棋手在下棋時會知道若黑士想吃紅兵,必 須繞過暗棋才有辦法吃到。

兵 █

兵 █

圖 2.1.11 Manhattan Distance 圖 2.1.12 Best Fit Search

5. 距離計算使用 Best Fit Search 來替代 Manhattan Distance。

使用 Manhattan Distance 計算出黑士與紅兵的距離為 5,在人類的認知上這完 全錯誤,一般而言並不會認為黑士可以安全通過紅仕的控制域去壓迫紅兵,故黑 士到紅兵的距離,認知上不會只有 5 步。使用控制域以及 Best Fit Search 所得到 的距離則為 9,與人類的認知相合,影響力計算較以往精確許多。

第五篇為「電腦暗棋程式 DarkCraft 的設計與實作」[5],由國立台灣師範大 學資訊工程研究所施宣丞撰於 2012 年 6 月,該篇論文認為走步產生與審局函數 是影響速度的重中之重,剛好當下西洋棋已發展出 BitBoard 的技術,於是嘗試與 暗棋作出結合,但暗棋中的兵種「炮」能夠跳過一個棋子攻擊對手,這在 BitBoard 的運用上是較困難的,在西洋棋中也有多重移動選擇的棋子如皇后以及城堡,其 處理方式是使用 Magic Number 搭配建好的 Table 來迅速查詢每個位置的移動產生。

產生方式如圖 2.1.13 與圖 2.1.14 所示。

圖 2.1.13 Magic Number 使用方式 1

將表示盤面的 64 個 bit 無號整數乘上一個 Magic Number,可以將對應的 Bit 轉換到最高的幾個位元上,如此只要做移位就可以得到資訊,查表即可得到相對 應的走步。表格的大小取決於走步的多樣性,每多一個可能性就會大一倍。

該篇論文作者認為這樣的方式 佔用 了太多的記憶體且太慢,且 Perfect Hashing 的 Magic Number 並不容易找到,故研發出了一種在暗棋中特有的方式來 取得炮的走步,其方法如下。

施宣丞所開發的暗棋程式「DarkCraft」榮獲在荷蘭舉辦之 2011 年電腦奧林 匹亞對局程式競賽(16th Computer Olympiad)暗棋金牌。相關比賽的結果如圖 2.1.19 和 2.1.20 所示。

圖 2.1.19 2011 年 Computer Olympiad 比賽結果

Rank Program Country Title

圖 2.1.20 2010 年 Computer Olympiad 比賽結果

圖 2.1.19 和 2.1.20 為 2010 與 2011Computer Olympiad 比賽結果 註:2012 年未舉辦 Computer Olympiad

此外,也有一些論文探討暗棋的其它各種技術,請見[8][9][10][11]。

相關文件