• 沒有找到結果。

電腦暗棋程式Dancing的設計與實作

N/A
N/A
Protected

Academic year: 2021

Share "電腦暗棋程式Dancing的設計與實作"

Copied!
66
0
0

加載中.... (立即查看全文)

全文

(1)國立臺灣師範大學 資訊工程研究所碩士論文 指導教授:林順喜 博士. 電腦暗棋程式 Dancing 的設計與實作 The Design and Implementation of Chinese Dark Chess Program Dancing. 研究生:陳昱廷 撰. 中華民國一百零五年七月.

(2) 摘. 要. 暗棋,又稱盲棋,只使用中國象棋棋盤的一半(所以也叫半棋),傳說發明者 為"棋壇總司令"謝俠遜。因為要輪流翻棋走子,所以也叫"翻翻棋"。 電腦暗棋是屬於不完全資訊含機率性的棋類遊戲,不像西洋棋、中國象棋是 屬於完全資訊的棋類遊戲。如果用一般遊戲樹進行搜尋,在走棋與翻棋夾雜的情 況下,若需要對未翻棋子也要作走步搜尋,則需要對所有的未翻棋子都作假設模 擬,以求得一個接近的的結果。但並不容易準確且有效率地計算出結果。 本論文主要提出天敵、半天敵以及兵與卒數量三項策略,作為評估棋子的子 力在動態設置模式下的考量因素,以達到更準確的棋子的子力之計算,並且使用 選擇性展開遊戲樹以及不同的時間控制方法以提升遊戲樹搜尋速度及中盤搜尋 層數提升的效果。實測結果顯示,本程式 Dancing 比起去年 TAAI 2015 的亞軍暗 棋程式 Observer(本所研究生-徐大開所研發)約有五成至六成的贏率。 我們已經分別實作出暗棋程式 TsaiB8 以及 Dancing 並且分別參與 TAAI 2015、 TCGA 2016、ICGA 2016 的對局比賽。. 關鍵字:電腦對局、暗棋、不完全資訊. i.

(3) ABSTRACT Chinese Dark Chess, also known as blind chess or half chess, only uses half of the Chinese chess board. It is said that the inventor is the "Chinese chess commander" Jia-Syun Sie. Because it must take turns revealing or moving pieces, it is also called "revelation chess". Chinese dark chess is an incomplete information game with probabilities, which is not the same as the complete information games, such as chess or Chinese chess. If we use conventional game-tree searching techniques to play Chinese dark chess, then the number of branches will be very large because there are lots of moves for both “dark pieces” and “bright pieces”. Hence, it is impractical to generates all possible moves in a given board position in order to find a good move within a reasonable time. In this thesis, we propose three approaches, i.e. natural enemies, half natural enemies, and the number of soldiers, to evaluate the values of all pieces in dynamic setting mode. We also use selective game tree search and different time control methods to improve the game tree search efficiency and the midgame search depth. The experimental results indicate that our program "Dancing" got about 50% ~ 60% win rate against the program "Observer" which won the silver medals at the TAAI 2015. We have designed the Chinese dark chess programs TsaiB8 and Dancing and have attended the computer game tournaments in TAAI 2015, TCGA 2016, and ICGA 2016.. Keywords: Computer Games, Chinese Dark Chess, Imperfect Information Games. ii.

(4) 致. 謝. 兩年多來的碩士生活,一轉眼就過去。回想起剛入學時的懵懂無知,在林順 喜教授的細心指導下,引導了我跨向學術研究的第一步,也因此成就了此篇論文。 非常感謝對於林教授兩年來的付出以及熱情鼓舞。另外感謝許舜欽教授、陳志昌 教授的提點與寶貴的建議,使得論文更臻完善。 感謝志宏、大開、孟謙學長們在實作技巧上的建議以及支援,謝謝研究群的 俊緯、璿伊、少剛、彥吉、品儒、羽恆、昌龍在研究上諸多的技術方面的討論、 分享。 最後,由衷的感謝父母與家人給予我的支持,使我能夠完成此篇論文的撰寫, 在此謹以本論文獻給我最摯愛的家人。. iii.

(5) 目錄 第一章 緒論................................................................................................................... 1 1.1 研究背景.......................................................................................................... 1 1.2 暗棋的困難之處.............................................................................................. 1 1.3 研究意義.......................................................................................................... 2 1.4 論文架構.......................................................................................................... 4 第二章 暗棋相關介紹................................................................................................... 6 2.1 暗棋棋規介紹................................................................................................... 6 2.2 電腦暗棋對局競賽介紹.................................................................................. 7 2.3 相關論文介紹................................................................................................... 8 第三章 搜尋演算法與資料結構................................................................................. 15 3.1 搜尋演算法.................................................................................................... 15 3.1.1 MiniMax Search................................................................................... 16 3.1.2 Alpha-beta Pruning .............................................................................. 18 3.2 Bitboard........................................................................................................... 19 3.3 Transposition Table ......................................................................................... 23 3.4 逐層加深搜尋法............................................................................................ 26 第四章 設計方法......................................................................................................... 27 4.1 翻子與走子的抉擇......................................................................................... 27 4.2 先吃重要子..................................................................................................... 31 4.3 審局函數設計................................................................................................. 34 4.4 遊戲樹搜尋加速............................................................................................. 41 4.4.1 走步排序.............................................................................................. 41 4.4.2 遊戲樹的選擇性展開搜尋.................................................................. 41 4.5 時間控管......................................................................................................... 44 4.6 電腦暗棋程式 TsaiB8 的設計 ....................................................................... 47 4.6.1 互斥鎖.................................................................................................. 47 4.6.2 Master-Worker 架構 ............................................................................ 48 iv.

(6) 4.6.3 搜尋深度的平衡.................................................................................. 49 4.6.4 搜尋時間分配...................................................................................... 50 第五章 結論與未來展望............................................................................................. 51 5.1 結論................................................................................................................ 51 5.2 未來方向........................................................................................................ 52 附錄............................................................................................................................... 53 參考資料....................................................................................................................... 56. v.

(7) 表目錄 表 4-1 每手以 20 秒展開比較 .................................................................................... 43 表 4-2 每手展開 12 層時間比較 ................................................................................ 43 表 4-3 每手展開 12 層時間比較 ................................................................................ 43 表 4-4 A 版本及 B 版本比較表 ................................................................................... 47 表 5-1 實測結果 .......................................................................................................... 51. vi.

(8) 圖目錄 圖 1-1 各種遊戲之遊戲樹複雜度。[9][13][17] .......................................................... 3 圖 1-2 Alpha-Beta Search tree ........................................................................................ 4 圖 2-1 各年度所舉辦電腦競賽中含有暗棋對局競賽項目之活動[12]...................... 8 圖 2-2 棋盤的一維陣列表示法 .................................................................................... 9 圖 2-3 18th Computer Olympiad 比賽結果 ................................................................. 11 圖 2-4 TCGA 2015 比賽結果 ...................................................................................... 11 圖 2-5 殘局庫檔案大小 .............................................................................................. 12 圖 2-6 warp 對齊比較圖 .............................................................................................. 13 圖 3-1 以井字遊戲為例的遊戲樹 .............................................................................. 15 圖 3-2 MiniMax Search 例子[10]................................................................................ 16 圖 3-3 MiniMax Search 虛擬碼[10]............................................................................ 17 圖 3-4 Alpha-beta Pruning 例子 ................................................................................... 19 圖 3-5 Alpha-beta Pruning 虛擬碼[10] ........................................................................ 19 圖 3-6 黑步兵位置表示 0x8000403F00 ..................................................................... 20 圖 3-7 32 位元對應位圖 .............................................................................................. 23 圖 3-8 16 進位表示法 0x690F05C3 ............................................................................ 21 圖 3-9 範例盤面 .......................................................................................................... 22 圖 3-10 產生相吃子步 16 進位表示法 0x12000000 ................................................. 22 圖 3-11 仕、相、俥、傌 16 進位表示法 0x200020C0............................................ 23 圖 3-12 黑士吃子步 16 進位表示法 0x20000000 ..................................................... 23 圖 3-13 範例盤面 ........................................................................................................ 24 圖 3-14 走法 1 .............................................................................................................. 24 圖 3-15 走法 2 ............................................................................................................. 24 圖 4-1 輪黑方盤面 ...................................................................................................... 28 圖 4-2 炮(包)的經驗法則翻子策略............................................................................. 29 圖 4-3 輪紅方翻子盤面 .............................................................................................. 31 圖 4-4 輪紅時 .............................................................................................................. 32 vii.

(9) 圖 4-5 輪黑方動 .......................................................................................................... 34 圖 4-6 帥(將)以外動態態設置模式分數.................................................................... 35 圖 4-7 帥(將)動態態設置模式分數............................................................................ 35 圖 4-8 守兵(卒)策略 A 版本示意圖 ........................................................................... 37 圖 4-9 守兵(卒)策略 B 版本示意圖 ........................................................................... 37 圖 4-10 中輪黑方行動新舊版比較範例 .................................................................... 38 圖 4-11 靜態設置模式分數 ........................................................................................ 38 圖 4-12 我方為紅方盤面 ............................................................................................ 39 圖 4-13 半天敵例圖輪紅盤面 .................................................................................... 40 圖 4-14 不必要分支範例圖 ........................................................................................ 42 圖 4-15 不同盤面 ........................................................................................................ 44 圖 4-16 為三種思考時間分配方法比較圖[8]............................................................ 45 圖 4-17 A 版本以及 B 版本分配比較圖 ..................................................................... 46 圖 4-18 藍色執行緒優先進入臨界區域 ..................................................................... 48 圖 4-19 Master-Worker 架構流程................................................................................ 49 圖 4-20 深度平衡截斷 ................................................................................................ 50. viii.

(10) 第一章 緒論 1.1 研究背景 暗棋,是中國象棋變體遊戲,在部分學童間俗稱小盤。其所用棋子與中國象 棋完全相同,但規則與中國象棋完全無關。暗棋是一種雙人遊戲,先將敵方全殲 滅者勝。跟中國象棋相比,暗棋的技巧較少,運氣的成分偏重。在人工智慧研究 方面,暗棋也被台灣電腦對局學會(TCGA:Taiwan Computer Game Association)、 中華民國人工智慧學會(TAAI:Taiwanese Association for Artificial Intelligence)以及 國際電腦對局協會(ICGA:International Computer Games Association)列為正式的比 賽項目之一。 暗棋是由象棋演變的一種玩法,使用象棋的一半棋盤共有 32 格,剛好可以 放置象棋雙方共 32 個棋子。暗棋的棋子是用比大小的方式看誰可以吃誰,但是 唯有炮(包)的吃子步是隔一個棋子然後吃對方的子。暗棋與象棋的不同處在於暗 棋並不屬於擒王戰而是需要將所有敵方棋子吃光的殲滅戰。由於暗棋會因為翻一 個暗子而造成盤面產生巨大的變化,所以在遊戲的本質上,暗棋與象棋是屬於不 同的遊戲。. 1.2 暗棋的困難之處 電腦暗棋於 2010 年正式加入電腦奧林匹亞競賽,而從此開始有許多團隊加 入研究的行列。其研究都必須面對的課題為:翻子與走子的抉擇,在許多盤面中 僅搜尋淺層的走子步時乍看之下有所獲益,但是結果過卻是全盤必敗的死局,只. 1.

(11) 有翻子才有避輸的機會;又有些盤面翻子風險較高但是獲益極少,與其翻子還不 如走閒步,其中的抉擇不易拿捏,導致有些盤面以人類的角度來看是必贏的,但 是最後卻以和局收場。會產生這些原因都是因為暗棋是屬於資訊不完全遊戲,程 式難以判斷得好,容易做出錯誤的決定,即使是正確的決定也會因為運氣因素出 現輸棋的結果。 目前暗棋的研究比起國外的西洋棋來說發展不算完善,相關的學術論文更是 稀少,由於專家的知識的建構上比較欠缺,因此電腦暗棋程式是很有研究價值的 題目。. 1.3 研究意義 在各種對局遊戲中,不論是象棋、圍棋、五子棋及麻將等等,最重要的不外 乎就是要有好的演算法。暗棋程式會模仿人類在下棋時,會互相的猜測對方可能 的走法,MiniMax Search 理念就是基於這個想法,為了尋找正確的走法以最小最 大值的方式來進行遊戲樹的展開。程式根據展開的結果選擇最佳的走法下棋,且 隨著搜尋層數的加深,則遊戲樹的搜尋節點數將會呈指數成長。暗棋的遊戲樹複 雜度則是介於西洋棋(Chess)及中國象棋(Chinese Chess)之間,圖 1-1 列出了各種 遊戲之遊戲樹複雜度。. 2.

(12) Game-tree Game complexity Go(19*19). 10360. Shogi. 10226. Chinese Chess. 10150. Chinese Dark Chess. 10135. Chess. 10123. Hex(11*11). 1098. Go-Moku(15*15). 1070. Renju(15*15). 1070. Othello. 1058. Draughts. 1054. Nine Men's Morris. 1050. Qubic. 1034. Dakon-6. 1033. Awari. 1032. Checkers. 1031. Domineering(8*8). 1027. Connect-4. 1021. Kalah(6,4). 1018. 圖1-1 各種遊戲之遊戲樹複雜度。[9][13][17]. 由此可見得暗棋的遊戲複雜度非常龐大,為了節省搜尋的時間而衍生了許多 的做法,Alpha-Beta Search 以及其改良 (如: Principal Variation Search、Nega-max with Alpha-beta Pruning 等…) 為現今較為熱門的搜尋演算法。它的理念是對局雙 方都是選擇對自己最有利的分支,基於這個想法,當搜尋中發現有些分支的回傳. 3.

(13) 分數過高時(也就是對手的分數過低時),就不需要再看其它分支,因為對手必定 不會走這條分支。如圖 1-2 所示。. 圖1-2 Alpha-Beta Search tree. 然而就算有一個可以保證得到必勝走法的完美演算法,但是往往沒有辦法在 思考限制時間內得出解,使得這個完美演算法沒有辦法有效的發揮,更有可能造 成局勢的誤判。所以暗棋程式的棋力強弱與搜尋的深度息息相關,而搜尋的深度 又受到電腦的運算速度限制,即使無法搜尋到真正的葉節點來得到正確的結果(即 得知勝負),就整體趨勢而言,搜尋的速度越快就能越搜尋得更深以及更加接近正 確的結果。所以我們的核心目標就是使用各種手段為程式加快搜尋速度以及更加 精確的判斷局勢來提升暗棋程式的棋力。. 1.4 論文架構 本論文共有五章。第一章介紹研究背景、困難之處和意義。第二章介紹暗棋. 4.

(14) 相關棋規、電腦暗棋對局競賽以及相關論文。第三章介紹本論文實作出的暗棋程 式所使用的資料結構以及搜尋演算法。第四章介紹暗棋程式 Dancing 和 TsaiB8 的 改良方式,其中包含翻子策略、動態配置棋子分數、時間控管、搜尋樹的選擇性 展開搜尋以及多執行緒的執行方法。第五章是結論和未來方向。最後還有附錄和 參考資料。. 5.

(15) 第二章 暗棋相關介紹 2.1 暗棋棋規介紹 暗棋是一個兩個玩家的不完全資訊遊戲,使用與象棋相同的棋子且棋盤的大 小 4*8 之方格為象棋棋盤的一半,與象棋的不同點為暗棋的棋子是放置於棋格內 而非象棋棋盤的線上。 棋子由大到小分別為紅方的「帥、仕、相、俥、傌、炮、兵」以及黑方的「將、 士、象、車、馬、包、卒」,其中兵和卒最小,但可以吃將和帥,且將和帥不可 吃兵和卒。所有的棋子吃子以及走子範圍皆為相鄰四個方向一格,唯有炮/包特殊 例外,炮/包的吃子方法與其它子不同,炮/包需要隔過一個棋子後才可以吃子, 且不受其位階大小而限制。 暗棋的初始布置是將所有棋子正面朝下,隨機的放置在 32 個棋格中。正面 朝下的子稱為暗子,正面朝上的則為明子。 遊戲開始時。雙方須先選擇一人為先手,一人為後手。先手須先翻開三十二 隻棋子中的一子,翻出的棋子若為黑子則先手為黑方,後手為紅方;若翻出紅子 則先手為紅方,後手為黑方。在先手翻出第一子後,雙方在每手必須做以下兩種 動作之一: 翻子:將一枚正面朝下的暗子翻面變為明子。 走子與吃子:若己方之明棋周圍有空格,則可選擇移動該棋至其中之一空格 上。若周圍有位階小於或等於己方棋子之敵方棋子,則可將己方棋子移動至敵方 棋子處,並將該敵方棋子從棋盤上拿走,稱吃子,這代表敵方之棋子遭到淘汰, 不得再加入戰局。注意不能吃掉己方的棋子或暗棋。若為炮/包則需要隔過一個棋 6.

(16) 子後才可以移動到敵方明子上。 如此的雙方輪走循環下,當某方所有棋子遭到淘汰後則為輸家,若雙方無法 分出勝負時,則為和局。. 2.2 電腦暗棋對局競賽介紹 電腦暗棋對局第一次被列為正式的比賽項目是在 2010 年 9 月由中華民國人 工智慧學會(TAAI:Taiwanese Association for Artificial Intelligence)所舉辦的電腦對 局競賽,同年 10 月由國際電腦對局協會(ICGA:International Computer Games Association)所舉辦的第 15 屆奧林匹亞電腦賽局競賽(15th Computer Olympiad), 隔年 2011 年 6 月由台灣電腦對局學會(TCGA:Taiwan Computer Game Association) 所舉辦電腦對局競賽也將暗棋列為正式比賽項目之一。其後在電腦對局競賽中暗 棋皆屬於常見的比賽項目之一,圖 2-1 為各年度所舉辦電腦競賽中含有暗棋對局 競賽項目之活動。. 7.

(17) Date. Event. 2010/09. TAAI 2010. 2010/10 15th Computer Olympiad 2011/06. TCGA 2011. 2011/11. TAAI 2011. 2011/11 16th Computer Olympiad 2012/07. TCGA 2012. 2012/11. TAAI 2012. 2013/06. TCGA 2013. 2013/08 17th Computer Olympiad 2013/12. TAAI 2013. 2014/06. TCGA 2014. 2015/07 18th Computer Olympiad 圖2-1 各年度所舉辦電腦競賽中含有暗棋對局競賽項目之活動[12]. 暗棋比賽規則: (1) 採用瑞士制,每輪比賽 2 場(先手和後手各 1 場),計分方式:先、後 手的勝負各計分一次,勝 1 分、平 0.5 分、敗 0 分(輪空判勝)。 (2) 每場比賽時間採回合制,總時間共 30 分鐘,雙方各 15 分鐘為思考時 間,逾時做負。 (3) 循環盤面(長捉)3 次 n 連續循環步,判和。(n:任意循環步)。 (4) 若 180 手無吃子與翻子,判和。. 2.3 相關論文介紹 第一篇論文為「電腦暗棋之設計及實作」[1],由國立台灣師範大學資訊工程 8.

(18) 研究所謝曜安於 2008 年 6 月所撰。該篇論文使用一維陣列紀錄哪些位置上有棋 子,再紀錄每個棋子分別在哪個位置。. 圖2-2 棋盤的一維陣列表示法 該篇論文除了以一維陣列紀錄棋盤上位置外,還在策略上以靜態審局函數加 上 Nega-max 演算法以及 Alpha-Beta Pruning 搜尋樹做搜尋,再加上寧靜搜尋防止 水平效應。 第二篇論文為「暗棋中棋種間食物鏈關係之探討與實作」[2],由國立台灣師 範大學資訊工程研究所謝政孝於 2010 年 6 月所撰。該篇論文改良了[1]的做法, 並使用 Iterative Deepening 作法幫助走步的排序,藉由運用逐層加深的搜尋技巧, 可以使較淺層搜尋中所得到的資訊,用來在較深層的搜尋中截斷更多的節點。 該篇論文提出食物鏈的概念設定棋子的分數,將吃子關係分為無法反擊的(如 兵攻擊將),可以反擊的(如仕攻擊士)兩類。計算每顆棋子的基本價值,當無法反 擊自己的子數越多時,該子的基本價值則越高。這樣的做法比起靜態審局所得到 的分數更為精準,進而加強審局的效果。 第三篇為「電腦暗棋程式 DarkCraft 的設計與實作」[3],由國立台灣師範大 學資訊工程研究所施宣丞於 2012 年 6 月所撰。該篇論文使用 BitBoard 的技術, 暗 棋的棋盤共有 32 個棋子剛好跟 32 位元電腦的整數一樣是以 32 為一個單位。該 篇論文提出一種切割與合併的技巧解決炮的吃子問題,將暗棋與 BitBoard 做出巧 妙的結合,使用 BitBoard 使得走步產生變快,效能有顯著的提升。施宣承所開發 9.

(19) 的電腦暗棋程式 DarkCraft 榮獲 2011 年在荷蘭舉辦之電腦奧林匹亞對局程式競賽 (16th Computer Olympiad)暗棋金牌。 第四篇為「電腦暗棋程式 Darkness 的設計與實作」[4],由國立台灣師範大學 資訊工程研究所詹凱翔於 2012 年 6 月所撰。該篇論文改良了[3]的做法,引用由 Albert Lindsey Zobrist 所提出之 Zobrist Hashing 雜湊函數,適合使用於各種棋類 遊戲的 AI 上,其原理是將大量隨機亂數以邏輯 XOR 運算相互組合,來產生新的 亂數以表示各種盤面。並用了 Transposition Table 搭配 Zobrist Hashing 技術儲存重 複盤面,以達到加快程式的搜尋速度。 第五篇為「電腦暗棋程式 Observer 的設計與實作」[5],由國立台灣師範大學 資訊工程研究所徐大開於 2014 年 7 月所撰。該篇論文改良了[4]的做法,並提出 及實作先吃重要子、預測搜尋時間以及殘局庫的概念。 先吃重要子,為了避免在吃掉一個較不重要的子之後,對方翻子導致對方較 重要的棋子存活或者我方必須立刻保護自己的棋子的情況發生。在吃兩個以上棋 子的總步數差距不大的情況下,我們往往會優先吃掉對方較重要的棋子,即使之 後會略慢吃掉對方較不重要的棋子。 針對預測搜尋時間,程式會在每次加深搜尋完之後,會根據目前兩層所花的 時間和前兩層所花的時間之比值,再根據這層的時間和剩餘的時間,來決定要不 要搜尋後兩層。如果不繼續搜尋下去,則中斷搜尋然後得到一個結果。這樣可以 節省一些搜尋的時間,使得有更多的時間可以做之後盤面的搜尋。當搜尋時間和 預測的時間總和超過預設時間時會停止搜尋。 徐大開所開發的暗棋程式「Observer」榮獲第 18 屆電腦奧林匹亞對局程式競 賽獲得暗棋銅牌以及 TCGA 2015 獲得銅牌。相關比賽結果如圖 2-3 和 2-4。 10.

(20) Rank Program. Title. 1. DarkKnight Gold medal. 2. Yahari. Silver medal. 3. Observer. Bronze medal. 4. TuxedoCat. 5. Darkness. 6. Rainbow. 7. Homer. 圖2-3 18th Computer Olympiad比賽結果. Rank. Program. Title. 1. DarkKnight. Gold medal. 2. Yahari. Silver medal. 3. Observer. Bronze medal. 3. DarChessSoul. Bronze medal. 5. Darkness. 6. IronFrog. 7. TuxedoCat. 8. Flipper. 9. WCL. 10. Dark Magic 圖2-4 TCGA 2015比賽結果. 第六篇為「電腦暗棋殘局庫之研究」[6],由中原大學應用數學研究所林庭羽 於 2013 年 7 月所撰。該篇論文提出殘局庫的建立方式,優先從已知勝負的盤面 開始給分,模擬盤面移動後的結果,並從中選擇一個分數較好的子盤面,再更新 11.

(21) 自身的盤面分數。如果有部份子盤面尚未給定盤面分數,且現有的子盤面分數皆 不理想,則不進行更新。當所有盤面皆無法再更新分數時,會留下一些尚未給分 的盤面,一併視為和棋。 回溯分析演算法先從具有確定勝負的盤面開始給分,再移動此盤面上的棋子, 產生子盤面並依序給分,直到所有盤面分數皆無法再更動才停止。實作回溯分析 演算法分為三個階段:1.找出盤面上已有勝、負、和的盤面;2.移動盤面上的棋 子,並搜尋移動過後的子盤面是否已有勝負結果;3.將剩餘的未知盤面設成必和 盤面。 檔案大小計算,每顆棋子需要 5 bits 儲存位置,假使紅黑方的棋子總數為 n, 就會產生 2n×5 個盤面。每個盤面以 2 bytes 來記錄勝、負、和與相對應的著手數。 圖 2-5 為殘局庫檔案大小。 棋子總數. 盤面數量. 檔案大小(MB). 2. 1024. 0.002. 3. 32768. 0.063. 4. 1048576. 2. 5. 33554432. 64. 6. 1073741824. 2048. 7. 34359738368. 655336. 8. 1.00951E+12. 2097152. 圖2-5 殘局庫檔案大小 第七篇為「使用 GPU 平行運算加速電腦象棋之走子產生器」[7],由國立成 功大學資訊工程研究所龔建銓於 2009 年 7 月所撰。該篇論文為象棋程式冰河五 四進行平行化的研究,改良過程首先是把本來全部都在 CPU 上運行的程式碼抽離 一部份到 GPU 上,為了降低開發的複雜度只先把產生將軍逃避棋步、產生吃子 棋步和產生非吃子棋步這三部分移植到 GPU 上面去做。由於在 GPU 上執行的函 式不能直接存取 CPU 上的資源包括記憶體和變數等等,因此需要把有用的資源都 12.

(22) 複製一分到 GPU 中,待 GPU 運算完成再將結果再把結果複製回來。 針對指令分支和 warp 對齊,由於 warp 裡只要有一個指令執行緒符合分支條 件,則整個 warp 都會執行該條件下的指令,但其他不符合條件的執行緒不會將 運算結果寫入,因此 warp 中所有執行緒都符合分支條件時效率最高。在該篇研 究中,若依照緊密的執行緒編號排列,則 warp0 運行時,其內部的 07 是屬於處 理"帥"的執行緒,編號 8~31 是處理"車"的執行緒,因此在遇到 ID<8 時,帥跟車 的執行緒都會執行,但是車的執行緒結果不會寫入。接著 ID<指向車(8-31)時,帥 的執行緒也會再跟著執行一次,但帥的執行緒結果不會寫入。為了同個 warp 裡 的執行緒都執行相同的工作,因此將相同的工作放進相同的 wrap 中,對齊方式 如圖 2-6。. 圖2-6 warp對齊比較圖 該篇論文以運行 100000 次走子產生器的時間進行測量,測量結果使用 GPU. 13.

(23) 比 CPU 快了約 60%的速度,但是在可分析棋步上 GPU 反而比 CPU 幔上 43%。 根據分析結果是記憶體複製到 GPU 上所花費的時間過長,每次呼叫都必須將盤 面複製到 GPU 上,等運算結束時要把結果複製回來,這也就是整體效能下降的 主因。 第八篇為「Small and large MCTS playouts applied to Chinese Dark Chess stochastic game」[13],由法國巴黎第八大學 Nicolas Jouandeau 和 Tristan Cazenave 於 2014 年所撰並發表於 CGW2014(Computer Graphics Workshop 2014)。該篇論文 使用蒙地卡羅樹搜尋樹(Monte Carlo Tree Search, MCTS)的方式並提出利用 chance-node 和 group-node 的方式來實作 MCTS。 該篇論文中,為了減少在遊戲的過程中通過翻子步所產生的節點數量,所以 將一個翻子步所產生的所有可能盤面都會聚集在單個 group-node。因此,在遊戲 開始時,根節點後的 32 個子節點(剛開始為 32 個暗子)都會是 group-node。此外, 在遊戲中可以進行創造 chance-node,例如不同的暗子都是未知的,每個翻子步都 會表示成 chance-node,且在 chance-node 中每次翻子都有可能會對應一個新的子 節點。 第九篇為「應用於電腦圍棋之蒙地卡羅樹搜尋法的新啟發式演算法」[8],由 國立台灣師範大學資訊工程研究所黃士傑於 2011 年所撰。該篇論文針對蒙地卡 羅法提出了一些新的啟發式演算法,發表出一項較聰明的時間控制方法可以大大 的提高棋力。該篇論文所設計之圍棋程式或得 2010 年電腦奧林匹亞的 19 路圍棋 金牌,也是在 19 路圍棋中少數贏過著名圍棋程式 Zen 的電腦圍棋程式。. 14.

(24) 第三章 搜尋演算法與資料結構 人類在下棋時,會互相的猜測對方可能的走法,並且去思考對應的對策,先 手方可能會思考若他下了這步後,對方可能會如何反應,經由此方式的判斷,先 手方會極盡可能的尋找己方獲利最多且敵方損失最多的棋步。而本篇論文所實作 暗棋程式 Dancing 也具備對方可能對應走法能力,並且評估可能的走法組合,使 得下出的會是最有利的一步棋。. 3.1 搜尋演算法 棋類遊戲中通常會利用樹狀結構將對弈雙方可能的過程表現出來,如圖 3-1 則是以井字遊戲為例的遊戲樹。如果說能夠完全的展開整顆遊戲樹,則可以保證 在所有的盤面下都能夠做出最佳的應對。. 圖3-1 以井字遊戲為例的遊戲樹 15.

(25) 3.1.1 MiniMax Search. 從有限的深度展開遊戲樹狀態中,我們必須要將遊戲樹狀態中最底層呼叫審 局函數進行局勢評分,審局函數給予之結果用以評估目前棋局之局勢。以零和博 弈來說,當分數屬於正值時代表我方處於優勢,反之若為負值時則我方處於劣勢。 若敵我雙方都是以最佳走法進行棋局,則我方(Max 方)會想辦法將分數給提高; 而敵方(Min 方)則會想辦法將分數給降低。而 MiniMax Search 則是依據這個準則 模擬雙方最佳的走步,換句話說就是 Min 與 Max 的選擇走步策略不斷的由預設 深度最底層開始往上遞迴回傳的結果。. 圖3-2 MiniMax Search 例子[10] 如圖 3-2,圓形的點為 Max 節點;而方形的點為 Min 節點。當搜尋到第 4 層 時(底層)會透過審局函數回傳一個值。當 Max 收到第一個子節點回傳時,它會先 將分數記錄起來再繼續做搜尋下一個子節點的動作。一旦有新的子節點回傳值大 於目前 Max 節點所記錄的值,則 Max 節點將會改記錄這個新的回傳值再繼續重 複的搜尋下一個子節直到沒有任何子節點為止。而 Min 節點的做法與 Max 節點 大同小異,與 Max 節點的差別在於 Min 節點只會紀錄子節點中回傳的最小值。 圖 3-3 為 MiniMax Search 虛擬碼,當 maxmizingPlayer 為 true 時,表示現在 16.

(26) 是 Max 節點將尋找所有子節點中回傳最大值並儲存在 bestValue 中,待尋找完所 有子節點後再回傳給上層的 Min 節點(如果有的話);而當 maxmizingPlayer 為 false 時,表示現在是 Min 節點將尋找所有子節點中回傳最小值並儲存在 bestValue 中, 待尋找完所有子節後再回傳給上層的 Max 節點。. 圖3-3 MiniMax Search 虛擬碼[10] MiniMax Search 演算法屬於深度優先的演算法,複雜度為 kd,k 為分支數, 也就是每一手平均的合法走步以及翻子數目,d 為搜尋樹的展開深度。MiniMax Search 演算法會完整的搜尋預設層數內所有子節點。搜尋樹的節點數會呈現指數 成長。假設平均每層有 k 個分支,則必須加快約 k 倍的才能在原來的基礎上多搜 尋一層。此做法因為時常會搜尋到無用之點浪費效能,故之後由 MiniMax Search 17.

(27) 所改良後的 Alpha-beta Pruning 較多人使用。. 3.1.2 Alpha-beta Pruning Alpha-beta Pruning 是 MiniMax Search 演算法的改良。McCarthy John 在 1955 年提出了這個想法,後來 Alexander Brudno 在 1963 年發表。Alpha-beta Pruning 的概念是當一個節點將要找尋的所有子節點都不能影響父節點的分數時,這些子 節點就沒有搜尋的必要。Alpha-beta Pruning 的設計原理,是在 MiniMax Search 演算法增加了 Alpha、Beta 兩個參數部分,分別表是我方與敵方最佳分數。 隨著搜尋的進行 Alpha 值可能會越來越大,Beta 值則會可能會越來越小,而 Alpha 與 Beta 所包含範圍為 Alpha-Beta Window。每個節點都會由父節點傳來自 己的 Alpha 與 Beta 值,當 Min 節點在更新自己的值後如果發現自己的值比 Beta 值小,也會將 Beta 值變成自己的值;當 Max 節點在更新自己的值後如果發現自 己的值比 Alpha 值大,也會將 Alpha 值變成自己的值。之後往下搜尋會將自己的 Alpha 值和 Beta 值傳下去。要注意的是,Max 節點不會更新自己的 Beta 值;而 Min 節點也不會更新自己的 Alpha 值。 所有的節點分數都必須落在 Alpha-Beta Window 內,如果有分支的分數落在 Alpha-Beta Window 外,則會發生 cut 將不會再搜尋這個分支。 如圖 3-4 中,B 點因為取到值 25 大於 20 而造成 C 點成 Beta Cut;E 點因為 取到值 6 小於等於 6 而造成 F 點成 Alpha Cut;H 點因為取到值 3 小於等於 6 而造 成 I 點成 Alpha Cut;J 點因為取到值 6 小於等於 20 而造成 F 點成 Alpha Cut。由 此可發現 Alpha-Beta Window 收斂的速度影響了截斷的發生時機,當收斂的越快 越能截斷更多的分支,提高整體搜尋速度。. 18.

(28) 圖3-4 Alpha-beta Pruning例子. 圖3-5 Alpha-beta Pruning虛擬碼[10]. 3.2 Bitboard 儲存盤面的資訊傳統的做法是使用一維陣列儲存盤面上的棋子,然後再用另 19.

(29) 一個一維陣列儲存棋子所在的位置。這樣的做法可以查詢棋子位置,也可以查詢 位置上棋子,是一種簡單的做法。但由於需要多個迴圈來處理陣列,相較起來電 腦更適合一次進行大量的位元邏輯指令運算。現在在多數西洋棋上已經使用一種 高效率的資料結構:Bitboard。Bitboard 的概念是用一串位元來表示棋盤上單一兵 種的狀態,用 0 與 1 表示棋盤上有無該兵種,而西洋棋盤剛好總共有 64 個格子, 與 64 位元 CPU 相符。如圖 3-6 中,若是顯示黑色步兵狀態,則會是在棋盤上有 黑色步兵的對應位置之為 1 其餘位元則為 0,在圖中以 16 進位表示黑色步兵狀態 為 0x 8000403F00。. 圖3-6 黑步兵位置表示0x8000403F00 在暗棋上由於棋盤為 32 格,而 Bitboard 以整數儲存也是 32 Bits,我們發現 Bitboard 這個資料結構在暗棋上非常適用,所以我們在實作上採用 Bitboard 資料 來加快我們的搜尋速度。圖 3-7 為我們所使用的 32 位元對應位置圖而圖 3-8 為其 16 進位表示法。 20.

(30) 圖3-7 32位元對應位置圖. 圖3-8 16進位表示法0x690F05C3. 圖 3-9 為範例盤面,若我們要生成相的走子步,我們則需要知道相的位置。 如果相有兩隻則我們必須分別在他們的位置個別計算走子步。在圖 3-10 我們只有 一隻相,相的位置表示法為 0x20000000。在相在這個位置下,若我們要尋找相的 所有合法走步,我們必須找到 0x20000000 這個位置下相的所有合法走步,則我 們會先尋找相旁邊可走點得到 0x52000000 值。之後我們將檢查位置 0x52000000 中是否有權重比相大、我方棋子與暗子,可由 0x52000000 與上述棋子位置狀態 做 XOR 邏輯運算,如 0x52000000 與黑士位置 0x40000000 做 XOR 邏輯運算得到 0x12000000,如圖 3-10 所示,相的所有合法走步法 16 進位表為 0x12000000。. 21.

(31) 圖3-9 範例盤面. 圖3-10 產生相吃子步16進位表 示法0x12000000. 若我們要搜尋黑士吃子步,我們可以先將士可以吃的所有子做 OR 邏輯運算, 如仕:0x00002000、相:0x20000000、俥:0x00000080、傌:0x00000040。如圖 3-12 中將這四位置進行邏輯運算後會得到 0x200020C0,之後我們將士可走範圍 0xA4000000 與 0x200020C0 做 AND 邏輯運算後會得到 0x20000000 為士的吃子步 16 進位表示法。. 22.

(32) 圖3-11 仕、相、俥、傌 16進位表示法 0x200020C0. 圖3-12 黑士吃子步16進位表示法 0x20000000. 3.3 Transposition Table 在遊戲樹的搜尋中,雖然中途可能產生不同的走步,但是最終盤面卻是相同 的情況,如圖 3-13、圖 3-14、圖 3-15 所示。假設在圖 3-13 中紅方的策略會選擇 先吃馬放棄守兵,而同時也預期黑方會放棄馬選擇去吃兵。在這樣的策略則會產 生圖 3-14、圖 3-15 兩種路徑,兩種路徑皆會到達相同的盤面。由上述例子所得知, 如果某個盤面已經搜尋過的話,當再次搜尋到就可以套用之前搜尋過的結果,以 節省重複的時間。. 23.

(33) 圖3-13 範例盤面. 圖3-14走法1. 圖3-15 走法2. 24.

(34) Transposition Table 是一個用來記錄已經搜尋過的盤面資訊,可以在再次搜尋 到時直接套用 Transposition Table 中的資料,其中 Transposition Table 中的資料可 能包含:盤面 key 值、深度、分數…等。因為將所有盤面資訊全部塞進 Transposition Table 中除了很佔空間外,也因為每次都需要比較 32 個位置的資訊也顯得效能也 不彰,所以一般會使用 Zobrist Hashing 的方式來進行盤面 key 值的生成,以達到 快速查詢目前盤面是否已經搜尋過。 Zobrist Hashing 在搜尋之前,會預先產生二維陣列 Zobrist[棋子類型][位置]。 棋子類型用 0 表示暗子,1 到 7 表示紅方帥、仕、相、俥、傌、炮和兵,8 到 14 表示黑方將、士、象、車、馬、包和卒。而 Zobrist Hashing 值為所有 Zobrist[棋子 類型][位置]做 XOR 邏輯運算後結果。例如,目前盤面只剩士和兵分別在 0 號及 31 號位置,那麼我們的 Zobrist Hashing 值則為 Zobrist[9][0] ♁ Zobrist[7][31]。 在 Transposition Table 使用中大多人都會面臨 Collision 的問題,而改善方法 大約為以下 3 點: 1. 增加 Hash Table 的大小,這是個簡單又有效的方式,不過在早期的電腦 暗棋程式中所使用的設備記憶體是有限的,雖然 Hash Table 越大浪費越 多,但是每擴大一倍同時也降低一倍的 Collision Rate。 2. 增加資訊儲存量,這個方法同樣也能夠確保 Collision Rate 下降,但是儲 存成本以及檢查成本則也會跟著上升,在追求效率的情況下並不適用。. 25.

(35) 3. 使用雙層或多層的 Hash Table,須增加額外的資料,一旦發生 Collision 時我們才知道哪一個資料才會是正確資料,而 Hash Key 只是檢查的第一 道關卡。. 3.4 逐層加深搜尋法 逐層加深搜尋法(Iterative Deepening Search)的核心概念就是,先對當前盤面 做兩層的搜尋,也就是說敵我雙方各推一手的搜尋,目的是用來判斷當我方選擇 某一走步時,敵方會應對方式對我方的影響,藉此來做為最後選擇考量項目之一。 每回合將搜尋兩層後的結果回傳給根節點作為更深層的搜尋使用,並判斷時間是 否足夠繼續往下搜尋,若是足夠則繼續往下兩層進行搜尋,直到所剩時間不足之 後將會依最深層的搜尋結果作為搜尋的結果。. 26.

(36) 第四章 設計方法 本章節將會介紹暗棋程式 Dancing 的設計概念以及方法,暗棋程式 Dancing 是由暗棋程式 Observer(本所研究生-徐大開所研發)所改良而成的 程式。在 4.1 節我們參考了舊版程式的想法之後有了新的想法,在翻子策略上 翻的將會比較安全。在 4.2 節中參考舊版程式的做法並加以修改,融入翻子處 理,我們可以在翻子時,可以傾向可以先吃對方已翻出的大子。在 4.3 節審局 函數中,靜態棋子分數設置目前仍沿用舊版程式,在動態設置方面除了原先 天敵考量外,我們更增加了兩項規則以及判別敵我雙方是否會產生無敵情況。 在 4.4 節我們利用選擇性展開來做為加速的手段,並且配合走步的排序使我們 可以更快速的做出選擇。4.5 節時間控管則是與舊版不同的設計方法,我們將 分給在中盤時較多的搜尋時間。. 4.1 翻子與走子的抉擇 翻子與走子的抉擇,是所有研究暗棋程式的研究者都必須面對的課題,由於 暗棋是屬於資訊不完全遊戲,翻子與走子的抉擇程式不易拿捏也容易做出錯誤的 決定。而我們在翻子與走子的抉擇上分成兩個主要評估的考量: 空步:空步在 chess 以及 Chinese chess 是非常常見的技術,利用我方不走棋 而讓對方連續走子的方式,來評估是否該走子。當盤面上還存在暗子時,如果我 們走的每一步棋反而比我們不走棋還來的糟時,這時我們不應該勉強繼續選擇走 子,而是可能選擇翻子。如圖 4-1 中輪黑方走,若黑方選擇車吃掉傌,則紅方的 硨下一步就會吃掉車,如此一來就會發現走子比不走子還差(審局函數會計算出拿 27.

(37) 車換傌不划算)而選擇翻子。. 圖4-1 輪黑方盤面 翻子:程式會在根節點產生翻棋步,並模擬翻棋步搜尋。翻棋步搜尋後會得 到翻棋分,我們也依據翻棋分是否大於走子分一定程度以上來決定是否要翻棋。 而翻棋分會受到目前盤面所影響,我們在做翻子步時,根據經驗法則會喜歡翻炮 (包)隔一子(炮架)後暗子,亦或者是期望在敵方帥(將)、仕(士)或相(象) 隔一子(炮 架)後翻出炮(包)直接可吃掉對方之子,如圖 4-2 中期望在兩個 A 點中可以翻出黑 子或者是在三個 B 點中翻出炮用來吃黑將。. 28.

(38) 圖4-2炮(包)的經驗法則翻子策略 除了炮(包)的經驗法則之外,我們依據暗子旁邊的明子做鼓勵(加分)與壓抑 (扣分)。我們會鼓勵在我方仕(士)或相(象)以及敵方炮(包)旁邊翻子,並且會壓抑 在我方傌(馬)、兵(卒)或炮(包)這相對較容易被吃的棋子旁邊翻子。 在圖 4-3 當中的例子當我們為紅方時翻以下 5 個位置之暗子分數將會產生不 同的變化: A 點:由於 A 點為我方炮旁,一旦翻出黑方之子很容易就會被敵方給吃掉, 所以翻 A 點將會額外的減掉 40×(敵方未翻出子數-未翻出卒與包暗子數),會得到 40×(15-7)=360 分的扣分。 B 點:B 點為我方仕旁,因為在仕的半天敵以及天敵數較少,所以翻仕旁邊 的暗子將會額外的加上 100×(敵方未翻出子數-未翻出將與士暗子數),會得到 100×(16-3)=1300 分的加分。 C 點:C 點為我方相旁,相的天敵數僅比仕來的多,所以翻相旁邊的暗子也 29.

(39) 會 額 外 的 加 上 50×( 敵 方 未 翻 出 子 數 - 未 翻 出 將 、 士 與 象 暗 子 數 ) , 會 得 到 50×(16-5)=550 分的加分。 D 點:若我們為黑方時,在 D 點旁為敵方的帥,在初始盤面只有帥被翻開的 情況下我們翻出不被帥給吃掉且非紅方之棋子只有 31 分之 5 機率另外還有 31 分 之 11 的機率會被帥給吃掉。在圖中的例子有 26 分之 5 的機率可以吃掉帥並且也 有 26 分之 11 的機率被帥給吃掉,所以我們也並不推薦在帥旁邊翻子,故會額外 減掉 1500×(所有暗子數-未翻出卒暗子數),會得到 1500×(26-5)=31500 分的扣分。 E 點:E 點為我方傌旁,由於傌的天敵數眾多,所以我們並不推薦翻傌旁邊 的子,故翻馬旁邊的暗子會額外的減掉 10×(敵方未翻出子數-未翻出卒與包暗子 數),會得到 10×(16-7)=90 分的扣分。 F 點:F 點為我方兵旁,兵除了眾多天敵之外,唯一能夠翻出來不被黑方吃 掉的子,只有將跟包共 3 子,所以若翻兵旁邊的暗子會額外的減掉 70×(敵方未翻 出子數-未翻出將與包),會得到 70×(16-3)=910 分的扣分。. 30.

(40) 圖4-3 輪紅方翻子盤面 根據上述所得到額外加減分除以總暗子數將會得到各暗子額外配分,當翻子 分大於走子分一定程度上我們將不會選擇走子。依據最後最高分之翻子與走子分 進行是否成立確認,最後若翻子部分以及空步部分皆成立,則我們將會選擇翻分 數最高的暗子。. 4.2 先吃重要子 在搜尋的過程裡,有時候會經過不同的順序走到相同的盤面。這些順序可能 包含了很多個吃子步、走子步和翻子步。但是,用搜尋樹搜尋時往往沒有考慮到 中間有翻子的變化,以至於先吃掉某個子時,對方突然翻了一個暗子影響到局勢。 如圖 4-4 輪紅時,若當我們帥先選擇吃馬再吃士時有可能會發生下列幾種可能: 黑方選擇翻 A 點:有能會翻到卒、包或將,可以保護士不被帥吃掉或者必須 31.

(41) 用帥換士。又或者翻到其他紅方權重較士低之子,若是這樣在我方帥吃士之前最 多多了 2 次士翻到可以保護之子。 黑方選擇翻 B 點:黑方若期望可以翻到包,則有 2 次機會往 3 個 B 點來進行 翻子動作,一但黑方翻到包我們則必須嘗試翻包旁邊之暗子,待吃掉包或迫使包 一動才有機會吃掉士。 黑方選擇翻 C 點:C 點同 B 點期望翻到包,與 B 點的不同在於若 C 點翻出 包,則我方帥必死必須翻 B7 這個暗子來準備做換子動作,即完全喪失吃士的機 會,好則帥換包,壞則帥被包吃掉且黑方無損失之棋子。 黑方選擇翻 D 點:黑方若期望可以翻到將與卒,若翻到將則我方帥的行動被 控制住,若翻到卒則我方帥必死。. 圖4-4 輪紅時. 32.

(42) 由此可見得若先選擇吃掉士最差情況就是帥換士,但若先吃馬則變成帥換馬, 兩者局勢差非常多。為避免這樣情況發生,我們搜尋時在吃子步的處理上做額外 的加分,增加分數為(最大層數-被吃時層數)×(1+被吃子起始分數/800)。如此一來 假設本次搜尋最大深度為第 6 層,帥在第 1 層吃掉士的分數為(6-1)×(1+2400/800) =20 分,而在第 5 層吃掉馬為(6-5)×(1+⌊20/800⌋)=1 分,總共獲得 21 分;帥在第 5 層吃掉士的分數為(6-5)×(1+2400/800)=4 分,而在第 1 層吃掉馬為(6-1)×(1+⌊20/800⌋) = 5 分,總共獲得 9 分。在這樣設置下我們將會選擇優先吃士。 除此之外,在這樣的設計下配合 4.1 節所介紹的翻子策略也能達到相輔相成 的效果。如圖 4-5 中輪黑方動,我們會期待在 B 點翻出包可以吃掉仕,而不是根 據鼓勵原則去翻 A 點。即便 B 點翻出棋子並不理想,根據紅方的出步,我們仍然 有機會期待在 D4 點翻出包可以吃仕,若兩點皆無翻出包我們才有可能去翻 A 點。 我們不想翻 A 點的理由為翻 A 點仍有 27 分之 2 的機率翻到帥及仕被吃掉,即使 我們翻到可吃子也吃了之後,若紅方仕選擇往 D7 點移動,對於局勢方面並不理 想。. 33.

(43) 圖4-5 輪黑方動. 4.3 審局函數設計 當遊戲樹搜尋到最底層時,我們必須呼叫審局函數來為目前局勢進行評分。 一般情況下,審局函數分為兩個部分: 有食物鏈關係:意指當我方的帥(將)存在時(不論是明子或暗子),敵方的卒(兵) 也同時存在(不論是明子或暗子),亦或是我方的兵(卒)存在時(不論是明子或暗子), 敵方的帥(將)也同時存在時(不論是明子或暗子),則為有食物鏈關係。 在有食物鏈關係下我們的審局函數在計算各子分數將會進入動態設置模式。 在動態設置模式下,各棋子的考量因素有以下三點:天敵數量、半天敵是否存在、 守兵(卒)策略。 天敵:指的是棋子權重大於自己權重的敵方所有棋子,換句話說就是可以吃 34.

(44) 掉自己但是自己無法吃掉對方之子,例如:紅方俥的天敵就有:將、士和象,而 紅方俥也是黑方馬和卒之天敵。在動態設置模式我們會依據各棋子的天敵數來做 給分的標準,動態設置之分數如圖 4-6 以及圖 4-7。 天敵數. 分數. 0. 11000. 1. 4900. 2. 2400. 3. 1100. 4. 500. 5. 240. 6. 110. 7. 50. 8. 20. 9. 8. 圖4-6 帥(將)以外動態態設置模式分數. 天敵數. 分數. 0. 11000. 1. 6000. 2. 4000. 3. 3000. 4. 2300. 5. 2000. 6. 1500. 圖4-7 帥(將)動態態設置模式分數 半天敵:指的是棋子權重等於自己權重的敵方棋子,如帥與將、仕與士、相 與象、俥與車以及傌與馬。計算天敵數原本的意義是用以考量敵方對於我方某子. 35.

(45) 的威脅程度,而半天敵相較於天敵威脅程度較低,但也不是毫無威脅仍有互相牽 制的作用。我們的做法是將半天敵部分額外做處理,首先我們仍然先計算天敵數 量,之後再確認是否有半天敵的存在若存在時則天敵數+1。 守兵(卒)策略:由於兵(卒)的權重非常低,在所有暗棋棋子中敵方除了將(帥) 以外的所有棋子都可吃兵(卒),也因此兵(卒)是非常容易就被敵方給吃掉的棋子, 雖然暗棋中的兵(卒)作用並不如中國象棋(Chinese Chess)中的兵(卒)以及西洋棋 (Chess)中的步兵,對於局勢影響力較小,但也並非無用棋子。兵(卒)除了可以吃 掉將(帥)之外,也能夠做為牽制敵方卒(兵)做為保護我方帥(將),並且做為我方炮 (包)之炮架又或者是阻礙敵方砲的攻擊之用。由此見得兵(卒)並非不重要之棋子。 但過度的保護兵(卒)反而會拖累我方攻擊的機會,所以在兵(卒)的防守上需要拿捏 得當的策略。 在棋局中當帥與卒兩者最多只有其中一方存在以及將與兵最最多只有其中 一方存在,在此情況下稱為無食物鏈關係,而在無食物鏈關係兵(卒)的作用會大 大降低,所以我們在守兵(卒)策略目前只有在有食物鏈關係時作用。我們會先計 算兵(卒)存活數量剩餘多少,再依照存活數量進行防守策略的規畫。 首先我們先製作並且測試了 A 版本及 B 版本,A 版本使用比較簡單的想法, 依照進行額外加分,剩餘 1 子加 100 分、剩餘 2 子加 200 分、剩餘 3 子加 300 分 以此類推,類似此方法的增加分數,但是也產生出乎意料的結果。由圖 4-8 中可 以發現雖然當兵(卒)存活數量越少,單隻兵(卒)額外加分越多。但是以整體來看卻 會認為當兵(卒)存活 3 隻的情況會比其他情況來的還好,產生當兵(卒)>3 時,程 式有可能會去將兵(卒)送死到只剩 3 隻。. 36.

(46) 兵(卒)剩餘數量 每子額外加分 整體額外加分 5. 100. 500. 4. 200. 800. 3. 300. 900. 2. 400. 800. 1. 500. 500. 圖4-8 守兵(卒)策略A版本示意圖 B 版本我們仍然以額外加分的方式做為防守的效果,加分方式則使用 100+10×(5– 兵 ( 卒 ) 剩 餘 數 數 量 ) 做 為 加 分 的 依 據 。 當 剩 餘 5 子 則 加 100+10×(5 –5)=100 的額外分數;當剩餘 3 子則加 100 +10×(5–3)=120 的額外分數, 如圖 4-9 中所示。可以發現當兵(卒)存活數量越少,單隻兵(卒)額外加分越多,並 且也不會產生認為某一兵(卒)剩餘數數量較好就送死到該剩餘數量為止的情況。 兵(卒)剩餘數量 每子額外加分 整體額外加分 5. 100. 500. 4. 120. 480. 3. 140. 420. 2. 160. 320. 1. 180. 180. 圖4-9 守兵(卒)策略B版本示意圖 最後我們使用 B 版的策略,與舊版程式比較之下,在圖 4-10 中輪黑方行動 新版與舊版會產生兩種不同的走步,舊版程式會選擇 d4→d5 這個用士吃炮的走 步,而新版加入守兵(卒)策略後則會選擇 a2→a1 這個逃卒走步。舊版程式雖然吃 到對方的炮,但也因此會掉了兩隻卒,一旦這兩隻卒沒了之後,能夠吃掉對方帥 的只剩下尚未翻出的兩隻包。而新版的在此盤面下,雖然 a2 的卒逃掉了,但也因 此也損失了一次吃掉對方炮的機會。新版與舊版兩種策略各有其優缺點,好壞則 就見仁見智。 37.

(47) 圖4-10 輪黑方行動新舊版比較範例. 無食物鏈關係:若食物鏈關係不存在時則為無食物鏈關係。在無食物鏈關係 下,我們的審局函數在計算各子分數將會進入靜態設置模式,程式靜態設置模式 之分數如圖 4-11。 棋種. 分數. 帥(將). 11000. 仕(士). 4900. 相(象). 2400. 俥(車). 1100. 傌(馬). 500. 炮(包). 3000. 兵(卒). 50. 圖4-11 靜態設置模式分數 38.

(48) 在設置上依照帥(將)比仕(士)大兩倍多一點;仕(士) 比相(象)大兩倍多一點; 相(象)比俥(車) 大兩倍多一點;俥(車)比傌(馬)大兩倍多一點。會這樣設計的原因 是我們不希望兩隻仕(士)的分數會比一隻帥(將)還大或者是等於。如圖 4-12,若分 數設置為仕(士)5000 分、相(象)2500 分、俥(車)1250 分以及傌(馬)625 分,則會發 生左邊盤面紅方會得到 5000(仕)+625(傌)–5000(士) = 625 分;右邊盤面則會得到 2500*2(相)+625(傌)–5000(士) = 625 分,由此可見得這樣計算下左右盤將會獲得 相同盤面分,但這並不正確因為左邊盤面對於紅方較有利,而右邊盤面則很有可 能會走向和局的情況。而相(象)、俥(車)和傌(馬)的分數也是同樣理由設置。此外 由於炮(包)的處理上屬於比較難以界定,所以在靜態設置中也是設計在介於仕(士) 和相(象)之間。. 圖4-12 我方為紅方盤面 除此之外我們會另外檢查是否有產生無敵(該子無天敵以及半天敵)情況,在 圖 4-13 為輪紅走時設計中所產生的問題,舊版程式會以紅帥兌換黑方士,這並不 39.

(49) 是一個正確的走步,會產生的原因是在換子前跟換子後的配分上產生錯誤的配置, 當時換子前分數為:帥 6000 分、仕 4900 分、相 2400 分、將 11000 分、士 4900 分、馬 500 分以及卒 1100 分,總和紅方-黑方分數為-1800 分;下一步帥吃掉黑士 之後分數為帥 6000 分、仕 4900 分、相 4900 分、將 11000 分、馬 500 分以及卒 1100 分,總和紅方-黑方分數為 8100 分;再一下步將吃掉帥之後仕 4900 分、相 4900 分、將 11000 分、馬 1100 分以及卒 1100 分,總和紅方-黑方分數為 1500 分, 仍然比原先-1800 分還來的多。基於這個原因,我們在半天敵設計上多了一項判 斷:當若某子天敵與半天敵同時不存在時,我們將會得到一個超過 11000 的分數。 如此一來,我們程式在進行搜索時,會較為積極走向盤面上我方某子除了炮(包) 以外敵方沒有任何子可以吃掉我方該子,在積極的走向上述情況的同時,也會更 加的避免敵方某子產生同樣情況。. 圖4-13 半天敵例圖輪紅盤面 由於炮(包)只要有砲架以及敵方被吃子就能形成吃子步,所以只要隔一砲架炮(包) 40.

(50) 就能吃對方所有棋種,故設計上比較特殊沒有列入半天敵考量。而兵與卒因為可 以吃掉自己的數量非常眾多(初始盤面下的敵方共有 16 子,扣除帥(將)以及較為 特殊的炮(包)共有 13 子),所以在設計上也未列入半天敵考量。. 4.4 遊戲樹搜尋加速 暗棋程式的棋力強弱與搜尋的深度息息相關,若能夠減少搜尋時間或者更有 效率的搜尋則可以增加搜尋層數,而減少搜尋不必要的分支而產生多餘的時間消 耗則是有效的做法。在 Alpha-beta Pruning 中,我們使用兩種方法做為增加發生 cut 的機率以及減少分支度的方法。. 4.4.1 走步排序 在 Alpha-beta Pruning 中,如果我們能夠先搜尋到好的節點,則之後搜尋到較 差的節點時,我們就可以更加快速地砍到較差的節點。所以若我們在走步搜尋時, 依照先前的結果由好到壞進行排序,對於搜尋的時間上面是有用的。我們走步排 序的做法,是根據上一次逐層加深後,各個節點最後所得到的分數來決定這一次 逐層加深搜尋遊戲樹時該由哪個節點先搜尋。. 4.4.2 遊戲樹的選擇性展開搜尋 由 4.4.1 節所介紹的走步排序可以提高在 Alpha-beta Pruning 中的剪枝速度, 但若是我們先前就已經知道某些分支會是不必要的,則我們可以選擇放棄展開這 個分支,這樣一來不僅能夠省去展開這個分支的時間,也可以省去從 Transposition Table 中尋找資料的時間。如圖 4-14 中,我們可以發現當帥由 a5 移動到 b5 不僅 41.

(51) 沒有對局勢有幫助,還會白白送掉帥而使敵方將沒有天敵以及半天敵的威脅(暗子 是紅俥),由此可知會是一手大爛步,而我們的作法會直接將此步的分支直接捨棄, 放棄展開搜尋。. 圖4-14 不必要分支範例圖 首先我們做一次實驗比較有無選擇性展開搜尋樹的差別,該次實驗設定每手 思考 20 秒,本次實驗暗棋程式雖然會以逐層加深的方式進行搜尋,但是仍然有 最大層數 20 層的限制,由於能夠搜尋完 20 層的樣本都是分支度非常少的開局以 及殘局,所以搜尋完 20 層的樣本都不列入計算,本次實驗共約計算 5900 多次。 由表 4-1 中,可以觀察到因為放棄了某些分支的展開,所以搜尋的節點數有減少 以及搜尋的層數有稍微的增加。. 42.

(52) 表4-1 每手以20秒展開比較 版本. 每手 20 秒全展開. 每手 20 秒選擇性展開. 總思考次數. 5957 次. 5946 次. 總思考層數. 68238 層. 68936 層. 平均單次思考層數. 11.455 層. 11.594 層. 總搜尋點數. 192429.813443 百萬點. 191023.816234 百萬點. 平均單次搜尋點數. 32.303 百萬點. 32.126 百萬點. 經由先前的實驗結果得知我們在 20 秒鐘平均可以搜尋到 11.5~11.6 層,所以 我們再做了一項實驗,每手直接搜尋到 12 層,其搜尋時間不限制,比較有無選 擇性展開搜尋樹所使用時間。由表 4-2 中,我們可以得知在有選擇性展開搜尋樹 的方法平均思考時間較短。 表4-2 每手展開12層時間比較 版本. 每步展開至 12 層. 每步選擇性展開至 12 層. 總思考次數. 4326. 4300. 總思考時間. 26392.976. 25659.817. 平均每次思考時間. 6.101. 5.967. 最後為了驗證是否會因為選擇性展開搜尋而放棄展開了正確的分支,所以進 行了第三個實驗,該實驗將有選擇性展開以及無選擇性展開各進行 50 個相同盤 面運算,我們將比較兩種版在在搜尋同樣層數時,的到的答案是否相同以及記錄 有選擇性展開總觸發次數,如表 4-3。 表4-3 每手展開12層時間比較 觸發次數. 結果不同. 41. 1. vs 無選擇性展開. 由表 4-3 得知 50 次中選擇性展開觸發 41 機率約為 82%,而觸發的 41 次中有 43.

(53) 1 次的結果不同,觸發選擇性展開時約有 2.44%的機會會出現不同的結果。我們 也記錄了該次不同的盤面並進行分析。如圖 4-15 所示,在此盤面中無選擇性展開 最後得到的結果是黑色的方向,在這個結果中程式會將紅帥往右走做帥換黑士的 動作;有選擇展開則是將紅仕往下走,讓相去吃卒。會產生不同的結果原因為, 帥往右走的這個分支會遭到放棄展開,所以最後的結果必然也不會出現帥往右走 這個走步。. 圖4-15 不同盤面. 4.5 時間控管 我們在一般的電腦暗棋程式對局比賽中,一場比賽為 30 分鐘,雙方各有 15 分鐘也就是 900 秒的思考時間,若超出 900 秒的思考時間則逾時做負。如果妥善 的利用這 900 秒的時間,則相信對於電腦暗棋程式棋力也有一定程度上的幫助。 傳統的作法是使用下公式作為時間分配的方法: 44.

(54) 思考時間 =. 剩餘時間 𝐶. 這個作法就是由剩餘時間除以一個常數數值,得到的時間即為這一手的思考 時間,這是一個比較簡單分配思考時間的方法。但是根據這個方法所分配的結果, 第一手所分配到的思考時間將會是最多的,之後每手分配到的思考時間將會逐漸 下滑。在暗棋遊戲中,當還是開局階段就開始分配更多思考的時間,是一個浪費, 這是對於翻子後的可能走步進行大量的搜尋,所以我們認為這是一個浪費。在[8] 論文中比較了三種做法,第一種為傳統作法;第二種為尖字塔型在開局以及殘局 時分配較少的時間,在中局時分配較多的時間;第三種為類似傳統作法,但是在 在分母常數部分會根據目前是第幾手而變大。圖 4-16 為三種方法分配比較圖。. 圖4-16 為三種思考時間分配方法比較圖[8] 我們分別嘗試做了 A 版本以及 B 版本,A 版本使用比較簡易的方法,設定每 手為 20 秒,當剩餘時間低於 450 秒時,每手的思考時間將會分 6 個階段逐減少, 當剩下最後 30 秒時,每手思考時間則剩下 0.1 秒。 B 版本的作法則把思考時間分回 3 個階段,第一個區段為用時 0~200 秒時, 45.

(55) 這區段我們認定為剛開局時,在這區段中我們思考會以 1、5、10,3 個階段逐漸 增加的方式分配思考時間。在第二區段用時 200~750 秒時屬於中盤時,在這區段 中我們每手將會分配 20 秒的時間進行遊戲樹的搜尋。最後第三階段中,我們每 手分配的思考時間,將會依據所剩的時間的減少而逐漸減少思考時間,最後會減 少到每手僅有 0.1 秒的時思考時間。圖 4-17 為 A 版本以及 B 版本分配比較圖。. 20 15 10 A. 5. B. 900. A. 871. 870. 869. 840. 839. 780. 779. 750. 0 5 6 100 101 200 201 300 301 450 451 600 601 720 721 749. 0. 圖4-17 A版本以及B版本分配比較圖 此外我們分別執行 A 版本以及 B 版本約 7300 多次,並且紀錄在第一段、第 二區段以及第三區段的思考時間跟思考層數,並且比較平均思考層數。比較結果 如表 4-4 所示,我們可以發現 B 版本相較於 A 版本,能夠符合我們的期望,在中 盤也就是第二區段時,能夠使用更多的思考時間以及搜尋得較深。. 46.

(56) 表4-4 A版本及B版本比較表 版本. A 版本. B 版本. 第一、三區段總思考次數. 4585. 4981. 第一、三區段時間. 27487.775. 28593.289. 第一、三區段思考層數. 72764. 75696. 第一、三區段平均思考時間. 5.995. 5.740. 第一、三區段平均思考層數. 15.870. 15.197. 第二區段總思考次數. 2833. 2397. 第二區段總思考時間. 22747.721. 25392.473. 第二區段總思考層數. 30858. 26374. 第二區段平均時間. 8.030. 10.593. 第二區段平均層數. 10.892. 11.003. 4.6 電腦暗棋程式 TsaiB8 的設計 我們在實作出電腦暗棋程式 Dancing 之前,另外有實作出另一版電腦暗棋程 式 TsaiB8,電腦暗棋程式 TsaiB8 主要實作方向為多執行緒的執行。本章節將會介 紹電腦暗棋程式 TsaiB8 的設計方法。. 4.6.1 互斥鎖 互斥鎖(Mutex:Mutual exclusion)是一種用於多執行緒編程中,防止兩條 執行緒同時對同一公共資源(比如全局變數)進行讀寫的機制。其目的為通過將 程式碼切片成一個一個的臨界區域(critical section)達成。臨界區域指的是一塊 對公共資源進行存取的程式碼,並非一種機制或是演算法。一個程式、程序、執. 47.

(57) 行緒可以擁有多個臨界區域,但是並不一定會應用互斥鎖。圖 4-18 為上方執行緒 優先進入臨界區域的情況。. 圖4-18藍色執行緒優先進入臨界區域. 4.6.2 Master-Worker 架構 Master-Worker 模式是常用的平行模式。它的核心思想是,系统由兩類程式協 助工作:Master 程式和 Worker 程式。Master 程式負責接收和分配任務,Worker 程式負責處理分配到的任務。當各個 Worker 程式將所分配到的任務處理完成後, 將结果回傳给 Master 程式,由 Master 程式進行歸納及彙整,從而得到系统所要 的最终结果。 在暗棋遊戲中,玩家每一手都會有翻子及走子的選擇,若選擇走子則會面臨 該走哪子才好以及該往哪走才好的選擇。為了能夠找到正確的選擇,暗棋程式會 進行搜尋樹的展開,而使用 Master-Worker 架構來平行的展開搜尋樹展開則是如 圖 4-19。 48.

(58) 圖4-19 Master-Worker架構流程. Master 程式首先會在一開始先尋找所有可能的走步後並且計算分配時間後, 將各個走步分派給 Worker 程式進行計算,而每個有被分派到任務的 Worker 程式 則會依照所分派到的走步在所分配到的時間內以逐層加深的方式進行遊戲樹的 搜尋,並且在搜尋完成後將結果回傳至 Master 程式後等待下次分派任務。而 Master 程式將所有分派出走步的結果都回收完成後將會進行深度平衡,依照執行深度平 衡後的結果我們將會選擇分數最高的走步做為我們的最佳走步。. 4.6.3 搜尋深度的平衡 在平行化的遊戲樹的分支搜尋時,往往會因為每個分支的複雜度不同,會出 現在相同的限制時間下,產生不同深度的結果。以暗棋而言,當紅黑雙方各移動. 49.

(59) 四步後與紅黑雙方各移動六步甚至更多步後的結果並不能做公平的比較。為了使 最後搜尋的結果能夠公平的比較,我們的做法是透過限制後執行完成的分支不要 超過已經搜尋完畢的分支深度,以及將已經搜尋完畢的分支將超出部分截斷工作, 其中必須要注意若是超出部分產生必贏或必輸的結果則將會保留其結果。如圖 4-20 底層右方 4 個葉節點部分為被截斷的節點,而底層左方 4 個葉節點則是超出 搜尋時間未完成搜尋的節點。. 圖4-20 深度平衡截斷. 4.6.4 搜尋時間分配 在平行化的搜尋樹的分支展開時,因為執行緒的數量在絕大多數的情況下都 會低於分支數。假設有 T 個執行緒以及第一層分支展開有 N 個,若是使用論文[5] 的預測搜尋時間,當 T > N 時,N 個分支全部都會展開;但若 T < N 時,只會展 開前 T 個分支。為了使所有分支都能展開,故在第一層展開前先平均分給所有分 支的搜尋時間,使得每個分支都能夠如期的展開。此外為了在先前所提到搜尋深 度的平衡功能更加完善,我們預計將需要比較長時間的分支分配較長的時間。. 50.

(60) 第五章 結論與未來展望 5.1 結論 本研究中已經分別實作出暗棋程式 TsaiB8 以及 Dancing。TsaiB8 研究方向為 多執行緒的版本,該版本由於因為需要時常地更新以及取用 Transposition Table 等資源以及在層數超出截斷發生也不少,造成不少的溝通成本,以至於搜尋時間 反而沒減少,此版本目前僅有實作出 4.6 節所提到的技術後就暫時打住。而得到 暗棋程式 TsaiB8 經驗後我們又實作出另一支暗棋程式 Dancing。Dancing 在搜尋 加速上方法是以減少搜尋量的方法進行,並且在棋子分數上的動態設置上,除了 評估敵方價值高於自己的數量之外,也會評估與自己等價的棋子,另外還會考慮 在兵和卒如果被吃了之後,對於局勢是否有一定影響力。在舊版程式中,有時候 當我方將已經被吃掉且敵方帥仍存在時,會不在乎卒的重要性的情況已經減少或 者不再出現。而在翻子上我們也有了新的想法,確保可以翻得比較安全,至於覺 得比較保守較好或者要比較大膽較好則就見仁見智了。 表 5-1 為最後暗棋程式 Dancing 對暗棋程式 Observer TAAI 2015 版本的做 200 場對戰(雙方先後手各 100 場)測試結果,Observer 為 TAAI 2015 比賽的亞軍。 表5-1 實測結果 Dancing vs. Observer 百分比. 勝. 敗. 和. 101 50.5%. 72 36%. 27 13.5%. 暗棋程式 TsaiB8 以及 Dancing 目前已經分別參與 TAAI 2015、TCGA 2016、 ICGA 2016 電腦暗棋對局競賽,相關比賽成果列在附錄中。雖然成績並不理想, 但也由附錄中的對戰結果得知暗棋程式 Dancing 對目較強幾支暗棋程式仍有抗衡 51.

(61) 棋力,未來若能夠繼續進行改良或許會有更不錯的成績。. 5.2 未來方向 雖然暗棋程式 TsaiB8 在多執行緒執行上碰到一些難解的問題,但是在諸多研 究上,多執行緒執行仍然是有效的增加搜尋速度的方法。未來若是問題能夠解決 相信將會是能夠大大增近搜尋速度的方法。 我們希望未來能夠增加背景思考的方式進行電腦暗棋對局的進行。暗棋程式 TsaiB8 以及 Dancing 目前每回合仍然以開檔的方式進行一步棋的思考及走棋,若 是我們增加背景思考的方式,則可以節省下每次讀取盤面資訊的時間。除此之外, 暗棋程式 Dancing 的時間控管在開局時出手較快,若能夠增加背景思考的時間, 當對方出手較慢時,我們能夠偷取對方的時間預先進行搜尋,如此一來更能夠節 省下更多的搜尋時間。 此 外 我 們 可 以 結 合 蒙 地 卡 羅 樹 搜 尋 法 (MCTS) 尋 找 最 佳 走 步 , 先 利 用 Alpha-beta Pruning 進行淺層的搜尋後,可以從 Alpha-beta Pruning 的搜尋結 果中找出前幾個較優的走步再進行蒙地卡羅法模擬出最佳走步。. 52.

(62) 附錄. 附錄 1. TAAI 2015 比賽結果. 53.

(63) 附錄 2. TCGA 2016 比賽結果. 54.

(64) 附錄 3. ICGA 2016 比賽結果. 55.

(65) 參考資料 [1] 謝曜安,電腦暗棋之設計及實作,國立台灣師範大學資工所碩士論文,2008。 [2] 謝政孝,暗棋中棋種間食物鏈關係之探討與實作,國立臺灣師範大學資工所 碩士論文,2010。 [3] 施宣丞,電腦暗棋程式 DarkCraft 的設計與實作,國立臺灣師範大學資工所 碩士論文,2012。 [4] 詹凱翔,電腦暗棋程式 Darkness 的設計與實作,國立臺灣師範大學資工所碩 士論文,2013。 [5] 徐大開,電腦暗棋程式 Observer 的設計與實作,國立國立台灣師範大學資工 所碩士論文,2014。 [6] 林庭羽,電腦暗棋殘局庫之研究,中原大學應用數學所碩士論文,2013。 [7] 龔建銓,使用 GPU 平行運算加速電腦象棋之走子產生器,國立成功大學資 工所碩士論文,2009。 [8] 黃士傑,應用於電腦圍棋之蒙地卡羅樹搜尋法的新啟發式演算法,國立台灣 師範大學資工所博士論文,2011。 [9] 劉孟謙,電腦象棋程式 Shark 的設計與實作,國立國立台灣師範大學資工所 碩士論文,2014。 [10] 程式人雜誌網站,http://programmermagazine.github.io/201407/htm/focus3.html, 2014。 [11] 維基百科,http://zh.wikipedia.org/,2016。 56.

(66) [12] Chess Programming 網站,https://chessprogramming.wikispaces.com/,2014。 [13] N. Jouandeau and T. Cazenay, "Small and Large MCTS Playouts Applied to Chinese Dark Chess Stochastic Game", In: Tristan Cazenav, Winands, CGW 2014. CCIS, vol.504, pp.78-89. Springer, Heidelberg(2014). [14] B. N. Chen, B. J. Shen, and T. S. Hsu, "Chinese Dark Chess," ICGA Journal, Vol. 33, No. 2, January 2010. [15] B. N. Chen, and T. S. Hsu, "Automatic Generation of Opening Books for Dark Chess," Computer and Games, Vol. 8427, July 2014, pp 221-232. [16] J. C. Chen, T. Y. Lin, B. N. Chen, and T. S. Hsu, " Equivalence Classes in Chinese Dark Chess Endgames," IEEE Transactions on Computational Intelligence and AI in Games, April 2014. [17] N. Jouandeau, "Varying Complexity in Chinese Dark Chess Stochastic Game," 2014 TCGA Conference, Taipei, Taiwan, June 2014. [18] S. J. Yen, C. W. Chou, J. C. Chen, I. C. Wu, and K. Y. Kao, "Design and Implementation of Chinese Dark Chess Programs," IEEE Transactions on Computational Intelligence and AI in Game, Vol. 7, No. 1, March 2015.. 57.

(67)

參考文獻

相關文件

Picking up on teens' interest in computer games, he sponsored a Nintendo competition and installed Nintendo terminals in his stores?.

Hence, we have shown the S-duality at the Poisson level for a D3-brane in R-R and NS-NS backgrounds.... Hence, we have shown the S-duality at the Poisson level for a D3-brane in R-R

高等電腦輔助設計與製造 (Advanced Computer Aided Design and Manufacturing).

In the school opening ceremony, the principal announces that she, Miss Shen, t is going to retire early.. There will be a new teacher from

* School Survey 2017.. 1) Separate examination papers for the compulsory part of the two strands, with common questions set in Papers 1A &amp; 1B for the common topics in

 name common laboratory apparatus (e.g., beaker, test tube, test-tube rack, glass rod, dropper, spatula, measuring cylinder, Bunsen burner, tripod, wire gauze and heat-proof

• It is a plus if you have background knowledge on computer vision, image processing and computer graphics.. • It is a plus if you have access to digital cameras

Know how to implement the data structure using computer programs... What are we