本發(fā)明涉及計(jì)算機(jī)博弈領(lǐng)域,主要涉及博弈中關(guān)于德州撲克的手牌評(píng)估;非完備信息博弈中的對(duì)手建模等。
背景技術(shù):
隨著人工智能技術(shù)的發(fā)展,通過(guò)有效的博弈樹(shù)搜索技術(shù)已經(jīng)能夠處理大部分完備信息博弈問(wèn)題,而非完備信息博弈在很長(zhǎng)的一段時(shí)間內(nèi)發(fā)展緩慢。人工智能技術(shù)的逐漸成熟和計(jì)算機(jī)硬件水平的提高為解決非完備信息博弈問(wèn)題創(chuàng)造了條件。
技術(shù)實(shí)現(xiàn)要素:
為了解決現(xiàn)有技術(shù)中問(wèn)題,本發(fā)明提供了一種基于非完備信息博弈中進(jìn)行對(duì)手建模的方法,步驟1:德州撲克中的手牌評(píng)估;步驟2:非完備信息博弈中的對(duì)手建模;步驟3:撲克博弈系統(tǒng)的實(shí)現(xiàn)。
非完備信息博弈中進(jìn)行對(duì)手建模的方法,通過(guò)不同的對(duì)手建模方法對(duì)玩家進(jìn)行分類(lèi)并預(yù)測(cè)博弈中的未知信息。以德州撲克作為具體研究對(duì)象,通過(guò)將對(duì)手建模方法與手牌評(píng)估算法相結(jié)合實(shí)現(xiàn)了一個(gè)擁有較高智能水平的撲克博弈程序。
附圖說(shuō)明
圖1是所有5張牌的組合構(gòu)成的牌型及出現(xiàn)的次數(shù);
圖2是牌值及對(duì)應(yīng)質(zhì)數(shù)對(duì)照表;
圖3是32位整數(shù)的格式;
圖4是所有同花順及同花在查找表flushes中的值;
圖5是所有順子和高牌在查找表unique5中的值;
圖6是剩余牌型及對(duì)應(yīng)的最終返回結(jié)果;
圖7是返回值的范圍對(duì)應(yīng)的牌型;
圖8是張牌組合的流程圖;
圖9是Sklansky手牌分類(lèi)圖;
圖10是Sklansky手牌分類(lèi)表;
圖11是翻牌階段,公共牌為時(shí)部分手牌的權(quán)重更新表u=0.6,v=0.2;
圖12是博弈系統(tǒng)中每張牌的數(shù)據(jù)表示;
圖13是德州撲克博弈程序框架;
圖14是基礎(chǔ)下注策略示意圖;
圖15是對(duì)手模型示意圖;
圖16是對(duì)手模型建立前后決策過(guò)程的比較;
圖17是德州撲克博弈系統(tǒng)的圖形界面;
圖18是100000局游戲中,有效牌力的分布直方圖;
圖19是在與自己的100000局游戲中牌力與獲勝概率的關(guān)系圖;
圖20是各個(gè)階段牌型對(duì)獲勝概率的影響;
圖21是實(shí)時(shí)策略類(lèi)游戲玩家類(lèi)型的劃分;
圖22是德州撲克中五種不同類(lèi)型的玩家;
圖23是利用人工神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)玩家行為;
圖24是通過(guò)決策樹(shù)預(yù)測(cè)對(duì)手的牌力分布;
圖25是系統(tǒng)結(jié)構(gòu)圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步說(shuō)明。
一種基于非完備信息博弈中進(jìn)行對(duì)手建模的方法,包括如下步驟:
步驟1:德州撲克中的手牌評(píng)估:
步驟1.1:手牌評(píng)估指標(biāo)
德州撲克在進(jìn)行時(shí),每一輪都會(huì)有新的牌被發(fā)出,玩家每一輪都需要進(jìn)行決策。手牌評(píng)估的目的是通過(guò)計(jì)算玩家當(dāng)前獲勝或者失敗的概率,為玩家每一輪的決策提供依據(jù)。在博弈程序中手牌評(píng)估需要考慮以下幾個(gè)要素:玩家的手牌,對(duì)手的數(shù)量,已有的公共牌,未來(lái)可能出現(xiàn)的公共牌,對(duì)手可能的手牌。通常手牌評(píng)估方法最終會(huì)返回一個(gè)數(shù)值在0.0到1.0之間的小數(shù),數(shù)值越小,表示獲勝的概率越小;
步驟1.2:牌力計(jì)算
牌力是某一手牌優(yōu)于其他手牌的概率,可以通過(guò)計(jì)算對(duì)手所有可能的手牌組合來(lái)確定這一概率值。假設(shè)現(xiàn)在玩家的手牌是3張公共牌是根據(jù)德州撲克的規(guī)則,手牌可以和公共牌組成任意3張、兩對(duì)、一對(duì)或者是A-K的組合牌力都強(qiáng)于手牌玩家手牌所有可能的組合數(shù)是1081,強(qiáng)于手牌的數(shù)量是444,牌力相當(dāng)?shù)慕M合數(shù)是9種,剩余628種組合的牌力則弱于根據(jù)以上數(shù)據(jù)可以算出手牌的牌力為0.585。
步驟1.3:潛力計(jì)算
在德州撲克游戲過(guò)程中牌力的變化空間是巨大的,僅僅依靠牌力并不能完整的評(píng)價(jià)局面的優(yōu)劣。例如,兩個(gè)玩家的手牌分別是和當(dāng)前的公共牌是計(jì)算牌力顯然手牌更強(qiáng)。但是,考慮到手牌與公共牌有更大的概率組成同花和順子,也就是牌力可能發(fā)生扭轉(zhuǎn)性的轉(zhuǎn)變,在評(píng)估手牌的過(guò)程中手牌潛力可以反映這種變化的趨勢(shì)??梢杂谜凉摿Γ瑏?lái)表示當(dāng)前落后,但未來(lái)會(huì)反超的概率;用負(fù)潛力表示當(dāng)前領(lǐng)先,而未來(lái)落后的概率。
步驟1.4:有效牌力計(jì)算
將手牌的牌力和潛力結(jié)合起來(lái)能夠更有效地評(píng)估手牌,這一估值稱(chēng)作有效牌力。用HS表示牌力,PPot表示正潛力,NPot表示負(fù)潛力,EHS表示有效牌力,則有效牌力的計(jì)算方法如公式所示:
EHS=HS×(1-Npot)+(1-HS)×PPot
但是實(shí)際游戲過(guò)程中,玩家總是更多地考慮手牌變強(qiáng)的情況而忽略負(fù)潛力,所以在使用過(guò)程中負(fù)潛力顯得沒(méi)有正潛力那么重要,所以產(chǎn)生了有效牌力計(jì)算的另一種方法。
EHS=HS+(1-HS)×PPot
因?yàn)榈轮輷淇俗罱K比較大小時(shí)是從所有牌中選出5張組成最大的牌型進(jìn)行比較。在計(jì)算牌力和有效牌力時(shí),也需要比較各個(gè)玩家的手牌與公共牌組成的5張牌的最大組合,因此在評(píng)估手牌時(shí)計(jì)算5張牌所組成的組合的大小成為評(píng)估手牌的核心環(huán)節(jié)。
步驟1.5:手牌評(píng)估算法
德州撲克不同牌型大小依序是:皇家同花順>同花順>四條>葫蘆>同花>順子>三條>兩對(duì)>一對(duì)>高牌。影響牌型和大小的要素有以下4點(diǎn):
1、組合中每種花色出現(xiàn)的次數(shù)
2、組合中每個(gè)牌值出現(xiàn)的次數(shù)
3、5張牌連續(xù)與否
4、每張牌的牌值
其中5張牌的組合共有2598960種,各個(gè)牌型出現(xiàn)的次數(shù)如圖1所示:
所有這些組合中不考慮花色的影響,不同的組合數(shù)是7462種,也就是說(shuō)所有2598960種5張牌的組合最后可以用7462個(gè)不同的數(shù)值來(lái)表示。在本方案中選擇1到7462之間的7462個(gè)正整數(shù)來(lái)表示這些組合的強(qiáng)弱,數(shù)值越小牌力越強(qiáng),皇家同花順的值是1。為了將2598960種組合快速對(duì)應(yīng)到7462個(gè)不同的數(shù)值中去,算法需要忽略每張牌的順序。也就是說(shuō),無(wú)論5張牌以何種順序傳入,最終返回的結(jié)果是一致的。最簡(jiǎn)單的想法是對(duì)傳入的5張牌進(jìn)行排序,將排完序的結(jié)果作為輸入?yún)?shù)傳入。但是排序算法會(huì)有一定的執(zhí)行時(shí)間,從而整個(gè)算法的執(zhí)行速度會(huì)受到影響。一種比較好的解決方法是,利用質(zhì)數(shù)相乘所得結(jié)果的唯一可分解性,為每個(gè)牌值的牌分配一個(gè)唯一的質(zhì)數(shù)與之對(duì)應(yīng),將質(zhì)數(shù)相乘的結(jié)果作為參數(shù)傳入進(jìn)行計(jì)算,由于乘法是計(jì)算機(jī)能執(zhí)行的最快的運(yùn)算之一該方法可提高算法速度。每個(gè)牌值的牌與之對(duì)應(yīng)的質(zhì)數(shù)如圖2所示:
例如,當(dāng)前5個(gè)質(zhì)數(shù)的乘積是2310,分解結(jié)果為2、3、5、7、11,通過(guò)對(duì)照可以知道當(dāng)前5張牌的牌值分別是2、3、4、5、6。這一算法的另一個(gè)優(yōu)勢(shì)在于,乘法是計(jì)算機(jī)能執(zhí)行的最快的操作之一,通過(guò)執(zhí)行乘法運(yùn)算加快了整個(gè)算法的執(zhí)行速度。
但是僅僅通過(guò)質(zhì)數(shù)相乘不能解決所有的問(wèn)題。例如5張牌的組合,能形成同花的情況和不能形成同花的情況返回的結(jié)果一定不同。因此,在執(zhí)行質(zhì)數(shù)相乘之前,需要檢查5張牌能否形成同花??梢酝ㄟ^(guò)一個(gè)32位的整數(shù)來(lái)唯一標(biāo)識(shí)一張牌,32位整數(shù)的格式如圖3所示:
例如,K◆在這種表示方法下的數(shù)值為:00001000 00000000 0100101100100101。當(dāng)所有5張牌都以這種數(shù)據(jù)格式表示以后,要判斷能否形成同花,只需要把五張牌進(jìn)行按位與運(yùn)算,最后再與0xF000進(jìn)行與運(yùn)算即可。用c1,c2,c3,c4,c5分別表示5張牌,計(jì)算方法如下:
r=c1AND c2AND c3AND c4AND c5AND 0xF000 (3-4)
如果運(yùn)算結(jié)果等于0表示參與計(jì)算的5張牌不能形成同花,否則表示能夠形成同花。如果能夠形成同花,需要一種方法來(lái)快速地將此牌型對(duì)應(yīng)到1到7462之間的7462個(gè)數(shù)值中去。通過(guò)索引查表是解決這一問(wèn)題最快的方法之一,但在此之前先要生成查找表。先對(duì)5張牌進(jìn)行處理:
q=(c1OR c2OR c3OR c4OR c5)>>16 (3-5)
如果5張牌能形成同花,則這5張牌的牌值必定全都不相同,則q中必定恰好有5位是1。在所有能形成同花的結(jié)果中,q的最小值是0x001F(十進(jìn)制值為31),q的最大值為0x1F00(十進(jìn)制值為7936)。為了方便查找,可以建立一張包含7937個(gè)元素的查找表(方便通過(guò)下標(biāo)進(jìn)行查找)。查找表中的值依據(jù)圖1中的數(shù)據(jù)進(jìn)行填充,例如q等于31時(shí)表示的是2、3、4、5、6組成的同花順,通過(guò)圖1可以知道,在不考慮花色的情況下共有10種不同的同花順,皇家同花順的值是1,2、3、4、5、6組成的同花順的值是9,所以查找表中索引為31的元素值是9。因?yàn)檎麄€(gè)方案中用到了多張查找表,為了區(qū)分此處的查找表命名為flushes。圖4是各種組合的同花在查找表flushes中的值。
例如,A、K、Q、J、9形成的同花,q=0x1E80(十進(jìn)制值為7808),通過(guò)圖1可以知道,查找表中索引值為7808的元素值為323。如果索引值的二進(jìn)制表示中不是恰好有5位是1,則對(duì)應(yīng)的查找表中的值是0。這些值在實(shí)際使用過(guò)程中不會(huì)被用到,造成了一定的空間浪費(fèi),但是查找表的使用提高了算法的執(zhí)行速度。
如果5張牌不能形成同花需要考慮出現(xiàn)順子或高牌的情況。出現(xiàn)順子或高牌的情況,則5張牌的牌值也一定各不相同,所以q的二進(jìn)制表示中一定恰好有5位是1。為了提高速度,在此使用另一張查找表unique5。所有順子和高牌在查找表unique5中的值如圖5所示:
如果當(dāng)前5張牌的牌值分別是7、5、4、3、2且不能形成同花,則通過(guò)查找表unique5可以獲得其對(duì)應(yīng)的值是7462。
處理完同花順、同花、順子和高牌以后,剩余牌型的數(shù)量為7462-2574=4888種。剩余的牌型就可以使用之前為每個(gè)牌值分配的質(zhì)數(shù)來(lái)處理了。對(duì)5張牌進(jìn)行以下處理:
q=(c1AND 0xFF)*(c2AND 0xFF)*...*(c5AND 0xFF) (3-6)
q的最小值是48,最大值是104553157。由于最大值太大,如果直接使用查找表會(huì)造成很大的空間浪費(fèi),所以在此考慮使用其他方法。由于剩余牌型的數(shù)量只有4888種,可以建立兩張各含4888個(gè)元素的查找表,查找表products(圖5)中按從小到大的順序保存q值。在計(jì)算獲得q值以后,通過(guò)二分查找法獲得q在查找表products中的索引,再通過(guò)獲得的索引到另外一張查找表values(圖6)中獲得該牌型對(duì)應(yīng)的最終結(jié)果。例如,q值是48時(shí),返回的索引是0,表示的牌型是22223,則表values中索引為0的值是牌型22223的最終對(duì)應(yīng)的值是166。圖7中是所有剩余牌型對(duì)應(yīng)的最終結(jié)果。
計(jì)算5張牌的組合的值時(shí),首先按照公式3-4判斷是否能夠形成同花。如果可以,則利用公式3-5算出的q值從查找表flushes中獲得最終結(jié)果;如果不能,再檢查是否是順子或高牌。利用q值在查找表unique5中進(jìn)行查找,如果查找表unique5中對(duì)應(yīng)位置的元素不等于0,表示是順子或高牌,查找成功,否則查找失敗。如果查找成功,返回unique5中對(duì)應(yīng)位置的值;否則,利用公式3-6將剩余的4888種牌型映射到最終正確的結(jié)果,在進(jìn)行映射時(shí)可以使用二分查找法或Hash算法。
圖8為算法的流程圖。此算法的另一個(gè)優(yōu)勢(shì)在于不僅能夠判斷不同牌型的強(qiáng)弱,而且可以根據(jù)返回的結(jié)果得到當(dāng)前的牌型。返回值的范圍對(duì)應(yīng)的牌型,如圖7所示。
步驟1.6:Preflop階段的手牌評(píng)估
在Pre-flop階段參與博弈的玩家都只有兩張私有手牌,沒(méi)有任何公共牌的信息,在這個(gè)階段玩家只能根據(jù)自己的手牌和對(duì)手的下注行為來(lái)進(jìn)行決策。準(zhǔn)確地評(píng)估兩張私有手牌的大小,對(duì)于Pre-flop階段的下注策略十分重要。德州撲克中兩張手牌的組合共有1326種,如果不區(qū)分具體花色,按牌值和是否是同花色可以將這1326種手牌的組合對(duì)應(yīng)到169種類(lèi)型。許多德州撲克領(lǐng)域的專(zhuān)家提出了自己的分類(lèi)方法,比較著名的有Sklansky手牌分類(lèi)和Bill Chen提出的手牌計(jì)算公式。
Sklansky手牌分類(lèi)方法將所有手牌分為9個(gè)級(jí)別,具體分類(lèi)如Sklans牌分類(lèi)圖和Sklansky手牌分類(lèi)表所示,即圖9和圖10所示。手牌的分級(jí)的編號(hào)越小表示勝率越大。
Bill Chen提出的手牌計(jì)算公式具體如下:
1.首先為手牌中牌值較大的牌打分,牌值A(chǔ)的評(píng)分為10,牌值K的評(píng)分8,牌值Q的評(píng)分為7,牌值J的評(píng)分為6,牌值為10到2的牌的評(píng)分為牌值的一半,例如牌值8的評(píng)分為4。
2.如果出現(xiàn)一對(duì),則將1中的分值乘以2,一對(duì)牌的最小分值是5。例如一對(duì)K的分值是16,一對(duì)7的分值是7,而一對(duì)2的分值是5。
3.如果兩張牌是同花色,總分加2。
4.如果兩張牌的牌值不相等,根據(jù)牌值的差減小總分。牌值差小于2不需要減分,牌值差為2總分減1,牌值差為3總分減2,牌值差為4總分減4,牌值差大于等于5總分減5。
5.如果兩張牌的牌值都小于Q,且牌值差小于3,總分加1。
6.對(duì)總分向上取整。
步驟2:對(duì)手建模
對(duì)手建模表示的是在博弈過(guò)程中訓(xùn)練智能體來(lái)應(yīng)對(duì)特定對(duì)手的過(guò)程。在一些博弈中由于博弈空間太過(guò)巨大或者由于博弈中的部分狀態(tài)信息無(wú)法活獲得,可以應(yīng)對(duì)所有情況的通用策略并不存在。例如角色扮演類(lèi)游戲(Role Playing Games)、機(jī)器人足球、圍棋等博弈中搜索空間太過(guò)巨大,無(wú)法通過(guò)博弈樹(shù)搜索找到最優(yōu)策略;在撲克、麻將等博弈中部分博弈信息無(wú)法被觀察到,經(jīng)典的博弈樹(shù)搜索算法無(wú)法被用來(lái)解決非完備信息博弈問(wèn)題,針對(duì)非完備信息博弈的搜索算法需要依賴(lài)對(duì)未知信息的預(yù)測(cè);在多人在線RPG游戲、第一人稱(chēng)視角射擊類(lèi)游戲中既存在非完備信息的問(wèn)題又存在搜索空間過(guò)大的問(wèn)題。當(dāng)傳統(tǒng)的博弈樹(shù)搜索算法無(wú)法應(yīng)對(duì)非完備信息和搜索空間過(guò)大的問(wèn)題時(shí),對(duì)手建模成為一種可行的方法。
對(duì)手建模的直接目的是通過(guò)觀察和學(xué)習(xí),建立一個(gè)有效的對(duì)手模型。對(duì)手模型是博弈過(guò)程中對(duì)手或?qū)κ中袨榈囊环N抽象表述,對(duì)手模型的內(nèi)容可以是博弈過(guò)程中玩家表現(xiàn)出的選擇偏向、玩家采用的策略、玩家暴露出的弱點(diǎn)或關(guān)于玩家博弈能力的評(píng)估等,只要是博弈過(guò)程中對(duì)手可被利用的信息都可以出現(xiàn)在對(duì)手模型中。在完備信息博弈中,可以通過(guò)學(xué)習(xí)玩家的策略來(lái)減少候選節(jié)點(diǎn)的數(shù)量,從而減小搜索空間的規(guī)模,從而使得博弈樹(shù)搜索算法可以有效地被執(zhí)行;在非完備信息博弈中通過(guò)學(xué)習(xí)對(duì)手行為來(lái)對(duì)未知的信息進(jìn)行預(yù)測(cè),從而有效地利用博弈樹(shù)搜索算法?,F(xiàn)階段的對(duì)手建模方法不會(huì)保存玩家在不同的博弈中的信息,因而在實(shí)際建模過(guò)程中會(huì)按照具體的博弈形式建立不同的對(duì)手模型。對(duì)手建模的主要方法有兩種[36],一是通過(guò)學(xué)習(xí)對(duì)手的估值函數(shù),從而獲得對(duì)手對(duì)博弈樹(shù)中每個(gè)節(jié)點(diǎn)的估值及博弈樹(shù)的搜索深度,這種方式主要適用于完備信息博弈。另一種對(duì)手建模的方法是學(xué)習(xí)對(duì)手的策略,這種方式通常是直接學(xué)習(xí)對(duì)手在特定的博弈狀態(tài)下做出的選擇,這種方式比較適用于重復(fù)性博弈和非完備信息博弈。如果使用對(duì)手的策略進(jìn)行建模,則可以通過(guò)策略S來(lái)定義玩家P,在對(duì)手未知的情況下玩家可以定義為:
P=(S,NIL) (4-1)
如果對(duì)手O已知,則可以通過(guò)策略S和對(duì)手來(lái)定義玩家:
P=(S,O) (4-2)
公式4-1沒(méi)有考慮對(duì)手的情況,所以又稱(chēng)作玩家策略,而公式4-2稱(chēng)為對(duì)手模型。
步驟2.1:非完備信息博弈中的對(duì)手建模
在非完備信息中由于博弈狀態(tài)的不可知,玩家要準(zhǔn)確對(duì)局面做出評(píng)估很困難,通過(guò)學(xué)習(xí)對(duì)手的估值函數(shù)來(lái)進(jìn)行對(duì)手建模的方法不可行。學(xué)習(xí)對(duì)手的策略是另一種可行的方法,學(xué)習(xí)對(duì)手的策略主要是通過(guò)學(xué)習(xí)對(duì)手在不同的博弈狀態(tài)下策略的偏向來(lái)預(yù)測(cè)未知信息。在這種情況下雖然不能對(duì)每一個(gè)博弈狀態(tài)進(jìn)行準(zhǔn)確的估值,但是可以通過(guò)玩家的動(dòng)作序列來(lái)對(duì)不同的博弈狀態(tài)進(jìn)行歸類(lèi)。例如在德州撲克游戲中,可以通過(guò)玩家的動(dòng)作序列及歷史數(shù)據(jù)來(lái)推測(cè)玩家的手牌。
步驟2.2:基于統(tǒng)計(jì)和手牌評(píng)估進(jìn)行建模
現(xiàn)有的非完備信息博弈建模算法大多數(shù)依賴(lài)于對(duì)玩家未來(lái)行為的預(yù)測(cè),通過(guò)模擬對(duì)方手牌和公共牌的信息,從而在選擇節(jié)點(diǎn)選擇出對(duì)自己最有利的子節(jié)點(diǎn)。本文中提出的基于統(tǒng)計(jì)的建模方法則是通過(guò)玩家行為預(yù)測(cè)出對(duì)方的手牌,然后通過(guò)對(duì)比雙方手牌的有效牌力做出選擇。以德州撲克為例,如果數(shù)據(jù)顯示在翻牌階段某個(gè)玩家有40%的概率會(huì)加注,則玩家選擇加注時(shí)的手牌應(yīng)該是其所有可能手牌中牌力在前40%的手牌?;诮y(tǒng)計(jì)的對(duì)手建模主要依據(jù)手牌的概率分布表和手牌評(píng)估來(lái)做出決策。二人德州撲克中,發(fā)完手牌以后,對(duì)手可能的手牌組合數(shù)是(50,2)=1225,隨著5張公共牌陸續(xù)被發(fā)出,對(duì)手可能的手牌組合數(shù)逐漸減少?;诮y(tǒng)計(jì)的對(duì)手建模方法通過(guò)對(duì)手的下注歷史和當(dāng)前牌局中的動(dòng)作,來(lái)推斷對(duì)手每種手牌組合出現(xiàn)的概率大小。為每種手牌組合分配相應(yīng)的數(shù)值來(lái)反映其出現(xiàn)的可能性大小,將這些數(shù)值稱(chēng)作權(quán)重。使用這些權(quán)重只是對(duì)手建模的第一步,為了使這些權(quán)重能夠更真實(shí)地反映每種手牌出現(xiàn)的概率大小,需要在牌局進(jìn)行的過(guò)程中不斷更新這些權(quán)重。有兩種方法可以提高這些權(quán)重的準(zhǔn)確率,一種通過(guò)對(duì)手的下注行為來(lái)更新權(quán)重。如果對(duì)手在牌局中有加注的行為,則牌力較強(qiáng)的手牌組合的權(quán)重應(yīng)該被增加,牌力較弱的手牌組合的權(quán)重應(yīng)該被減小。這種模型對(duì)所有的玩家都適用,因而被稱(chēng)為通用模型。另一種方法是基于每個(gè)玩家的下注歷史為每個(gè)玩家保存一份權(quán)重分布表,這種模型稱(chēng)為特例模型。通過(guò)這種方法建模之前需要解決兩個(gè)問(wèn)題,一是如何為所有的手牌組合分配初始權(quán)重,二是玩家做出具體動(dòng)作以后如何更新權(quán)重。
計(jì)算初始權(quán)重
計(jì)算初始權(quán)重依靠的最重要的信息是玩家在翻牌前階段棄牌、跟牌和加注的頻率,據(jù)此可以推斷對(duì)手做不同動(dòng)作時(shí)的平均牌力、誤差和閥值。假設(shè)玩家有30%的手牌選擇跟注,這30%的手牌的平均牌力是0.4,假設(shè)誤差值是0.2,則對(duì)應(yīng)玩家跟牌的牌力下限是0.2,跟牌的牌力上限是0.6。如果玩家出現(xiàn)加注行為,則將牌力小于0.2的手牌的權(quán)重設(shè)為0.01,將牌力大于0.6的手牌的權(quán)重設(shè)為1.0,牌力為0.4的手牌的權(quán)重設(shè)為0.5,牌力介于0.2到0.6之間的手牌按值的大小分別賦予0.01到1.0之間的數(shù)值。通過(guò)這些權(quán)重可以知道,手牌牌力小于0.2的可能性較小,手牌牌力大于0.6的可能性較大。分析玩家的行為時(shí),需要考慮玩家每個(gè)階段具體的動(dòng)作(棄牌、跟牌、加注)、加注的次數(shù)(0次,1次或大于1次)以及當(dāng)前回合所處的階段(翻牌前、翻牌、轉(zhuǎn)牌或河牌),這三個(gè)要素共產(chǎn)生36種不同的組合(有些組合實(shí)際并不會(huì)出現(xiàn)),玩家每次決策時(shí)這36種組合中的一種出現(xiàn)的次數(shù)就會(huì)增加。通過(guò)這36種組合出現(xiàn)的次數(shù)可以計(jì)算玩家動(dòng)作的出現(xiàn)頻率及對(duì)應(yīng)手牌的牌力,從而初始化權(quán)重。
更新權(quán)重
每次玩家做出決策之后,都需要對(duì)權(quán)重表進(jìn)行更新。對(duì)權(quán)重表進(jìn)行更新的時(shí)候不能僅依據(jù)手牌,而是要根據(jù)手牌和公共牌的組合來(lái)計(jì)算有效牌力,從而更新每個(gè)手牌組合的權(quán)重。用u表示有效牌力的平均,v表示誤差,給定u和v的值計(jì)算新權(quán)重的偽代碼如下所示:
對(duì)手每次做出決策以后都需要更新權(quán)重,隨著比賽的進(jìn)行,到最后一輪時(shí),對(duì)手可能的手牌組合中只剩下少量的組合有較高的權(quán)重,這些組合代表了玩家最有可能出現(xiàn)的手牌。圖11顯示的是u=0.6,v=0.2,公共牌為時(shí),對(duì)手翻牌前選擇跟注,翻牌階段選擇加注時(shí)更新權(quán)重的結(jié)果示例。從表中的數(shù)據(jù)可以看出,手牌在上一階段出現(xiàn)的可能性還很大,但是發(fā)完3張公共牌以后,出現(xiàn)的可能性就大大降低了。
通過(guò)玩家在不同博弈階段加注和跟注的行為不斷更新所有可能出現(xiàn)的手牌組合的權(quán)重,當(dāng)?shù)竭_(dá)最后翻牌階段時(shí)所有可能的手牌組合中只剩下少量擁有較高權(quán)重的組合,對(duì)手實(shí)際的手牌最有可能是這些組合中的一種,通過(guò)將自己的手牌與這些手牌組合比較做出最有利的決策。為了進(jìn)一步縮小數(shù)據(jù)的規(guī)模還可以通過(guò)統(tǒng)計(jì)對(duì)手各個(gè)牌力范圍內(nèi)的動(dòng)作序列,然后將當(dāng)前游戲中的動(dòng)作序列與之前的動(dòng)作序列進(jìn)行比較,從而更新權(quán)重。
假設(shè)通過(guò)統(tǒng)計(jì)分析獲得的對(duì)手棄牌、跟牌及加注的頻率比2:5:3,通過(guò)計(jì)算得到對(duì)手跟牌的平均牌力為0.45,跟牌的牌力下限是0.2,跟牌的牌力上限為0.7。如果現(xiàn)在開(kāi)始新一輪的比賽,發(fā)完兩張手牌以后對(duì)手可能的手牌組合數(shù)為C(50,2)=1225種;flop階段三張公共牌為對(duì)手選擇加注,根據(jù)統(tǒng)計(jì)信息對(duì)方手牌有效牌力大于0.7的概率很大,則根據(jù)權(quán)重初始化方法將對(duì)方手牌所有可能組合中有效牌力值小于0.2的組合權(quán)重設(shè)為0.01,將對(duì)方所有可能手牌組合中有效牌力值大于0.7的權(quán)重設(shè)為1.00,有效牌力值在0.2到0.7之間的手牌組合權(quán)重按照比例在0.01到1.00之間分布。如果只選取權(quán)重最高的手牌組合作為最終的候選,則在flop階段候選手牌組合的數(shù)量下降到427種;turn階段公共牌為對(duì)手選擇加注,則對(duì)方手牌有效牌力大于0.7的概率很大,計(jì)算所有可能手牌組合與公共牌搭配以后的有效牌力,根據(jù)權(quán)重更新算法更新每種可能的手牌組合的權(quán)重。如果只選取權(quán)重最高的手牌組合作為候選,則turn階段的候選手牌組合的數(shù)量下降到369種;river階段發(fā)出的公共牌為對(duì)方還是選擇加注,計(jì)算所有可能手牌組合與現(xiàn)在階段5張公共牌搭配以后的有效牌力,繼續(xù)使用權(quán)重更新算法更新所有可能手牌組合的權(quán)重,如果只選取權(quán)重最高的手牌組合作為候選,則turn階段的候選手牌組合的數(shù)量下降到286種,可以將這286種手牌組合作為對(duì)方手牌最有可能的候選,計(jì)算候選手牌的平均有效牌力作為自己下注策略的依據(jù)。286種候選手牌最終的有效牌力的平均值為0.84,通過(guò)計(jì)算己方手牌與5張公共牌搭配后的最終有效牌力,比較對(duì)方牌力與己方牌力,根據(jù)比較的結(jié)果做出決策。
步驟3:對(duì)手建模撲克博弈系統(tǒng)的實(shí)現(xiàn)
本發(fā)明是基于文中提出的基于統(tǒng)計(jì)和手牌評(píng)估的方法實(shí)現(xiàn)了一個(gè)擁有較高智能水平的德州撲克博弈系統(tǒng)
步驟3.1:撲克博弈系統(tǒng)的實(shí)現(xiàn)
德州撲克游戲使用一副沒(méi)有大小王牌的標(biāo)準(zhǔn)52張牌撲克,在系統(tǒng)實(shí)現(xiàn)過(guò)程中使用一個(gè)8位整數(shù)表示一張牌,圖12為博弈系統(tǒng)中各張牌對(duì)應(yīng)的數(shù)據(jù)值。
圖13是基于本文中的手牌評(píng)估方法和對(duì)手建模方法實(shí)現(xiàn)的德州撲克博弈程序的整體框架。整個(gè)博弈過(guò)程分為兩個(gè)階段,在第一階段博弈程序做決策主要依賴(lài)于手牌評(píng)估和基礎(chǔ)下注策略,在使用基礎(chǔ)下注策略進(jìn)行決策的同時(shí)開(kāi)始統(tǒng)計(jì)對(duì)手的數(shù)據(jù)并建立對(duì)手模型。本方案中采用的基礎(chǔ)下注策略是依據(jù)有效牌力的范圍確定一個(gè)混合策略,具體做法是根據(jù)手牌評(píng)估的結(jié)果定義一張概率分布表,概率分布表將手牌的有效牌力劃分為20個(gè)均勻的區(qū)間,每個(gè)區(qū)間有一個(gè)對(duì)應(yīng)的三元組表示玩家棄牌、跟牌和加注的概率。當(dāng)手牌的有效牌力落入概率分布表中的特定區(qū)間時(shí),通過(guò)產(chǎn)生隨機(jī)數(shù)選擇具體行為。例如有效牌力區(qū)間為0.65到0.7時(shí),對(duì)應(yīng)的概率分布表為{0.0,0.7,0.3},通過(guò)產(chǎn)生1到100內(nèi)的隨機(jī)數(shù)來(lái)確定最終選擇跟牌或加注,若隨機(jī)數(shù)的值大于70則選擇加注,否則選擇跟牌。
博弈過(guò)程中采用純策略會(huì)很容易暴露自己的博弈特征從而被對(duì)手輕易的建立模型,為了防止被對(duì)手比較容易的建模,需要在博弈過(guò)程中變換策略來(lái)干擾對(duì)手的建模過(guò)程。本方案中通過(guò)定義幾張差異比較大的概率表來(lái)代表不同類(lèi)型的玩家,在實(shí)際博弈過(guò)程中,基本下注策略在這幾張概率表之間不斷的切換從而干擾對(duì)方建模。圖14是使用的基礎(chǔ)下注策略的示意圖。
博弈程序在依賴(lài)于基本下注策略進(jìn)行博弈的過(guò)程中同時(shí)開(kāi)始收集和分析對(duì)手的數(shù)據(jù),當(dāng)收集到數(shù)據(jù)可以覆蓋所有牌力劃分區(qū)間且每個(gè)區(qū)間內(nèi)的數(shù)據(jù)量達(dá)到預(yù)設(shè)值時(shí),可以認(rèn)為收集到的用戶(hù)數(shù)據(jù)是可信賴(lài)的。通過(guò)對(duì)統(tǒng)計(jì)信息的分析得到對(duì)手選擇不同策略的頻率及對(duì)應(yīng)的閾值,當(dāng)對(duì)手在博弈過(guò)程中選擇某個(gè)具體策略時(shí),通過(guò)使用對(duì)手模型可以確定對(duì)手的有效牌力的范圍,例如對(duì)手選擇跟牌的有效牌力閾值下限是0.2上限是0.7,則當(dāng)對(duì)手選擇跟牌時(shí)可以預(yù)測(cè)出對(duì)手的有效牌力在0.2到0.7之間;如果對(duì)手選擇加注則其有效牌力的范圍在0.7到1.0之間。博弈過(guò)程中新的公共牌出現(xiàn)會(huì)導(dǎo)致手牌與公共牌組合的有效牌力發(fā)生變化,此時(shí)需要依據(jù)權(quán)重更新方法重新計(jì)算對(duì)手可能出現(xiàn)的各個(gè)手牌的權(quán)重,通過(guò)多次的權(quán)重更新可以減少對(duì)手可能的手牌組合的候選。圖15是建立的對(duì)手模型的示意圖。
決策器的作用是根據(jù)基礎(chǔ)下注策略或者對(duì)手模型以及自己當(dāng)前的有效牌力值做出最終的決策。當(dāng)建立了對(duì)手模型之后決策器依賴(lài)于對(duì)手模型對(duì)玩家手牌的預(yù)測(cè)結(jié)果及自己手牌評(píng)估的結(jié)果進(jìn)行決策,當(dāng)自己的手牌有效牌力強(qiáng)于對(duì)手時(shí)選擇加注,當(dāng)牌力值相當(dāng)時(shí)選擇跟注,牌力弱于對(duì)手選擇棄牌??紤]到對(duì)手的實(shí)際手牌與預(yù)測(cè)結(jié)果存在誤差,所有牌力值的比較需要設(shè)定一個(gè)允許的誤差范圍。圖16是建立對(duì)手模型前后決策器選擇策略是輸入內(nèi)容的比較。
圖形界面可以使得德州撲克的整個(gè)博弈過(guò)程更加直觀的呈現(xiàn)在人們面前,圖17是實(shí)現(xiàn)的德州撲克博弈程序的圖形界面,圖形界面中除了每張牌的圖形顯示還包括了玩家的下注信息及每一局最終輸贏的籌碼數(shù)的顯示。步驟3.2:結(jié)果分析
圖18所示為100000局游戲中有效牌力的分布圖,從圖中的數(shù)據(jù)可以看出,有效牌力值處于中等水平的樣本數(shù)較少,而牌力較大或較小的樣本數(shù)較多。
圖19顯示的是實(shí)現(xiàn)的博弈程序與自己對(duì)戰(zhàn)100000局的過(guò)程中手牌的牌力與最終獲勝的概率之間的關(guān)系。該曲線最終下降的是因?yàn)槟切┡屏Ψ浅?qiáng)的手牌組合在實(shí)際博弈過(guò)程中出現(xiàn)的次數(shù)較少。
圖20中是只考慮德州撲克中的牌型情況下,牌力和獲勝概率的關(guān)系。這種圖中顯示了德州撲克不同階段牌型對(duì)最終獲勝概率的影響。
步驟2中,根據(jù)策略偏向進(jìn)行建模具體方法如下:
大多數(shù)博弈參與者在博弈策略上都會(huì)有自己的選擇偏好,例如有些玩家偏重于進(jìn)攻,有的玩家則側(cè)重于防守;有的玩家喜歡冒險(xiǎn)來(lái)?yè)Q得高收益,有的玩家則比較保守只有在有絕對(duì)把握的情況下才會(huì)出擊,大多數(shù)玩家未來(lái)的策略會(huì)與之前的策略保持一致。玩家的選擇偏好在博弈過(guò)程中通過(guò)具體的行為選擇表現(xiàn)出來(lái),這些行為會(huì)導(dǎo)致內(nèi)部數(shù)據(jù)表示的變化,通過(guò)跟蹤這些數(shù)據(jù)變化可以發(fā)現(xiàn)玩家的策略偏向。以實(shí)時(shí)策略類(lèi)游戲?yàn)槔?,可以通過(guò)游戲過(guò)程中玩家制造武器的種類(lèi)和數(shù)量來(lái)對(duì)玩家進(jìn)行人為分類(lèi),建造較多進(jìn)攻型武器的玩家可以劃分到進(jìn)攻性玩家的行列,而建造較多防御型武器的玩家可以劃分到防守型玩家的行列。從機(jī)器學(xué)習(xí)的角度可以將這種劃分問(wèn)題看作聚類(lèi)問(wèn)題,通過(guò)規(guī)定最終類(lèi)別的數(shù)量并選取博弈過(guò)程中的特征利用合適的聚類(lèi)算法對(duì)所有樣本進(jìn)行聚類(lèi)。
以德州撲克為例,游戲過(guò)程中玩家的類(lèi)型可以分為五類(lèi):侵略型、保守型、常規(guī)型、虛張聲勢(shì)型和老謀深算型。圖22是最大下注籌碼為1000時(shí)五類(lèi)不同玩家下注籌碼與獲勝概率關(guān)系的示意圖。侵略型、常規(guī)型及保守型玩家所下籌碼數(shù)基本與獲勝概率成正比,獲勝概率越高下的籌碼越多,而虛張聲勢(shì)型和老謀深算型下注行為較難預(yù)測(cè),虛張聲勢(shì)型可能會(huì)在獲勝概率很低時(shí)下很多的籌碼,老謀深算型可能在獲勝概率很高時(shí)只下很少的籌碼。
侵略玩家加注的頻率要高于其他類(lèi)型的玩家,這類(lèi)玩家希望通過(guò)加注行為來(lái)使自己的手牌無(wú)法被預(yù)測(cè);保守型玩家加注行為較少,棄牌頻率較高;常規(guī)型選手牌好時(shí)會(huì)加注,比較容易根據(jù)行為預(yù)測(cè)手牌;虛張聲勢(shì)型在手牌不好的情況下會(huì)以一定的概率選擇加注來(lái)迷惑選手,這類(lèi)選手期望通過(guò)加注迫使其他玩家棄牌;老謀深算型在手牌很好的情況下開(kāi)始不會(huì)選擇加注,這類(lèi)玩家擔(dān)心一開(kāi)始就加注會(huì)導(dǎo)致其他玩家棄牌,但是在最后一輪時(shí)他們會(huì)瘋狂加注來(lái)獲取高收益。每一種類(lèi)型的玩家都有一定的缺陷,針對(duì)不同類(lèi)型的玩家有不同的策略。在博弈過(guò)程中選取相關(guān)的特征利用聚類(lèi)算法進(jìn)行聚類(lèi),當(dāng)遇到新的對(duì)手時(shí)將其劃分到已有的類(lèi)中,然后利用針對(duì)這一類(lèi)型的玩家的策略與其進(jìn)行博弈。在德州撲克中可以選取玩家三種不同動(dòng)作的比例、平均下注數(shù)、平均總籌碼數(shù)、在可以獲勝的情況下三種動(dòng)作的比例等作為特征,然后通過(guò)K-means聚類(lèi)算法進(jìn)行聚類(lèi),當(dāng)遇到一個(gè)新的對(duì)手時(shí)提取玩家特征然后將其對(duì)應(yīng)到五個(gè)不同的類(lèi)型中的一種。
根據(jù)玩家的策略偏向?qū)ν婕医P枰蕾?lài)于對(duì)相關(guān)博弈的了解程度,在選擇學(xué)習(xí)的特征以及對(duì)于不同類(lèi)型的玩家采取何種應(yīng)對(duì)策略需要該領(lǐng)域的專(zhuān)家知識(shí)。例如在德州撲克中,應(yīng)對(duì)侵略型玩家的策略是更多的選擇跟牌,而應(yīng)對(duì)保守型玩家則可以通過(guò)虛張聲勢(shì)。
步驟2中:使用神經(jīng)網(wǎng)絡(luò)進(jìn)行建模。具體方法如下:
對(duì)不同的玩家而言,影響他們做決策的因素是不完全相同的,要建立完善的對(duì)手模型需要從所有可能的因素中挑選出真正影響對(duì)手做決策的因素。人工神經(jīng)網(wǎng)絡(luò)在有噪聲的數(shù)據(jù)中學(xué)習(xí)和進(jìn)行模式識(shí)別有很好的表現(xiàn),可以通過(guò)人工神經(jīng)網(wǎng)絡(luò)來(lái)確定哪些因素最終會(huì)影響玩家做出決策,從而預(yù)測(cè)玩家未來(lái)的行為。
使用人工神經(jīng)網(wǎng)絡(luò)的另一個(gè)優(yōu)點(diǎn)是不需要具體的相關(guān)領(lǐng)域的知識(shí),在使用人工神經(jīng)網(wǎng)絡(luò)對(duì)玩家行為做出預(yù)測(cè)之前,首先需要選擇所有可能影響玩家決策的因素作為網(wǎng)絡(luò)的輸入節(jié)點(diǎn),通過(guò)玩家歷史下注記錄來(lái)訓(xùn)練人工神經(jīng)網(wǎng)絡(luò),從而完成對(duì)玩家行為的預(yù)測(cè)。將預(yù)測(cè)的結(jié)果應(yīng)用到非完備信息博弈樹(shù)的搜索中,從而做出對(duì)自己最有利的決策。
圖23是一個(gè)使用三層人工神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)撲克游戲中玩家行為的示例,最上層是輸入節(jié)點(diǎn),輸入節(jié)點(diǎn)的顏色表示對(duì)應(yīng)的節(jié)點(diǎn)的值(全白代表0,全黑代表1),每條連接線的粗細(xì)表示權(quán)重的大小(黑色表示產(chǎn)生正面影響,灰色表示負(fù)面影響)。圖中與輸入節(jié)點(diǎn)5連接的邊權(quán)重都比較大,這表明輸入節(jié)點(diǎn)5對(duì)玩家下一步的決策會(huì)產(chǎn)生較大的影響。該網(wǎng)絡(luò)的中間隱藏層有四個(gè)節(jié)點(diǎn),最終三個(gè)輸出節(jié)點(diǎn)顯示了人工神經(jīng)網(wǎng)絡(luò)對(duì)玩家下一次動(dòng)作的預(yù)測(cè)。通過(guò)人工神經(jīng)網(wǎng)絡(luò)中連接各個(gè)節(jié)點(diǎn)的權(quán)重可以知道輸入節(jié)點(diǎn)對(duì)玩家最終做出決策的影響程度。
人工神經(jīng)網(wǎng)絡(luò)由于其抗噪聲能力和學(xué)習(xí)能力較強(qiáng),在預(yù)測(cè)對(duì)手下一步動(dòng)作時(shí)有較高的準(zhǔn)確率,但是人工神經(jīng)網(wǎng)絡(luò)通常需要較大的訓(xùn)練樣本及較長(zhǎng)的訓(xùn)練時(shí)間,而在實(shí)際博弈過(guò)程可利用的學(xué)習(xí)時(shí)間較少,要將人工神經(jīng)網(wǎng)絡(luò)應(yīng)用到實(shí)時(shí)的博弈程序中還存在諸多需要解決的問(wèn)題。
步驟2中:基于決策樹(shù)的對(duì)手建模。具體方法如下:
決策樹(shù)是處理分類(lèi)和預(yù)測(cè)問(wèn)題的另一個(gè)好的選擇,決策樹(shù)從根節(jié)點(diǎn)開(kāi)始在每個(gè)節(jié)點(diǎn)判斷對(duì)應(yīng)的條件是否滿(mǎn)足,然后根據(jù)判斷的結(jié)果走到下一個(gè)節(jié)點(diǎn)直到到達(dá)葉子節(jié)點(diǎn)。圖24是使用決策樹(shù)預(yù)測(cè)撲克游戲中對(duì)方手牌有效牌力的概率分布的示意圖。給定一個(gè)訓(xùn)練數(shù)據(jù)集就可以根據(jù)某些規(guī)則建立一棵決策樹(shù)來(lái)對(duì)數(shù)據(jù)進(jìn)行分類(lèi),可以從某個(gè)節(jié)點(diǎn)開(kāi)始根據(jù)某個(gè)特征對(duì)節(jié)點(diǎn)中的數(shù)據(jù)進(jìn)行分類(lèi),被選擇用于分類(lèi)的特征能夠最大化信息增益。
相較于人工神經(jīng)網(wǎng)絡(luò),決策樹(shù)在抗噪聲方面可能略有不足,但是決策樹(shù)能夠準(zhǔn)確計(jì)算出玩家做出不同選擇的概率分布,而人工神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)智能預(yù)測(cè)出玩家的行為。例如假設(shè)撲克游戲中玩家手牌有效牌力是0.6時(shí)的概率分布為{0.2,0.6,0.2},決策樹(shù)可以預(yù)測(cè)出這一分布的近似值,而人工神經(jīng)網(wǎng)絡(luò)只能預(yù)測(cè)出玩家將會(huì)選擇跟牌。決策樹(shù)相對(duì)于人工神經(jīng)網(wǎng)絡(luò)的另一個(gè)優(yōu)勢(shì)在于決策過(guò)程更容易被人理解。
以上內(nèi)容是結(jié)合具體的優(yōu)選實(shí)施方式對(duì)本發(fā)明所作的進(jìn)一步詳細(xì)說(shuō)明,不能認(rèn)定本發(fā)明的具體實(shí)施只局限于這些說(shuō)明。對(duì)于本發(fā)明所屬技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干簡(jiǎn)單推演或替換,都應(yīng)當(dāng)視為屬于本發(fā)明的保護(hù)范圍。