一种基于非完备信息博弈中进行对手建模的方法与流程

文档序号:12158482阅读:592来源:国知局
一种基于非完备信息博弈中进行对手建模的方法与流程

本发明涉及计算机博弈领域,主要涉及博弈中关于德州扑克的手牌评估;非完备信息博弈中的对手建模等。



背景技术:

随着人工智能技术的发展,通过有效的博弈树搜索技术已经能够处理大部分完备信息博弈问题,而非完备信息博弈在很长的一段时间内发展缓慢。人工智能技术的逐渐成熟和计算机硬件水平的提高为解决非完备信息博弈问题创造了条件。



技术实现要素:

为了解决现有技术中问题,本发明提供了一种基于非完备信息博弈中进行对手建模的方法,步骤1:德州扑克中的手牌评估;步骤2:非完备信息博弈中的对手建模;步骤3:扑克博弈系统的实现。

非完备信息博弈中进行对手建模的方法,通过不同的对手建模方法对玩家进行分类并预测博弈中的未知信息。以德州扑克作为具体研究对象,通过将对手建模方法与手牌评估算法相结合实现了一个拥有较高智能水平的扑克博弈程序。

附图说明

图1是所有5张牌的组合构成的牌型及出现的次数;

图2是牌值及对应质数对照表;

图3是32位整数的格式;

图4是所有同花顺及同花在查找表flushes中的值;

图5是所有顺子和高牌在查找表unique5中的值;

图6是剩余牌型及对应的最终返回结果;

图7是返回值的范围对应的牌型;

图8是张牌组合的流程图;

图9是Sklansky手牌分类图;

图10是Sklansky手牌分类表;

图11是翻牌阶段,公共牌为时部分手牌的权重更新表u=0.6,v=0.2;

图12是博弈系统中每张牌的数据表示;

图13是德州扑克博弈程序框架;

图14是基础下注策略示意图;

图15是对手模型示意图;

图16是对手模型建立前后决策过程的比较;

图17是德州扑克博弈系统的图形界面;

图18是100000局游戏中,有效牌力的分布直方图;

图19是在与自己的100000局游戏中牌力与获胜概率的关系图;

图20是各个阶段牌型对获胜概率的影响;

图21是实时策略类游戏玩家类型的划分;

图22是德州扑克中五种不同类型的玩家;

图23是利用人工神经网络预测玩家行为;

图24是通过决策树预测对手的牌力分布;

图25是系统结构图。

具体实施方式

下面结合附图对本发明做进一步说明。

一种基于非完备信息博弈中进行对手建模的方法,包括如下步骤:

步骤1:德州扑克中的手牌评估:

步骤1.1:手牌评估指标

德州扑克在进行时,每一轮都会有新的牌被发出,玩家每一轮都需要进行决策。手牌评估的目的是通过计算玩家当前获胜或者失败的概率,为玩家每一轮的决策提供依据。在博弈程序中手牌评估需要考虑以下几个要素:玩家的手牌,对手的数量,已有的公共牌,未来可能出现的公共牌,对手可能的手牌。通常手牌评估方法最终会返回一个数值在0.0到1.0之间的小数,数值越小,表示获胜的概率越小;

步骤1.2:牌力计算

牌力是某一手牌优于其他手牌的概率,可以通过计算对手所有可能的手牌组合来确定这一概率值。假设现在玩家的手牌是3张公共牌是根据德州扑克的规则,手牌可以和公共牌组成任意3张、两对、一对或者是A-K的组合牌力都强于手牌玩家手牌所有可能的组合数是1081,强于手牌的数量是444,牌力相当的组合数是9种,剩余628种组合的牌力则弱于根据以上数据可以算出手牌的牌力为0.585。

步骤1.3:潜力计算

在德州扑克游戏过程中牌力的变化空间是巨大的,仅仅依靠牌力并不能完整的评价局面的优劣。例如,两个玩家的手牌分别是和当前的公共牌是计算牌力显然手牌更强。但是,考虑到手牌与公共牌有更大的概率组成同花和顺子,也就是牌力可能发生扭转性的转变,在评估手牌的过程中手牌潜力可以反映这种变化的趋势。可以用正潜力,来表示当前落后,但未来会反超的概率;用负潜力表示当前领先,而未来落后的概率。

步骤1.4:有效牌力计算

将手牌的牌力和潜力结合起来能够更有效地评估手牌,这一估值称作有效牌力。用HS表示牌力,PPot表示正潜力,NPot表示负潜力,EHS表示有效牌力,则有效牌力的计算方法如公式所示:

EHS=HS×(1-Npot)+(1-HS)×PPot

但是实际游戏过程中,玩家总是更多地考虑手牌变强的情况而忽略负潜力,所以在使用过程中负潜力显得没有正潜力那么重要,所以产生了有效牌力计算的另一种方法。

EHS=HS+(1-HS)×PPot

因为德州扑克最终比较大小时是从所有牌中选出5张组成最大的牌型进行比较。在计算牌力和有效牌力时,也需要比较各个玩家的手牌与公共牌组成的5张牌的最大组合,因此在评估手牌时计算5张牌所组成的组合的大小成为评估手牌的核心环节。

步骤1.5:手牌评估算法

德州扑克不同牌型大小依序是:皇家同花顺>同花顺>四条>葫芦>同花>顺子>三条>两对>一对>高牌。影响牌型和大小的要素有以下4点:

1、组合中每种花色出现的次数

2、组合中每个牌值出现的次数

3、5张牌连续与否

4、每张牌的牌值

其中5张牌的组合共有2598960种,各个牌型出现的次数如图1所示:

所有这些组合中不考虑花色的影响,不同的组合数是7462种,也就是说所有2598960种5张牌的组合最后可以用7462个不同的数值来表示。在本方案中选择1到7462之间的7462个正整数来表示这些组合的强弱,数值越小牌力越强,皇家同花顺的值是1。为了将2598960种组合快速对应到7462个不同的数值中去,算法需要忽略每张牌的顺序。也就是说,无论5张牌以何种顺序传入,最终返回的结果是一致的。最简单的想法是对传入的5张牌进行排序,将排完序的结果作为输入参数传入。但是排序算法会有一定的执行时间,从而整个算法的执行速度会受到影响。一种比较好的解决方法是,利用质数相乘所得结果的唯一可分解性,为每个牌值的牌分配一个唯一的质数与之对应,将质数相乘的结果作为参数传入进行计算,由于乘法是计算机能执行的最快的运算之一该方法可提高算法速度。每个牌值的牌与之对应的质数如图2所示:

例如,当前5个质数的乘积是2310,分解结果为2、3、5、7、11,通过对照可以知道当前5张牌的牌值分别是2、3、4、5、6。这一算法的另一个优势在于,乘法是计算机能执行的最快的操作之一,通过执行乘法运算加快了整个算法的执行速度。

但是仅仅通过质数相乘不能解决所有的问题。例如5张牌的组合,能形成同花的情况和不能形成同花的情况返回的结果一定不同。因此,在执行质数相乘之前,需要检查5张牌能否形成同花。可以通过一个32位的整数来唯一标识一张牌,32位整数的格式如图3所示:

例如,K◆在这种表示方法下的数值为:00001000 00000000 0100101100100101。当所有5张牌都以这种数据格式表示以后,要判断能否形成同花,只需要把五张牌进行按位与运算,最后再与0xF000进行与运算即可。用c1,c2,c3,c4,c5分别表示5张牌,计算方法如下:

r=c1AND c2AND c3AND c4AND c5AND 0xF000 (3-4)

如果运算结果等于0表示参与计算的5张牌不能形成同花,否则表示能够形成同花。如果能够形成同花,需要一种方法来快速地将此牌型对应到1到7462之间的7462个数值中去。通过索引查表是解决这一问题最快的方法之一,但在此之前先要生成查找表。先对5张牌进行处理:

q=(c1OR c2OR c3OR c4OR c5)>>16 (3-5)

如果5张牌能形成同花,则这5张牌的牌值必定全都不相同,则q中必定恰好有5位是1。在所有能形成同花的结果中,q的最小值是0x001F(十进制值为31),q的最大值为0x1F00(十进制值为7936)。为了方便查找,可以建立一张包含7937个元素的查找表(方便通过下标进行查找)。查找表中的值依据图1中的数据进行填充,例如q等于31时表示的是2、3、4、5、6组成的同花顺,通过图1可以知道,在不考虑花色的情况下共有10种不同的同花顺,皇家同花顺的值是1,2、3、4、5、6组成的同花顺的值是9,所以查找表中索引为31的元素值是9。因为整个方案中用到了多张查找表,为了区分此处的查找表命名为flushes。图4是各种组合的同花在查找表flushes中的值。

例如,A、K、Q、J、9形成的同花,q=0x1E80(十进制值为7808),通过图1可以知道,查找表中索引值为7808的元素值为323。如果索引值的二进制表示中不是恰好有5位是1,则对应的查找表中的值是0。这些值在实际使用过程中不会被用到,造成了一定的空间浪费,但是查找表的使用提高了算法的执行速度。

如果5张牌不能形成同花需要考虑出现顺子或高牌的情况。出现顺子或高牌的情况,则5张牌的牌值也一定各不相同,所以q的二进制表示中一定恰好有5位是1。为了提高速度,在此使用另一张查找表unique5。所有顺子和高牌在查找表unique5中的值如图5所示:

如果当前5张牌的牌值分别是7、5、4、3、2且不能形成同花,则通过查找表unique5可以获得其对应的值是7462。

处理完同花顺、同花、顺子和高牌以后,剩余牌型的数量为7462-2574=4888种。剩余的牌型就可以使用之前为每个牌值分配的质数来处理了。对5张牌进行以下处理:

q=(c1AND 0xFF)*(c2AND 0xFF)*...*(c5AND 0xFF) (3-6)

q的最小值是48,最大值是104553157。由于最大值太大,如果直接使用查找表会造成很大的空间浪费,所以在此考虑使用其他方法。由于剩余牌型的数量只有4888种,可以建立两张各含4888个元素的查找表,查找表products(图5)中按从小到大的顺序保存q值。在计算获得q值以后,通过二分查找法获得q在查找表products中的索引,再通过获得的索引到另外一张查找表values(图6)中获得该牌型对应的最终结果。例如,q值是48时,返回的索引是0,表示的牌型是22223,则表values中索引为0的值是牌型22223的最终对应的值是166。图7中是所有剩余牌型对应的最终结果。

计算5张牌的组合的值时,首先按照公式3-4判断是否能够形成同花。如果可以,则利用公式3-5算出的q值从查找表flushes中获得最终结果;如果不能,再检查是否是顺子或高牌。利用q值在查找表unique5中进行查找,如果查找表unique5中对应位置的元素不等于0,表示是顺子或高牌,查找成功,否则查找失败。如果查找成功,返回unique5中对应位置的值;否则,利用公式3-6将剩余的4888种牌型映射到最终正确的结果,在进行映射时可以使用二分查找法或Hash算法。

图8为算法的流程图。此算法的另一个优势在于不仅能够判断不同牌型的强弱,而且可以根据返回的结果得到当前的牌型。返回值的范围对应的牌型,如图7所示。

步骤1.6:Preflop阶段的手牌评估

在Pre-flop阶段参与博弈的玩家都只有两张私有手牌,没有任何公共牌的信息,在这个阶段玩家只能根据自己的手牌和对手的下注行为来进行决策。准确地评估两张私有手牌的大小,对于Pre-flop阶段的下注策略十分重要。德州扑克中两张手牌的组合共有1326种,如果不区分具体花色,按牌值和是否是同花色可以将这1326种手牌的组合对应到169种类型。许多德州扑克领域的专家提出了自己的分类方法,比较著名的有Sklansky手牌分类和Bill Chen提出的手牌计算公式。

Sklansky手牌分类方法将所有手牌分为9个级别,具体分类如Sklans牌分类图和Sklansky手牌分类表所示,即图9和图10所示。手牌的分级的编号越小表示胜率越大。

Bill Chen提出的手牌计算公式具体如下:

1.首先为手牌中牌值较大的牌打分,牌值A的评分为10,牌值K的评分8,牌值Q的评分为7,牌值J的评分为6,牌值为10到2的牌的评分为牌值的一半,例如牌值8的评分为4。

2.如果出现一对,则将1中的分值乘以2,一对牌的最小分值是5。例如一对K的分值是16,一对7的分值是7,而一对2的分值是5。

3.如果两张牌是同花色,总分加2。

4.如果两张牌的牌值不相等,根据牌值的差减小总分。牌值差小于2不需要减分,牌值差为2总分减1,牌值差为3总分减2,牌值差为4总分减4,牌值差大于等于5总分减5。

5.如果两张牌的牌值都小于Q,且牌值差小于3,总分加1。

6.对总分向上取整。

步骤2:对手建模

对手建模表示的是在博弈过程中训练智能体来应对特定对手的过程。在一些博弈中由于博弈空间太过巨大或者由于博弈中的部分状态信息无法活获得,可以应对所有情况的通用策略并不存在。例如角色扮演类游戏(Role Playing Games)、机器人足球、围棋等博弈中搜索空间太过巨大,无法通过博弈树搜索找到最优策略;在扑克、麻将等博弈中部分博弈信息无法被观察到,经典的博弈树搜索算法无法被用来解决非完备信息博弈问题,针对非完备信息博弈的搜索算法需要依赖对未知信息的预测;在多人在线RPG游戏、第一人称视角射击类游戏中既存在非完备信息的问题又存在搜索空间过大的问题。当传统的博弈树搜索算法无法应对非完备信息和搜索空间过大的问题时,对手建模成为一种可行的方法。

对手建模的直接目的是通过观察和学习,建立一个有效的对手模型。对手模型是博弈过程中对手或对手行为的一种抽象表述,对手模型的内容可以是博弈过程中玩家表现出的选择偏向、玩家采用的策略、玩家暴露出的弱点或关于玩家博弈能力的评估等,只要是博弈过程中对手可被利用的信息都可以出现在对手模型中。在完备信息博弈中,可以通过学习玩家的策略来减少候选节点的数量,从而减小搜索空间的规模,从而使得博弈树搜索算法可以有效地被执行;在非完备信息博弈中通过学习对手行为来对未知的信息进行预测,从而有效地利用博弈树搜索算法。现阶段的对手建模方法不会保存玩家在不同的博弈中的信息,因而在实际建模过程中会按照具体的博弈形式建立不同的对手模型。对手建模的主要方法有两种[36],一是通过学习对手的估值函数,从而获得对手对博弈树中每个节点的估值及博弈树的搜索深度,这种方式主要适用于完备信息博弈。另一种对手建模的方法是学习对手的策略,这种方式通常是直接学习对手在特定的博弈状态下做出的选择,这种方式比较适用于重复性博弈和非完备信息博弈。如果使用对手的策略进行建模,则可以通过策略S来定义玩家P,在对手未知的情况下玩家可以定义为:

P=(S,NIL) (4-1)

如果对手O已知,则可以通过策略S和对手来定义玩家:

P=(S,O) (4-2)

公式4-1没有考虑对手的情况,所以又称作玩家策略,而公式4-2称为对手模型。

步骤2.1:非完备信息博弈中的对手建模

在非完备信息中由于博弈状态的不可知,玩家要准确对局面做出评估很困难,通过学习对手的估值函数来进行对手建模的方法不可行。学习对手的策略是另一种可行的方法,学习对手的策略主要是通过学习对手在不同的博弈状态下策略的偏向来预测未知信息。在这种情况下虽然不能对每一个博弈状态进行准确的估值,但是可以通过玩家的动作序列来对不同的博弈状态进行归类。例如在德州扑克游戏中,可以通过玩家的动作序列及历史数据来推测玩家的手牌。

步骤2.2:基于统计和手牌评估进行建模

现有的非完备信息博弈建模算法大多数依赖于对玩家未来行为的预测,通过模拟对方手牌和公共牌的信息,从而在选择节点选择出对自己最有利的子节点。本文中提出的基于统计的建模方法则是通过玩家行为预测出对方的手牌,然后通过对比双方手牌的有效牌力做出选择。以德州扑克为例,如果数据显示在翻牌阶段某个玩家有40%的概率会加注,则玩家选择加注时的手牌应该是其所有可能手牌中牌力在前40%的手牌。基于统计的对手建模主要依据手牌的概率分布表和手牌评估来做出决策。二人德州扑克中,发完手牌以后,对手可能的手牌组合数是(50,2)=1225,随着5张公共牌陆续被发出,对手可能的手牌组合数逐渐减少。基于统计的对手建模方法通过对手的下注历史和当前牌局中的动作,来推断对手每种手牌组合出现的概率大小。为每种手牌组合分配相应的数值来反映其出现的可能性大小,将这些数值称作权重。使用这些权重只是对手建模的第一步,为了使这些权重能够更真实地反映每种手牌出现的概率大小,需要在牌局进行的过程中不断更新这些权重。有两种方法可以提高这些权重的准确率,一种通过对手的下注行为来更新权重。如果对手在牌局中有加注的行为,则牌力较强的手牌组合的权重应该被增加,牌力较弱的手牌组合的权重应该被减小。这种模型对所有的玩家都适用,因而被称为通用模型。另一种方法是基于每个玩家的下注历史为每个玩家保存一份权重分布表,这种模型称为特例模型。通过这种方法建模之前需要解决两个问题,一是如何为所有的手牌组合分配初始权重,二是玩家做出具体动作以后如何更新权重。

计算初始权重

计算初始权重依靠的最重要的信息是玩家在翻牌前阶段弃牌、跟牌和加注的频率,据此可以推断对手做不同动作时的平均牌力、误差和阀值。假设玩家有30%的手牌选择跟注,这30%的手牌的平均牌力是0.4,假设误差值是0.2,则对应玩家跟牌的牌力下限是0.2,跟牌的牌力上限是0.6。如果玩家出现加注行为,则将牌力小于0.2的手牌的权重设为0.01,将牌力大于0.6的手牌的权重设为1.0,牌力为0.4的手牌的权重设为0.5,牌力介于0.2到0.6之间的手牌按值的大小分别赋予0.01到1.0之间的数值。通过这些权重可以知道,手牌牌力小于0.2的可能性较小,手牌牌力大于0.6的可能性较大。分析玩家的行为时,需要考虑玩家每个阶段具体的动作(弃牌、跟牌、加注)、加注的次数(0次,1次或大于1次)以及当前回合所处的阶段(翻牌前、翻牌、转牌或河牌),这三个要素共产生36种不同的组合(有些组合实际并不会出现),玩家每次决策时这36种组合中的一种出现的次数就会增加。通过这36种组合出现的次数可以计算玩家动作的出现频率及对应手牌的牌力,从而初始化权重。

更新权重

每次玩家做出决策之后,都需要对权重表进行更新。对权重表进行更新的时候不能仅依据手牌,而是要根据手牌和公共牌的组合来计算有效牌力,从而更新每个手牌组合的权重。用u表示有效牌力的平均,v表示误差,给定u和v的值计算新权重的伪代码如下所示:

对手每次做出决策以后都需要更新权重,随着比赛的进行,到最后一轮时,对手可能的手牌组合中只剩下少量的组合有较高的权重,这些组合代表了玩家最有可能出现的手牌。图11显示的是u=0.6,v=0.2,公共牌为时,对手翻牌前选择跟注,翻牌阶段选择加注时更新权重的结果示例。从表中的数据可以看出,手牌在上一阶段出现的可能性还很大,但是发完3张公共牌以后,出现的可能性就大大降低了。

通过玩家在不同博弈阶段加注和跟注的行为不断更新所有可能出现的手牌组合的权重,当到达最后翻牌阶段时所有可能的手牌组合中只剩下少量拥有较高权重的组合,对手实际的手牌最有可能是这些组合中的一种,通过将自己的手牌与这些手牌组合比较做出最有利的决策。为了进一步缩小数据的规模还可以通过统计对手各个牌力范围内的动作序列,然后将当前游戏中的动作序列与之前的动作序列进行比较,从而更新权重。

假设通过统计分析获得的对手弃牌、跟牌及加注的频率比2:5:3,通过计算得到对手跟牌的平均牌力为0.45,跟牌的牌力下限是0.2,跟牌的牌力上限为0.7。如果现在开始新一轮的比赛,发完两张手牌以后对手可能的手牌组合数为C(50,2)=1225种;flop阶段三张公共牌为对手选择加注,根据统计信息对方手牌有效牌力大于0.7的概率很大,则根据权重初始化方法将对方手牌所有可能组合中有效牌力值小于0.2的组合权重设为0.01,将对方所有可能手牌组合中有效牌力值大于0.7的权重设为1.00,有效牌力值在0.2到0.7之间的手牌组合权重按照比例在0.01到1.00之间分布。如果只选取权重最高的手牌组合作为最终的候选,则在flop阶段候选手牌组合的数量下降到427种;turn阶段公共牌为对手选择加注,则对方手牌有效牌力大于0.7的概率很大,计算所有可能手牌组合与公共牌搭配以后的有效牌力,根据权重更新算法更新每种可能的手牌组合的权重。如果只选取权重最高的手牌组合作为候选,则turn阶段的候选手牌组合的数量下降到369种;river阶段发出的公共牌为对方还是选择加注,计算所有可能手牌组合与现在阶段5张公共牌搭配以后的有效牌力,继续使用权重更新算法更新所有可能手牌组合的权重,如果只选取权重最高的手牌组合作为候选,则turn阶段的候选手牌组合的数量下降到286种,可以将这286种手牌组合作为对方手牌最有可能的候选,计算候选手牌的平均有效牌力作为自己下注策略的依据。286种候选手牌最终的有效牌力的平均值为0.84,通过计算己方手牌与5张公共牌搭配后的最终有效牌力,比较对方牌力与己方牌力,根据比较的结果做出决策。

步骤3:对手建模扑克博弈系统的实现

本发明是基于文中提出的基于统计和手牌评估的方法实现了一个拥有较高智能水平的德州扑克博弈系统

步骤3.1:扑克博弈系统的实现

德州扑克游戏使用一副没有大小王牌的标准52张牌扑克,在系统实现过程中使用一个8位整数表示一张牌,图12为博弈系统中各张牌对应的数据值。

图13是基于本文中的手牌评估方法和对手建模方法实现的德州扑克博弈程序的整体框架。整个博弈过程分为两个阶段,在第一阶段博弈程序做决策主要依赖于手牌评估和基础下注策略,在使用基础下注策略进行决策的同时开始统计对手的数据并建立对手模型。本方案中采用的基础下注策略是依据有效牌力的范围确定一个混合策略,具体做法是根据手牌评估的结果定义一张概率分布表,概率分布表将手牌的有效牌力划分为20个均匀的区间,每个区间有一个对应的三元组表示玩家弃牌、跟牌和加注的概率。当手牌的有效牌力落入概率分布表中的特定区间时,通过产生随机数选择具体行为。例如有效牌力区间为0.65到0.7时,对应的概率分布表为{0.0,0.7,0.3},通过产生1到100内的随机数来确定最终选择跟牌或加注,若随机数的值大于70则选择加注,否则选择跟牌。

博弈过程中采用纯策略会很容易暴露自己的博弈特征从而被对手轻易的建立模型,为了防止被对手比较容易的建模,需要在博弈过程中变换策略来干扰对手的建模过程。本方案中通过定义几张差异比较大的概率表来代表不同类型的玩家,在实际博弈过程中,基本下注策略在这几张概率表之间不断的切换从而干扰对方建模。图14是使用的基础下注策略的示意图。

博弈程序在依赖于基本下注策略进行博弈的过程中同时开始收集和分析对手的数据,当收集到数据可以覆盖所有牌力划分区间且每个区间内的数据量达到预设值时,可以认为收集到的用户数据是可信赖的。通过对统计信息的分析得到对手选择不同策略的频率及对应的阈值,当对手在博弈过程中选择某个具体策略时,通过使用对手模型可以确定对手的有效牌力的范围,例如对手选择跟牌的有效牌力阈值下限是0.2上限是0.7,则当对手选择跟牌时可以预测出对手的有效牌力在0.2到0.7之间;如果对手选择加注则其有效牌力的范围在0.7到1.0之间。博弈过程中新的公共牌出现会导致手牌与公共牌组合的有效牌力发生变化,此时需要依据权重更新方法重新计算对手可能出现的各个手牌的权重,通过多次的权重更新可以减少对手可能的手牌组合的候选。图15是建立的对手模型的示意图。

决策器的作用是根据基础下注策略或者对手模型以及自己当前的有效牌力值做出最终的决策。当建立了对手模型之后决策器依赖于对手模型对玩家手牌的预测结果及自己手牌评估的结果进行决策,当自己的手牌有效牌力强于对手时选择加注,当牌力值相当时选择跟注,牌力弱于对手选择弃牌。考虑到对手的实际手牌与预测结果存在误差,所有牌力值的比较需要设定一个允许的误差范围。图16是建立对手模型前后决策器选择策略是输入内容的比较。

图形界面可以使得德州扑克的整个博弈过程更加直观的呈现在人们面前,图17是实现的德州扑克博弈程序的图形界面,图形界面中除了每张牌的图形显示还包括了玩家的下注信息及每一局最终输赢的筹码数的显示。步骤3.2:结果分析

图18所示为100000局游戏中有效牌力的分布图,从图中的数据可以看出,有效牌力值处于中等水平的样本数较少,而牌力较大或较小的样本数较多。

图19显示的是实现的博弈程序与自己对战100000局的过程中手牌的牌力与最终获胜的概率之间的关系。该曲线最终下降的是因为那些牌力非常强的手牌组合在实际博弈过程中出现的次数较少。

图20中是只考虑德州扑克中的牌型情况下,牌力和获胜概率的关系。这种图中显示了德州扑克不同阶段牌型对最终获胜概率的影响。

步骤2中,根据策略偏向进行建模具体方法如下:

大多数博弈参与者在博弈策略上都会有自己的选择偏好,例如有些玩家偏重于进攻,有的玩家则侧重于防守;有的玩家喜欢冒险来换得高收益,有的玩家则比较保守只有在有绝对把握的情况下才会出击,大多数玩家未来的策略会与之前的策略保持一致。玩家的选择偏好在博弈过程中通过具体的行为选择表现出来,这些行为会导致内部数据表示的变化,通过跟踪这些数据变化可以发现玩家的策略偏向。以实时策略类游戏为例,可以通过游戏过程中玩家制造武器的种类和数量来对玩家进行人为分类,建造较多进攻型武器的玩家可以划分到进攻性玩家的行列,而建造较多防御型武器的玩家可以划分到防守型玩家的行列。从机器学习的角度可以将这种划分问题看作聚类问题,通过规定最终类别的数量并选取博弈过程中的特征利用合适的聚类算法对所有样本进行聚类。

以德州扑克为例,游戏过程中玩家的类型可以分为五类:侵略型、保守型、常规型、虚张声势型和老谋深算型。图22是最大下注筹码为1000时五类不同玩家下注筹码与获胜概率关系的示意图。侵略型、常规型及保守型玩家所下筹码数基本与获胜概率成正比,获胜概率越高下的筹码越多,而虚张声势型和老谋深算型下注行为较难预测,虚张声势型可能会在获胜概率很低时下很多的筹码,老谋深算型可能在获胜概率很高时只下很少的筹码。

侵略玩家加注的频率要高于其他类型的玩家,这类玩家希望通过加注行为来使自己的手牌无法被预测;保守型玩家加注行为较少,弃牌频率较高;常规型选手牌好时会加注,比较容易根据行为预测手牌;虚张声势型在手牌不好的情况下会以一定的概率选择加注来迷惑选手,这类选手期望通过加注迫使其他玩家弃牌;老谋深算型在手牌很好的情况下开始不会选择加注,这类玩家担心一开始就加注会导致其他玩家弃牌,但是在最后一轮时他们会疯狂加注来获取高收益。每一种类型的玩家都有一定的缺陷,针对不同类型的玩家有不同的策略。在博弈过程中选取相关的特征利用聚类算法进行聚类,当遇到新的对手时将其划分到已有的类中,然后利用针对这一类型的玩家的策略与其进行博弈。在德州扑克中可以选取玩家三种不同动作的比例、平均下注数、平均总筹码数、在可以获胜的情况下三种动作的比例等作为特征,然后通过K-means聚类算法进行聚类,当遇到一个新的对手时提取玩家特征然后将其对应到五个不同的类型中的一种。

根据玩家的策略偏向对玩家建模需要依赖于对相关博弈的了解程度,在选择学习的特征以及对于不同类型的玩家采取何种应对策略需要该领域的专家知识。例如在德州扑克中,应对侵略型玩家的策略是更多的选择跟牌,而应对保守型玩家则可以通过虚张声势。

步骤2中:使用神经网络进行建模。具体方法如下:

对不同的玩家而言,影响他们做决策的因素是不完全相同的,要建立完善的对手模型需要从所有可能的因素中挑选出真正影响对手做决策的因素。人工神经网络在有噪声的数据中学习和进行模式识别有很好的表现,可以通过人工神经网络来确定哪些因素最终会影响玩家做出决策,从而预测玩家未来的行为。

使用人工神经网络的另一个优点是不需要具体的相关领域的知识,在使用人工神经网络对玩家行为做出预测之前,首先需要选择所有可能影响玩家决策的因素作为网络的输入节点,通过玩家历史下注记录来训练人工神经网络,从而完成对玩家行为的预测。将预测的结果应用到非完备信息博弈树的搜索中,从而做出对自己最有利的决策。

图23是一个使用三层人工神经网络预测扑克游戏中玩家行为的示例,最上层是输入节点,输入节点的颜色表示对应的节点的值(全白代表0,全黑代表1),每条连接线的粗细表示权重的大小(黑色表示产生正面影响,灰色表示负面影响)。图中与输入节点5连接的边权重都比较大,这表明输入节点5对玩家下一步的决策会产生较大的影响。该网络的中间隐藏层有四个节点,最终三个输出节点显示了人工神经网络对玩家下一次动作的预测。通过人工神经网络中连接各个节点的权重可以知道输入节点对玩家最终做出决策的影响程度。

人工神经网络由于其抗噪声能力和学习能力较强,在预测对手下一步动作时有较高的准确率,但是人工神经网络通常需要较大的训练样本及较长的训练时间,而在实际博弈过程可利用的学习时间较少,要将人工神经网络应用到实时的博弈程序中还存在诸多需要解决的问题。

步骤2中:基于决策树的对手建模。具体方法如下:

决策树是处理分类和预测问题的另一个好的选择,决策树从根节点开始在每个节点判断对应的条件是否满足,然后根据判断的结果走到下一个节点直到到达叶子节点。图24是使用决策树预测扑克游戏中对方手牌有效牌力的概率分布的示意图。给定一个训练数据集就可以根据某些规则建立一棵决策树来对数据进行分类,可以从某个节点开始根据某个特征对节点中的数据进行分类,被选择用于分类的特征能够最大化信息增益。

相较于人工神经网络,决策树在抗噪声方面可能略有不足,但是决策树能够准确计算出玩家做出不同选择的概率分布,而人工神经网络网络智能预测出玩家的行为。例如假设扑克游戏中玩家手牌有效牌力是0.6时的概率分布为{0.2,0.6,0.2},决策树可以预测出这一分布的近似值,而人工神经网络只能预测出玩家将会选择跟牌。决策树相对于人工神经网络的另一个优势在于决策过程更容易被人理解。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1