周菁菁
(蘭州資源環(huán)境職業(yè)技術(shù)學(xué)院,甘肅 蘭州 730021)
六子棋
——人工智能系統(tǒng)的設(shè)計與研究
周菁菁
(蘭州資源環(huán)境職業(yè)技術(shù)學(xué)院,甘肅 蘭州 730021)
本系統(tǒng)是對六子棋計算機博弈技術(shù)的一次嘗試。此系統(tǒng)主要通過對當(dāng)前局面的所有的棋型進行了靜態(tài)估值,然后再采用優(yōu)化 Alpha-Bate搜索技術(shù)實現(xiàn)了AI。最后,本文探討一些提高電腦智能的方法。并相信隨著科技的發(fā)展,人工智能對我們的幫助將會越來越顯著,越來越大。
計算機博弈;六子棋;Java;Alpha-Bate搜索技術(shù);人工智能
人工智能,英文縮寫:AI。是研究、開發(fā)、用于模擬、延伸以及擴展人的智能的理論、方法、技術(shù)、應(yīng)用系統(tǒng)地一門新興技術(shù)科學(xué)。
計算機博弈則是被認(rèn)為在人工智能領(lǐng)域最具挑戰(zhàn)性的研究方向之一,其涉及了人工智能中的推理技術(shù)、搜索方法以及決策規(guī)劃等等,計算機博弈的研究為人工智能帶來了很多重要的方法與理論,產(chǎn)生了廣泛的社會影響和學(xué)術(shù)影響以及大量的研究成果。六子棋作為最近幾年才興起的棋類游戲,對其計算機博弈技術(shù)和算法的研究相對比較少。所以基于Java的智能六子棋系統(tǒng)的實現(xiàn)是對計算機博弈問題的一次探索研究。
1.在界面方面:應(yīng)該簡單化,做到實用化、方便化,這樣以來就可以滿足不同層次的使用者的需要了。
2.在實現(xiàn)方面:對六子棋其數(shù)據(jù)結(jié)構(gòu),棋子觸發(fā),搜索算法,評估函數(shù)等進行了設(shè)計和實現(xiàn)的過程。
3.在系統(tǒng)規(guī)范方面:刪除了不必要的冗余,實現(xiàn)了程序代碼的標(biāo)準(zhǔn)化,以及軟件的統(tǒng)一化,確保此軟件的可擴展性,可維護性以及其實用性。
第一,是界面設(shè)計及事件的響應(yīng)方面,系統(tǒng)界面包括了棋盤部分,用戶面板部分與游戲信息及選項部分,當(dāng)前狀態(tài)部分和系統(tǒng)選項這六個部分。其中為了系統(tǒng)的實現(xiàn)的方便,棋盤的背景與棋盤的觸發(fā)面板是分開設(shè)計地,也就是在主框架中增加了背景,并且放置了用戶面板部分,當(dāng)前狀態(tài)部分以及系統(tǒng)選項的部分,再就是單獨設(shè)計了棋盤觸發(fā)面板,其覆蓋于棋盤的背景之上。至于棋子信息的部分,就隱藏在了棋盤觸發(fā)面板里了。同時,為了方便觸發(fā),當(dāng)前狀態(tài)部分、系統(tǒng)選項部分、游戲選項部分都是直接得嵌入到了主框架中了。
第二,就是評估函數(shù)的設(shè)計,從理論上分析,評估函數(shù)就是對棋局的綜合評估,換句話說,是給當(dāng)前局面黑白棋分別的評分,從而可以確定當(dāng)前的形勢,為搜索引擎提供了評判標(biāo)準(zhǔn)。該函數(shù)的好壞與否直接決定了解題能力的強與弱,所以只有好的評估函數(shù)才能對結(jié)果予以保證,否則,搜索所得到的結(jié)果就有可能與期望相距很大。就像是一個好的棋手通常都能夠?qū)Ξ?dāng)前棋局做出判斷,以最好的方式進行進攻,并控制整盤棋局的發(fā)展方向。由此可見,僅憑幾個簡單的評估函數(shù)是不可能很好的抽象這整套評價模式的,因為有太多的因素要考慮到。
第三,是走法生成(告訴其他部分下一步往哪里走的模塊)方面,每種棋類的規(guī)則都不同,走法生成的復(fù)雜程度也是大相徑庭。舉個例子,在一種棋類游戲中,棋子種類越多,棋子的走法與規(guī)則也就越多,要是在程序中實現(xiàn)的話就越復(fù)雜。
在六子棋地對弈程序當(dāng)中,黑白雙方交換下子,其中,沒有吃子、提子、等規(guī)則的存在,哪一方在棋盤的水平、垂直、斜線方向上首先形成了連續(xù)的六顆棋子,就獲勝了。因此,六子棋規(guī)則的方法生成來說,棋盤上的空白位置就是合法的位置。不過在現(xiàn)實中,有些位置是不該首先考慮的,比如說對局時是不會把棋子直接放在下邊界上。在這里,有一點需要注意的,那就是我們當(dāng)下的棋子的位置與對方下的棋子的位置是有很大關(guān)聯(lián)的,也就是說我們當(dāng)下的棋子有可能是用來限制對方的棋子,并阻止其連成六顆,亦或是躲開對方的棋子,讓自己的棋子連成六顆,這樣,較優(yōu)的走法生成的位置就應(yīng)該考慮在上一次對方下子的周圍。
第四是搜索技術(shù)方面,先來了解一下博弈樹。
基本上所有的棋類問題,都可以用博弈樹來描述的。博弈樹,是把計算機和用戶所有可能的走法和局面一一羅列出來的一顆樹。黑白雙方交替的按相對合理走法把樹展開,樹的每個節(jié)點都表示一個局面。根節(jié)點是當(dāng)前需要進行計算的局面,中間節(jié)點是對弈過程中的某個局面,最下面的節(jié)點是推導(dǎo)出的局面。整個博弈樹是從當(dāng)前局面出發(fā)的,包含所有可能的對弈過程的搜索樹。所以六子棋博弈問題也就轉(zhuǎn)化成了尋求最佳路徑的問題了。假設(shè)博弈樹是很有限的,這樣,就不會碰到永無止境的棋局或一步有無限種算法的棋局了。
舉個例子,如果有兩個玩家對弈,他們分別為 max和min。讓max先走,然后兩人交替走,一直到游戲結(jié)束。我們用產(chǎn)生式系統(tǒng)來進行描述。由于不可能對一個完整解圖進行搜索,我們需要定義一個靜態(tài)估計函數(shù)g,以便對游戲狀態(tài)進行估值。在此我們假設(shè)有利于max的狀態(tài)取g(a)>0,并且有利于min的狀態(tài)取g(a)<0。這樣得出以下搜索的五個步驟。
1.首先生成了整個博弈樹(擴展樹的每個節(jié)點)。
2.用函數(shù)g對每個子節(jié)點進行估值,得終節(jié)點的評價值。
3.使用終節(jié)點的估值 g,得到其搜索樹上一層節(jié)點的估值。
4.重復(fù)三過程在max層取其分支的最大值,min層取其分支的最小值,一直回溯到根結(jié)點。
5.根結(jié)點選擇分支值最大的走步走。
目前有以下幾種方法可以提高電腦的棋力:
第一,動態(tài)估值。主要在于攻守的轉(zhuǎn)換和急手的處理,這個要綜合很多方面的因素,并且要從以往的經(jīng)驗為基礎(chǔ)多加嘗試,但是工作量很大并且不易拿捏。
第二,增加細(xì)致的特定棋形的判斷。增加棋型判斷,程序中的判斷還不是很全面,與實際存在一些差異,不過,這是個數(shù)學(xué)問題。
第三,將局部最優(yōu)和全局最優(yōu)結(jié)合起來。這種方法是最容易實現(xiàn)的,就是增加搜索深度,然后考慮整體以及局部的估值,用遞歸可以實現(xiàn)。
第四,完善開局庫和增加學(xué)習(xí)功能。在對局中十分有用,帶有完善開局庫和有學(xué)習(xí)功能的六子棋將是難以戰(zhàn)勝的,不過,這是一個十分復(fù)雜的過程,其中,完善開局庫的學(xué)習(xí)功能比較容易實現(xiàn)。
[1] 李果.六子棋計算機博弈及其系統(tǒng)的研究與實現(xiàn)[D].重慶大學(xué),2007.
[2] 王小春.PC游戲編程(人機博弈)[M].重慶大學(xué)出版社,2003.
TP311.1
A
1008-7427(2011)10-0159-01
2011-08-10