斗地主AI算法——第十七章の总结整理
来源:互联网 发布:网格布定额算法 编辑:程序博客网 时间:2024/06/08 06:41
2.0版本的斗地主AI算法在这里就算告一段落了。
**********************完结撒花**********************
不过后续应该还会开发更智能的版本,毕竟当前版本还有很多策略没有加入。
比如说角色位置(地主上家下家打法)、比如说记牌算牌、又比如对于一些残局的分析等等。
斗地主规则看似简单,实际变幻莫测,可胜可负的局面非常多,不但涉及到基本的策略,还有配合、判断,甚至涉及到暗示与反暗示的心理战。而我想做的AI,不一定要做到最牛逼,天下无敌。因为斗地主和象棋围棋不一样,首先是非完全信息博弈。其次是非公平局势博弈。所以胜负是把控不了的,那么我想达到的效果就是符合正常人的思维,给出正常人选择的操作。从现在的2.0版本来看,和我想象中的还有很长的距离,革命尚未成功,同♂志仍需努力。
【关于枚举牌型】牌型蛮多的,所以看起来代码量很大,不过很多牌型的逻辑都是共通的,比如单牌、对牌、三不带等。像这种分支枚举不是low逼,而是让逻辑更简单,让代码更规矩。对人对机器都是好事。但是下文中飞机逻辑里我做的分支,就是100%的low逼了。
【关于飞机策略】我最恶心的就是飞机,这个东西真的烦死。首先就是长度不确定,带出去牌的个数不确定而无法统一构造出带出牌的序列。其次就是飞机打破了很多种策略上本应可以筛选的情况。比如说飞机里面可能存在炸弹,又比如说3连飞机带了3张相同的牌。看起来蛮怪的,但是实际对局中这种策略确实有可能成为最佳选择,所以不能忽视。
【关于权值设计】权值的设计我想了很久,也改了很多次,因为确实有些地方价值赋予的不是很公平。尤其是考虑拆分价值的时候,因为原来我的想法是考虑该牌型拆分后与不拆分的双重价值。举个例子,AAAKKK其实拆成两手出威力也很大。但是因为后期必须要考虑到轮次参数,计算权值的时候就不能再把拆分价值算进去了,不然四带二什么的权值爆炸。但是不考虑拆分价值又感觉有点对不起222等牌型。这也是我时至今日也很苦恼的一点。
【关于地主叫分】地主叫分策略里我只考虑了权值而不考虑轮次,因为实际打牌中其他两个人确实会针对你进行出牌,地主必须保证要有绝对的控手能力。确实我们实际玩牌时是否叫地主还是取决于你大牌的数量的。
【关于嵌入交互】交互相关的代码就不放出来了,根据自身实际的需求而定吧。我个人比较喜欢的方式是生成一个服务当做一个伪客户端。当然也可以封装成类库供调用,像我现在使用的方式是skynet里lua脚本调用类库,数据以json串形式传递。或许哪天闲着了我也会封装一个lua特有的库。这样通过struct lua_State交互数据会更可视化一些。
最后强调一下,策略中带有我自己本人主观因素太多,比如说炸弹拆分处理等。我给出的策略并非斗地主游戏最佳策略,所以希望大家如果引用的话最好根据自己的想法稍作修改。
就先这样吧,非常感谢你的观看,同时也非常希望可以给我一些建议或针对一些问题进行讨论。
可以加QQ 1397097104 微信 nine_sun666或者评论留言。
- 斗地主AI算法——第十七章の总结整理
- 斗地主AI算法——第二章の数据结构
- 斗地主AI算法——第三章の数据处理
- 斗地主AI算法——第一章の业务逻辑
- 斗地主AI算法——第四章の权值定义
- 斗地主AI算法——第五章の总值计算
- 斗地主AI算法——第六章の牌型判断
- 斗地主AI算法——第七章の被动出牌(1)
- 斗地主AI算法——第八章の被动出牌(2)
- 斗地主AI算法——第九章の被动出牌(3)
- 斗地主AI算法——第十章の被动出牌(4)
- 斗地主AI算法——第十一章の被动出牌(5)
- 斗地主AI算法——第十二章の主动出牌(1)
- 斗地主AI算法——第十三章の主动出牌(2)
- 斗地主AI算法——第十四章の主动出牌(3)
- 斗地主AI算法——第十五章の测试模块
- 斗地主AI算法——第十六章の样例分析
- 斗地主AI算法实现
- "Host '192.168.1.104' is not allowed to connect to this MySQL server"
- LeetCode 506. Relative Ranks
- 通俗理解决策树算法中的信息增益
- 为什么说图像的低频是轮廓,高频是噪声和细节
- 团体程序设计天梯赛L1-046 整除光棍
- 斗地主AI算法——第十七章の总结整理
- atexit()函数
- JDK中设计模式
- 排序算法Java实现——桶排序
- HP电脑安转虚拟机搭建ubuntu环境
- acm-2028
- Google浏览器清除缓存快捷键
- numpy学习笔记-将条件逻辑表述为数组运算
- 浅谈WEB安全之DDoS攻击