你觉得,AI 全自动玩斗地主,胜率能有多高?
真就有100%胜率,实现欢乐豆自由?
我让这个 AI 自己玩了一小时,结果出乎意料。
先不着急说最终结果,我们先来看看这个 AI 有多强。
Ai斗地主,就是通过 AI 算法分析游戏画面,获取玩家角色、手牌等信息。
完全自主决策这把是否叫地主,是否加倍,以及如何出牌。
设定好程序,不需要我们参与,AI 自己就能玩一下午。
算法名字是 DouZero,快手团队开发的。
不是要把欢乐豆归零的意思——
意思是像 AlphaZero 一样从零开始训练,不需要你教他怎么打,完全自己学习。
系统只需要给出正负反馈,算法就会自我强化,做出最有效的行为决策。
跟训狗是一个道理。
斗地主的所有牌型总共有27472种。相对与围棋上亿万种的走法,算是小巫见大巫了。
那实现的难点在哪呢?
围棋是所有棋子都摆在棋盘上,对弈双方都能看到,这属于"完全信息博弈"。
而斗地主每个玩家都看不到其他人的手牌,从博弈论的角度看,斗地主是“不完全信息博弈”。
并且还要综合考虑合作机制。
两个农民玩家对抗地主玩家。不仅要保证自己赢,也要辅助队友赢。
对于AI来说就更有挑战性了。
这里简述一下算法原理。
DouZero 是一个基于深度蒙特卡罗算法来打斗地主的强化学习算法。
所谓的蒙特卡罗就是通过不断的重复实验来估计真实价值的方法。
而在DouZero中,引入了Deep Monte-Carlo (DMC)方法。所谓DMC,就是用神经网络替换Q表,并使用均方误差 (MSE) 更新Q网络。
让q价值最大化,q价值指的是在某个状态做某个动作预期的价值是多少。
感觉屏幕对面的你,已经在打哈欠了,我们不多说了,具体的大家可以看看算法论文。
论文链接:
https://arxiv.org/abs/2106.06135
那胜率到底多高呢?
咱们首先声明一下,我们不支持任何形式的外挂,玩游戏就图一乐呵,真让 AI 全自动去打,游戏也就失去了本身的意义。
我们只是测试算法的可行性,我让 AI 打了20局游戏,赢了13局,输了7局。综合胜率在65%。
不过样本数量不够大,官方数据中显示,AI 综合胜率大概在60%左右。
总体来看,可以达到普通玩家水平。
本以为 AI 斗地主会很厉害。
60%的胜率,就这?
这已经是上百种斗地主 AI 算法的最高胜率了,其他算法还有20%胜率的,效果感人。
AI 斗地主没有想象中的厉害,为什么呢?
因为斗地主是个运气成分很强的游戏。
牌好的时候,闭着眼睛打也能赢。牌烂的时候,高手也救不了你。
所以只有在自己和对手的牌相对均衡的情况下,AI的优势才能被明显体现。
有时候也会出现不可思议的打法。
比如下面这种情况,我自己打不一定能赢。
上面视频 51s 的时候,AI还会先出K,测试地主的大牌。
wx搜索【喵宁一】查看视频
第一时间阅读文章~
“鲁迅先生”说过:打好烂牌才算本事。
大写的牛!
计算机非常擅长在完全信息下做搜索,而人类玩家则更擅长在非完全信息下进行推理和决策。
尽管斗地主属于非完全信息游戏,但以AI对于对手手牌的概率分布估计能力,以及基于此所做出的细粒度搜索和判断能力,都将远胜于人类。
人类,危!
随着 AI 推理决策、高效学习能力的提高,AI 外挂会势如破竹,横卷游戏界。
特别是FPS类射击游戏,已经有成熟的 AI 外挂了。这种纯拼技术的游戏,AI胜率几乎百分百。
给游戏业带来了巨大的挑战。
并且不仅仅是游戏业,随着深度强化学习的快速发展,这一技术被应用于军事的步伐也越来越快了。
围棋 AI 已经超越了人类,斗地主 AI 也能战胜普通水平。不出意外,未来空战,AI 超越人类飞行员也是迟早的事。
这不是空穴来风。
美军已经毫不掩饰他们在这个领域的野心了。
那个时候战争形态跟现在都会发生天翻地覆的变化。
如果大国人工智能已经达到高水平,甩出别国几条街。
我们有生之年极有可能会看到,一方没有伤亡,另外一方被灭亡的战争。
战争打到什么程度,只取决于大国愿意付出多少成本,世界舆论压力,其他大国是否干预。
只有提高自己的硬实力,才有话语权。
国家如此,人也是如此。
最后还是逃脱不出技术号的本质,上个教程。
第一步:下载项目
项目地址:
https://github.com/Vincentzyx/DouZero_For_HLDDZ_FullAuto
这个项目在DouZero 算法的基础上,加入了自动出牌、自动叫牌等模块。
项目里面已经有训练模型了,不需要我们再单独下载了。
第二步:配置环境
# 安装依赖
pip3 install -r requirements.txt
pip3 install douzero
这里要注意遇到下面的错误,是因为pytorch版本不对应,需要检查更换一下版本。
RuntimeError: .xxx.pth is a zip archive did you mean to use torch.jit.load()?
第三步:测试运行
确认自己的屏幕缩放比,项目默认是 125%,电脑默认是100%。
python debug_screenshot.py
修改main.py文件中的第58行。
# 原代码
helper.ScreenZoomRate = 1.25
#修改为
helper.ScreenZoomRate = 1.00
运行项目,会出现自动开始的页面。
python main.py
打开游戏,注意这个游戏指的是qq游戏中的欢乐斗地主,不是腾讯游戏。
这个坑我已经替你们踩过了——
点击自动开始,如果想要自动开始下一把,点击单局按钮,换成自动就可以了。