前段时间和做游戏的朋友,还在讨论,有没有非常好的中国棋牌游戏的机器人程序。
碰巧关注到机器学习顶会之一的ICLR 2019(International Conference on Learning Representations)有一篇文章是关于“斗地主”的论文《A Solution to China Competitive Poker Using Deep Learning》。
ICLR 2019采用了双盲评审,目前还看不到文章的作者信息。文章的原文可以参考:
A Solution to China Competitive Poker Using Deep Learningopenreview.net/forum?id=rJzoujRct7
以下分几个部分表达我对中国传统棋牌人工智能的观点。
1.中国传统棋牌人工智能问题的特征
2.“斗地主”人工智能的参考
3. 游戏产业中棋牌人工智能的几个要素
1.中国传统棋牌人工智能问题的特征
“斗地主”、“麻将”这些都是国内广泛流行的传统棋牌,相信在高铁、地铁、一些公共场合,看到老百姓拿着手机在玩这些游戏。可想而知,这类游戏的广泛群众基础。
但是中国传统棋牌和围棋来对比(当然围棋也是中国发源),传统棋牌有以下特征:
信息不完整。围棋中,对手的和自己的棋子都在棋盘上,对于当前的棋盘状态一清二楚。而类似“斗地主”、“麻将”只知道自己手中的牌和桌面上的牌(姑且叫做明牌),对于对手或者同伙的牌以及没有摸起来的牌(姑且叫做暗牌)是一无所知的。需要根据明牌来推测暗牌,进而明确当前的状态。
游戏的随机性。游戏的胜负受到牌初始的排列组合(洗牌),和游戏过程中出牌的随机性的影响。
游戏中的配合。“斗地主”这类传统棋牌游戏中,还需要多个“农民”来配合打到“地主”。用一句话总结:不怕神一样的对手,就拍猪一样的队友。
2.“斗地主”人工智能的参考
在这篇双盲论文中《A Solution to China Competitive Poker Using Deep Learning》设计了DeepRocket,整个AI有三个核心部分:抢地主模块(Bid Module)、策略选择模块(The Policy Network)、出牌选择模块(The Kicker Network)
图1 斗地主AI的流程图
抢地主模块(Bid Module)在初始阶段,用于判断是否需要抢地主。而策略选择模块(The Policy Network)、出牌选择模块(The Kicker Network)根据状态来决定出牌。
抢地主模块(Bid Module)主要根据手中的A、2、王的个数,来逻辑判断是否要抢地主。
策略选择模块(The Policy Network)和出牌选择模块(The Kicker Network)都采用CNN网络、一个全连接层、 Relu作为激活函数进行构建。
图2 The Policy Network和The Kicker Network流程图
策略选择模块主要是根据状态,来确定出牌类型。而出牌选择模块进一步预测确定性的出牌。例如策略选择模块确定要出“789”的牌,而出牌选择模块,确定出“789J”还是“789Q”
Paper采用了8百万的游戏数据,进行了神经网络的训练。在此做一下大胆的猜想,能否像AlphaGo Zero没有游戏数据,而是通过自己和自己的交战,来提升智能水平。
3. 游戏产业中棋牌人工智能的几个要素
游戏产业中的棋牌人工智能和学术界的人工智能,还是有些差别的。
信息的完整性。由于游戏产业中,棋牌的正常运行是依靠服务器程序来完成的,也就是不论每个人手中的牌,还是底牌,服务器程序都是知道,因而就没有暗牌。因此棋牌游戏的信息不完整性其实在游戏产业中是不存在的,游戏产业中的人工智能最优化求解问题,肯定要比学术界研究的简单。
人格化。游戏产业中的Bot程序在于陪伴真实的人类进行比赛,进而扩展游戏的在线使用人数、留存游戏的使用用户。如果仅凭逻辑推理上讲,人工智能的Bot肯定要高于普通人类玩家。但是人类玩家如果明显感觉到和自己挑战的是个Bot,而不是人类,就会丧失游戏的激情。所以,游戏产业中的人工智能,不但要具备足够的EQ可以和人类玩家进行PK,还要具有一定的IQ让人类玩家产生游戏的乐趣。即是人工智能具有人格化,具有情绪和情感。这个产业需求也正和AI大牛的预测相符。