斗地主之推测 - 小一

Posted wangziqiang123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了斗地主之推测 - 小一相关的知识,希望对你有一定的参考价值。

经过前面所说的调整和改进,终于进入了打牌水平可随规则数增加的正轨。但不久又出问题了:(

这个问题的现象很简单,解决起来却很复杂:跳打。比如地主出了张2,下家在不清楚小鬼分布的情况下就直接出了大鬼,结果就导致地主的小鬼升级了。

粗看起来应该也比较好解决,增加点规则来判断下小鬼的分布情况就是了。比如:如果地主出了二,最后是门板用大鬼拦截,则说明小鬼都在地主手中。

我们之前也曾讨论过判断问题,比如地主各牌型的强弱、各玩家的意图等等,粗看起来这两个问题都是对某种未知的判断,似乎并没有什么区别。但细细考量下来,这两者还是有着本质的区别的。

之前讨论过,类似意图、牌型强弱这些判断其实并不是对具体事物的判断,而是我们自己设想出来的、是对其他玩家历史行为的概括,目的是为了简化后继的推理。用IT的术语说,就是一种为了简化推理计算从而提前进行了预计算的中间结果,否则我们在书写规则时,就需要从头考虑各个玩家的出牌历史,这会导致规则数量急剧增加同时每条规则也都会非常复杂、难以理解。

而地主手中有没有小鬼,这是一个事实,只不过我们现在还不知道,但终有知道的时候(为了和判断相区别,我们称这种地主有无小鬼的猜测为推测)。所以,这两者的本质区别就是判断和推测存在着一个是否需要证明的问题;

  • 判断是基于综合分析各玩家的历次行为做出的概括性表征,其本身是虚拟的概念,也就不需要证明,如果发现判断失误可以立刻就进行调整

  • 推测则随着事实的出示而存在着证真或证伪的问题,比如如果我们推测小鬼都在地主手中,那么如果地主出了小鬼则证真、而如果农民出了小鬼则证伪

在很早的时候,这个需要根据事实对推测加以证明的问题就非常困扰着我,因为如果是证真还好,如果是证伪那问题就大了:所有基于这个推测做出的推论全部都要撤销掉。问题的复杂还在于,我们对于推测其实最常用的是非此即彼的推测,比如:如果 门板不顶牌 则 要么 门板想进攻 要么 门板顶不动。这就意味着一旦证伪了某推测,我们不但要撤销掉所有基于该推测衍生出来的各种推论,还要调整被间接证真的结论及其所衍生出来的各种推论的置信度。其它关联的问题就更多、更麻烦了:撤销是否需要回溯、如何回溯到正确的版本、撤销后的一致性问题、循环论证的检测等等。

在试验了多种实现之后,考虑到斗地主的复杂性还不是很大,所以目前采取了一种简化策略来降低推测的复杂性:不基于推测来进行推测或判断。这样就暂时不需要考虑推测的关联问题了,而只要将推测和最新出示的事实之间做一个冲突检测即可:如果推测与最新事实有冲突则将推测撤销掉即可,这就暂时避免了复杂的回溯问题。

在增加推测后,那么我们目前就具有了三种能力:

  • 判断:对历史行为进行概括,用虚拟的变量加以代表,用以刻画对象的当前状态

  • 推测:根据其历史行为对某对象的未知状态(未知事实)加以猜测

  • 决策:根据当前的已知,包括事实、判断和推测,计算出应采取的最为合理的行为,这个计算结果是综合的、可基于短期目标进行加权的

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

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

技术图片



原文:大专栏  斗地主之推测 - 小一


以上是关于斗地主之推测 - 小一的主要内容,如果未能解决你的问题,请参考以下文章

棋牌平台架设教程之斗地主核心算法

斗地主之洗牌发牌----Java篇

棋牌平台开发教程之斗地主常用算法

斗地主系列之牌型判断

华为机试真题 C++ 实现斗地主之顺子

华为上机真题斗地主之顺子