斗地主之动态评估

Posted by 小一在此 on September 13, 2017

在其他玩家出牌之后,我们还需要进行动态评估,以便于在下一次出牌时可以做出尽量正确的选择。

想做出正确的判断有两个前提:一是收集到足够的、准确的信息;二是拥有丰富的知识对收集到的信息进行解读以得到对当前局面的准确理解。

而斗地主作为一种游戏,所有的出牌信息都是公开的、准确的,所以我们就免除了信息收集并判断其准确性的工作了,因此,我们主要解决的工作是如何对这些信息进行解读。我们在讨论初始评估的目的时说过:预先计算出一个粗略的中间结果,而这个中间结果是对某玩家的出牌历史和手中的牌型的概括性判断,这样当在精确计算每一手牌如何打时,可以降低计算量。而这同样是动态评估的目的。

上次的出牌一文中给过一个出牌的规则的例子,可以看出,由于斗地主的复杂性,想写出一个有效的规则是有难度的,所以我们就有一个两难:如果使用了较多的评估变量,对于牌局的判断应该会更精确但规则的复杂性就大大提升了,想写出一个有效的规则的难度会大大提高同时规则是否有效也难以检测;而如果只使用较少的评估变量,则规则写起来容易了很多,但对牌局的判断可能就不够精细了。

经过权衡,我目前使用了两个评估变量:

  • 牌型强弱:主要是农民判断地主和其他单张、三张、对子的强弱,以选择如何出牌,对地主是择其弱点来做桥,对农民是如何放牌、如何顶牌

  • 意图:主要是地主和农民判断各个农民是否有攻击的倾向,然后分别做出停住或放牌的决策

前面的讨论中出牌有出牌的规则,现在的评估也有评估的规则,而且都是同一种规则定义,那这两种是否相同呢?!在我来看:出牌是决策,评估是猜测。决策是两害相权取其轻、两利相较从其重,以从多种选择中择其最优者,所以决策其实就是一个择优筛选的过程,参考我们的出牌,这个过程包括:

  • 备选:挑选出可供选择的所有待选对象

  • 优劣评分:按标准对所有备选进行优劣评价

  • 加权判优:综合各备选方案的权重,给出最终的优劣评分,选择最优者

如果说决策是从已知中选最优者,那么猜测就是根据已知来推断未知的事物,说的高大上点就是降低系统的不确定性。如何克服这种不确定性呢?我们之前讨论过,我们最常见的不确定性一是模糊性、二是随机性。看起来我们在斗地主游戏中似乎是在克服模糊性的,但实际上并非如此。我们每个人如何出牌都是依据手中的牌、根据一定的规律、希望实现的一定的目标来决定如何出牌的。所以我们的出牌都是根据因果关系做出的决定,所以我们的猜测其实就是观察事实,然后拿这个事实来套某个因果关系(牌理)的逆推。

比如,门板应该顶牌,而现在其他农民出了小牌,而门板却没有顶牌,那么要么门板没有可顶的牌了,要么就是门板准备发动攻击了。所以,猜测其实找到各种情况下该如何出牌,这是正理或说牌理,不符合牌理的异常就可以写成规则用来进行推测了。

所以,猜测就是寻找各种玩家出牌的特定序列,然后借此来推测出牌玩家的牌型强弱或意图。这个各玩家顺序出牌的特定序列其实就是我们常说的模式,因此猜测其实就是一种模式识别,如:

#下家或对家出了不是很大的单张(如K、A)而地主不要,则地主单张弱
如果 开始 状态 等于 已出 同时 类型 等于 单张 同时 角色 不等于 地主 
然后 状态 等于 已出 同时 角色 等于 地主 
满足 地主 的 类型 等于 不要 且 角色 不等于 门板 同时 牌力 只是 大 
则 推断 地主估计 的 牌型估计 的 单张 是 弱

所以我们的猜测规则就是识别出一种种行为模式,然后根据这些模式的成立背后所违背的牌理来推断其他玩家的牌型强弱和意图的可能取值。

由于这些行为模式主要识别的各个玩家的出牌情况:谁出了多大的什么样的牌。所以动态评估还有一个动态调整牌力的问题,即随着牌局的推进,玩家手中的牌一定都是在逐渐变大的,这个牌力提升的判定也非常麻烦,所以现在我采取了一个简化的方案:一是看还有多少比该牌手大的牌点,二是每过数轮,则将所有牌力全部放大一次

由于猜测是概率或可能性的传递,所以猜测应依据已知事实做出,否则猜测的可靠性会迅速下降,那么猜测的可用性也就近乎于无了

====================================================================================================

关注我的公众号及时获取推送的最新文章

公众号