斗地主机器人智能算法深度研究
我从事棋牌开发工作已经6年了,我一直喜欢玩斗地主,腾讯上面的我经常玩,别人的也经常玩,对于斗地主机器人智能效果,一直都未发现那个平台做得比较令我满意,所谓的好,我觉得机器人常见牌要打得有点水准,拆牌,顶牌必须要有,还要比较接近人的出牌逻辑,这样玩家的体验感会好很多,我内心其实一直都有一个好的想法去实现更加智能斗地主机器人,趁着最近工作也比较空闲,为此对斗地主机器人算法进行深度研究,算是略有成效,效果当然远比现在公司的斗地主机器人要好。
第一步:
如何判断一手牌的好坏,那就必须要对牌型进行计算分数这样你才能计算出来,这是一个基础定义。牌型的总数有如下这么多种
如果每种的牌型得分如下:const int CARD_TYPE_SCORE[CT_TYPE_COUNT] = { 0, 10, 20, 30, 40, 50, 60, 70, 80, 100, 110, 140, 150 };
牌型里面牌有大小之分,这样其实还可以针对牌值进行加分,这样牌的分数就比较细腻,牌值的分数就是加上他的牌的逻辑值就可以了
,还有一点要注意,牌的手数少的话,也应该适当加分,何为手数?就是以最快的出牌方法,手上的牌可以多少次出完,一般情况下手牌数少,牌应该要适当加分,加分策略如下:
第二步:
斗地主有叫分过程,这个也是有讲究,我的定义是这样
可分数低于370分时,不会进行第二次叫分,这个也是保守叫分法,如下
第三步:
出牌总共分为6个大的策略分支:
比较重要的出牌策略,是地主压牌和地主上家出牌,和地主上家压牌策略,
先说地主压牌策略:
上面是所有出牌的基本策略就是只剩下火箭带一手牌,或者炸弹带一手牌,或者是最后一手牌,那是必须要出的,这是6种出牌策略里面都要有的,下面是细分
地主下家出牌时,如果最快的速度出牌策略(CommonTypeTrunCard里面是不包含火箭压牌,火箭压牌必须是特别处理的)里面没有牌能压下家牌时,可下家手牌只有一张了,那么这时必须启动搜索牌面最大炸弹(手上的炸弹是否是最大炸弹),或者是火箭去拦截,
当上面的小策略失效时,那么必须启动拆牌策略(一般只有在单牌,双牌时才会拆牌):
上面的策略都失效了,那么后面还有一条非常体现智能效果的策略,就是前面的策略都失效了,那么要尝试一下最后一条策略
那就是其他两家有人只剩下两个牌时,一般这时地主要考虑拆牌了,
vecMinTypeCardResult这个结果里面包含的是最快出牌的牌型数据,CardTypeResult这个结果里面包含的是所有可组成的牌型数据,前者是提供常用策略来使用的,后者是借硬性策略使用的。常见策略失效了,那么就不能那么死板按照最快出牌策略那样按兵不动了。这个举个例子你就明白了,地主手上有2,AAA,99,88,66,5,有人出了一对KK,他手上剩下10张牌,这时按照最快出牌策略的话,是不应该拆AAA去打的,因为出牌者手上还有可能有其他牌型,可以守株待兔,可要是出牌者手上牌只剩下2张以后了,那么AAA就必须拆了。
地主上家出牌相当重要,优先出不是单牌的牌。(当然有人会说出自己能收得回来的牌不更加好吗?这个就是更加高一级的策略了,更加精细的做法了,这个可以留到以后来优化)
地主上家压牌,就要看是压队友的牌还是地主的牌,地主的牌一般是能压都会压,队友牌一般情况下小于K跟牌就行了,大于k不要跟了
当然大策略就是基本上是上面这些了,小策略就不再去详细说了,,详细说1万字都说不完。
这些是根据我自己的打牌经验的策略来写的,当然斗地主高手还会有更加好的策略可以加进去,这样效果会更加好。
上面这个FindCardKindMinNum搜索算法也相当关键,才是核心,如果要从20张牌里面所有的组合算出来,然后进行牌型分比较,进行筛选出牌最快,牌型的最好的牌,那么最复杂的情况有5000万种组合,现在普通的计算机是顶不住的,就算是1000万种组合的我在
这个(没有采用多线程的方案)处理器下跑出来也要40多秒,所以我对很多牌型进行了剪枝,这样一般最差的情况是30秒就算出来了,效果算是打了个折扣吧,但也不至于出牌效果很差,这个真正要运营的话,得用阿里云计算型的服务器来跑,这样效果会好很多。后来想到了采用多线程并行计算,这样会节省时间,1000多万的组合,我开4个线程算,基本上7,8秒就搞定了,完全达到了常规的出牌时间要求,效果非常棒.
现在我的剪枝过后的算法,一般情况下不会超时,出牌效果如下
如果你的斗地主按照这种牌,能以这样的方式出完,那么效果也是不错的了,
这个是我利用工作空闲时间,研究了20天的效果,过程非常辛苦。
如果有朋友有更加好的想法,欢迎一起留言交流,敬请踢教。Q:460000713
斗地主机器人智能算法深度研究相关推荐
- 超强跑得快机器人智能算法深度研究与设计
上一篇斗地主机器人算法的设计是自主研究学习的,没有做细节上的优化,但最近公司刚好要上线跑得快,也需要我编写跑得快ai算法.于是我直接采用斗地主的算法框架来写这个ai,可以说主体设计没有变,但是呢细节上 ...
- 斗地主机器人AI算法和策略(个人思路总结)
一.规则和权值定义 1.斗地主中存在很多种的牌型,比如:单张,对子,三带,顺子,连队,飞机,炸弹等 ,我的机器人主要根据权重去设计的,我给每一种牌型都制定了一个权重,比如3权重是多少,其他牌型的权重有 ...
- 智能算法的研究与实现
目前计算机中的搜索算法有哪些? 深度优先,广度优先(源自于数据结构) 穷举法(列出所有可能),回溯法(深度优先思想加上返回式搜索)源自于算法设计与分析 爬山法,模拟退火,遗传算法(智能化算法)都是一些 ...
- 【券商报告】信息服务行业海通AI产业链深度研究(一):百度智能驾驶深度研究——附下载链接
来源 | 海通证券 百度智能汽车业务发展至今已有七年, 2017 年 Apollo 面世,自此开启高速发展时期.根据盖世大 v 说援引汽车之心消 息,2017 年 3 月,百度整合自动驾驶事业部.智能 ...
- 论坛报名 | 从捉迷藏、星际争霸到新一代人工智能:多智能体深度强化学习的理论与实践...
与6位图灵奖得主和100多位专家 共同探讨人工智能的下一个十年 长按图片或点击阅读原文,内行盛会,首次免费注册 2020年6月21-24日,第二届北京智源大会(官网:https://2020.baai ...
- 2018-3-13 目标改动---智能算法
早上去了办公室,汇报.----------------------------结论就是自己跑偏了.------------------------------非结构化数据的研究 现在的自己要开始智能算 ...
- 基于优化智能算法(粒子群灰狼)的非侵入式负荷识别(NILM)建模(提供代码下载)
基于优化智能算法(粒子群&灰狼)的非侵入式负荷识别(NILM)建模 本文主要从智能算法入手,介绍非侵入式识别的代码具体应用思路和场景,如有瑕疵,请海涵. 1.1 优化智能算法概述 智能算法的研 ...
- 邓力、何晓冬深度解读:多模态智能未来的研究热点
2020-06-13 01:21:01 作者 | 邓力.何晓冬 编辑 | 丛末 基于深度学习的机器学习方法已经在语音.文本.图像等单一模态领域取得了巨大的成功,而同时涉及到多种输入模态的多模态机器学习 ...
- c语言五子棋人工智能算法,五子棋人工智能算法实现研究,优化五子棋智能算法的思路...
五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一.现代五子棋日文称之为"连珠",英译为"Renju",英文称之为"Goban ...
最新文章
- 一文读懂如何通过设计模式学习创建对象?
- suse11.3下samba服务的配置
- 面向过程与面向对象编程的区别和优缺点
- Jmeter-获取响应结果中参数出现的次数
- 数据结构与算法一 - 二叉树基础
- 蓝桥杯 试题 基础练习 龟龟龟龟龟兔赛跑预测——18行代码AC
- Akamai “三驾马车”,如何应对疫情后新场景形态下的新考验?
- 解决“终端服务器超过了最大允许连接数”
- Redis-数据结构04-整数集合(intset)
- GAN诞生记:最火的AI模型,来自一群博士的酒后争吵
- 添加icon_(icon)冬季检查保养篇
- [转+]C语言复杂声明
- 施乐s2110进入维修模式,富士施乐s2110恢复出厂
- web网站制作的实例(大学生期末作业)集合
- flash倒计时制作
- 腾讯2021校园招聘全球启动
- 十大游戏开发引擎优缺点对比
- 亲身经历!4个月写完硕士毕业论文一稿过,我是如何做到的?
- 最大子段和之M子段和
- python电路仿真_蔡氏电路仿真实验