采用卷积神经网络实现斗地主AI

前面几篇中已经讲述过,如果使用MCTS及其变种实现斗地主AI,链结可参考:

棋牌AI

这期聊一聊目前采用卷积神经网络(CNN)实现斗地主AI的方案。

卷积神经网络

介绍一下卷积神经网络,个人觉得下面几篇文章讲得比较清楚了,有需要请参考:

谭庆波:卷积神经网络(CNN)详解 深入学习卷积神经网络(CNN)的原理知识 - 战争热诚 - 博客园 一文看懂卷积神经网络-CNN(基本原理+独特价值+实际应用)- 产品经理的人工智能学习库

卷积神经网络的斗地主模型

这里只讨论打牌过程的CNN网络,对于叫地主和加倍部分,可以参考《棋牌AI》专栏中的文章。

打牌过程使用两个CNN网络,包括策略选择网络带牌选择网络。策略选择网络,先确定出牌类型而不具体展开确定具体带牌;带牌选择网络最终确定带什么牌。之所以把带牌选择单独拿出来做,主要是基于两方面考虑:

  • 斗地主的动作空间有13551种,导致训练策略选择网络不够精确。
  • 监督学习的训练数据中,很难完全覆盖13551种动作的情况。比如666777888999带4单或带4对

策略选择网络

根据当前已知的牌局信息,通过监督学习的方式,训练得出行动集合的概率分布。

输入(牌局状态)

做棋牌游戏的朋友应该对游戏录像不陌生。每一步行动可以看作视频的一帧,人类玩家依赖的决策信息,就是这些帧,越是高级的人类玩家,能准确记忆的帧就越多。通过这些已知信息,猜测对手剩余的手牌,并以此进行出牌推演从而作出最大化自身利益的行动。

为了学习人类玩家的打法,需要尽量还原人类玩家做决策时已知的牌局信息。比如,自己手牌,未现的牌,自己的角色,对手剩余的手牌,从开局到当前所有的对局过程(谁出了什么牌,谁跟了什么牌,谁不要之类),以此确定x-轴和y-轴的含义:

  • X轴,表示从3到大王的15张牌,分别为3,4,5,6,7,8,9,10,J,Q,K,A,2,SJ,BJ
  • Y轴,表示每种牌的张数,可能构成的牌型以及角色、轮数、每个玩家剩余手牌数这类信息

v2-9f31b58628b695ce329a2d804de44c77_b.jpg
注,y轴的含义和具体结构仅供参考

从地主开始每人行动一次作为一轮(round),每场斗地主游戏的轮数是不确定的,为尽量还原已知信息,选择当前状态向前6轮内的行动作为决策参考范围。按照由近到远的顺序构建牌局状态(X-轴):

  1. 自己的手牌
  2. 未现的牌(类似计牌器中的内容)
  3. 上个行动的出牌,角色,轮数和剩余手牌
  4. 上上个行动的出牌,角色,轮数和剩余手牌
  5. 。。。。。一直往上回溯六轮:行动的出牌,角色,轮数和剩余手牌
  6. 六轮之前已经打出的牌

输出(行动的概率分布)

策略选择网络的输出就是斗地主出牌的所有可能行动的概率分布,但是只确定出牌类型,不确定带牌。比如,单张从3到大王,共15种;对子,从33到22共13种,详细如下表。

v2-a68c7f5fcadff4cc31c52e403ea7ea24_b.png

具体的输出就是309个概率值分别按顺序对应上面的表,取概率值最大的作为策略输出。

带牌选择网络

在已知带牌类型、主牌信息和剩余牌等信息的情况下,选择要带的牌作为最终的行动输出。比如,手牌是33344457JA,策略选择网络确定出“飞机带单”。这里我们定义333444为主牌,手牌除去333444剩余的牌为待选牌。

输入

同样是使用监督学习的方式,学习人类玩家在选择带牌选择时的权衡和选择。已知信息包括:行动牌型,要带牌的类型(单张或对子),要带牌的长度,主牌,除去主牌后剩余的牌,未现牌,角色,轮数和玩家剩余手牌数量等。

输出

每次只决策一个带牌,如果有多个带牌需要多次调用带牌选择网络。比如,666777带2个单,需要调用再次带牌选择网络。所以,输出为28个(15个单牌,13个对子)概率。这样就确定了最终的行动。


参考链接:

AI科技大本营:来呀!AI喊你斗地主——首个搞定斗地主的深度神经网络 腾讯游戏学院:腾讯游戏AI研究中心总监邓大付:牌类游戏的AI机器人研究初探

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值