- 棋類游戲的算法有哪些 推薦度:
- 相關(guān)推薦
棋類游戲算法有哪些
棋類游戲通常包含三大要素:棋盤、棋子和游戲規(guī)則,其中游戲規(guī)則又包括勝負(fù)判定規(guī)則、落子的規(guī)則以及游戲的基本策略。設(shè)計(jì)一個(gè)棋類游戲的AI算法,棋盤和棋子的建模是相對(duì)比較簡(jiǎn)單的部分,而游戲規(guī)則的建模相對(duì)比較復(fù)雜。很多情況下,越是簡(jiǎn)單的規(guī)則越難以建模,比如圍棋,目前還沒(méi)有一種有效的理論能夠?qū)宓?ldquo;形”和“勢(shì)”進(jìn)行建模,使得計(jì)算機(jī)能像人類一樣理解一個(gè)圍棋棋局。那么棋類游戲的AI到底是什么原理?
除了棋盤和棋子的建模,棋類游戲最重要的部分就是AI算法的設(shè)計(jì)。目前棋類游戲的AI基本上就是帶啟發(fā)的搜索算法,那么常用的搜索算法有哪些呢?
1. 博弈與博弈樹(shù)
博弈可以理解為有限參與者進(jìn)行有限策略選擇的競(jìng)爭(zhēng)性活動(dòng),比如下棋、打牌、競(jìng)技、戰(zhàn)爭(zhēng)等。根據(jù)參與者種類和策略選擇的方式可以將博弈分成很多種,比如“二人零和、全信息、非偶然”博弈,也就是我們常說(shuō)的零和博弈(Zero-sum Game)。所謂“零和”,就是有贏必有輸,不存在雙贏的結(jié)果。所謂“全信息”,是指參與博弈的雙方進(jìn)行決策時(shí)能夠了解的信息是公開(kāi)和透明的,不存在信息不對(duì)稱的情況。比如棋類游戲的棋盤和棋子狀態(tài)是公開(kāi)的,下棋的雙方都可以看到當(dāng)前所有棋子的位置,但是很多牌類游戲則不滿足全信息的條件,因?yàn)榕祁愑螒蚨疾粫?huì)公開(kāi)自己手中的牌,也看不到對(duì)手手中的牌。所謂的“非偶然”,是指參與博弈的雙方的決策都是“理智”的行為,不存在失誤和碰運(yùn)氣的情況。
在博弈過(guò)程中,任何一方都希望自己取得勝利,當(dāng)某一方當(dāng)前有多個(gè)行動(dòng)方案可供選擇時(shí),他總是挑選對(duì)自己最為有利同時(shí)對(duì)對(duì)方最為不利的那個(gè)行動(dòng)方案。當(dāng)然,博弈的另一方也會(huì)從多個(gè)行動(dòng)方案中選擇一個(gè)對(duì)自己最有利的方案進(jìn)行對(duì)抗。參與博弈的雙方在對(duì)抗或博弈的過(guò)程中會(huì)遇到各種狀態(tài)和移動(dòng)(也可能是棋子落子)的選擇,博弈雙方交替選擇,每一次選擇都會(huì)產(chǎn)生一個(gè)新的棋局狀態(tài)。
假設(shè)兩個(gè)棋手(可能是兩個(gè)人,也可能是兩臺(tái)計(jì)算機(jī))MAX和MIN正在一個(gè)棋盤上進(jìn)行博弈。當(dāng)MAX做選擇時(shí),主動(dòng)權(quán)在MAX手中,MAX可以從多個(gè)可選決策方案中任選一個(gè)行動(dòng),一旦MAX選定某個(gè)行動(dòng)方案后,主動(dòng)權(quán)就轉(zhuǎn)移到了MIN手中。MIN也會(huì)有若干個(gè)可選決策方案,MIN可能會(huì)選擇任何一個(gè)方案行動(dòng),因此MAX必須對(duì)做好應(yīng)對(duì)MIN的每一種選擇。如果把棋盤抽象為狀態(tài),則MAX每選擇一個(gè)決策方案就會(huì)觸發(fā)產(chǎn)生一個(gè)新?tīng)顟B(tài),MIN也同樣,最終這些狀態(tài)就會(huì)形成一個(gè)狀態(tài)樹(shù),這個(gè)附加了MAX和MIN的決策過(guò)程信息的狀態(tài)樹(shù)就是博弈樹(shù)(Game Tree)。
2. 極大極小值搜索算法
極大極小值(Min-Max)搜索算法是各種博弈樹(shù)搜索算法中最基礎(chǔ)的搜索算法。假如MAX和MIN兩個(gè)人在下棋,MAX會(huì)對(duì)所有自己可能的落子后產(chǎn)生的局面進(jìn)行評(píng)估,選擇評(píng)估值最大的局面作為自己落子的選擇。這時(shí)候就該MIN落子,MIN當(dāng)然也會(huì)選擇對(duì)自己最有利的局面,這就是雙方的博弈,即總是選擇最小化對(duì)手的最大利益(令對(duì)手的最大利益最小化)的落子方法。作為一種博弈搜索算法,極大極小值搜索算法的名字就由此而來(lái)。
3. 負(fù)極大值搜索算法
博弈樹(shù)的搜索是一個(gè)遞歸的過(guò)程,極大極小值算法在遞歸搜索的過(guò)程中需要在每一步區(qū)分當(dāng)前評(píng)估的是極大值節(jié)點(diǎn)還是極小值節(jié)點(diǎn)。1975年Knuth和Moore提出了一種消除MAX節(jié)點(diǎn)和MIN節(jié)點(diǎn)區(qū)別的簡(jiǎn)化的極大極小值算法,稱為負(fù)極大值算法Negamax。該算法的理論基礎(chǔ)是:
max(a,b) = -min(-a, -b)
簡(jiǎn)單地將遞歸函數(shù)MiniMax()返回值取負(fù)再返回,就可以將所有的MIN 節(jié)點(diǎn)都轉(zhuǎn)化為MAX節(jié)點(diǎn),對(duì)每個(gè)節(jié)點(diǎn)的搜索都嘗試讓節(jié)點(diǎn)值最大,這樣就將每一步遞歸搜索過(guò)程都統(tǒng)一起來(lái)。
4. “α-β”剪枝算法
有很多資料將“α-β”剪枝算法稱為“α-β”搜索算法,實(shí)際上,它不是一種獨(dú)立的搜索算法,而是一種嫁接在極大極小值算法和負(fù)極大值算法上的一種優(yōu)化算法。“α-β”剪枝算法維護(hù)了一個(gè)搜索的極大極小值窗口:[α,β]。其中α表示在搜索進(jìn)行到當(dāng)前狀態(tài)時(shí),博弈的MAX一方所追尋的最大值中最小的那個(gè)值(也就是MAX的最壞的情況)。在每一步的搜索中,如果MAX所獲得的極大值中最小的那個(gè)值比α大,則更新α值(用這個(gè)最小值代替α),也就是提高α這個(gè)下限。
而β表示在搜索進(jìn)行到當(dāng)前狀態(tài)時(shí),博弈的MIN一方的最小值中最大的那個(gè)值(也就是MIN的最壞的情況)。在每一步的搜索中,如果MIN所獲得的極小值中最大的那個(gè)值比β小,則更新β值(用這個(gè)最大值代替β),也就是降低β這個(gè)上限。當(dāng)某個(gè)節(jié)點(diǎn)的α≥β時(shí),說(shuō)明該節(jié)點(diǎn)的所有子節(jié)點(diǎn)的評(píng)估值既不會(huì)對(duì)MAX更有利,也不會(huì)對(duì)MIN更有利,也就是對(duì)MAX和MIN的選擇不會(huì)產(chǎn)生任何影響,因此就沒(méi)有必要再搜索這個(gè)節(jié)點(diǎn)及其所有子節(jié)點(diǎn)了。
5. 估值函數(shù)
對(duì)于很多啟發(fā)式搜索算法,其“智力”的高低基本上是由估值函數(shù)(評(píng)估函數(shù))所決定,棋類游戲的博弈樹(shù)搜索算法也不例外。
估值函數(shù)的作用是把一個(gè)棋局量化成一個(gè)可直接比較的數(shù)字,這個(gè)數(shù)字在一定程度上能反映取勝的概率。棋局的量化需要考慮很多因素,量化結(jié)果是這些因素按照各種權(quán)重組合的結(jié)果。這些因素通常包括棋子的戰(zhàn)力(棋力)、雙方棋子占領(lǐng)的空間、落子的機(jī)動(dòng)性、威脅性(能吃掉對(duì)方的棋子)、形和勢(shì)等。
6. 置換表與哈希函數(shù)
置換表(transposition table)也是各種啟發(fā)式搜索算法中常用的輔助算法,它是一種以空間換時(shí)間的策略,使用置換表的目的就是提高搜索效率。一般情況下,置換表中的每一項(xiàng)代表者一個(gè)棋局中最好的落子方法,直接查找置換表獲得這個(gè)落子方法能避免耗時(shí)的重復(fù)搜索,這就是使用置換表能大幅提高搜索效率的原理。
使用置換表最大的問(wèn)題是置換表的組織和查找的效率。一般來(lái)說(shuō),置換表越大,查找的命中率就越高。但這個(gè)關(guān)系不是絕對(duì)的,當(dāng)置換表大小達(dá)到一定規(guī)模后,不僅不會(huì)再提高命中率,反而會(huì)因?yàn)楹臅r(shí)的查找操作影響算法的效率。所以置換表不是越大越好,需要根據(jù)計(jì)算機(jī)的性能以及搜索的深度選擇一個(gè)合適的大小。此外,為了查找操作更高效,通常都會(huì)用可直接訪問(wèn)的哈希表方式組織置換表,哈希函數(shù)的性能就成為影響置換表性能的重要因素。棋類游戲普遍采用Zobrist哈希算法。
7.開(kāi)局庫(kù)與終局庫(kù)
所謂的開(kāi)局庫(kù)和終局庫(kù)實(shí)際上就是一種存儲(chǔ)了各種開(kāi)局和終局棋局信息的數(shù)據(jù)庫(kù)。以開(kāi)局庫(kù)為例,開(kāi)局庫(kù)一般要存儲(chǔ)開(kāi)局的棋局,該棋局對(duì)應(yīng)的各種走法和評(píng)估分?jǐn)?shù),有些開(kāi)局庫(kù)還統(tǒng)計(jì)了該開(kāi)局最終的勝局次數(shù)、平局次數(shù)和負(fù)局次數(shù),給出開(kāi)局棋局的權(quán)重等附加信息供搜索時(shí)選擇。
【棋類游戲算法有哪些】相關(guān)文章:
棋類游戲的算法有哪些08-17
拓展訓(xùn)練游戲有哪些06-07
企業(yè)內(nèi)訓(xùn)經(jīng)典游戲有哪些08-12
戶外活動(dòng)的游戲有哪些09-01
戶外活動(dòng)游戲有哪些09-26
紅茶有哪些08-30
茶葉有哪些種類12-07
滑雪有哪些好處11-24