• 沒有找到結果。

5五將棋程式Wonders的設計與實作

N/A
N/A
Protected

Academic year: 2021

Share "5五將棋程式Wonders的設計與實作"

Copied!
63
0
0

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

全文

(1)國立臺灣師範大學 資訊工程研究所碩士論文. 指導教授:林順喜 博士. 5 五將棋程式 Wonders 的設計與實作 Design and Implementation of Computer Minishogi “Wonders”. 研究生:張懷文 撰. 中華民國 103 年 1 月. 1.

(2) 摘要 利用人工智慧與人對弈的這個概念,可以追溯自 1769 年。但直到了 1950 年,人工 智慧這個領域出現了一位 Shannon 教授致力於如何發展能夠與人對弈的西洋棋程式, 這領域的研究才逐漸有穩定發展的方向。許多後來從事電腦對局領域的相關研究人員, 也都跟隨 Shannon 教授的觀念發展而來。直至現今,無論是西方的跳棋、西洋棋、五 子棋、撲克牌,抑或是東方的象棋、暗棋、孔明棋、將棋等等,許多的對弈遊戲皆成 為電腦對局領域裡面研究的項目。 其中日本的 mini-shogi(5 五將棋),為日本將棋於 1970 年左右發展的其一分支。並 於 2007 年開始,發展國際電腦對局的相關賽事。由日本的電氣通信大學所舉辦的 UEC Cup 到 ICGA 的 Computer Olympiad,5 五將棋已經成為在國際賽事中被熱烈參與的項 目 之 一 。 在 台 灣 近 幾 年 也 被 TCGA(Taiwan Computer Games Association) 和 TAAI(Technologies and Applications of Artificial Intelligence)列為固定的競賽項目之一 了。 本研究論文中實作之程式 Wonders,利用 alpha-beta 搜尋來幫助我們找到最佳走步。 並且利用嶄新的審局函數快速的減少搜尋分支,以減少執行時間。另外我們也使用暫 存表以及 Zobrist hashing 和 bitboard 的技術來提升程式的計算效能。從 2011 年研發至 今,Wonders 於 2013 年的 TAAI 電腦對局競賽當中獲得 5 五將棋的金牌,期望在未來 能夠有更穩定且具有突破性的研究發展。. 關鍵字:5 五將棋、人工智慧、TAAI、ICGA、TCGA 2.

(3) Abstract. Since 1769, people already started the research about artificial intelligence ( AI ) . Until 1950, Professor Shannon devoted in developing the program, which can play Chess against human. This field became more stable with his research. Till now, many games such as Chess, Checkers, Connect Five, Pokers etc. have already been included in computer games research. Among these games, mini-shogi came from a branch of shogi around 1970. The competition of computer mini-shogi had become one of the international events since 2007. From the UEC Cup in Japan to the Computer Olympiad from ICGA (International Computer Games Association), mini-shogi has become one of the important game items. In Taiwan, there are more and more competitions, for example, TCGA (Taiwan Computer Games Association) and TAAI (Technologies and Applications of Artificial Intelligence), that also included mini-shogi. In this paper, the author implemented the mini-shogi engine which is called “Wonders” with alpha-beta search algorithm for AI to search the best move. Cut-off and a novel evaluation function were applied to reduce the execution time. The transposition table, Zobrist hashing and bitboard techniques were used in the program. From 2011 till now, “Wonders” has already attended a lot of events. This program also won the champion of TAAI 2013 computer game tournament of mini-shogi. Hope we can have more stable and more promotions in this research in the future.. Keywords:AI, mini-shogi, TAAI, ICGA, TCGA. 3.

(4) 致謝. 感謝指導教授林順喜老師,於這幾年的研發過程非常有耐心且充滿學術熱忱的指導, 從程式的基本架構、演算法的調整相關的想法都可以和老師討論,且獲益良多。以及 感謝實驗室的學長姐、同學和學弟妹,在研究進行的階段,時常有學術上或生活上的 意見交流和彼此鼓勵。在 Wonders 的研發期間,也感謝國內 5 五將棋程式的其他開發 者許舜欽老師和長榮大學的研發團隊,熱心且不藏私地分享和討論。以及國外的荷蘭 學者 Muller,除了提供介面以外,在 ICGA 賽事過程當中也分享了相當多的個人經驗, 至今仍常通信保持聯絡,也從中收穫許多。 最後非常感激高中、大學以及排球班的同學和在政法中心一起工作的夥伴,以及家 中的爸媽和妹妹,於平日不曾間斷過的鼓勵與支持,讓碩士生涯能順利進行至畢業。. 4.

(5) 目錄 摘要. .................................................................................................................................. 2. Abstract .................................................................................................................................. 3 致謝. .................................................................................................................................. 4. 目錄. .................................................................................................................................. 5. 圖目錄. .................................................................................................................................. 7. 表目錄. .................................................................................................................................. 8. 第一章. 緒論 .......................................................................................................................... 9 1.1 研究背景 ........................................................................................................... 9 1.2 研究目的 ......................................................................................................... 11 1.3 研究意義 ......................................................................................................... 13 1.4 論文架構介紹 ................................................................................................. 14. 第二章. 5 五將棋介紹 ......................................................................................................... 15 2.1 5 五將棋簡介 ................................................................................................ 15 2.1.1 5 五將棋歷史 ......................................................................................... 15 2.1.2 5 五將棋走步 ......................................................................................... 17 2.1.3 5 五將棋規則 ......................................................................................... 20 2.2 5 五將棋目前研發狀況................................................................................ 23 2.2.1 台灣 .......................................................................................................... 25 2.2.2 國際研發狀況 .......................................................................................... 27. 第三章 演算法及資料結構文獻探討及研究 ..................................................................... 29 3.1 遊戲樹(Game Tree Search)相關介紹 ............................................................ 29 3.1.1 Game Tree .................................................................................................. 29 3.1.2 Min-Max Search ........................................................................................ 30 3.1.3 Alpha-Beta Search ..................................................................................... 32 3.1.4 Nega-Max Search ...................................................................................... 34 5.

(6) 3.2 Bitboard ............................................................................................................ 35 3.2.1Bitboard 在各棋類的應用 ........................................................................ 35 3.2.2 Bitboard 在各棋類的走步生成 ............................................................... 38 第四章 資料結構實作 ......................................................................................................... 39 4.1 5 五將棋棋盤表示法 ....................................................................................... 39 4.2 王將、金將、銀將、步兵走步生成............................................................. 41 4.3 飛車、角行、龍王、龍馬走步生成............................................................. 43 4.4 Bitboard 與棋盤之間的轉換........................................................................... 45 第五章 系統實作與改良 ..................................................................................................... 46 5.1 針對「打入」的搜尋複雜度控制................................................................. 46 5.2 子力分設計 ..................................................................................................... 48 5.3 向上傳遞更新法 ............................................................................................. 51 5.4 千日手與特殊開局庫 ..................................................................................... 52 5.5 Transposition Table .......................................................................................... 54 第六章 相關效能測試 ......................................................................................................... 56 第七章 結論與未來方向 ..................................................................................................... 58 第八章 附錄 ......................................................................................................................... 59 8.1 比賽紀錄 ......................................................................................................... 59 8.2 參考文獻 ......................................................................................................... 63. 6.

(7) 圖目錄 圖 1 日本將棋棋盤 ................................................................................................................ 15 圖 2 5 五將棋棋盤 ................................................................................................................. 16 圖 3 二步犯規示意圖 ............................................................................................................ 22 圖 4 打步詰違規示意 ............................................................................................................ 22 圖 5 以圈叉遊戲為例的遊戲樹 ............................................................................................ 29 圖 6 Min-Max 示意圖............................................................................................................ 30 圖 7 Alpha-Beta Search 示意圖 ............................................................................................. 32 圖 8 Bitboard 在西洋棋盤的表示法 .................................................................................... 35 圖 9 bitboard 走步生成步驟.................................................................................................. 38 圖 10 以 32 位元整數配置圖 ................................................................................................ 39 圖 11 實際盤面大小 .............................................................................................................. 39 圖 12 實際盤面呈現狀況 ...................................................................................................... 40 圖 13 金走步生成步驟示意 .................................................................................................. 41 圖 14 飛車與角行走步生成示意 .......................................................................................... 43 圖 15 打入步省略之示意圖 .................................................................................................. 47 圖 16 Wonders 流程圖 .......................................................................................................... 52 圖 17 Transposition Table 在搜尋樹中使用之狀況 ............................................................ 54. 7.

(8) 表目錄 表 1 各種棋類走步表 ............................................................................................................ 17 表 2 Min-Max 虛擬碼............................................................................................................ 31 表 3 Min-Max Search 虛擬碼 ................................................................................................ 33 表 4 Nega-Max 虛擬碼 .......................................................................................................... 34 表 5 bitboard 西洋棋範例 - 變數宣告 ................................................................................ 36 表 6 bitboard 西洋棋範例 - 各代表數值 ........................................................................... 36 表 7 車、角走步產生程式碼 ................................................................................................ 44 表 8 Bitboard 與棋盤之間的轉換程式碼 ............................................................................. 45 表 9 舊版子力分配置表 ........................................................................................................ 48 表 10 目前的子力分配置表 .................................................................................................. 48 表 11 不同走步與其計分方式表 .......................................................................................... 49 表 12 特殊審局分範例 .......................................................................................................... 50 表 13 向上傳遞更新法虛擬碼 .............................................................................................. 51 表 14 Zobrist Key 更新示意.................................................................................................. 55 表 15 Transposition Table 性能測試表 ................................................................................ 56 表 16 TAAI 2013 比賽紀錄 ................................................................................................... 56. 8.

(9) 第一章. 緒論. 1.1 研究背景. 利用人工智慧與人對弈的這個概念,可以追溯自 1769 年,“The Turk”[1]這個宣稱 可以自動與人對下西洋棋的機器,在幾百年前曾經造成當時的大新聞。雖然後來被人 證實這台機器其實是由一個侏儒所操縱的,並非真的是一台自動與人對弈的機器。但 從那時候起,就可以見識到人們對於人工智慧這項領域發展的決心。到了 1950 年,人 工智慧這個領域出現了一位 Shannon 教授致力於如何發展能夠與人對弈的西洋棋程式, 其中 Programming a Computer Playing Chess[2]這篇論文更詳細記載了他的研究。許多後 來從事電腦對局領域的相關研究人員,也都跟隨此篇論文的觀念去發展。 直至現今,無論是西方的跳棋、西洋棋、五子棋、撲克牌,抑或是東方的象棋、暗 棋、孔明棋、將棋等等,許多的對弈遊戲皆成為電腦對局領域裡面研究的項目。有些 遊戲經過幾年的研究,已經完全被破解(solved)[3],意指透過程式可證明其必勝法則或 者已經存在某一個電腦程式可以完全戰勝現今人腦的智慧,通常以該遊戲最頂尖的玩 家當作比賽對手。舉例來說,IBM 所研發的西洋棋程式 DeepBlue,在 1997 年當時就 已經達到打敗人類玩家的程度了。 目前在這個電腦對局的領域中,有一國際性的協會 ICGA(International Computer Games Association),每年都會舉辦一次於不同的國家舉辦為期約一周的學術研討會, 從 1997 年起[4]便開始加入電腦奧林匹亞電腦對局競賽(Computer Olympiad)為當中一部 分的交流行程,讓各個國家程式研發者,無論是學生、老師抑或是社會人士,都有機 9.

(10) 會在各項遊戲當中互相切磋研究成果。 其中日本的 mini-shogi(5 五將棋),為日本將棋於 1970 年左右發展的其一分支[5]。 除了棋盤大小從 9 乘 9 降為 5 乘 5 之外,棋盤上能夠選擇的兵種也由八種降至六種, 其餘規則保留自原本的日本將棋。5 五將棋也於 2007 年[6]開始,發展國際電腦對局的 相關賽事,由日本的電氣通信大學所舉辦的 UEC Cup 到 ICGA 的 Computer Olympiad, 5 五將棋已經成為在國際賽事中被討論的項目之一。在台灣近幾年也被 TCGA(Taiwan Computer Games Association) 和 TAAI(Technologies and Applications of Artificial Intelligence)列為固定的競賽項目之一了。. 10.

(11) 1.2 研究目的. 相較於其他在電腦奧林匹亞電腦對局競賽裡對弈的項目,如西洋棋、黑白棋、圍棋 或者象棋等等,5 五將棋在人工智慧這個領域的研究時間尚未滿十年。無論是開局、殘 局、子力配置、資料結構與搜尋方法等等,仍然屬於開放性的問題探討範圍,並沒有 特定較佳的解決策略,目前主要的研發團隊來自於日本,但公開的文獻並不多且以日 文撰寫為主,因此網路上能取得的相關資料也相當的有限。 在電腦對局裡面,遊戲被主要劃分為完全資訊遊戲和不完全資訊遊戲兩種[7]。完 全資訊遊戲可以讓雙方玩家掌握所有的遊戲資訊,遊戲所有發展的可能性在開始前就 已經被告知所有玩家,例如:圍棋、中國象棋、西洋棋等等;而不完全資訊遊戲則包 含了一些玩家無法完全掌握的訊息,只能利用片段已知的資訊來設計搜尋以及計算機 率來做出判斷,例如:麻將、撲克牌、大富翁等等。而電腦遊戲亦尤其機率性被分為 有機率性和無機率性兩類。因此 5 五將棋在電腦對局的分類當中屬於完全資訊,且無 機率成分的遊戲。 雖然 5 五將棋屬於完全資訊的遊戲,且遊戲盤面並不大,兵種也相對較少,看似搜 尋樹的複雜度不高,但由於規則較繁瑣複雜,如變身(倘若銀將、角行、飛車、步兵行 至對方兵營底線,或從對方兵營底線出發,可選擇升級至特定兵種),以及打入(吃入的 子能夠再次打入盤面)等規則,使得在搜尋樹在每一次的搜索當中搜索分支的數量都相 當的大。這兩個規則使得子力分數的配置及搜尋演算法的實行皆造成相當大的影響。. 11.

(12) 本論文研究的目的則是希望能透過 Bitboard 的資料結構來記錄盤面及各個兵種的 儲存狀況,來降低搜尋樹所佔用的記憶體空間。也透過位元運算子(Bitwise operator)實 作飛車、角行、龍王和龍馬等較特殊的走步生成,及盤面維護,來加速搜尋時間,讓 電腦的資源獲得較佳的運用。讓 Wonders 的棋力可以透過實作演算法或者是建立資料 庫的同時,能夠確實的精進實力,以求在各賽事有好的表現。. 12.

(13) 1.3 研究意義 在電腦對局的這個領域裡,許多程式發展的主要架構皆利用樹狀搜尋去尋找當下盤 面所應採取的最佳對策。對於搜尋樹來說,每一層搜尋的展開(敵方與我方每交換一次 即遞增一層搜尋的深度),其資料量與搜尋時間更是以指數的方式成長。於是採取什麼 樣的資料結構以及如何修剪搜尋樹的分支等等,這些看似細微的修改卻會顯著的影響 整個程式的效能。 在這裡我們選用 BitBoard 的資料結構與 Bitwise operator 的運算方式來做為我們程 式的基礎。在 5 五將棋中,相較於其他兵種的走步生成方式,飛車、角行、龍王和龍 馬可以垂直、水平或斜向的走任意步,並不是像金、銀、步兵等的走步,是在距離其 相鄰位置的地方即可處理,而是在生成走步的過程當中需要另外維護,透過適當的切 割棋盤,快速的找到相對應的走步位置。 本研究將 BitBoard 的技術用於 5 五將棋程式的研發中,並記錄相關演算法的實作 以及研發流程,雖然 5 五將棋在研究領域中,除了研發歷史不如其他棋類悠久,在國 內的資料也相對而言不足,但期望透過本文章能夠給予一些參考資料。本研究論文中 實作之程式 Wonders,於 2011 年研發至今,並於 2013 年的 TAAI 電腦對局競賽當中獲 得 5 五將棋的金牌,期望在未來能夠有更穩定且具有突破性的研究發展。. 13.

(14) 1.4 論文架構介紹 本文以介紹 5 五將棋的人工智慧程式 Wonders 為主體。首先於第一章介紹本論文之 研究背景、目的及意義,討論相關領域之發展背景以及為何撰寫本研究論文。第二章 則簡要介紹 5 五將棋的規則以及其人工智慧當今研發的國內外環境為何,例如有哪些 研究團隊、參考資料等等。第三章則是以文獻探討為主要內容,包含遊戲樹、資料結 構 BitBoard 以及特殊開局庫(Special Open)等等之資料收集。接下來才在第四章和第五 章討論本程式之實做情形,由資料結構、走步生成談起,到演算法或者程式流程當中 針對此遊戲的特殊設計。而第六章則是做簡要的資料分析和紀錄,討論程式研發的過 程當中參加過的比賽狀況和紀錄。最後第七章和第八章則是做結論、未來的方向探討 和相關附錄。. 14.

(15) 第二章 2.1. 5 五將棋介紹. 5 五將棋簡介. 2.1.1. 5 五將棋歷史. 圖 1 日本將棋棋盤 日本將棋又稱將棋、日本象棋或是本將棋,這項棋類源自於印度的恰圖蘭卡, 而後從東南亞傳入(泰國象棋)。最早在日本的紀錄是平安時代所發展的「平安將棋」 , 其分支包含小將棋、中將棋、大將棋、大大將棋、天竺大將棋、摩訶大大將棋等等, 直到後奈良天皇改良小將棋,成為現在一般所看到的日本將棋。如圖 1 所表示,其 棋盤大小為 9 乘 9,兵種包含王將、玉將、飛車、角行、金將、銀將、桂馬、香車 和步兵,主要為一擒王遊戲(意即若將軍被對手擒拿了則結束的遊戲)。. 15.

(16) 圖 2 5 五將棋棋盤 而本論文探討的 5 五將棋,是屬於日本將棋於 1970 年左右發展的其一分支。 楠本茂信將近代日本將棋變體,將棋子、棋盤精簡化,規則和將棋相同。棋盤大小 為 5 乘 5,如圖 2,則是開局的固定起始盤面,兵種為王將、玉將、飛車、角行、 金將、銀將和步兵,彼此沒有階級的分別,只要位於合法走步的範圍之內,皆可將 對方的子捉拿回自己的兵營。某些特定棋子若走到敵方陣營的最後一行,皆可進行 升級,換成更有威脅力的子力繼續遊戲,而王將(玉將)的存亡代表著整體的存亡, 因而成為被攻擊的主要目標以及搜尋樹最希望找到的盤面狀態。. 16.

(17) 2.1.2. 5 五將棋走步 5 五將棋和其他棋類比較不同的其中之一點是走步和變身,不同的兵種都有不. 同的走步,但彼此而言是沒有階級的區分,亦即當對方走入我方下一步可走到的位 置,即視為我方的吃子對象。而當走到對方陣營的最後一行時,則會變身為另一兵 種,走步也會不相同。因此我們在這裡列出表 1 做介紹。. 表 1 各種棋類走步表 一般走步 王將 / 玉將(ou / gyoku-shou) 將棋中,大將之棋以玉將及王將作為區別。兩 者一樣大,不過,一般對局中,比較厲害的一 方擁有王將,比較差的一方擁有玉將。. 飛車 (hi-sha) 只要沒有其他棋從中阻擋,前後左右任何方 向,走幾個格都可以。是個能力超高的棋,與 角行合稱為「大駒(o goma)」。. 角行 (kaku-gyou) 只要沒有其他棋在,斜方向走幾格都可以,這 個也是能力高的棋,扮演重要角色。簡稱「角 (kaku)」。. 17.

(18) 金將 (kin-shou) 斜後方以外,任何方向都可走一格。為防守上 相當重要的一個棋,尾盤對敵玉(對手的王將) 施加攻擊的棋。簡稱「金(kin)」。. 銀將 (gin-shou) 左右和正後方以外,其他方向可走一格。相對 於「防衛的金」 ,有「進攻的銀」之說。簡稱「銀 (gin)」。. 步兵 (hu-hyou) 雖然只能朝前方走一格,但若有效發揮走法, 會有很大的功能。簡稱「步(fu)」。. 升級走步 飛車變成龍王( ryuou) 當飛車走到敵方軍營的最後一行時,可選擇升 級為龍王,除了原來垂直及水平的移動方向之 外又加上可向往斜角的方向一格移動。. 角行變成龍馬 (u ma) 當角行走到敵方軍營的最後一行時,可選擇升 級為龍馬,除了原來可往斜角的移動方向之外 又加上可向全部的方向一格移動。. 18.

(19) 銀將和步兵變成と金(to kin) 當銀將或者步兵行走到敵方軍營的最後一行 時,可選擇升級為金,可變成與金將同樣的走 法。と金也叫出世頭,有效利用的話對整個戰 局有幫助。. ,. 19.

(20) 2.1.3. 5 五將棋規則 5 五將棋除了棋盤大小與兵種和日本將棋有些許不同之外,其主要的規則皆採. 自原本的日本將棋,在這邊介紹一些與一般象棋以及西洋棋不同,只有在將棋類遊 戲會出現的規則。 (1) 打入 將我方吃到的俘虜重新投入戰場稱為「打入」 ,基本上「打入」可以任選位 置,但須注意以下幾點: a.有其他棋子的格子不可打入。 b.不管棋子先前有無升變,都只能以未升變的型態打入。 c.不能將棋子打在無法移動或攻擊的位置,如步兵不能打入對方底線。 (2) 升變 雙方棋子一旦進入、離開敵陣,或是在敵陣內移動時,可選擇是否升變, 也可等待下次再升變(需符合上述條件),但須注意以下幾點: a.升變後的棋子,除了被對方吃掉外,無法恢復升變前的狀態。 b.剛打入敵陣的棋子,需移動後才能升變。 c.若棋子進入無法移動或攻擊的格子時,需強制升變。 (3) 持將棋 當雙方王將(玉將)均攻入敵陣,難以成殺時,經雙方同意可進行持將棋計分. 20.

(21) 決定,計分方法為:王將不計分、角行及飛車各計五分,其他棋子各計一分, 升變後的棋子以未升變前計算。 (4) 千日手 若雙方對局戰況僵持不下,導致同一局面循環四次時(一次循環可能長達好 幾手棋),即判定雙方和棋,但職業賽事往往需重下一局,重下方式依照該比賽 規定,一般包含先後手交換、減少思考時間(先前用了多少就只剩多少),有的 比賽會因此持續到半夜。 (5) 連續王手的千日手 上述千日手的條件再加上連續王手(連續叫將、長將)時,攻擊方必須改變棋 步,否則判輸。 另外在 5 五將棋當中也有幾項規則視為禁手,亦即只要發生了,則違規者 立即判敗。 (1) 通則 在正式賽事上,凡走錯格子、不回應對方王手、不符合條件的升變、 連下二手、王將走到對方可攻擊處等,都算違反規則,必須判敗。 (2) 兩步 將棋規定在同一筋(縱行)上,如圖 3 所示,同一時間只能存在 1 枚步 兵,違反者判敗。但「兩步」規則僅限步兵,若步兵升變為と金則 不在此限。發現兩步違規時,需在對局中提出,倘若比賽已分出結 21.

(22) 果,則勝負不作變動。. 圖 3 二步犯規示意圖[8] (3) 打步詰 若最後奪將的一手棋,需用打入步兵方式成殺時,如圖 4 所示,攻 擊方需改變棋步或是之後慢慢成殺,否則判敗。. 圖 4 打步詰違規示意[8] 22.

(23) 2.25 五將棋目前研發狀況 由於將棋這個項目為較新的研究領域,網路上擁有的文獻並不多,從 1999 年之後 才陸續有幾篇相關論文。而 5 五將棋目前也只有兩篇可取得的中文或英文論文,分別 是由 Takeshi Ito 教授的團隊及許舜欽 教授的團隊所撰寫。其中 Takeshi Ito 教授的團隊 所撰寫的 Changes in Cognitive Processes upon Learning Mini-Shogi,內容是和認知學習 有關,所以較不適合當作本論文的參考資料。 另一篇由許舜欽 教授團隊所撰寫的 Design of Knowledge-based Opening Database for MiniShogi[9],則是關於開放式資料庫的實作。該程式除了透過 Min-Max 和 α-β pruning[10]做搜尋之外,也在開局的部分以人工的方式做了少數步數的選擇。也因為 5 五將棋屬於雙人遊戲,若有一方可以搜尋較深、較完整的話,相對獲勝的機率也會增 加很多,但相對來說便會需要非常大量的記憶體以及計算時間。所以在這篇論文當中 他們建立了一個開放式的資料庫,以打破在有限搜尋時間內可能會造成的水平效應 (horizontal effect),也節省了在深度高的搜尋樹展開時所需要的可觀時間。在這邊我們 也期望以後的程式能夠結合資料庫,讓搜尋能更加完整。 雖然 5 五將棋在網路上面能取得的相關資料並不多,但是仍然有些資料我們可以試 著納入我們的相關資料探討。 例如在 Dual lambda search and shogi endgames[11]這篇論文當中,對於王手判斷的 狀況,有幾個狀況分開來討論,也針對幾個特殊的盤面作定義以及相對應的處理方式。 在較高階的搜尋樹亦附有範例說明,此篇論文當中引入了 λ-search 來實作搜尋樹,這些. 23.

(24) 部分是之前較少閱讀到的資料,對於我們在實作 α-β pruning 的改良當中也提供了不同 的思維去作探討。 另外一篇則是 Review: Computer shogi through 2000[12],這篇則是針對整個將棋對 弈程式發展的歷史做說明,雖然本論文探討的是 5 五將棋,但許多規則仍是遵照日本 將棋的標準進行比賽。而從 1974 年發展至今,有許多優良的程式及其論文被節錄在這 篇論文當中。包含資料結構、審局分數或者 hash table 等等一些實作較佳的範例在其中, 也在文章中討論未來電腦將棋程式發展的展望。從這一系列的研究及分析來說,吸收 了相當多前人研究的心血結晶,即便至該論文發表時 5 五將棋尚未成為熱門研究項目 之一,但仍能從當中獲益許多。. 24.

(25) 2.2.1 台灣 台灣國內目前有許多研究團隊在進行 5 五將棋程式的研究和開發。依投入此領 域的前後次序來介紹主要相關的研究團隊和其所研發的程式。 (1)ST - 長榮大學資訊管理學系鐘嘉華和陳士禮 2010 年,鐘嘉華和陳士禮在許舜欽教授的指導下,為台灣國內第一支 5 五 將棋程式,也是第一個在台灣具有圖形介面的程式,在早期的比賽來說表現也 相當的穩定,但隨著這兩位學生畢業之後,就無繼續研發。 (2)EVA - 長榮大學資訊管理學系許舜欽教授 許舜欽教授所開發的程式 EVG,在國內的研究領域來說扮演著舉足輕重的 角色。除了是參與這個領域最長時間的團隊以外,也十分鼓勵國內各單位展開 5 五將棋的研究,在國內外各項交流賽事上也十分的積極。EVG 為教授親自撰 寫的程式,承襲過去研發象棋程式的經驗,EVG 除了在程式實作上有相當清楚 的邏輯和流程,當中也包含了過去許教授的許多個人程式撰寫經驗在裡面。 (3)Kani - 長榮大學資訊管理學系陳俊傑 陳俊傑所開發的 Kani 亦為國內重要的 5 五將棋程式,在許舜欽教授的指導 之下,在國內比賽多次取得佳績。Kani 在對棋子的價值分上做了大幅調整和平 行化後,得到了很大的進步,並在 2012 年的 TCGA 電腦對局比賽首次超越 EVG 獲得冠軍。 (4).Yukari -中央研究院資訊科學研究所研究助理劉雲青. 25.

(26) Yukari 為在中央研究院由研究助理劉雲青在徐讚昇教授以及許舜欽教授指 導之下所開發的程式。該程式以電腦對局中常見的技術為基礎,其中第一版採 用只有棋子價值分的審局函數,並於 2011 年 TCGA 電腦對局比賽中首次參賽。 在其後所發展的版本 ProtoYukari (其中“Proto-”為表示該程式為實驗發展中 的版本) 於審局函數中加入了位置分等,改善了第一版中碰到的主要問題,比 賽成績也隨之有了一些進展。Jeeves 為 ProtoYukari 後,新撰寫而成,除改進原 程式架構外,也有較深的搜尋深度。 (5).Wonders - 國立台灣師範大學資訊工程學系張懷文 Wonders 為本研究論文之實做程式,在林順喜教授的指導之下所開發,於 2012 年 TCGA 電腦對局比賽上初次登場參賽,成績不佳。接著也參與了各項 國內外賽事,從首次參賽就在比賽過程當中不斷與其他選手討論請益,透過實 作相關資料庫以及修改演算法的效能,提升正確性和其速度,並於 TAAI 2013 比賽中獲得金牌。. 26.

(27) 2.2.2 國際研發狀況. 5 五將棋目前已經有不同研究團隊於世界各地分頭進行研發,因此在於國際賽 事當中也常常會遇到來自各地的程式,無論是開發者或是程式本身都有不同的風格。 而在這近幾年國際賽事當中,特別脫穎而出的歐洲程式則是來自荷蘭的 Shokidoki, 美國代表則是 Deep Nikita。 (1) 1/128 來自日本的 1/128,是由日本電氣通信大學伊藤教授的團隊所研發,在 5 五將 棋的賽事當中一直都表現得相當優異。1/128 主要透過機器學習的方式,來將棋程 式的效能做提升與改進。日本電氣通信大學也為目前 5 五將棋團隊當中,開發研究 時間最長,技術也最為深厚的一組團隊。另外由日本小谷老師開發的 MattariYuuchan 也在 ICGA 2013 取得銅牌,在開發策略上某些棋型已經能判斷為較好或者較弱的狀 況,與同場賽事當中的銀牌 1/128 皆為非常優秀的日本研發團隊。 (2) Shokidoki 來自荷蘭的 Shokidoki 是由荷蘭的學者 Muller 所研發,Muller 在過去有撰寫西 洋棋程式的背景,並且也公開其圖形介面供其他程式開發者使用。在程式的開發過 程當中十分用心的研究開局庫,也針對子力分做不同版本的交叉測試,為 ICGA 2013 的金牌程式。在 Wonders 的開發過程當中,也曾向 Muller 請益多次,在此也 十分感謝他。 27.

(28) (3) Deep Nikita 最後介紹除了來自日本及台灣目前較主要的研究團隊以外,來自美國的 Deep Nikita,是由美國 google 工程師 Andrew Lin 所開發,在 ICGA 2013 才第一次加入 相關賽事,Andrew Lin 也參加許多不同項目的比賽,期望在未來能有更多的機會互 相學習。 除了以上介紹的研究團隊以外,尚有其他國家的程式開發當中,如衣索比亞、菲律 賓以及法國[13],但由於未參加前列之賽事而未列出。. 28.

(29) 第三章. 演算法及資料結構文獻探討及研究. 3.1 遊戲樹(Game Tree Search)相關介紹 3.1.1 Game Tree 就棋類遊戲的人工智慧程式來說,最重要的概念就是遊戲樹的展開。對於程式 而言如何去找到下一個著手(或走步),則需要我們給予程式一個關於現在盤面的定 義,也就是這顆遊戲搜尋樹的起點。如下圖 5 所示,我們以圈叉遊戲做為範例,若 現在這個盤面輪到X,那麼合法的走步便是剩下的三個空格,於是我們針對這三個 合法走步展開,接下來第二層變輪到另一方根據當下的盤面展開可能的合法走步。 最後遊戲樹可能會因為符合勝/敗條件而停止,也可能因為時間、空間或者其他限 制而停止。例如在這個遊戲當中,三個連成一線即為勝方,因此 100 則當作 X 方 勝利的獎勵分數,而-100 則當作 X 方敗的懲罰分數。. 圖 5 以圈叉遊戲為例的遊戲樹[14] 29.

(30) 3.1.2 Min-Max Search 當知道一顆遊戲樹如何展開之後,接下來則是要以適當的策略來讓電腦程式知 道符合什麼樣的盤面或者狀態的時候,可以停止搜尋。除了時間和空間的限制之外, 最常使用的便是給予審局分。審局分的定義通常來自於棋盤上的子力總和、距離最 終目標盤面的步數、或者是其他已經量化過的盤面狀態,其使用的目的是要告訴程 式:當審局分超過多少或少於多少的時候,表示當下的局面是極優或者極差的狀況, 讓程式知道所謂的好或不好的盤面。特別是雙人遊戲時我們常會使用 Min-Max 的 方式來展開搜尋樹,以下圖 6 所示,當搜尋樹被展開的同時,期望找到對我方最有 利的盤面,亦即 max,則該盤面相對敵方來說反而會是得分最少的盤面,亦即 min。. 圖 6 Min-Max 示意圖[15]. 而我們也在下方表 2 列出 Min-Max 搜尋法的虛擬碼當作參考。. 30.

(31) 表 2 Min-Max 虛擬碼[15] intMinMax(int depth){ intbest,val; if(depth==0){ return Evaluate();. //葉節點傳回審局函數的分數. } if(SidToMove()==My){ best=-INFINITY;. //輪到我方走棋 //我方要取最大值,將 best 設成無限小. } else{ best=INFINITY;. //敵方要取最小值,將 best 設成無限大. } GenerateLegalMoves(); while(MoveLeft()){ MakeNextMove();. //產生所有合理走法 //嘗試每一個走步 //走棋. val=MinMax(depth-1); UnMakeMove();. //遞迴呼叫,層數減 1 //還原走棋. if(SideToMove()==My){ if(val>best){. //我方要保留最大值. best=val; } } else{ if(val<best){. //敵方要保留最大值. best=val; } } } return best;. //將分數回傳給父節點. }. 31.

(32) 3.1.3 Alpha-Beta Search 在 Min-Max Search 的搜尋樹展開過程當中,因為將所有合法走步都展開的緣故, 準確度相當高,但是因為每一個合法步(節點)都必須拜訪過一次,所以耗費的時間 相當多。實際上若透過適當的技巧將多餘的搜尋樹分枝剪裁掉亦是可以在得到正確 結果的情形下省下很多時間的。Brudno[16]在 1963 年首先發表了第一篇關於 Alpha-Beta Search 的論文,之後,1975 年 Knuth 和 Moore[10]在數學上證明了 Alpha-Beta Search 的正確性。 Alpha-Beta Search 是透過邊界 Alpha 及 Beta 對搜尋樹所得到的審局分,限制其 必須落在固定的範圍,否則將予以裁切。Alpha-Beta Search 屬於深度優先搜尋(DFS), 如果在搜尋過程中發現:某些後來展開的子樹節點結果不會落在 Alpha 和 Beta 的 邊界值之內,則該子節點以及其子樹將不會影響最後搜尋結果,就不必搜尋而進行 裁剪(cut off),以節省搜尋的時間。. 1. 輪紅方走棋 輪黑方走棋. 1 5. -2 1. -2 6. 6. 圖 7 Alpha-Beta Search 示意圖 Alpha-Beta Search 演算法搜尋的效率與展開搜尋的子節點之排序有很大的關係, 如上圖 7 所示,如果右半邊子樹盤面分數-2 與 6 的節點互換順序,就不會發生裁剪 (cutoff),和原來 Min-Max 搜尋演算法搜尋的節點數目就會相同。由表 3 的虛擬碼 32. 圖 3-2.

(33) 呈現 Min-Max Search 的架構。並且在最佳走法搜尋順序時,Knuth 和 Moore 證明 了 Alpha-Beta 演算法最少必須搜尋的節點數目為: n  2b d / 2  1 n  b ( d 1) / 2  b ( d 1) / 2  1. (d 為偶數) (d 為奇數). 其中 n 代表搜尋節點數目,b 代表 branch factor, d 代表搜尋深度。 表 3 Min-Max Search 虛擬碼[15] intalphaBetaMax( int alpha, int beta, int depth ) { intval; if ( depth == 0 ) return evaluate(); GenerateLegalMoves(); //產生所有合理走法 while(MoveLeft()){ //嘗試每一個走步 MakeNextMove(); //走棋 val = alphaBetaMin( alpha, beta, depth - 1 ); //遞迴呼叫,層數減 1 UnMakeMove(); //還原走棋 if( val>= beta ) return beta; // beta-截斷 if( val> alpha ) alpha = val; // alpha 為取最大值 } return alpha; } intalphaBetaMin( int alpha, int beta, int depth ) { intval; if ( depth== 0 ) return -evaluate(); GenerateLegalMoves(); //產生所有合理走法 while(MoveLeft()){ //嘗試每一個走步 MakeNextMove(); //走棋 val = alphaBetaMax( alpha, beta, depth - 1 ); //遞迴呼叫,層數減 1 UnMakeMove(); //還原走棋 if( val<= alpha ) if( val< beta ). return alpha; beta = val;. } return beta; } 33. // alpha-截斷 // beta 為取最小值.

(34) 3.1.4 Nega-Max Search 從 alpha-beta search 的虛擬碼我們可以發現其程式碼為兩部分,然而在 1975 年 Knuth 和 Moore 提出了 Nega-Max 演算法,將取得最小值和最大值的方法透過負號 的轉移合併為一。其核心的概念建立在於:零和的遊戲當中若是對方的失分,同時 對我方造成的獲利亦會是相同的。因此 Nega-Max 在搜尋樹的展開過程當中,便是 將下方已有審局分的子節點分數取負號,接著再把 alpha 和 beta 兩個值對調取負號。 這樣的情況之下,使得 alpha cut 和 beta cut 的行為變得極為類似,如下表 4 的虛擬 碼所示,程式碼也變得更容易維護。目前 Wonders 採用的即是這個算法。 表 4 Nega-Max 虛擬碼[15] intAlphaBeta ( int alpha, int beta, int depth) { intval; if(depth==0){ return Evaluate(); } GenerateLegalMoves(); while(MoveLeft()){ MakeNextMove();. //葉節點傳回審局函數的分數 //產生所有合理走法 //嘗試每一個走步 //走棋. val = -AlphaBeta(-beta, -alpha, depth - 1 ); //遞迴呼叫, alpha 和 beta 順序對調 UnMakeMove(); //還原走棋 if( val>= beta ) return beta; // beta-截斷 if( val> alpha ) alpha = val; // alpha 為取最大值 } return alpha; }. 34.

(35) 3.2 Bitboard 3.2.1 Bitboard 在各棋類的應用. Bitboard 的概念是用一串位元來表示棋盤上盤面狀態的數字,透過 0 和 1 紀錄 棋盤的狀態是否有棋子佔據該位置。也就是只有適合用 Boolean 來記錄的性質,才 可以使用 bitboard 來記錄。在本研究之程式 Wonders 中,配合 5 五將棋使用的是 32 位元無負號整數來實做。. 圖 8 Bitboard 在西洋棋盤的表示法[17]. 35.

(36) 首先透過上圖 8 的西洋棋盤可以了解到:對於 Bitboard 來說,每一個數字(無 負號整數)所要記錄的東西都很單純,只會是 0 或 1 組合而成的數字串。在這個 例子當中,只需要紀錄其中一個兵種在棋盤上的位置在哪。 表 5 bitboard 西洋棋範例 - 變數宣告 Class CBoard{ U64 whitePawns; U64 whiteKnights; U64 whiteBishops; U64 whiteRooks; U64 whiteQueens; U64 whiteKing; U64 blackPawns; U64 blackKnights; U64 blackBishops; U64 blackRooks; U64 blackQueens; U64 blackKing; };. 如表 5 所示,一個變數代表一種兵種的位置,以初始盤面來說,各兵種代 表的數值則如下方表 6 所示: 表 6 bitboard 西洋棋範例 - 各代表數值 blackPawns. = 0x000000000000FF00. blackKnights blackBishops blackRooks blackQueens blackKing. = 0x0000000000000042 = 0x0000000000000024 = 0x0000000000000081 = 0x0000000000000010 = 0x0000000000000008 36. whitePawns = 0x00FF000000000000 whiteKnights whiteBishops whiteRooks whiteQueens whiteKing. = 0x4200000000000000 = 0x2400000000000000 = 0x8100000000000000 = 0x0100000000000000 = 0x0800000000000000.

(37) 以目前西洋棋的 AI 來說,主流都是使用 bitboard 的資料結構,與一般陣列 來記錄棋盤的狀況較不相同的是:在生成走步的過程當中相當快速且不需要耗 費很多的記憶體來儲存這棵樹的資料。在走步生成的過程當中也只要使用到簡 單的運算,並不需要耗費許多資源。從資料結構這樣微小的細節開始做修改, 對於在電腦對局領域當中的搜尋樹而言,實際上累積起來的優勢是十分可觀的。 本研究研發之程式也因此資料結構而有相當快速的執行效果。. 37.

(38) 3.2.2 Bitboard 在各棋類的走步生成. Bitboard 的概念是用一串位元來表示棋盤上盤面狀態的數字,透過 0 和 1 紀錄 棋盤的狀態是否有棋子佔據該位置。也就是只有適合用 Boolean 來記錄的性質,才 可以使用 bitboard 來記錄。在本研究之程式 Wonders 中,配合 5 五將棋使用的是 32 位元無負號整數來實做。. 圖 9 bitboard 走步生成步驟[18] 舉上方圖 9 來做例子,當我們要生成走步的時候,便取出黑方其中一個數值和白方 的棋盤做 and 運算,重疊的部分才是其合法吃子步。從黑方的合法步和棋盤空白處做 and 運算則可以知道合法的走子步為何。. 38.

(39) 第四章. 資料結構實作. 4.1 5 五將棋棋盤表示法 我們透過 32 位元的整數記錄盤面上的狀況如圖 10 所示。但以前面 25 位元記錄盤 面上的狀況如圖 11,若有放子設定為 1,若無放子則設定為 0,將其填滿之後,通常我 們會以 0x00000000 的方式以方便程式撰寫。 4. 3. 2. 1. 0. 9. 8. 7. 6. 5. 14. 13. 12. 11. 10. 19. 18. 17. 16. 15. 24. 23. 22. 21. 20. 29. 28. 27. 26. 25. 31. 30. 圖 10 以 32 位元整數配置圖 4. 3. 2. 1. 0. 9. 8. 7. 6. 5. 14. 13. 12. 11. 10. 19. 18. 17. 16. 15. 24 23 圖表 1 實際盤面大小. 22. 21. 20. 圖 11 實際盤面大小. 39.

(40) 4. 3. ◎. 1. 0. 9. 8. 7. 6. 5. 14. 13. 12. 11. 10. 19. 18. 17. 16. 15. 24. 23. 22. 21. 20. 圖 12 實際盤面呈現狀況 由於使用 32 位元表示,在編譯器裡編輯程式時,必須使用十六進位表示法 才容易觀察變數內容。舉例來說,若角行位於圖 12 中 2 號位置,原本應該表 示為 0000 0000 0000 0000 0000 0000 0000 0100,但切換至十六進位後,則以 0x00000004 作記錄。 取得 BitBoard 表示法後,本論文將透過無負號的 32 位元整數(unsigned integer),來儲存每一種兵種在棋盤上的狀況。將雙方在盤面上的王將(玉將)、 飛車、角行、金將、銀將和步兵以及在盤面下被雙方吃入的子對應到代表的數 字。倘若我們要了解其中一方棋子例如我方或者敵方在盤面當中所佔的位置 (red / black / occupied),只要將其目標作 or 運算即可。. 40.

(41) 4.2 王將、金將、銀將、步兵走步生成 針對一般的兵種來說,走步的生成相當的固定,如圖 13 由每個兵種相對應的遮罩 針對位元一個一個生成。 範例. 金 13 的遮罩. 走步 1 生成. 金 13 的遮罩. 走步 2 生成. 金 13 的遮罩. 走步 3 生成. 金 13 的遮罩. 走步 4 生成. 圖 13 金走步生成步驟示意 針對我方棋子執行以下的動作: (1).從所有我方的棋子當中,依照王將→龍王→龍馬→飛車→角行→金將→銀將 →步兵的順序找出可移動的第一顆子。 (2).針對該棋子在資料庫當中找出其相對應兵種在該位置能行走到的位置,可能 是吃子或是走子,我們給予這些位置一個數值,也就是一個對應的走步遮罩,針對 吃子和對方的棋子做 AND 運算,若是走子則是針對棋盤上的空格做運算。 (3).針對每一個可以行走到的位置,生成一個走步,並且將該走步選項從原本的. 41.

(42) 遮罩當中取消掉。 (4).重複動作(3)直到該棋子可被生成的走步皆完成了,便將這顆可以移動的棋 子從我方的遮罩當中消除,回到動作(2),找下一顆可以移動的棋子。直到所有棋 子皆生成對應的走步,該棋子為止,也就是重複的格子都已經被取出了的意思。 雖然走步生成是每一次呼叫搜尋必會發生一次的函數,但是透過這樣的方式可 以非常快速的使用 bitboard 來生成走步,在這中間的運算使用的也只有 AND / OR / XOR 運算而已,實際上不需要耗費太多時間。. 42.

(43) 4.3 飛車、角行、龍王、龍馬走步生成 針對飛車與角行,這兩個特別的兵種我們要生成走步的時候就會相對耗時 間。由於飛車的走步是十字方向皆可以走,而角行則可以往斜方向任意移動。 在這個部分我們試著切割棋盤,以達到生成走步的效果。 遮罩範例. 單行遮罩. 單列遮罩. 部分遮罩(1). 部分遮罩(2). 飛車. 上. 下. 左. 右. 角行. 右上. 左上. 右下. 左下. 圖 14 飛車與角行走步生成示意. 透過上面圖 14 我們可以知道,如果我們透過適當的遮罩,便可取出相對應的四個 小盤面。如果是飛車就生成上、下、左、右四個方向的小盤面,若是角行就生成右上、 43.

(44) 左上、右下、左下,再針對各個方向取最高或者最低位元取得可到達的點,並生成一 般走步即可,如表 7 所示。而龍王和龍馬也能利用同樣的原理生成出相對應的走步。 由於 bitboard 的效能十分的良好,即使之前有做一個查表的版本,也不見得效能會比直 接使用盤面資訊生成要來得快速。 和其他棋類遊戲不同的是,將棋有打入的規則,使得吃進來的子可以再重複拿上盤 面使用。針對這個部分,由於每一種棋類能放入的位置有所不同,我們也特別製作了 不同的遮罩。再依照前文一般走步生成的方式,取得打入可以放上去的位置。 表 7 車、角走步產生程式碼 static U32 車 GenWalkable(intsrc, U32 empty){ a1=使用行看可行步;(上、下) a2=使用列看可行步;(左、右) return a1|a2; } static U32 角 GenWalkable(intsrc, U32 empty){ a1=往右上看可行步; a2=往右下看可行步; a3=往左上看可行步; a4=往左下看可行步; return a1|a2|a3|a4; }. 44.

(45) 4.4 Bitboard 與棋盤之間的轉換 使用 Bitboard 的時候常常需要在棋盤編號和 32 位元的 unsigned integer 做變換, 若將 Bitboard 的值直接轉換為整數這就不是我們所想要的,所以我們必須透過轉換 來做 perfect hash 使得 0 ~ 31 位置所對應的 bitboard 數值都可以在對應後獲得相對 應的數字。 舉例來說: 表 8 Bitboard 與棋盤之間的轉換程式碼 index32[32]={31, 0, 1, 5, 2, 16, 27, 6, 3, 14, 17, 19, 28, 11, 7, 21, 30, 4, 15, 26, 13, 18, 10, 20, 29, 25, 12, 9, 24, 8, 23, 22} Int BitHash(U32 x){ Return (x* 0x08ED2BE6)>>27 } Int GetIndex(U32 mask){ Return index32[Bithash(mask)]; }. 表 8 中的 Index 指的是盤面上所代表的數字,我們透過乘法和位移的方式取得一個 perfect hash 的資料,藉此能夠快速的在 bitboard 和一般的棋盤上面做轉換。. 45.

(46) 第五章. 系統實作與改良. 5.1 針對「打入」的搜尋複雜度控制. 5 五將棋與其他棋類相比,有一特殊規則: 「打入」 。在把對方的棋子吃進我方陣營 的時候,可以在下次輪我方時打回棋盤上,所以在 5 五將棋的遊戲進行當中,並不會 隨著時間演進而減少在棋盤上的棋子數。若是吃進對方的龍王、龍馬,則以飛車、角 行打回;若吃入的是金將,則需檢查是金將、抑或是銀將和步兵升級而成。若是飛車、 角行、金將和銀將欲打入棋盤,則只要檢視棋盤上有無空格即可。但若是步兵的話則 需考慮二步跟打步詰,以及不能放入敵方陣營的限制等等。 在生成打入步時,我們會發現一個打入可能會多出 20 個左右的搜尋樹分支,以每 一層都只增加一顆打入的可能性,分支也會以(20 + x)n 的方式指數成長1。若手上握有 太多子而未打入,對於電腦程式而言,無論是時間或空間都會是很大的負擔。 因此我們在此對於搜尋給予層數的限制,只有前三層會生成打入步,也就是從現在 這個盤面開始,我方-敵方-我方會有打入的可能,而後面的則先不考慮。原因是因 為若有連續兩子打入可以造成對方王將陷入困境的話,中間敵方亦有可能以打入,破 除這樣的局面,但三手之後形成對王將產生高壓力的局面會是我們想要優先搜尋到的。 這部分以下圖表示其演算法。示意圖如下頁圖 15。. 1. 這裡的 x 指的是原先的走子和吃子步數的總和,n 指的是搜尋層數。 46.

(47) 吃子步、 打入步、走子步. 吃子步、 走子步. 圖 15 打入步省略之示意圖 另外在於搜尋層數的部分,也會因為手上握有的俘虜個數而做適當的降層。原本的 設計為雙方加起來若超過 4 顆俘虜則降兩層總搜尋層數。但後來因為搜尋樹的複雜度 其實和雙方棋子所共同造成的。因此目前的方式是計算(x+1)(y+1)(x+1)的值,若超過 27 則判定降兩層。其中 x 為我方手上俘虜持有數,y 為敵方俘虜持有數。. 47.

(48) 5.2 子力分設計. 在子力分設計的部分,由於 5 五將棋這個領域的研究時間與其他棋類相比較短,因 此目前針對子力分還沒有一個較佳的策略,如下表 9 從 Wonders 的第一個版本到現在 有許多不同方式的子力分配置。舉例來說,過去曾經為了鼓勵打入,而將場上以及吃 入的子做不同的子力分配置,如下圖表所示,為的就是鼓勵打入。但由於吃入之後又 要打入這部分的子力分較不易維護。後來便取消了這個策略,以表 10 表示。 表 9 舊版子力分配置表 王將. 龍王. 龍馬. 飛車. 角行. 金將. 銀將. 步兵. 場上. 10000. 850. 750. 550. 450. 200. 170. 120. 場邊. 10000. 800. 700. 500. 400. 150. 100. 70. 在後來的版本我們回復到原來一開始的設定,也就是沒有區分場上場邊位置分的配 置,也沒有做底線位置分的設定。只有針對不同的兵種做不同的子力分配置。 表 10 目前的子力分配置表. 場上. 王將. 龍王. 龍馬. 飛車. 角行. 金將. 銀將. 步兵. 30000. 84. 80. 60. 54. 74. 64. 50. 對於不同的走子步,設定不同的分數計算方式,例如走子步有分一般走子步,或者 是走進對方底線陣營、從對方底線陣營出發;再來吃子步也針對我方吃完是否升級以 及對方是否是已經升級過的棋子做分類,加上打入會有如下表 11 所表示的 7 種計算分 數的配置方式。 48.

(49) 表 11 不同走步與其計分方式表 我方是否. 對方是否. 分數計算. 發生升變?. 發生升變過?. 是. -. +10. 否. -. -. 是. 是. +10. 走步類型. 走子步. 吃子步. +(原+變身後)/2 是. 否. +10 +吃子分. 打入步. 否. 是. +(原+變身後)/2. 否. 否. +吃子分. -. -. -. 這樣的子力分計算方式可以有效分辨吃入的金將為哪一個兵種變身,以利我方挑選 原本就為金將的棋子吃入,而非將步兵或者銀將變身的金將一視同仁的吃進來。另外, 此配分設計並沒有特別鼓勵打入,是因為若打入沒有造成即時性的效用,就不需要把 棋盤外的棋子打入,棋子的放入只當作是一般的空閒走步而已。因此我們在打入的設 計並沒有另外預設加分的機制。. 49.

(50) 表 12 特殊審局分範例 範例. 盤面. 分數. 選擇. 吃入金. +74. ˇ. 吃入銀變成的金. +(74+64)/2=69. 吃入兵變成的金. +(74+50)/2=62. 以上方表 12 為例,若盤面上有三隻金。一隻原本就是金(吃進來之後打回去棋盤上 也是金)、一隻是由銀變成的金(吃進來之後打回去棋盤上則變成銀),而另一隻是由兵 變成的金(吃進來之後打回去棋盤上則變成兵)。雖然吃進來都是以金的型態,但是三者 相比較自然必須選擇前者較有利。透過本研究特別設計的審局分,從前面的表 10 可以 查到目前的子力分配置:金 74 分,銀 64 分,兵 50 分。若將變身前後的分數相加之後 取平均,便可以計算出對我方最有利的遊戲策略。. 50.

(51) 5.3 向上傳遞更新法. 一般來說審局分的計算都是以場上的棋子子力總分加總,但如果連走子、打入也要 計算分數的話,相對來說會在無形當中因為計算而消耗掉許多時間,特別是一般來說 走子步和打入步佔的比例比吃子步的比例要高。 因此 Wonders 的審局分計算採用向上傳遞更新法,也就是 incremental update。除非 是因為吃子或者變身,否則將不更改目前場上的分數。由於 5 五將棋也屬於零和遊戲 之一,因此透過此方式的計算並不影響遊戲之勝率。如下方表 13 之虛擬碼所示,和 Nega-Max search 僅有些微的差別,但卻可以增進許多效能。 表 13 向上傳遞更新法虛擬碼 int AlphaBeta ( int alpha, int beta, int depth) { int val; if (depth==0){ return 0; } GenerateLegalMoves(); while(MoveLeft()){. //葉節點傳回審局函數的分數 //產生所有合理走法 //嘗試每一個走步. MakeNextMove(); If (cap!=0) val+= weight[Did]. //走棋. Else ; val = -AlphaBeta(-beta, -alpha, depth - 1 ); //遞迴呼叫, alpha 和 beta 順序對調 UnMakeMove(); //還原走棋 if ( val>= beta ) return beta; // beta-截斷 if ( val> alpha ). alpha = val;. } return alpha; }. 51. // alpha 為取最大值.

(52) 5.4 千日手與特殊開局庫. 針對5五將棋之特殊棋規「千日手」,過去 Wonders 曾經因為比賽時尚未將此規則 處理好,而面臨輸棋之狀況。後來在對弈的過程當中,遇到的對手棋力也相對穩定, 針對某些盤面我們會做特殊的處理。因此在展開搜尋之前,如下圖 16 所示,我們針對 千日手以及一些特殊盤面做處理(preprocess),接著才會展開搜尋樹。. 圖 16 Wonders 流程圖 52.

(53) 在展開搜尋之前,我們會針對千日手做判定,若發現我方持先手,現今盤面又已經 重複三次,則會取消現在的走步改成下一個順位的走步做優先。而在這個位置我們也 會針對特殊盤面做處理,若符合某些條件,即不展開做搜尋。又或者是我方和雙方手 上持有的俘虜個數高過某一個數量(前文所提及的策略)及做降層的搜尋。. 53.

(54) 5.5 Transposition Table 由於在遊戲搜尋樹中,可能會遇到不同走步順序,但是結果盤面相同的情形,如下 圖 17 所示。也就是利用 transposition table 來避免重複搜尋同樣的盤面。在這邊我們利 用 Zobrish Hash Key 使用 32 bits 的無負號整數,依照遊戲類型給予數量不等的亂數。 而不同的旗子在不同的位置有不同的亂數,經過所有的棋子亂數 XOR 運算之後,所得 到的便是棋盤的狀況。以目前 Wonders 的實作狀況而言,面臨 collision 的狀況時,則 是將原本的 32 位元亂數,增添為 64 位元。. 圖 17 Transposition Table 在搜尋樹中使用之狀況 而在這 64 位元當中,前面 32 位元是檢查碼,後面的 32 位元才是我們要用的資料。 就目前而言,當 Transposition Table 的大小使用 1G byte 的狀況下,可以協助 Wonders 由 原本的 11 層提升到 13 層的搜尋層數。. 54.

(55) 其作法[19]是在進入搜尋之前,預先設定好 32 Bits 的無號整數,依照遊戲類型給 予數量不等的亂數,基本必須要有(棋子種類×棋盤格數)個亂數,而其它的資訊則視使 用者需求而定。並透過 Zobrist Key 做更新盤面的步驟如表 14 所示,若是一般走子或打 入直接做 XOR 運算更新盤面,若是吃子步則要另外針對吃入的子做處理。 在 Transposition Table 使用的過程當中,最常遇到的辨識資料碰撞的問題,在這邊 Wonders 透過一個 64 Bits 的 Zobrist Key,將原本 32 位元的盤面資料,新增了一組 32 位元的檢測碼,並且依此兩組資料組合為一。讓整個程式在存取的過程當中方便檢查, 也透過此方式有效的降低碰撞盤面的狀況。 表 14 Zobrist Key 更新示意 1. ZKey ^= Array[棋子種類][棋子原始位置]。 2. ZKey ^= Array[棋子種類][棋子目標位置]。 3. 若該走步為吃子步,則還需要做 ZKey ^= Array[被吃子種類][被吃子位置]。. 55.

(56) 第六章. 相關效能測試. (一)Transposition Table 目前 Wonders 開發及實驗的系統規格如下: 作業系統:windows 7 64 位元 / 處理器效能:2.13G / RAM : 4G 透過約 10 場對局的資料來做資料分析,Wonders 在 11 層的狀況下的平均每步搜尋 表現狀況。實驗數據表 15 可以看出,其實使用 1G bytes 的 Transposition Table 就有不 錯的效果,不管是在碰撞率或是執行時間上來看,在比賽時都是相當穩定的狀態。選 用的表越大可能實際上的空間使用率也低,相對來說也會造成程式在其他方面的資源 負擔,因此目前是選用 1G bytes 的版本。 表 15 Transposition Table 性能測試表 Transposition Table 4G 2G 1G 512M 256M. 空間使用率(%). 碰撞率. 平均執行時間(秒). 8.43267 21.63217 35.97525 68.72841 86.93162. 0.0000005 0.0000012 0.0000023 0.0000044 0.0000069. 10.576 10.511 10.233 18.439 25.116. (二)TAAI 2013 比賽成績 表 16 TAAI 2013 比賽紀錄 對手. shokidoki. EVG. 比賽紀錄. 勝. 勝. 敗. Kani 勝. 56. 勝. TS 勝. 勝. 勝.

(57) 由 TAAI 2013 的比賽結果表 16 可看出,Wonders 在技術上有顯著的進步,除了將 過去比賽的問題盤面整理過後,也在這個階段加入了 Transposition Table 以及針對這個 遊戲各種控管搜尋樹深度和廣度的方法。因此在比賽當中能夠有好的表現。. 57.

(58) 第七章. 結論與未來方向. 在透過前面的各種對於 5 五將棋的程式策略,不管在子力的分配、計算,或者是搜 尋樹的架構如何有效控制其分支狀況,都是目前電腦對局這個領域裡面相當重要的課 題。目前來說 Wonders 雖於 TAAI 2013 獲得不錯的成績,但未來仍有可進步的空間, 例如之前使用荷蘭 Muller 先生開發之介面時,就有些技術(指令)我們還尚未使用到, 例如背景思考,或者開局庫等等。 而本研究在撰寫論文的過程也對於子力分的階級有一假說尚未實驗,期望在未來透 過計算在棋盤上的靈活度,將子力分做更準確的配置。. 58.

(59) 第八章. 附錄. 8.1 比賽紀錄. (1). vs. TS 我方先手/ 勝 1. Bb3 / Sb4 2. Bxd5+ / Kxd5 3. Rd1 / Kc4 4. G@d3 / Kb3 5. Sb2 / Ka4. 6. Pa3 / Sxa3 7. Sxa3/ Kxa3 8. Ga2 / Kb4 9. S@b3/ Kc5 10. Gd4# /. 我方後手/勝 1. Sd2 Bc4 2. Sc1 Sd4 3. Sd2 Rb5 4. Gc1 Ra5 5. Gb1 Rb5 6. Gc1 Sc5 7. Sc3 Sd4 8. Sxc4 Gxc4. 16. S@c1 Gxa2 17. Bxa2 G@b3 18. G@b1 Gxa2 19. Gxa2 B@c3 20. Sb2 Bxe1+ 21. Bd3 R@d1 22. Bb1 Rxa2 23. Kxa2 P@a3 59.

(60) 9. Ba4 Ra5 10. Bc2 S@d5 11. Bd1 Sc3 12. Be2 Gb3 13. B@b1 Scd4 14. Gd2 Se3 15. Gxe3 exe3 (2). vs. Shogidoki. 24. Sxa3 G@b3 25. Kxb3 Rxb1+ 26. Sb2 B@c4 27. Ka4 +Bb4 28. Kxb4 +Rxb2 29. Ka4 +Rb5 30. Ka3 S@a4#. 我方先手/勝 1. Bc2 Ba4 2. Sb2 Bxc2 3. Gxc2 Sd4 4. B@c3 Rb5 5. Bxd4 Gxd4 6. S@d3 Rd5 7. Sxd4 Rxd4 8. Gc3 B@d2 9. Gxd4 Kxd4 10. R@a4 G@c4 11. Rxc4 Kxc4 12. Rc1 Kd4 13. G@c3 Ke3. 14. G@d3 Ke2 15. Gxd2 Kxd2 16. Gc2 Ke3 17. B@c5 B@d4 18. Gd2 Kxd2 19. Bxd4+ S@d1 20. B@a5 Ke2 21. +Bd3 Kxd3 22. Rxd1 B@d2 23. Rxd2 Kc4 24. S@c3 Kc5 25. Bb4+#. 我方後手/敗 1. Bb3 Sc4 2. Bxc4 Gxc4 3. Sb2 B@d2 4. Re2 Be3 5. Rxe3 exe3 6. S@b3 R@c5 7. Sxc4 Rxc4 8. B@c3 Rxc3 9. Sxc3 S@c5 10. R@b4 B@c4 11. Sxc4 Bxc4 12. B@c3 S@d4. 13. Rxc4 Sxc4 14. Bxa5+ Sd5 15. +Bb4 R@c4 16. +Bxc4 Sxc4 17. R@a5 Sd5 18. Rxd5+ Kxd5 19. B@b3 R@c4 20. R@a5 B@c5 21. Rb5+ Sd3 22. S@c3 Ke4 23. Bxc4 Sxc4 24. R@e5 Kxe5 25. G@d4#. (3) vs. EVG 60.

(61) 我方先手 / 勝 1. Bc2Sb4 2. Rd1Sc3 3. Rxd5+Kxd5 4. G@b3Sxc2 5. Sxc2B@e5 6. Sc3Ra4 7. S@c2R@e1 8. Gxa4Bxa4 9. R@a5G@b5. 10. Rxb5+Bxb5 11. G@d4Bxd4 12. Sxd4 Kc4 13. B@a5Rxb1+ 14. Kxb1 R@b4 15. Bxb4+Kxd4 16. +Bc3 Kd5 17. R@e5#. 我方後手 / 勝 1. Sd2 Sc4 2. Sc1 Sc3 3. Bb3 Gd4 4. Gb2 Bc4 5. Ga3 Rxa3 6. Bxc4 Gxc4 (4) vs. Kani. 7. Rxe4 Kxe4 8. B@b1 Kd5 9. P@d4 Kxd4 10. axa3 B@b2 11. Sxb2 Sxb2 12. Ka2 G@b3#. 我方先手/勝 1. Gb2Sc4 2. Ga3Gc5 3. Sd2Sd5 4. Bc2Rxa3 5. axa3Bc4 6. Kb2G@e2 7. Rxe2Bxe2 8. a4R@b4 9. Kc1Rd4 10. Sc3Rc4 11. Sxc4Bxc4 12. a5+S@b4 13. +Pa4Sb3. 14. Bd1Sxa4 15. Bxa4Gb4 16. Bd1Bb3 17. R@c5Bxd1+ 18. Kxd1B@b3 19. S@c2Bxc2 20. Rxc2+P@c3 21. +Ra2S@c2 22. Ke1Sb3 23. +Ra5Gc4 24. R@b5Gd4 25. G@d3Sc2 26. Rxd5+. 我方後手/勝 1. Bc2 Ba4 2. Bxa4 Rxa4. 10. Gxb5 Rxe1+ 11. R@d2 +Rxd2 61.

(62) 3. B@b2 B@d4 4. Rd1 Sc4 5. Rxd4 Gxd4 6. a3 Ra5 7. B@e1 Rb5 8. Bxd4 Kxd4 9. G@b4 R@e3. 12. Sxd2 Sxb5 13. R@a5 B@c4 14. Rxb5+ Bxb5 15. S@b4 Be2 16. Se1 Bd1+ 17. Gb2 R@c1. 62.

(63) 8.2 參考文獻. [1]Levitt, G. M. (2000). The Turk, chess automaton.McFarland & Co Inc Pub. [2] Shannon, C. E. (1950). XXII. Programming a computer for playing chess.Philosophical magazine, 41(314), 256-275. [3] Van den Herik, H. J., Uiterwijk, J. W., & Van Rijswijck, J. (2002). Games solved: Now and in the future. Artificial Intelligence, 134(1), 277-311. [4]ICGA 網站。2013-02-28 取自 http://icga.uvt.nl/ [5]5 五將棋歷史。2013-02-26 取自 http://zh.wikipedia.org/wiki/5%E4%BA%94%E5%B0%87%E6%A3%8B [6]UEC Cup 官方網站。2013-02-26 取自 http://minerva.cs.uec.ac.jp/~uec55/index.php?option=com_content&view=article&id=12&It emid=21 [7]Thomas, L. C., Games, Theory and Applications,Mineola N.Y.: Dover Publications.(2003) pp. 19. ISBN 0-486-43237-8. [8]吳光彧(2013)。5 五將棋知識庫系統實作(碩士)。長榮大學資訊管理研究所學位論文, 臺南縣。 [9]Wu, K. Y., Chen Jr, C., Yen, S. J., & Hsu, S. C. (2012, November).Design of Knowledge-Based. Opening Database for MiniShogi. In Technologies and Applications of Artificial Intelligence (TAAI), 2012 Conference on (pp. 290-293). IEEE. [10]Knuth, D.E., Moore, R.W.: An Analysis of Alpha-Beta Pruning. Artificial Inteligence 6, 293–326 (1975) [11]Soeda, Shunsuke, Tomoyuki Kaneko, and Tetsuro Tanaka."Dual lambda search and shogi endgames." Advances in Computer Games (2006): 126-139. [12]Takizawa, Takenobu, and ReijerGrimbergen. "Review: Computer shogi through 2000." Computers and Games (2001): 433-442. [13]WinBoard mini-Shogi package。 2014-01-12 取自 http://hgm.nubati.net/miniShogi.html [14]HendrixMathematics & Computer Science。2014-01-12 取自 http://ozark.hendrix.edu/ [15]GAMELab - 國立東華大學。2014-01-12 取自 http://www.game.csie.ndhu.edu.tw/ [16]Brudno, A. L. (1963).Bounds and valuations for abridging the search of. estimates. Problems of Cybernetics, 10, 225-241. [17]Bitboard Board-Definition。2014-01-12 取自 http://chessprogramming.wikispaces.com/Bitboard+Board-Definition [18]Bitboards。2014-01-12 取自 http://redalt.com/working-in-reversi-part-3 [19]詹凱翔(2013)。電腦暗棋程式 Darkness 的設計與實作(碩士)。國立臺灣師範大學資 訊工程研究所碩士論文,臺北市。 [20]施宣丞(2012)。電腦暗棋程式 DarkCraft 的設計與實作(碩士)。國立臺灣師範大學資 訊工程研究所碩士論文,臺北市。. 63.

(64)

參考文獻

相關文件

float voxelToPos(int p, int axis) const { return bounds pMin[axis]+p*Width[axis];. return

工作流程 型名搜尋 月別搜尋 判定 判定登錄品 變更部份 所有資料 客戶 清白客戶

Warnen 和高斯 (Gauss) 等人也相繼獨立發表了 複數的幾 何表示。 其中以高斯的工作對於後代的數學產生普遍的影響。 實際上 Euler 並不是憑 空想像推 導出 Euler

[r]

單一菜色與地區搜尋 ( 兩種二選一 ) 交叉搜尋 (4 種可同時 )/QR 碼搜尋.

int main(int argc, char** argv).

public static double calculate(int i, int j) throws ArithmeticException,

• 訓練課程之設計格式,請參用 本分署規範之課程申請相關表件-學、術科