• 沒有找到結果。

五子棋新棋規與五~七路五子棋勝負問題之研究

N/A
N/A
Protected

Academic year: 2021

Share "五子棋新棋規與五~七路五子棋勝負問題之研究"

Copied!
58
0
0

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

全文

(1)國立台灣師範大學 資訊工程研究所碩士論文. 指導教授:林順喜博士. 五子棋新棋規及五~ 七路五子棋勝負問題之研究 The Research of New Rules for Gomoku and the Results of Solving Gomoku with 5×5, 6×6, 7×7 Board Sizes. 研究生:陳昌裕 撰. 中華民國 102 年 7 月.

(2) 摘要 五子棋新棋規與五~七路五子棋勝負問題之研究 陳昌裕 五子棋(Gomoku)這個歷史悠久的遊戲,盤面大小和圍棋不相上下,其搜尋的 空間複雜度是十分龐大的,但因為對先下的黑方有利,因此很早就被看出是很不 公平的遊戲。隨著電腦演算法的進步,1994 年 Allis 利用“迫著搜尋”(Threat Space Search)證明出黑先必勝,而 2001 年,Wagner 及 Virag 更證明出有禁著的連 珠棋(Renju)規則依舊是個黑先必勝的遊戲。因此也有非常多新的棋規陸陸續續被 提出來,可惜治絲益棼,這些新棋規一旦發現黑方仍佔優勢時,就越改越繁複, 使得玩家也越來越無法記住所有的棋規了,這在其它的遊戲,是少有這個演變的 現象。 本論文就五子棋的困境,首度提出一個簡易的「林氏新棋規」,其中有三個 目標:「維持連五」、「規則簡單」及「雙方公平」,試圖挽救五子棋的命運。這棋 規規定第一手黑方只能下在棋盤的外環區域,第二手起雙方就全部都自由了。經 由初步利用五子棋軟體做實驗及探討,驗證出其確實可行,希望再賦與五子棋一 個新生的機會,後續利用 depth first proof number search 演算法技術求出五~七路 五子棋盤面各點先手的勝負結果。將來使用這個簡單的新棋規,我們就可有一個 對黑白雙方都較為公平的遊戲,期望可再開啟這一個益智遊戲的新紀元。. 關鍵字: 五子棋、人工智慧. i.

(3) ABSTRACT The Research of New Rules for Gomoku and the Results of Solving Gomoku with 55, 66, 77 board sizes by Chang-yu Chen. The game of Gomoku has a long history. Its board size is roughly the same as that of Go and its search space complexity is very large. But Gomoku in the free style (without any restriction on Black) is known to favor Black over White, hence it is realized as an unfair game long ago. Along with the progress of computer algorithms, Black has been proved to win in the free style Gomoku by Allis using "Threat Space Search" in 1994. Furthermore, Black has still been proved to win under Renju restrictions by Wagner and Virag in 2001. Many people attempted to increase the fairness of the game by imposing new rules. However, lots of the new rules still need to be improved for this game due to their deficiencies. Unfortunately, adding more rules also increases the difficulty of learning the game. This evolution phenomenon didn't appear in other kinds of games. Aiming at the serious difficulty of Gomoku, this thesis first presents a simple "Lin's new rule", which has three goals: "maintaining connect five", "simple rule" and "fairness", to try to save the fate of Gomoku. This rule only restricts Black to play at ii.

(4) the periphery of the board for the first move. From the second move, there are no prohibited moves for both sides. After the preliminary use of Gomoku software to do experiment and study, we verify its feasibility and hope to give Gomoku a newborn chance. The follow-up is to apply the depth first proof number search (Df-pn) to verify the win, loss, or draw of Gomoku on 55, 66, and 77 boards. This simple new rule can be expected to be used in the near future. Then we will have a fair game for both sides, and will create a new era of this adversarial game.. Keywords: Gomoku, artificial intelligence. iii.

(5) 目錄 附表目錄......................................................................................................................... v 附圖目錄........................................................................................................................ vi 第一章 緒論................................................................................................................... 1 第一節 前言........................................................................................................... 1 第二節 研究動機................................................................................................... 4 第三節 論文架構................................................................................................... 4 第二章 文獻探討........................................................................................................... 5 第一節 各式五子棋棋規介紹............................................................................... 5 第二節 目前五子棋的困境................................................................................. 11 第三章 如何挽救五子棋的命運? ............................................................................... 13 第一節 六子棋..................................................................................................... 13 第二節 林氏新棋規............................................................................................. 14 第三節 尋找公平邊界......................................................................................... 15 第四節 迫著搜尋................................................................................................. 19 第四章 資料結構與演算法......................................................................................... 21 第一節 Proof Number Search 演算法 .............................................................. 21 第二節 Depth First Proof Number Search 演算法.......................................... 24 第三節 Bitboard 介紹 ........................................................................................ 26 第五章 程式改良與實驗數據..................................................................................... 28 第一節 走步產生改良......................................................................................... 28 第二節 連五判別改良......................................................................................... 30 第三節 Deadpoint 加速法 .................................................................................. 33 第六章 實驗結果與分析............................................................................................. 36 第一節 前言......................................................................................................... 36 第二節 實驗一..................................................................................................... 36 第三節 實驗二..................................................................................................... 38 第七章 結論與未來研究方向..................................................................................... 42 參考文獻....................................................................................................................... 43 附錄 A 測試盤面 ....................................................................................................... 46 附錄 B Magic Number(一) ........................................................................................ 48 附錄 C Magic Number(二) ........................................................................................ 50. iv.

(6) 附表目錄 表 1-1 不同棋類的複雜度 .......................................................................................... 3 表 5-1 是否使用 shift bit 及 n-mask 的時間比較 .................................................. 29 表 5-2 是否使用 Magic Move-Bitboard Generation 之時間(s)比較 .................... 33 表 5-3 是否使用 Deadpoint 加速法之時間(s)比較 ................................................ 35 表 6-1 5×5 五子棋盤面之勝負結果 ......................................................................... 39 表 6-2 6×6 五子棋盤面之勝負結果 ......................................................................... 40 表 6-3 7×7 五子棋盤面之勝負結果 ......................................................................... 41. v.

(7) 附圖目錄 圖 1-1 圖 2-1 圖 2-2 圖 2-3 圖 2-4 圖 3-1 圖 3-2. 古希亞連棋 ...................................................................................................... 1 各種三三禁手 .................................................................................................. 5 各種長連禁手 .................................................................................................. 6 各種四四禁手 .................................................................................................. 7 連珠棋的 26 種標準開局法 ............................................................................ 8 六子棋盤面 .................................................................................................... 13 黑方第一手下於天元的一局 ........................................................................ 14. 圖 3-3 圖 3-4 圖 3-5 圖 3-6 圖 3-7 圖 3-8 圖 4-1 圖 4-2 圖 4-3 圖 4-5. 黑石軟體之介面 ............................................................................................ 15 黑方第一手下於右下角位置之一局 ............................................................ 16 黑方先手於(2,O)位置之一局(白勝) ............................................................. 17 黑方先手於(1,M)位置之一局(白勝) ............................................................ 18 黑方先手於(2,M)位置之一局(黑勝) ............................................................ 18 五子棋重複盤面 ............................................................................................ 20 PNS 例子 ....................................................................................................... 21 pn 與 dn 值所代表的意義 ............................................................................. 22 Select stage(MPN = n) .................................................................................... 23 Update stage(更新 n 的 pn 與 dn 值) ............................................................. 24. 圖 4-6 圖 4-7 圖 4-8 圖 5-1 圖 5-2 圖 5-3 圖 5-4 圖 5-5 圖 5-6 圖 5-7. The pseudo code of Df-pn .............................................................................. 25 因門檻太嚴格造成 switch 頻繁 .................................................................... 26 Bitboard 應用於 8×8 五子棋可走步產生 ..................................................... 27 走步產生次序(由小到大).............................................................................. 28 2-mask 及 3-mask 示意圖 .............................................................................. 29 當下走步之連五範圍 .................................................................................... 30 Magic Move-Bitboard Generation 應用於西洋棋[4] .................................... 31 The pseudo code of Magic Move-Bitboard Generation ................................. 31 Magic Move-Bitboard Generation 應用於五子棋概念圖............................. 32 五子棋死點盤面 ............................................................................................ 34. 圖 5-8 deadpoint 設為 0xFF818181818181FF,中間空白部分即為 6×6 盤面 ..... 35 圖 6-1 黑石設定一段於各點位之勝負記錄 ............................................................ 37 圖 6-2 黑石設定三段於各點位之勝負記錄 ............................................................ 37 圖 6-3 黑石從十級至三段第一手下於各點位之勝率統計 .................................... 38 圖 6-4 5×5 五子棋盤面需實驗之位置 ..................................................................... 39 圖 6-5 6×6 五子棋盤面需實驗之位置 ..................................................................... 40 圖 6-6 7×7 五子棋盤面需實驗之位置 ..................................................................... 41 vi.

(8) 第一章 緒論 第一節 前言 五子棋(free style Five-in-a-row、Gobang、Gomoku)的歷史淵源是非常古老的, 五子棋屬於連子棋的一種,連子棋雙方對弈時要盡量把己方的棋子連起來。根據 一些人的考據,古希臘兩河文明就有古希亞連棋(Pah Tum),古希亞連棋是 7×7 盤 面,如圖 1-1。雙方輪流下,一開始隨機選若干位置變成黑色,而黑色的位置就 是禁著。之後就在剩下的位置上面輪流落子,填滿後就結束遊戲。這時候就比較 雙方誰的得分高,分數與連子數成正比,而連子並不包括斜線的方向。. 圖 1-1. 古希亞連棋. 1.

(9) 五子棋大約是四千多年前開始出現,傳說是在堯帝期間被創造出來的,比圍 棋的歷史還要悠久。最初黑白雙方均沒有任何禁著限定,我們稱之為傳統的五子 棋(free style Five-in-a-row),或簡稱五子棋。這是一個兩人對奕的遊戲,先下者拿 黑子,後下者拿白子。獲勝條件為:不論直向、橫向、斜向,先將五顆棋子連成 一線者獲勝。然而,當棋盤整個下滿還未分出勝負,即為《雙方和局》。 日本史料記載更加詳細,其中說到五子棋一開始是先傳到朝鮮,之後大約在 西元一六八八年傳進日本,結果在日本大大地流行,甚至比中國或台灣還流行。 日本人在西元一八九九年左右,將五子棋改名叫連珠(Renju),其主要原因是棋規 有了重大的改變,然而是不得不改變,因為五子棋黑方先下佔很大的優勢是眾所 皆知的。 五子棋看似規則簡單,但下滿整個棋盤(15 路)共需要 225 手。其 state space 複 雜度高達 10 的 105 次方,game tree 複雜度亦達 10 的 70 次方。表 1-1 列出不同 棋類的複雜度作為比較[16]。我們可發現,五子棋(Gomoku)或連珠(Renju)的複雜 度和象棋(Chinese Chess)比起來,是不相上下的。可惜因先手方太佔優勢,因而 命運大大不同。象棋至今仍活躍在各式各樣的比賽中,但五子棋已逐漸退出比賽 的場域,這和其不公平性有絕對的關聯。很明顯地,每當黑方下出一步後,就比 白方多一顆子。然而每當白方下出一步後,其子數卻只能與黑方打平。. 2.

(10) 表 1-1. 不同棋類的複雜度. 1994 年 Allis 利用“迫著搜尋”(Threat Space Search)將 15×15 還有 19×19 的 棋盤的五子棋(Gomoku)給予證明黑先必勝[9][11][12]。他的程式大約花了 12 天的 CPU time。基本上,這是一個最佳優先搜尋法(Best First Search),在遊戲樹展開 時,均找一個最好的節點(Most Proving Node)來展開,因此黑方若在淺層有連續 的迫著可致勝,則就有辦法在可容忍的時間內求出必勝的走步。Allis 把活三、死 四當成“迫著”並且利用“迫著搜尋法”來搜尋黑方是否存在有“迫著”連續 進攻,一直到達黑方有 2 個迫著(四四、四三、三三、活四)為止。 由於五子棋黑方佔優,因此也有非常多新的棋規陸陸續續被提出來。可惜治 絲益棼,這些新棋規一旦發現黑方仍佔優勢時,就越改越繁複,使得玩家也越來 3.

(11) 越無法記住所有的棋規了,這在其它的遊戲,是少有這個演變的現象。2001 年, 接著由 Wagner 及 Virag 兩位應用職業棋士下開局與迫著搜尋接著下中盤的方式, 證明有禁著的日式連珠(Renju)規則依舊是個黑先必勝的遊戲[24]。這也使得五子 棋及其新棋規的連珠等棋類比賽 (包括人或電腦程式)幾乎都越來越少了。. 第二節 研究動機 五子棋可謂是許多人童年時期所愛好的棋類遊戲,包括本人也是如此,但這 樣一個趣味性十足的棋類遊戲只因規則複雜或缺乏公平性而沒落,真的令人感到 萬分可惜。因此如何讓五子棋成為一個規則簡單、變化複雜且對雙方都公平的遊 戲就是現在許多專家的研究課題,然而與林順喜教授多次討論這個課題,發現一 個既簡單又不失公平性的棋規,也因此陸陸續續做了許多實驗去驗證此棋規的可 行性,故以此作為論文題目,期望能夠讓其他專家看到這篇論文並作更深入的研 究,改善五子棋目前的困境。. 第三節 論文架構 本論文分成七個章節,第一章為緒論,簡述前言、研究動機與論文架構。第 二章為文獻探討,介紹現有的各式五子棋棋規,以及目前五子棋所遭遇的困境。 第三章為如何挽救五子棋的命運,文中提出林式新棋規、尋找公平邊界以及迫著 搜尋等解決方法。第四章為資料結構與演算法,介紹五子棋程式會使用到的算法 與設計理念。第五章為程式改良與實驗數據,陳述程式改良的方法及實驗其效能 好壞與否。第六章為實驗結果與分析,以統計與證明的方式驗證新棋規的可行性。 第七章為結論與未來研究方向。 4.

(12) 第二章 文獻探討 第一節 各式五子棋棋規介紹 我們知道四千多年前中國就有了五子棋,那日本早期也都是玩五子棋,在日 本五子棋被稱之為五目碰。可是人們很早就知道黑方佔很大的優勢,因為高段的 棋士大量下了以後,發現八九成以上都是黑方贏,白方很難贏,除非黑方的棋力 差太多。那個時候日本就開始做一個連珠棋(Renju)的棋規,這個號稱是重大的改 良,因為他們不得不這樣做,如果不這樣做人們就不再玩了。 因此 1899 年規定雙方禁止走三三,我們稱之為雙活三(如圖 2-1)。活三表示三 個子連成一線且旁邊沒有障礙物,即雙向都是活路,而雙活三就是一下下去會有 兩個活三。雙活三被早期的職業棋士認為是很容易贏的棋型,所以為了公平起見, 雙方皆不能下雙活三。這樣子很麻煩,因為下棋的時候要考慮這子下下去會不會 形成雙活三,這個我們稱之為一種禁手(或禁著):三三禁手,但是有一個前提是 有兩個活三形成而且沒有形成連五,因為如果我下下去立刻連五就贏了,這時候 禁手就失效。. 圖 2-1. 各種三三禁手 5.

(13) 1903 年日本連珠棋院規定只禁止黑方走三三,白方就毫無禁忌,這就讓白方 喘了一口氣。可是這樣覺得還是黑方優勢很大,所以 1912 年多了一個規定,黑 方被迫走成三三也算輸。如何被迫走成三三?舉例來說,如果今天這裡有白的連成 四顆,再多一顆就連五了,所以黑方被迫要阻擋白方勝利,但這個位置剛好也會 造成黑方三三。另外 1918 年又多了一個規定,也就是黑方禁止走成四三三(如圖 2-1 中的 G 點),如果是五三三就是贏棋,四三三就是雙活三加上一個四,而這個 四可以是活四也可以是死四,現在連四三三也禁止黑方下,但即使這樣黑方還是 佔優勢。 後來在 1916 年日本棋院又規定禁止黑方走長連(如圖 2-2)。原本最陽春的五子 棋連五以上都算贏,可是現在卻禁止黑方長連。. 圖 2-2. 各種長連禁手. 禁長連就是連六以上不算贏,一定要剛好連五才能算贏,因此黑方受到很大 的限制,就是你即使下連六也不會贏。在這樣的過程中,就是不斷地在增加黑方 的禁著,那這樣下來還不夠,因為黑方還是佔優,這種事情是可以實驗的,因為 在高段棋士比賽中大量下會發現先下的人還是贏的多,因此更進一步,連黑方四 6.

(14) 四都禁止(如圖 2-3),所以黑方只有一條路可以獲勝,那就是四三,因此黑方就會 覺得越來越不舒服,因為每下一子都必須考慮哪個位置可下,而白方卻毫無禁忌, 這種規則是不對稱的規則。. 圖 2-3. 各種四四禁手. 另外,1931 年日本棋院又因為考慮到棋盤越大黑方贏的機率越多,就把 19 路棋盤縮小成 15×15 的專用棋盤[21]。在那個時候有兩個流派在爭,爭說到底要 多大,當然有一個流派說維持 19×19,另一個流派說 15×15,後來這個 15 路的贏 了,所以現在的連珠棋統一都要買新棋盤,就是要買 15 路的棋盤(不是 16 路,16 路就沒有天元了)。但是整個問題還存在,因為這些職業棋士說黑方還是贏面居多, 還是黑方佔優[22]。修改了這麼久,這個壓抑黑方的動作還不能壓抑成功。另外, 盤面縮小了以後,也造成了目前的一個問題,就是可下空間比 19 路的棋盤更小, 對電腦程式更有利,搜尋更容易找到答案。我們都知道,戰場越小的時候,搜索 越容易,所以 2001 年 Wagner 及 Virag[24]利用電腦證明了黑方還是佔優勢,黑方 先下還是必勝。這下就麻煩大了,所有花了大把力氣的專家們,改到西元兩千年 左右還搞不定,但是事情並沒有結束,更複雜的規則越來越多。. 7.

(15) 國際連珠棋協會(RIF,Renju International Federation)主要總部是在日本,1998 年他們就提出了一個規則[21],這個規則大概現在很多比賽都用了。其中就乾脆 列出 26 種開局給黑方去挑,因為黑方佔優的開局就先把它濾掉,最後濾到剩下 標準 26 種開局(如圖 2-4),這些開局就叫做指定開局法。. 圖 2-4. 連珠棋的 26 種標準開局法. 你是先手時必須從 26 種盤面挑一種,挑了以後盤面上立刻就擺了三顆,也就 是兩黑一白,這是先手方決定的,後手方並沒有參與權。先手方先決定那三子, 所以必須記得有哪 26 種開局法,所以通常會帶一本手冊,那為什麼要這些?坦白 說三顆子的組合太多了,統計上佔優的就把它濾掉,這樣會比較公平。日本人把 這 26 種開局取了名字,所以這標準 26 種開局就是現在日本風行的連珠棋的 26 8.

(16) 種標準開局法。 之後又加了一個規定「三手交換」 ,三手表示接下來後手方可以選擇拿黑或拿 白,你是先手方決定 26 種開局之一,換我後手時可以選擇是否黑白變色,表示 這 26 種開局還不一定哪個優那個劣。所以你選了一種,你不是黑而是假黑,我 可以變成要黑或要白,選好了以後我們稱之為三手交換,也就是因為落了三個子, 後手方可要求交換身分,他可以從後手變先手,也可以維持後手。接下來你是黑 是白才決定,決定後盤面上已經有兩個黑子一個白子,所以接下來輪到「真正的」 白方下的時候挺神奇的,白方下完第四手,到了第五手黑方下的時候,黑方還要 配合白方玩個遊戲,必須下兩個黑子,讓白方決定哪一個子要留下來,這就叫做 「五手兩打」,也就是第五手黑方打兩子讓白方扔掉一子,這下白方才從第六手 開始玩遊戲。第六手開始玩了以後,黑方還有禁著的規定,因為這時候盤面上黑 方的子仍然多於白方,因此這樣的規定才是目前大多數連珠棋比賽用的棋規,這 個遊戲你要不要玩?你可以玩也可以不玩,也可以加以訓練成為職業棋士,這就是 到目前為止新定的 RIF 棋規。 2009 年以前大概都是 RIF 規則當道,做為國際比賽主要的規則,也就是「三 手交換」與「五手兩打」的規則。那在這之後陸陸續續發現還是很多局面對黑方 依然有優勢,整個癥結點在於不管如何變化,剛開始壓抑黑方後,黑方仍然多白 方一子,因此容易變成連五獲勝,故在 2009 年之後衍生出一大堆也是很繁複的 規則,比如 Sakata 規則、Yamaguchi 規則(山口規)及 Tarannikov 規則等。這些規 則都有人用來玩,反正日本人非常用心在經營這一塊。每個人都弄一個規則就發 表出來,然後如果被看中了就拿來比賽,當然必須要做實驗證明誰比較優誰比較 不優。最後,國際連珠棋協會﹙RIF﹚於 2009 年和 2011 年的世界盃決定改採用 9.

(17) Yamaguchi 規則(山口規則),台灣也跟進於 2009 年 5 月 3 日舉辦的國手選拔賽使 用此一規則。山口規則簡介如下︰(1)假先手下前三手,此三手規則同「RIF 規則 」 。 (2)假先手設定五手打數。(3)假後手可選擇交換成先手或繼續為後手,決定後後手 自己著手。(4)先手提出打數個著棋點(不得同棋型),讓後手選擇。(4)之後規則同 「RIF 規則」。 除此之外,歐洲方面也有 Gomoku 規則的修改,也有許多版本,不過都是往 繁複的棋規設計,並沒有比日本方面的來得好。舉一例子來說明,歐洲的 SWAP 規則如下:假先方在棋盤任意下三手(二黑一白),接著假後方有三種選擇:(1) 選擇當黑方(2)選擇當白方(3)下第四、五兩手(一黑一白)再讓假先方選擇當黑方 或當白方,此後再按 Gomoku 規則繼續進行。 在中國大陸,也有一些人提出新棋規。例如:向祚雲先生[2]提出五子棋的一 種新規定—優連五子棋棋規。他提到,棋盤上連五子只有兩種類型:一種與棋盤 邊框平行(或垂直) ,他稱之為“直連”型; 一種與棋盤對角線平行(或垂直), 他稱之為“斜連”型,在五子棋中這兩類連五子是等價的。如果我們賦予白方一 種權利,即由白方決定直連、斜連中的一種為“優連”,例如,終局時黑方為五 子直連,白方為斜連,但白方決定斜連為優連而獲勝。其規定如下: (1)白方在 第 4 顆白子後必須立即決定優連;(2)若終盤無連五,黑方獲勝;只有一方連五, 該方獲勝;雙方有連五,同型則先連五獲勝,異型則優連獲勝;(3)長連等同連五。 這個棋規雖與眾不同,但仍十分繁複,也尚未驗證其是否公平。 另外,大陸的五子棋協會有一位李睿凡先生曾提出一個「一手交換規則」[3]: 假先手第一手可於任意一點下一顆黑子,之後假後手可選擇下黑方或下白方,這 樣假先手就不敢下太好的位置。這類似 Hex 棋,由於先走的一方有極大的優勢, 10.

(18) 所以有人發明了交換(swap)這個給 Hex 用的棋規。這個棋規和本論文的精神比 較接近,改善上算是又進了一步。然而「可交換身份」的棋規,仍較為不自然。 本論文則更進一步,將「可交換身份」的棋規完全廢除,玩家不必考慮自已是「假 先手」還是「假後手」,在實戰時,先手就是黑方,後手就是白方,也和絕大多 數的其它棋類遊戲一樣,玩家不致於混淆身份。. 第二節 目前五子棋的困境 五子棋目前的處境是這樣,首先是規則越來越多也越複雜,我們有看到這個 趨勢,從 1899 年到現在還不斷地在改,而且越改越複雜。身份要換來換去,還 有一堆禁著,這是走法不對稱的棋規。另外,指定開局、交換、禁手規則並不自 然,所以玩家很難記得所有規則,這個是普遍的大問題。 基本上,對於佔有優勢的一方,應該加以更多的限制,這就是「佔優者受限」 的觀念,本是無可厚非的事;然而,為了公平性而定了一堆繁複的規則,使得人 們在玩這個遊戲的時候就越來越不容易搞清楚要怎麼玩了。我們知道,其它有一 些棋盤規模較小的棋類也是已有定論(已遭破解),例如井字遊戲,已知雙方均不 犯錯時必和。另外,例如盤面大小為 6×6 的黑白棋,已被證明是「後下必勝」。 其它已被破解的棋類如連四棋(Connect-Four) [10]、Qubic[13]、8×8 Domineering[15]、 Fanorona[23],這些遊戲就不太會再舉行比賽了,而因規模較小也沒有人去改良其 棋規。 而棋盤規模極大的圍棋是先手方佔便宜,因此人們很早就設計了一個簡易的 「貼目」棋規,讓黑方貼補白方的劣勢,對雙方的可下棋位置就都毫無影響,可 說是一個極為成功的簡易棋規。 11.

(19) 我們下過很多棋類,大概如果你要遵照這些棋規的話,可能更改棋規後的五 子棋最難玩,因為你必須遵守棋規,不能下就是不能下,而思考的時候必須思考 哪些可下哪些不可下,而且是不對稱的,白方所有走步都可以,黑方就弄了一些 奇奇怪怪的禁著。如果再想到要交換身份,那我們就不知道這個遊戲要怎麼玩, 換來換去的話更麻煩。即使有 26 種指定開局,陸陸續續都有一些被破解,它們 被破解並不是說一定贏或輸,而是大量統計說這個開局來講對黑方比較優,或者 對白方比較優,那這種有偏頗的地方就不公平,為何會如此?因為棋規約束越多, 嚴格來說對電腦的搜索越有利,可允許的走步越少,越看得清楚誰輸誰贏。 有這些指定開局加上那些禁著,電腦程式很快就會搜索到比較深的地方,它 就知道會輸或贏。嚴格講起來,如果你都不做任何限制,像圍棋一樣,五子棋棋 盤的規模也是極大的,那搜索就挺困難的,搜索的空間很大,所以你就很難破解。 更改棋規後的五子棋也逐一慘遭破解的原因是規定太嚴苛,可下的走步越少, 越容易展開一切。那遊戲仍不公平,因為這些規則都是人為加上去的一些不對稱 規則,而比賽也越來越少,這也是現在最糟糕的情形,為什麼比賽越來越少?第一 個問題,人們認為它不公平,不公平的遊戲還有什麼好玩。第二個問題,規則太 繁複,大家也不願意去玩,只有少數的職業棋士可以記得了這麼多。另外,在學 術上,ICGA (International Computer Games Association)與 TCGA (Taiwan Computer Game Association)都不舉辦五子棋電腦程式的比賽,他們有舉辦的棋類有圍棋、 象棋、六子棋、暗棋、西洋棋、五五將棋與麻將等,這些項目呈現出蓬勃發展的 狀況。所以五子棋的命運很糟糕,因為規則越來越繁複,玩家越來越少,大家越 不想玩。但是其實這個遊戲並不是不好玩,主要就是新棋規很麻煩、而傳統的棋 規又不公平:黑方必勝。 12.

(20) 第三章 如何挽救五子棋的命運? 第一節 六子棋 我們怎麼去挽救五子棋的命運?當然第一個作法是去發明一個比較相像的 新遊戲,例如六子棋,讓下法變得完全不一樣。六子棋(Connnect6),又名連六棋 [1][6],為國立交通大學資訊工程系吳毅成教授於第十一屆國際電腦賽局研討會 (11th Advances in Computer Games Conference, ACG11)中提出的一系列 K 子棋當 中的一種[25]。六子棋的玩法和五子棋的玩法相似,但目標是連六子而非五子, 先手的一方(黑方)在第一手時下一子,之後雙方輪流各下兩子,如圖 3-1 所示。 六子棋的提出是有鑑於五子棋(Gomoku)和連珠棋(Renju)在幾經改善後仍無法完 全消除黑方(先手方)的優勢而提出的另一種較為公平的棋類,因此近幾年也風行 於全世界,ICGA 及 TCGA 也都有舉辦電腦程式的比賽。然而這樣並沒有挽救五 子棋,因為這已和五子棋的下法及行棋策略完全不同了[7][8]。. 圖 3-1. 六子棋盤面. 13.

(21) 第二節 林氏新棋規 2012 年 5 月份林順喜教授在台灣師大及開南大學兩校的演講中,首度提出「林 氏新棋規」[5],試圖挽救五子棋的命運。其中有幾個目標,第一個目標是要「維 持連五」,連五這個傳統的規則我們一定要維持。第二個目標是要「規則簡單」, 可是別人的規則已設計得那麼複雜,要怎麼簡化? 第三個目標是要「雙方公平」, 希望遊戲要公平,有更理想的簡單棋規嗎? 首先根據 Allis [9][12]的研究成果我們知道:如果黑方第一手下在天元,黑方 有很快的手段(最多 35 步)就可把白方打敗了,一個例子如圖 3-2 所示。. 圖 3-2. 黑方第一手下於天元的一局. 經過長時間的構思,我們想到一個新棋規,這個新棋規目前取名為「林氏新 棋規」[5],只有唯一的一條規則。這條規則非常簡單,就是我們規定第一手黑方. 14.

(22) 只能下在棋盤的外環區域,第二手起雙方就全部都自由了。現在我們來探討為何 這樣設計,根據我們長時間下五子棋的經驗,可瞭解黑方若第一手下在天元,必 定是最有威力的,因為這位置所有方向都可延伸出去最長的距離,攻擊的力度當 然也最佳。反過來,若黑方第一手下在棋盤外圍,則往邊界方向就有了障礙,當 然連五的機會就較少了,這時白方會贏的機會就大為增加了。. 第三節 尋找公平邊界 為了較快驗證我們的構想是否可行,我們先用一個軟體來跑跑看,我們可以 讓軟體自動對下。這個對下的軟體是很有名的「黑石」(圖 3-3),棋力大約有三段, 曾獲得 1998、2000 年世界電腦連珠棋競賽冠軍。這個軟體可設定其棋力為 10、6、 4、2 級、1、2、或 3 段。棋力設定越高,它搜索的時間就會越久,也就是程式會 跑越久。. 圖 3-3. 黑石軟體之介面 15.

(23) 假設我就把黑方第一手下在外環,然後就讓電腦自動對下,自動對下雙方都 用黑石的程式。這個軟體我們選擇自由的版本,也就是無禁版,即最傳統的五子 棋規則,毫無禁忌,雙方可在任何空點下。但是它並不亂下,因為它每一步都是 用還不錯的棋力在下。不過並不是每一步都保證是最佳走步,因為它沒有看到一 切。所以如果第一手下在右下角(如圖 3-4 的例子,是用二級的棋力在自動對下), 這個軟體很聰明,它知道這個白方第二手不能跑到天元去下,為什麼?如果第二手 白方下在天元,黑方在右下角就佔優了,因為接下來右下角黑方均多了一子,就 會較有贏面。因此第二手白方若下在遠離右下角戰場的時候會吃大虧。. 圖 3-4. 黑方第一手下於右下角位置之一局. 現在黑方第一手下在右下角,白方接著下在(5,L)位置,壓制了黑方的第一手, 那麼黑方就不一定佔優。以圖 3-4 來說,雙方纏鬥了共 58 手白方獲勝,分析這個 棋賽,58 層那麼深的遊戲樹,電腦程式有沒有看到?是沒有完全看到的。以目前 的軟硬體技術來說,如果有一個程式能快速搜索到 30 層,那就已經很了不起了。 16.

(24) 58 手才贏的話,其實是到最後的時候才看到贏的路徑,前面都是看不到的,所以 必須等到約 30 手後才開始明朗化,誰優誰劣才比較能一目了然。那你會想說到 30 步就會看到必勝之路,所以被破解了?並沒有,因為 30 步也是因為在更早之前 少了很多步看不到答案黑方才會落敗,如果看得到的話,黑方早已準備抵制白方 了。總而言之,遊戲樹裡有一方看不到那麼深而落敗,如果他提早看到,這一局 白方還不見得會贏。. 圖 3-5. 黑方先手於(2,O)位置之一局(白勝). 另一個例子如圖 3-5,我們將第一手擺在隔了角落一個位置,我們也讓三段的 「黑石」自動對下,但它纏鬥了很久很久,結果在第 120 步白贏了。另外,圖 3-6 的黑方第一手下在下邊界,結果白在第 44 步贏了。圖 3-7 的例子則黑贏了。. 17.

(25) 圖 3-6. 黑方先手於(1,M)位置之一局(白勝). 圖 3-7. 黑方先手於(2,M)位置之一局(黑勝). 可見有些時候白會贏,有些時候黑會贏,可是會發現一件事情,對這個軟體 而言,如果第一步不是下在很中間或很靠邊界,它基本上會纏鬥了很久某一方才 看到贏的路徑或者最後形成和局。因此由這些例子可以看出,如果黑方第一手下 18.

(26) 在天元幾乎是必贏,但是如果下在最角落,黑方就很容易輸,因為第一手的發展 性低。簡單來說,就是黑方下在中央佔很大的優勢,下在角落會吃虧,所以我們 要去尋找一條所謂的邊界,在那個邊界上對雙方而言,都不容易贏也不容易輸, 經由大量的統計就可以找出邊界。所以整個新棋規只有一個簡單的思維,就是黑 方第一手不能下在棋盤的中腹或附近,要下在邊界上或外圍。而第一手下完接下 來雙方就毫無禁著的對下,所有的空格都可以下。因此就程式而言,所有的空格 你都要考慮,所以這遊戲就變複雜了,而雙方都不容易贏、也不容易輸,因此也 就有了公平性可言。 我們也用黑石這個五子棋程式設定一段的棋力對下,因為一段的思考速度較 三段快很多,一段的對下棋力較弱,所以有些地方不一定真的會贏或輸,很多都 是碰運氣。不過我們可以看到一個趨勢,黑方若在天元下第一手,大概 20 至 30 幾步就贏定了。而對五子棋而言,第一手下天元會贏,下在天元的隔壁大概也會 贏,因為也才偏移一格而已,所以可以發現黑方下在天元附近,黑方要獲勝是非 常地容易。反之,若黑方第一手下在角落的時候,白方會贏的機會比較大,而且 也贏得很快,但是並不保證一定會贏。不過我們會畫出一個邊界線,也就是我們 要找的統計出來的邊,那為何不能百分之百的破解?因為可走的分支度太龐大了, 我們不可能搜索一個 225 層這麼深的遊戲樹,任何一個軟體都不可能,連高段棋 士也不可能。高段棋士厲害是因為他們都只針對天元的開局,Allis 的證明[9]也只 是針對天元,而其它的位置都尚未破解。. 第四節 迫著搜尋 上一節提到利用黑石軟體統計勝率以求出公平的邊界,但運用統計的方式去 19.

(27) 驗證新棋規的可行性並不嚴謹,因此我想仿效 Allis 使用迫著搜尋技術來證明之。 我參考 Akihiro Kishimoto 論文[18]中 depth first proof number search 方法並在 Ogemust 網站找到 source code,這份 code 實作 depth first proof number search 演算 法且應用於八路五子棋殘局盤面的破解,為什麼是破解八路而非十五路的原因, 應該是由於這份 code 利用 Bitboard 技術[20]來加速走步產生,而現今電腦普遍為 64 位元處理器,因此如果要做更大的五子棋盤面破解,就只有兩種方法,其一是 用多個 64 位元 Bitboard 串連起來解決走步產生的問題,其二就是不使用 Bitboard 技術則不會有硬體限制的問題,但走步產生的速度就會降低很多。然而這份 code 也使用了 Transposition Table 來解決重複盤面的問題,如圖 3-8 所示,上面為兩個 不同開局的盤面,但是皆有可能走到下面的情況,以上提到的這些技術將會在下 一章有詳細的介紹。. 圖 3-8. 五子棋重複盤面. 20.

(28) 第四章 資料結構與演算法 第一節 Proof Number Search 演算法 Proof number search(縮寫為 PNS) 是 Allis 在 1994 年提出的演算法[9][12], 主要用於兩人對局遊戲時,能證明某些盤面必勝、必敗的演算法。兩人對局遊戲 例如:六子棋、五子棋、圍棋、象棋等,都能適用 PNS 來證明某些盤面的勝負。 PNS 是一種 best first search 的演算法,需把整顆搜尋樹存在記憶體當中,直到證 明勝負或資源耗盡為止。. 圖 4-1. PNS 例子. 圖 4-1 是之後說明時會用到的例子,PNS 將攻擊方下完著手之盤面用圓型代 表,防守方下完著手之盤面用方型代表。此例以五子棋來說,根節點 R 是黑方(攻 擊方),M、N 為白方(防守方),A~G 為黑方(攻擊方)。 若要證明此例黑必勝(R 必勝),白方所有擋法都要能證明是黑必勝(M、N 必 勝),所以圓型節點又稱為 And 節點;要證明 M 是黑必勝, A~D 其中一個黑 必勝即可,所以方型節點又稱為 Or 節點。我們說 PNS 也是一種 And/Or 樹。 21.

(29) Proof number search 主要有兩個數值 proof number(pn) 和 disproof number(dn), 代表的意義為當前盤面還須展開幾個子盤面才可以證明此盤面必勝或必敗,所以 當一個盤面必勝時,pn 與 dn 的值分別為 0 與∞,反之當必敗時其值分別為∞與 0,而預設值皆為 1,代表未知,如圖 4-2 所示,其中較粗的箭頭代表最佳路徑。. 圖 4-2 pn 與 dn 值所代表的意義. 然而 PNS 演算法可以分成三個階段,首先是 Select 階段,我們可以經由 pn 和 dn 兩個數值導引 PNS 從根節點往下,選出每次最易證出的節點(Most Proving Node, MPN), MPN 是指各個子節點中最有可能得到答案的節點(圖 4-3 中正方形 node n);. 22.

(30) 圖 4-3 Select stage(MPN = n) 接著為 Develop 階段,將 MPN 的所有子節點展開並執行 Evaluation(圖 4-4)。. 圖 4-4 Develop stage(展開 n 的子節點並設定其 pn 與 dn 值) 最後是 Update 階段,更新祖先節點的 pn 與 dn 且將結果往上更新(圖 4-5), 若舊值與新值相同則停止往上更新。. 23.

(31) 圖 4-5 Update stage(更新 n 的 pn 與 dn 值). 以上三個步驟會不斷地重複,直到勝負結果已出或資源耗盡。經由之前的介 紹,我們了解搜尋樹會往最有可能證明出必勝或必敗的路徑去走,所以會比傳統 的 depth first search 或 breadth first search 更加有效率,但由於必須將整棵樹存在 記憶體中,因此 PNS 較適用於解決棋類遊戲殘局的問題。. 第二節 Depth First Proof Number Search 演算法 Depth first proof number search(簡稱 Df-pn)為 Ayumu Nagai[14]於 2002 年所提 出的演算法,顧名思義是將原本 proof number search 運用 best first search 改為 depth first search,然而 Df-pn 的優點在於展開的內部節點較少,所耗費的記憶體資源也 較 PNS 小,此技術增加兩個 threshold 變數作為門檻值,判斷目前的節點是否為 most-promising node,若此節點的 pn 或 dn 的值超過 threshold ,則代表有另一個 子節點比此節點更佳,圖 4-6 為此技術的 pseudo code。. 24.

(32) 圖 4-6. The pseudo code of Df-pn. 由 pesudo code 中 可 以 明 顯 看 出 此 技 術 有 用 到 iterative deepening 及 transposition table,以改進 PNS 記憶體不足及效能不佳的缺點。然而在 Df-pn 算 法中也加上了 1+ε的方法改良,避免因門檻太嚴格而造成 MPN 在不同子樹中頻 繁的 switch,如圖 4-7 所示,若將下方式子中的 p 𝑡1 = min(pt,𝑝2 +1) 改成 p 𝑡1 = min(pt,𝑝2 (1+ε)) ,假設ε= 0.25,則圖 4-7 中左方 3013 的值變成 3012(1+0.25) = 3765,即可改善頻繁 switch 的問題 。 25.

(33) 圖 4-7. 因門檻太嚴格造成 switch 頻繁. 第三節 Bitboard 介紹 Bitboard 顧名思義是指將盤面上每個位置用 1 個 bit 來表示,最早使用 bitboard 方法的棋類遊戲是西洋棋,包括頂尖西洋棋程式美國 chess4.5 及蘇聯 Kaissa 皆有 使用 bitboard,原因在於西洋棋棋盤剛好為 8 × 8,且當時最好的電腦處理器為 64 bits。在之前若要紀錄哪個棋子在什麼位置就要造一個一維陣列來存放,然後 當要產生走步時必須先建表並檢查棋子可走的位置是否為空,這樣的處理方式相 當地沒效率。然而使用 bitboard 技術在走步產生部分只需要做一些邏輯運算,速 度相當快。 以 8 × 8 五子棋盤面為例,如果用一維陣列的方式存放,必須記錄某個位置 是黑是白或是空,而走步產生的部分比其他棋類簡單,只需要檢查每個位置是否 為空,但 sequential 檢查相當慢;若使用 bitboard 技術,只要用兩個 64 bits 整數 分別記錄黑(black)與白(white)的盤面,則走步產生只需要做~(black | white)的運算 即可(圖 4-8)。 26.

(34) 8×8 五子棋盤面. black. white 圖 4-8. ~ (black | white). Bitboard 應用於 8×8 五子棋可走步產生. 27.

(35) 第五章 程式改良與實驗數據 第一節 走步產生改良 我利用 bitboard 的特性對走步產生做改良,將原本 Ogemust[19]網站上的 source code 運用 for 迴圈的方式改為用 shift bit 的方式去產生走步,減少計算所需 的時間;另外運用 mask 的方法將原先的走步產生順序改為更符合人類思考的模 式,以提升程式效率,如圖 5-1 所示,左側為原先走步產生次序,右側為 mask 後之走步產生次序。. 圖 5-1. 走步產生次序(由小到大). 此外,我更進一步想知道不同的遮罩方式,其效率是否也有差異,因此對每 一種 n-mask 遮罩做實驗,其中 n-mask 代表的意思是走步產生次序用到 n 個遮罩, 1≦n≦4,以圖 5-1 左側的棋盤表示法為例,27-28-35-36 為最內層的 mask,將此 同心矩形往外延伸即可得到其餘的 mask,如圖 5-2 所示。. 28.

(36) mask2. mask3. mask1. mask2 mask1. 圖 5-2. 2-mask 及 3-mask 示意圖. 因此我們可以比較用不同的遮罩數以及是否使用 shift bit 動作在同樣的測試 盤面中其耗費的時間多寡,如表 5-1 所示。其中的 Test1 到 Test8 的八種測試盤面 列在附錄 A 中。. 表 5-1. 是否使用 shift bit 及 n-mask 的時間比較. Time(s). Non-shift bit. Shift bit. 2-mask. 3-mask. 4-mask. Test1 Test2 Test3 Test4 Test5 Test6 Test7 Test8. 8136.69. 7984.67. 7611.7. 7154.17. 8173.05. 909.078. 895. 807.672. 799.454. 1098.75. 1617.61. 1693.45. 1798. 1524.84. 1880.16. 19038.9. 18755.5. 25415.1. 15511.3. 17087. 7.688. 7.625. 7.843. 6.031. 6.547. 115.578. 114.422. 110.328. 96.735. 159.563. 2.109. 2.094. 2.031. 2. 2. 1.984. 1.985. 1.969. 1.985. 1.984. 由表 1 我們可以看到,利用 shift bit 的確比 non-shift bit 所花的時間少;然而 當盤面複雜或是需要長時間的搜尋時,3-mask 會較其他方式更為節省時間,因此 29.

(37) 若要破解黑方第一手位置是否必勝或必敗,用 3-mask 應該會有不錯的效能。. 第二節 連五判別改良 在連五判別方面,原先 Ogemust 網站上的程式所使用的方法為對四個方向(垂 直、水平、左斜與右斜)皆作一次連五判別,雖然這個方法比較直覺且實作容易, 但由於連五判別相當頻繁,因此整個程式會花費相當多的時間在判別是否連五, 所以我著手對這個部分作出一些改良。 首先我們可以知道當一子落在盤面上時,會影響盤面是否連五的範圍為以此 子為中心的八個方向延伸四個空格,如圖 5-3 所示。. 圖 5-3. 當下走步之連五範圍. 因此我們可以用 mask 的方式將連五範圍裡的位置取出並作連五判別即可, 顯然這種米字形範圍在實作上一定有相當的難度,所以我們必須用一些特別的方 法處理,然而在 Pradyumna Kannan 的論文[17]中有提到 Magic Move-Bitboard Generation 這個神奇的方法,將 mask 出來的 bitboard 乘上一個 magic number 後再 向右 shift 數個 bits,而這些米字形的位置則會落在高位元區域,以西洋棋主教走 30.

(38) 步產生為例(圖 5-4),圖中左邊為主教可走的九個位置,乘上中間的一個神奇數字 後,所有走步就如右邊所示皆集合在高位元區域,之後再向右 shift (64-(主教之走 步)),所得到的 64 位元整數即為 hash key,再到事先建好的 hash table 中找答案。 圖 5-5 為此方法的 pseudo code。. 圖 5-4. 圖 5-5. Magic Move-Bitboard Generation 應用於西洋棋[4]. The pseudo code of Magic Move-Bitboard Generation. 31.

(39) 從圖 5-5 中我們可以知道 moveDB 這個二維陣列的 hash table 所存放的值就 是當前某個兵種在 square 位置可移動到哪些地方,而 mask 與 magic 分別存放此 兵種在 square 位置的 mask bitboard 值與對應的 magic number。 然而在實作這個方法時遇到了兩個問題,其一為由於五子棋是八個方向都要 判別連五,因此 mask 出來的連五範圍最多有 27 個位置,故需要227 容量大小的 table 存放,耗用太多的記憶體,所以我將水平垂直與斜線分開來處理,不過需要 多找一倍的 magic number 數量;再來遇到的問題是尋找 magic number 時 collision rate 很高,畢竟我希望找到的是 perfect hashing 的 magic number,因此為了降低 collision rate,以及發現五子棋 hash table 所需存放的值為是否連五,故若 mask 結 果為連五(以 F 表示),而 hash key 對應的值亦為 F(圖 5-6),則我視為沒有 collision, 反之亦然。附錄 B 列出所有位置的垂直水平方向的 Magic Numbers。附錄 C 列出 所有位置的斜線方向的 Magic Numbers。. 圖 5-6. Magic Move-Bitboard Generation 應用於五子棋概念圖 32.

(40) 接下來我們做實驗比較一下有使用 Magic Move-Bitboard Generation 及未使用 的效能相差多少,表 5-2 為八個測試盤面的改良前後時間比較。從表 5-2 可看出 使用 Magic Move-Bitboard Generation 方法的效能明顯優於 original,然而 Test7 及 Test8 盤面效能差於 original 的原因在於事先建 hash table 需耗時 1~2 秒,因此從 實驗結果來看,使用 Magic Move-Bitboard Generation 對於後續勝負問題的研究大 有裨益。 表 5-2. 是否使用 Magic Move-Bitboard Generation 之時間(s)比較 3-mask(original). 3-mask(MMBG). Test1. 7154.17. 2814.6. Test2. 799.454. 312.307. Test3. 1524.84. 581.03. Test4. 15511.3. 6373.12. Test5. 6.031. 3.845. Test6. 96.735. 47.028. Test7. 2. 2.387. Test8. 1.985. 2.375. 第三節 Deadpoint 加速法 由於五子棋走步產生是直接取空格即可,不像暗棋或象棋是每個棋子本身有 不同的走步規則,因此我們可以定義一個名稱叫做死點(Deadpoint),死點為黑白 雙方落子於此位置皆不可能造成連五,如圖 5-7 所示。. 33.

(41) 圖 5-7. 五子棋死點盤面. 圖中可以清楚地看到若將黑子或白子落於小圓點處並不會造成連五,因為雙 方皆已將此點之連五範圍兩側封死,所以我們可以利用這些死點來減少走步產生 的數量,以達到效能加速之目的。 然而在實作方面,定義一個 deadpoint 的 64 位元整數變數,用來記錄目前死 點在棋盤上的位置,而且會從根節點一路更新並傳遞下去;而在走步產生時,會 先將這些死點濾掉,以減少搜尋樹的分支度。至於如何判別此點是否為死點,方 法與判別是否連五大同小異,只需要判斷此點滿足黑白雙方皆不可能連五。此外, 在圖 5-7 中我們了解要滿足死點的條件至少棋盤上需有 16 個棋子,因此可以推測 這個方法應於中局左右(以 8×8 盤面大小而言)使用效果較好,下表為是否使用 Deadpoint 加速法之時間比較表。 從下表 5-3 中的數據來看,由於 Test1~Test8 皆為中局左右的盤面,所以效能 提升的幅度相當大;Test6 在使用此方法後時間反而增加的原因在於這個測試盤面 的死點相當少,因此 deadpoint 過濾的 overhead 造成了這個結果。. 34.

(42) 表 5-3. 是否使用 Deadpoint 加速法之時間(s)比較. 欄1. MMBG. MMBG+DP. Test1. 2814.6. 25.467. Test2. 312.307. 8.032. Test3. 581.03. 4.806. Test4. 6373.12. 72.546. Test5. 3.845. 4.666. Test6. 47.028. 59.314. Test7. 2.387. 2.347. Test8. 2.375. 2.345. 此外,使用 deadpoint 還有一個優點,那就是如果需要縮小盤面來做實驗,不 需要改太多的地方,只要將 deadpoint 的預設值改成你想要遮蔽的區域,例如把 8 ×8 大小的盤面縮小成 6×6,則我們只要將 deadpoint 設成 0xFF818181818181FF 即 可(圖 5-8),相當的方便且實用。. 圖 5-8. deadpoint 設為 0xFF818181818181FF,中間空白部分即為 6×6 盤面. 35.

(43) 第六章 實驗結果與分析 第一節 前言 我著手做了兩個實驗,用來做實驗的電腦規格為 Windows 7、 CPU 3.10 GHz 、 RAM 8.0 GB。第一個實驗是使用黑石(無禁版)這個軟體來統計五子棋第一手下在 各個位置的勝負結果,這個軟體在 1998 及 2000 年在世界電腦連珠棋競賽獲得冠 軍,所以我們相信這個實驗是有一定的參考價值存在。第二個實驗我利用前一章 改良出來的程式先以 5×5 盤面作實驗,以期望在短時間內可以得出五路的勝負問 題結果,之後再擴大到 6×6 及 7×7 盤面。. 第二節 實驗一 我們讓黑石分別用一段及三段的棋力,將每個位置當第一手做自動對下並記 錄其勝負(圖 6-1 及圖 6-2),例如圖 6-1 的左上角「黑 95」代表第一手黑方下在這 個位置,雙方共落了 95 個子,最後勝方為黑。圖 6-1 的左上角另有一個「白 120」 代表第一手黑方下在這個位置,雙方共落了 120 個子,最後勝方為白。另外,圖 6-1 的左方「和 144」代表第一手黑方下在這個位置,雙方共落了 144 個子,最後 雙方為和棋。. 36.

(44) 圖 6-1. 黑石設定一段於各點位之勝負記錄. 圖 6-2. 黑石設定三段於各點位之勝負記錄. 接著我們以黑石設定不同棋力(共 7 種等級)將每個位置當第一手做自動對下, 各下一局。棋力設定為 3 段時,最耗時間,有時候一局就需要對下一整天。 第一手下在各位置的勝率,整理如圖 6-3。由以上實驗數據可以發現邊界大 約是在第二排的範圍,也就是說第一手下在第二排這個邊界上(或附近)對雙方而 言是比較公平的。如果第一手下在第一排則對黑方較為不利,但黑方可選擇不下 37.

(45) 第一排。因此我們可規定「林氏新棋規」[5]如下:黑方第一手只能下在棋盤外圍 的第二排或第一排,這就是我們的新棋規。當然這是初步的一個構想,將來經過 較長時間的實驗驗證,也有可能這個邊界會做一些調整(例如往內到第三排或往外 到第一排),使其更具公平性。. 圖 6-3. 黑石從十級至三段第一手下於各點位之勝率統計. 第三節 實驗二 由前一個實驗我們知道若要得出五子棋黑方第一手之盤面的勝負結果, 只需要對八分之一盤面做實驗即可。首先要實驗的盤面大小為 5×5,因此我們只 要做黑方第一手下在圖 6-4 的六個點,就可以得出整個盤面的勝負關係。. 38.

(46) 圖 6-4. 5×5 五子棋盤面需實驗之位置. 實驗用的程式為前一章作眾多改良之五子棋程式,表 6-1 為各位置當成黑方 第一手所得到的勝負結果與執行時間。 表 6-1. 5×5 五子棋盤面之勝負結果. 位置. 執行時間(s). 勝負結果. 1. 35.8. 和. 2. 39.04. 和. 3. 30.29. 和. 4. 41.9. 和. 5. 32.55. 和. 6. 34.3. 和. 由上表可知,我們只需要花三十到四十秒左右的時間就可以得出 5×5 盤面的 勝負結果,皆為和。但其實在實驗之前就可以預料到這個結果,因為只要某一方 在 5×5 盤面任意位置下一子,則另一方在此位置之連五範圍皆不可能連五,因此 會導致盤面上的位置很快地都變成了死點。 再來要實驗的盤面大小為 6×6,我們如同 5×5 盤面做黑方第一手下在圖 6-5 的六個點,就可以得出整個盤面的勝負關係。. 39.

(47) 圖 6-5. 6×6 五子棋盤面需實驗之位置. 表 6-2 為各位置當成黑方第一手所得到的勝負結果與執行時間。 表 6-2. 6×6 五子棋盤面之勝負結果. 位置. 執行時間(s). 勝負結果. 1. 5416.3. 和. 2. 5534.07. 和. 3. 5188.95. 和. 4. 5663.7. 和. 5. 5512.53. 和. 6. 5722.06. 和. 由表 6-2 可以知道,各個位置的執行所需時間皆差不多,大約一個半小時的 時間,而勝負結果更是如出一轍,皆為和,接下來我們繼續將盤面擴大為 7×7 大 小,然而也只需要對八分之一的盤面做實驗即可,所以有十個點作為實驗對象, 如圖 6-6 所示。. 40.

(48) 圖 6-6. 7×7 五子棋盤面需實驗之位置. 故我對這十個點同樣以改良過的程式做實驗,其執行時間與結果如表 6-3 所 示。 表 6-3. 7×7 五子棋盤面之勝負結果. 位置. 執行時間(s). 勝負結果. 1. 435644.1. 和. 2. 440381.69. 和. 3. 419989.26. 和. 4. 420073.53. 和. 5. 443901.7. 和. 6. 432225.18. 和. 7. 428336.32. 和. 8. 413699.5. 和. 9. 431169.84. 和. 10. 426157. 和. 由表 6-3,不難看出 7×7 所花的時間比 6×6 長許多,大約需花五天左右的時 間,而勝負結果第一手下在各位置皆為和。. 41.

(49) 第七章 結論與未來研究方向 本論文利用統計與證明兩種不同的實驗方法去驗證新棋規的可行性。在統計 方面的實驗結果稍微可以看出新棋規的理念是對的,由於只使用五子棋軟體黑石 來實驗,雖然此軟體的棋力有三段之高,但仍會令人感到不客觀;再者此實驗的 樣本數量太少,這也是會讓人懷疑其正確率,故此研究的下一個步驟為蒐集更多 棋力不差的五子棋軟體,並利用它們來統計棋盤上各位置的勝負結果,以求得更 準確的公平邊界。 然而在證明方面的實驗結果與新棋規可以說是相差甚遠。從對 5×5、6×6 與 7 ×7 盤面做實驗之結果皆為和來看,並沒有辦法驗證新棋規的概念正確與否,不過 我們考量到由於盤面過小而導致死點於前中局數量過多,因此造成黑白雙方和棋 的機率大幅提高,也導致 Df-pn 在破解小盤面所需的時間較長(對五子棋而言), 所以在未來課題方面,便是想辦法克服 bitboard 應用到 15×15 或 19×19 五子棋盤 面上,也可以與統計方面的實驗結果相互對照。. 42.

(50) 參考文獻 [1] 六子棋首頁,http://www.connect6.org/。 [2] 向祚雲,介紹五子棋的一種新規定——優連五子棋棋規, http://www.wuzi8.com/Article/HTML/ 2256.html。 [3] 李睿凡,關於五子棋的常見誤解, http://122.225.62.170:8080/viewthread.php?tid=16&from=indexheats。 [4] 技術深研 http://chessprograming.wikispaces.com。 [5] 林氏五子棋新棋規首頁, http://www.csie.ntnu.edu.tw/~linss/Lin-Rule-For-Five-in-a-row.htm。 [6] 黃德彥,五子棋相關棋類人工智慧之研究,國立交通大學碩士論文,2005 年。 [7] 劉雲靑,六子棋中一個結合迫著搜尋的防禦性策略。國立臺灣師範大學碩士 論文,2009 年。 [8] 詹宜智,適用於六子棋之 PNS 研究,國立交通大學碩士論文,2009。 [9] L. V. Allis, “Searching for Solutions in Games and Artificial Intelligence,” Ph.D. Thesis, University of Limburg, Maastricht, 1994. [10] L. V. Allis, “A Knowledge-Based Approach of Connect-Four: The game is over, White to move wins,” M.Sc. thesis, Vrije Universiteit, Amsterdam, 1988. [11] L. V. Allis, H. J. van den Herik, and M. P. H. Huntjens, “Go-Moku Solved by New Search Techniques,” Computational Intelligence, Vol. 12, 1996, pp. 7–23. [12] L. V. Allis, M. van der Meulen, H. J. van den Herik, “Proof-number search,” 43.

(51) Artificial Intelligence, Vol. 66 (1), 1994, pp. 91–124. [13] L. V. Allis and P. N. A. Schoo, “Qubic Solved Again,” In H. J. van den Herik and L.V. Allis (eds.), Heuristic Programming in Artificial Intelligence 3: The Third Computer Olympiad, Ellis Horwood, Chichester, 1992, pp. 192–204. [14] A. Nagai, "Df-pn algorithm for searching AND/OR trees and its applications", Ph.D. Thesis, Gunma University, 2002. [15] D. M. Breuker, J. W. H. M. Uiterwijk, and H. J. van den Herik, “Solving 8×8 Domineering,” Theoret. Comp. Sci., Vol. 230, 2000, pp. 196–206. [16] H. J. van den Herik, J.W.H.M. Uiterwijk, and J.V. Rijswijck, “Games solved: Now and in the future,” Artificial Intelligence, Vol. 134, 2002, pp. 277–311. [17] P. Kannan, “Magic Move-Bitboard Generation in Computer Chess,” April 30, 2007. [18] A. Kishimoto, “Correct and Efficient Search Algorithms in the Presence of Repetitions”, Department of Computer Science, Univerity of Alberta, 2005. [19] Ogemust http://code.google.com/p/ogemust/source/browse/src/?r=30485314b5f7b532faa1a 63c7b98808371286edb. [20] P. S. Segundo, R. Galán, F. Matía, D. R.-Losada, A. Jiménez, "EFFICIENT SEARCH. USING. BITBOARD. MODELS",. Intelligent. Control. Group,. Universidad Politécnica de Madrid, 2006. [21] Renju. International. Federation,. The. International. Rules. of. Renju,. http://www.renju.nu/ rifrules.htm. [22] G. Sakata and W. Ikawa, Five-In-A-Row. Renju. The Ishi Press, Inc., Tokyo, 44.

(52) Japan. [23] M. P. D. Schadd, M. H. M. Winands, M. H. J. Bergsma, J. W. H. M. Uiterwijk, and H. J. van den Herik, “Fanorona is a Draw,” ICGA Journal, Vol. 30(1), 2007, pp. 43–44. [24] J. Wágner and I. Virág, “Solving Renju,” ICGA Journal, Vol. 24(1), 2001, pp. 30–34. [25] I-C. Wu and D.-Y. Huang, “A New Family of k-in-a-row Games, ” ACG11, September 2005.. 45.

(53) 附錄 A 測試盤面 Test1. Test2. Test3. Test4. 46.

(54) Test5. Test6. Test7. Test8. 47.

(55) 附錄 B Magic Number(一) 垂直水平方向的 Magic Numbers 位置 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40. 方向 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +. 連五範圍(位置) 1,2,3,4,8,16,24,32 0,2,3,4,5,9,17,25,33 0,1,3,4,5,6,10,18,26,34 0,1,2,4,5,6,7,11,19,27,35 0,1,2,3,5,6,7,12,20,28,36 1,2,3,4,6,7,13,21,29,37 2,3,4,5,7,14,22,30,38 3,4,5,6,15,23,31,39 9,10,11,12,0,16,24,32,40 8,10,11,12,13,1,17,25,33,41 8,9,11,12,13,14,2,18,26,34,42 8,9,10,12,13,14,15,3,19,27,35,43 8,9,10,11,13,14,15,4,20,28,36,44 9,10,11,12,14,15,5,21,29,37,45 10,11,12,13,15,6,22,30,38,46 11,12,13,14,7,23,31,39,47 17,18,19,20,0,8,24,32,40,48 16,18,19,20,21,1,9,25,33,41,49 16,17,19,20,21,22,2,10,26,34,42,50 16,17,18,20,21,22,23,3,11,27,35,43,51 16,17,18,19,21,22,23,4,12,28,36,44,52 17,18,19,20,22,23,5,13,29,37,45,53 18,19,20,21,23,6,14,30,38,46,54 19,20,21,22,7,15,31,39,47,55 25,26,27,28,0,8,16,32,40,48,56 24,26,27,28,29,1,9,17,33,41,49,57 24,25,27,28,29,30,2,10,18,34,42,50,58 24,25,26,28,29,30,31,3,11,19,35,43,51,59 24,25,26,27,29,30,31,4,12,20,36,44,52,60 25,26,27,28,30,31,5,13,21,37,45,53,61 26,27,28,29,31,6,14,22,38,46,54,62 27,28,29,30,7,15,23,39,47,55,63 33,34,35,36,0,8,16,24,40,48,56 32,34,35,36,37,1,9,17,25,41,49,57 32,33,35,36,37,38,2,10,18,26,42,50,58 32,33,34,36,37,38,39,3,11,19,27,43,51,59 32,33,34,35,37,38,39,4,12,20,28,44,52,60 33,34,35,36,38,39,5,13,21,29,45,53,61 34,35,36,37,39,6,14,22,30,46,54,62 35,36,37,38,7,15,23,31,47,55,63 41,42,43,44,8,16,24,32,48,56. 48. 連五範圍(hex) 10101011e 20202023d 40404047b 8080808f7 10101010ef 20202020de 40404040bc 8080808078 10101011e01 20202023d02 40404047b04 8080808f708 10101010ef10 20202020de20 40404040bc40 808080807880 10101011e0101 20202023d0202 40404047b0404 8080808f70808 10101010ef1010 20202020de2020 40404040bc4040 80808080788080 10101011e010101 20202023d020202 40404047b040404 8080808f7080808 10101010ef101010 20202020de202020 40404040bc404040 8080808078808080 101011e01010101 202023d02020202 404047b04040404 80808f708080808 101010ef10101010 202020de20202020 404040bc40404040 8080807880808000 1011e0101010100. Magic Number(hex) 00fffffff00807ff 00fffffffdfa07ff 00fffffffdfe03ff 00fffffffe0100ff 00fffffffef0907f 00fffffffef927df 00fffffffefd23df 00fffffffefdab57 00003ffffbf40ffb 00003ffffc33cffc 00003ffeddc75aa5 00003fff6ebf51b0 00003fffbb3b4940 00003ffffb9fc480 00003ffffc2f3440 00003ffffc345770 000000fc0006fc40 000000fc0006fc3c 000000fc0007fb1e 01fffffc00142d40 01fffffc003d8300 000000fc001e0502 000000fc005959aa 000000fc007dbdd3 007fffffee000804 007ffffc13ffeeff 007ffffc13ffee81 007ffff8f8000881 007ffffafe0005ff 007ffffc14002c81 007ffffc14010507 007ffffefdbfff43 00fffff4b553fffc 00fffff4b553fffe 00fffff4b4500002 00fffff3f553fffe 00fffff44c74000a 00fffff4b5e3fffe 00fffff4b5e4ef72 00fffff403010007 003fffffc6fb3cfe.

(56) 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63. + + + + + + + + + + + + + + + + + + + + + + +. 40,42,43,44,45,9,17,25,33,49,57 40,41,43,44,45,46,10,18,26,34,50,58 40,41,42,44,45,46,47,11,19,27,35,51,59 40,41,42,43,45,46,47,12,20,28,36,52,60 41,42,43,44,46,47,13,21,29,37,53,61 42,43,44,45,47,14,22,30,38,54,62 43,44,45,46,15,23,31,39,55,63 49,50,51,52,16,24,32,40,56 48,50,51,52,53,17,25,33,41,57 48,49,51,52,53,54,18,26,34,42,58 48,49,50,52,53,54,55,19,27,35,43,59 48,49,50,51,53,54,55,20,28,36,44,60 49,50,51,52,54,55,21,29,37,45,61 50,51,52,53,55,22,30,38,46,62 51,52,53,54,23,31,39,47,63 57,58,59,60,24,32,40,48 56,58,59,60,61,25,33,41,49 56,57,59,60,61,62,26,34,42,50 56,57,58,60,61,62,63,27,35,43,51 56,57,58,59,61,62,63,28,36,44,52 57,58,59,60,62,63,29,37,45,53 58,59,60,61,63,30,38,46,54 59,60,61,62,31,39,47,55. 49. 2023d0202020200 4047b0404040400 808f70808080800 1010ef1010101000 2020de2020202000 4040bc4040404000 8080788080808000 11e010101010000 23d020202020000 47b040404040000 8f7080808080000 10ef101010100000 20de202020200000 40bc404040400000 8078808080800000 1e01010101000000 3d02020202000000 7b04040404000000 f708080808000000 ef10101010000000 de20202020000000 bc40404040000000 7880808080000000. 003fffffe2e21e01 01ffffe300f30c01 01ffffe300dd2201 01ffffe301ae27f8 01ffffe301ae3b7c 001ffffc9f733581 003fffff1fde827f 007fffff9a2346fa 007fffff9a2346f4 007fffff9a2346f0 007fffff9a234730 007fffff9a233618 007fffff9a23477c 007fffff9a23477d 007fffff9a23477f 007fffff9a23477f 007fffff9a23477e 007fffff9a23477f 007fffff9a23477f 007fffff9a23477f 007fffff9a23477f 007fffff9a23477f 007fffff9a23477f.

(57) 附錄 C Magic Number(二) 斜線方向的 Magic Numbers 位置 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40. 方向 × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × ×. 連五範圍(位置) 9,18,27,36 10,19,28,37 11,20,29,38 12,21,30,39 11,18,25,32 12,19,26,33 13,20,27,34 14,21,28,35 17,26,35,44 0,18,27,36,45 1,19,28,37,46 2,20,29,38,47,4,18,25,32 3,21,30,39,5,19,26,33,40 6,20,27,34,41 7,21,28,35,42 22,29,36,43 25,34,43,52 8,26,35,44,53 0,9,27,36,45,54,4,11,25,32 1,10,28,37,46,55,5,12,26,33,40 2,11,29,38,47,6,13,27,34,41,48 3,12,30,39,7,14,28,35,42,49 15,29,36,43,50 30,37,44,51 33,42,51,60 16,34,43,52,61,4,11,18,32 8,17,35,44,53,62,5,12,19,33,40 0,9,18,36,45,54,63,6,13,20,34,41,48 1,10,19,37,46,55,7,14,21,35,42,49,56 2,11,20,38,47,15,22,36,43,50,57 3,12,21,39,23,37,44,51,58 38,45,52,59 4,11,18,25 24,42,51,60,5,12,19,26,40 16,25,43,52,61,6,13,20,27,41,48 8,17,26,44,53,62,7,14,21,28,42,49,56 0,9,18,27,45,54,63,15,22,29,43,50,57 1,10,19,28,46,55,23,30,44,51,58 2,11,20,29,47,31,45,52,59 3,12,21,30 12,19,26,33. 50. 連五範圍(hex) 1008040200 2010080400 4020100800 8040201000 102040800 204081000 408102000 810204000 100804020000 201008040001 402010080002 804122140014 18244280028 20408100040 40810200080 81020400000 10080402000000 20100804000100 4020110a000a11 80412214001422 1824428002844 2048850005088 4081020008000 8102040000000 1008040200000000 2010080500050810 4020110a000a1120 8041221400142240 182442800284482 204885000508804 40810a000a01008 810204000000000 2040810 1008050005081020 20110a000a112040 4122140014224180 8244280028448200 488500050880402 810a000a0100804 40201008 204081000. Magic Number(hex) 00fffffff7ffc21f 00fffffff7ffe20f 00fffffff7fff207 00fffffff7fffa03 00fffffff80fffff 00fffffff811fbff 00fffffff812f9ff 00fffffff81378ff 00fffffff813ade5 00fffffff8137820 00fffffff8139820 007fffff983f9028 007fffff98f18800 007fffff98f21a80 007fffff98f21a80 00ffffffffdfff81 01000000000117f4 007fffff98f21a80 001ffffc9f3d9ff0 001ffffc9f408ff0 000fffff258f6800 003ffff2f7a03ffe 007fffff98f21a09 010000000001194d 010000000001197f 007ffffc0731fbff 007ffffc04d5ffe1 001ffff5ffff0fff 007fffeffff84178 003ffff827ae7ec0 001ffffd302d8001 010000000001197f 00fffffffe03ffff 007ffffc13e7fdfe 007ffffc13e586fc 001ffffd27f51c7f 001ffffd329d5181 001ffffd32ac6cfe 001ffffd31b7d790 00fffffffef087ff 00fffffffefc0bff.

(58) 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63. × × × × × × × × × × × × × × × × × × × × × × ×. 13,20,27,34,48 24,33,51,60,14,21,28,35,49,56 16,25,34,52,61,15,22,29,36,50,57 8,17,26,35,53,62,23,30,37,51,58 9,18,27,36,54,63,31,38,52,59 10,19,28,37,55 11,20,29,38 20,27,34,41 21,28,35,42,56 22,29,36,43,57 24,33,42,60,23,30,37,44,58 16,25,34,43,61,31,38,45,59 17,26,35,44,62 18,27,36,45,63 19,28,37,46 28,35,42,49 29,36,43,50 30,37,44,51 31,38,45,52 24,33,42,51 25,34,43,52 26,35,44,53 27,36,45,54. 1000408102000 110a000a11204000 2214001422418000 4428002844820100 8850005088040200 80002010080400 4020100800 20408100000 100040810200000 200081020400000 1400142241800000 2800284482010000 4000100804020000 8000201008040000 402010080000 2040810000000 4081020000000 8102040000000 10204080000000 8040201000000 10080402000000 20100804000000 40201008000000. 51. 007fffff98f1bbf9 007ffffc1405696d 007ffffc140581bf 007ffffc140581bd 007ffffc1237ffef 007ffffe5ed43e5f 00fffffff7fff207 00fffffff813ac97 007ffffe5ed448ff 007ffffe5ed448ff 007fffff9a234764 007fffff9a202fe1 007ffffe5ed448ff 007ffffe5ed448ff 00fffffff813ae34 00fffffff813ae40 00fffffff813ae40 00fffffff813ae40 00fffffff813ae40 00fffffff813ae40 00fffffff813ae40 00fffffff813ae40 00fffffff813ae40.

(59)

參考文獻

相關文件

APSM is the basic rank of the Primary School Master/Mistress (PSM) grade that has been created in aided primary schools with effect from the 1994/95 school year.

孔雀惜羽 孔雀惜羽 烏鴉的故事 烏鴉的故事 烏鴉的故事 烏鴉的故事 猴子棋王 猴子棋王 猴子棋王 猴子棋王 獅子戀愛了 獅子戀愛了 獅子戀愛了 獅子戀愛了 實事求是.

The Centre for Learning Sciences and Technologies (CLST), The Chinese University of Hong Kong (CUHK) launched the!. EduVenture ® learning system, which has been well received by

In light of the unique context and different student needs in every school, and the common goal of fostering students’ learning abilities, the EDB has been encouraging schools

APSM is the basic rank of the Primary School Master/Mistress (PSM) grade that has been created in aided primary schools with effect from the 1994/95 school year.

Establish the start node of the state graph as the root of the search tree and record its heuristic value.. while (the goal node has not

The Hull-White Model: Calibration with Irregular Trinomial Trees (concluded).. • Recall that the algorithm figured out θ(t i ) that matches the spot rate r(0, t i+2 ) in order

manufacturing operation in the past and no direct link with customer to get continuous feedback.. Although design chain as well as customer chain has been suggested in recent years