斗地主之目前的问题

原创 2017年10月11日 08:21:16

在具备了初始的入门级打牌能力,验证了系统的可行性之后,剩下的就应该是努力提高系统打牌的水平了。由于形成初始打牌能力只用了80多条规则,而且都是非常粗略的规则,所以提高打牌能力的思路似乎比较简单:只要提高规则的精细化程度,使之尽量覆盖到各种情况就好了。所以笔者之后就一直在重复:打牌、发现不够精细的地方、增加规则覆盖这种情况。

直到某一天我却很尴尬的从这种循环中发现了个现象:打牌规则从80多条,飞速增加到了160多条,最后增加到三四百条,打牌水平不但没有什么提高,反而出现了非常明显的颠簸现象,即上一手牌好精妙、下一手牌却臭狗屎,尤其是在能看到所有牌的调试模式下,看着明明有更好的选择却打了最烂的牌,简直撞墙的心都有啦:(

可是就算把楼撞塌了也解决不了问题啊!还是老老实实想想这到底是怎么回事吧。静下心来反复思量下,其实原因也很简单:人工智能最常见的组合爆炸而已啦:(

比如,被动出牌时,即其他玩家出了手牌轮到我出了,我们的规则涉及到谁(地主、下家、对家、门板)出了什么类型(单张、对子、三张、三带二、顺子、连对、飞机、飞机带翅膀、炸弹)的什么样的牌(非常大、大、有些大、一般、有些小、小、非常小),然后我是谁(地主、下家、对家、门板)该出什么样的牌来进行应对。

简单估算下,就最简单的覆盖这些情况至少就需要:4(玩家角色)×9(牌型)×7(大小)×3(我的角色)×3(我的选择,需要根据玩家出牌来选,所以按中值估计,这还没考虑是否有炸弹、是否用炸弹)=2268种组合,这还只是被动出牌,还有主动出牌,同时也没有考虑各玩家的出牌历史、也没有考虑各农民之间该如何配合、更没考虑出某手牌是否会出现拆牌、拆炸弹等等情况。

所以,规则越精细,即规则越是针对某些情况,则规则遗漏的情况就越多,相应的一手牌能被规则覆盖住的概率就越少、被覆盖的规则条数就越少,而本质上,我们就是对一手牌用多条规则进行多角度的考察来决定其价值的,这种情况下,当某手牌恰好符合某条规则所针对的情况时,就是好牌,而当某手牌没有被有针对性的规则所覆盖,而由某条作为最终防守性质的规则捕获时,就是臭牌了:(

除了这个问题,还发现了一个非常严重的问题:同样的规则在不同局面下所发挥的作用应该是动态的。也就是说,我们最终到底出什么牌或是不要,就是看各规则对待选牌手的价值评估的大小。可这些规则所指定的价值都是固定的,无法随牌局的不同能自动调整给出的价值判断:如果地主想走,我就要不惜代价的停住他;如果地主只是想顺牌,那就没必要用太大的牌。

问题在于:这些对牌局的判断,如果不引入,显然不可能提升打牌水平,而如果引入,再结合上面说的组合爆炸问题,简直就是一个巨大的灾难啊:(

针对第一个问题,解决办法其实比较简单,就是转变规则的应用方式,使之从单一规则同时对各种状态组合考察转变为多条规则的多角度、各状态分立综合考察。而针对第二个问题,则需要模拟人类思考解决问题的办法,引入短期目标系统:

  • 判断当前局面,比如根据连门板的顶牌都压判断地主有走的企图

  • 根据对当前局面的判断形成策略,比如地主想走,则应停住地主

  • 综合目前的各策略来拟定当前的短期目标,比如根据停住地主这个策略来筛选实施规则,同时根据之前所判断出的地主走的企图的强度,确定实施强度

  • 按拟定的短期目标实施策略,即用确定的实施强度调整所筛选出来的策略实施规则的权重,通过这些规则权重的变化从而影响对牌手的价值判断,最终落实策略的实现

需要理解的是策略是对某种情况的应对,而目标则是对多个策略的综合,比如:地主想走、而对家也想走,所以下家的目标是:既要停住地主又要放走对家。而门板因为无法越过地主放对家,所以门板的目标就是顶住或停住地主。

唉,所有的规则都要重写,又得进入打牌、调整规则的死循环啦:(

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

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

公众号

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

NOIP2015 斗地主(回溯)

题目描述  牛牛最近迷上了一种叫斗地主的扑克游戏。斗地主是一种使用黑桃、红心、梅花、方片的A到K加上大小王的共54张牌来进行的扑克牌游戏。在斗地主中,牌的大小关系根据牌的数码表示如下:3 输...

siverlight+wcf网络分房间斗地主2洗牌算法与后台摆牌

前边讲了直接用页面的控件布局,实现摆牌得效果,现在我们用后台生成的牌来与相应的图片对应 后台生成的效果 一:我们用一个54位的数组来分别代替54张牌,对应的方式写到一个switch里边 为了方便把...

UOJ147 [NOIP2015]斗地主 解题报告【搜索】【贪心】

UOJ 147

斗地主AI算法实现 一(拆牌)

by wojiushi3344 转载请说明出处   源代码下载   ps: 前面已经写了几篇地主游戏的基本算法实现,今天来讲讲单机地主中最重要的,也是开发中最难得AI算法实现。在此声明,...

斗地主AI算法——第十七章の总结整理

2.0版本的斗地主AI算法在这里就算告一段落了。 **********************完结撒花********************** 不过后续应该还会开发更智能的版本,毕竟当前版本还有很...
  • sm9sun
  • sm9sun
  • 2017-04-27 20:50
  • 1717

斗地主算法的设计与实现(六)--项目源码和说明

本篇将给出斗地主算法的源码,介绍斗地主这个项目的一些基本情况。 下载地址:http://download.csdn.net/detail/fansunion/6387589 特别说明:斗地主项目的主要...

QQ斗地主记牌器开发实践

这是我2005年写的一个小程序,原来放在BOKEE上的,最近BOKEE经常打不开,打开的时候也是极慢、图片显不出来,中国最早的博客要关门了?为了不把程序弄丢了,还是转移到这里来吧。 原文: 由...

斗地主游戏AI出牌

斗地主游戏的初期版本目前为止大概已经完成的一半了... 还剩下最麻烦的部分(AI)没写,写这篇博文主要是想理一下基本的思路,然后把这一部分也搞完. 先上一个目前的进度截图纪念一下好了 经过较长...

NOIP2015复赛提高组day1(A:神奇的幻方 B:信息传递 C:斗地主)

今天原本不想写题解的,但还是写了,毕竟不能落太久。。 但是题解肯定很粗糙 A题: 向来是水题根据题意随便模拟一下就好了#include #define M 55 int a[M][M]; int...

TienLen游戏模型、算法,类似斗地主游戏算法

TienLen游戏算法,类似斗地主游戏算法、纸牌类游戏建模,算法
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)