标签:避免 应该 str 比较 复杂 导致 简单 计算 data
经过前面所说的调整和改进,终于进入了打牌水平可随规则数增加的正轨。但不久又出问题了:(
这个问题的现象很简单,解决起来却很复杂:跳打。比如地主出了张2,下家在不清楚小鬼分布的情况下就直接出了大鬼,结果就导致地主的小鬼升级了。
粗看起来应该也比较好解决,增加点规则来判断下小鬼的分布情况就是了。比如:如果地主出了二,最后是门板用大鬼拦截,则说明小鬼都在地主手中。
我们之前也曾讨论过判断问题,比如地主各牌型的强弱、各玩家的意图等等,粗看起来这两个问题都是对某种未知的判断,似乎并没有什么区别。但细细考量下来,这两者还是有着本质的区别的。
之前讨论过,类似意图、牌型强弱这些判断其实并不是对具体事物的判断,而是我们自己设想出来的、是对其他玩家历史行为的概括,目的是为了简化后继的推理。用IT的术语说,就是一种为了简化推理计算从而提前进行了预计算的中间结果,否则我们在书写规则时,就需要从头考虑各个玩家的出牌历史,这会导致规则数量急剧增加同时每条规则也都会非常复杂、难以理解。
而地主手中有没有小鬼,这是一个事实,只不过我们现在还不知道,但终有知道的时候(为了和判断相区别,我们称这种地主有无小鬼的猜测为推测)。所以,这两者的本质区别就是判断和推测存在着一个是否需要证明的问题;
判断是基于综合分析各玩家的历次行为做出的概括性表征,其本身是虚拟的概念,也就不需要证明,如果发现判断失误可以立刻就进行调整
推测则随着事实的出示而存在着证真或证伪的问题,比如如果我们推测小鬼都在地主手中,那么如果地主出了小鬼则证真、而如果农民出了小鬼则证伪
在很早的时候,这个需要根据事实对推测加以证明的问题就非常困扰着我,因为如果是证真还好,如果是证伪那问题就大了:所有基于这个推测做出的推论全部都要撤销掉。问题的复杂还在于,我们对于推测其实最常用的是非此即彼的推测,比如:如果 门板不顶牌 则 要么 门板想进攻 要么 门板顶不动。这就意味着一旦证伪了某推测,我们不但要撤销掉所有基于该推测衍生出来的各种推论,还要调整被间接证真的结论及其所衍生出来的各种推论的置信度。其它关联的问题就更多、更麻烦了:撤销是否需要回溯、如何回溯到正确的版本、撤销后的一致性问题、循环论证的检测等等。
在试验了多种实现之后,考虑到斗地主的复杂性还不是很大,所以目前采取了一种简化策略来降低推测的复杂性:不基于推测来进行推测或判断。这样就暂时不需要考虑推测的关联问题了,而只要将推测和最新出示的事实之间做一个冲突检测即可:如果推测与最新事实有冲突则将推测撤销掉即可,这就暂时避免了复杂的回溯问题。
在增加推测后,那么我们目前就具有了三种能力:
判断:对历史行为进行概括,用虚拟的变量加以代表,用以刻画对象的当前状态
推测:根据其历史行为对某对象的未知状态(未知事实)加以猜测
决策:根据当前的已知,包括事实、判断和推测,计算出应采取的最为合理的行为,这个计算结果是综合的、可基于短期目标进行加权的
====================================================================================================
关注我的公众号及时获取推送的最新文章
原文:大专栏 斗地主之推测 - 小一
标签:避免 应该 str 比较 复杂 导致 简单 计算 data
原文地址:https://www.cnblogs.com/wangziqiang123/p/11633174.html