通过优锐课核心java学习笔记中,我们可以看到,码了很多专业的相关知识, 分享给大家参考学习。

在游戏AI的缘起与进化一文中我们讲到,游戏 AI 的进化始终与 AI 研究相生相伴,这是由于游戏种类丰富,难度和复杂性也很多样,人工智能攻克不同类型的游戏自然也反映了 AI 研究的进展,因此长期以来游戏一直是 AI 研究的黄金测试平台。

随着人工智能逐个攻克双陆棋、国际跳棋、国际象棋、围棋等棋类游戏,AI 仍在继续挑战难度更高的游戏,例如扑克、桥牌、麻将这类不完美信息游戏。那么为什么这类游戏的难度更高呢?如何衡量不同类型游戏的复杂度和难度?在这篇文章里,我们将会为大家仔细解读。

游戏复杂度与游戏难度并不等价

首先需要提醒大家,游戏的复杂度与难度并不完全等价,游戏难度除了与游戏本身的复杂度有关以外,还与战略等多种要素相关,也就是说,数学上更复杂的游戏,玩起来不一定更难。

一般来说,我们可以根据信息的暴露程度将游戏分为两大类:完美信息游戏(Perfect-Information Games)和不完美信息游戏(Imperfect-Information Games)。如果所有的参与者,在游戏的任何阶段都可以访问所有关于游戏(包括对手)状态及其可能延续的信息,那么称这类游戏为完美信息游戏;否则称为不完美信息游戏。围棋、象棋等棋类游戏,对局双方可以看到局面的所有信息,属于完美信息游戏;而扑克、桥牌、麻将等游戏,虽然每个参与者都能看到对手打过的牌,但并不知道对手的手牌和游戏的底牌,也就是说各个对局者所掌握的信息是不对称的,因此属于不完美信息游戏。

完美信息游戏和不完美信息游戏难度的衡量指标通常是有区别的。对于完美信息游戏,通常游戏的复杂度就决定了难度,我们可以用状态空间复杂度(State-Space Complexity)和游戏树复杂度(Game-Tree Complexity)对其难度进行衡量;而对于不完美信息游戏,隐藏信息对于游戏的难度影响很大,我们可以用信息集(Information Set)数目和信息集平均大小对其难度进行衡量。

完美信息游戏:状态空间和游戏树的复杂度

状态空间复杂度(State-Space Complexity)

游戏的状态空间复杂度(SSC)是指从游戏的初始状态开始,可以达到的所有符合规则的状态的总数。例如棋类游戏中,每移动一枚棋子或捕获一个棋子,就创造了一个新的棋盘状态,所有这些棋盘状态构成游戏的状态空间。通常情况下,很难精确地计算出游戏的状态空间大小,只能给出一个粗略的估计。一种最常用的估计方法是通过包含一些不符合规则或不可能在游戏中出现的状态, 从而计算出状态空间大小的一个上界(Upper Bound)。例如在估计围棋状态数目上界的时候,允许出现棋面全部为白棋或者全部为黑棋的极端情况。

事实上,即便像井字棋这样简单的游戏,其状态空间也是很大的。井字棋的盘面上共有9(3x3)个位置,每个位置可能的取值有三种:X,O或空白,因此总的状态数目为3的9次方即19863个。当然,这其中包含许多不符合规则的状态,因为我们在这里估计的是状态空间大小的上界。由此,我们可以得到井字棋的状态空间复杂度约为104(即19863≈104)。这种计算方法可以很容易地推广到更大的棋盘和更加复杂的棋类游戏。比如围棋有361(19x19)个位置,每个位置可以放置白子或黑子或者空置,利用上述方法,可以确定围棋的状态空间复杂度约为10^172 (即3361≈10172)。在表1中,我们给出了常见的完美信息棋类游戏的状态空间复杂度。


图1:井字棋

游戏树复杂度(Game-Tree Complexity)

游戏树复杂度(GTC)表示某个游戏的所有不同游戏路径的数目。游戏树复杂度比状态空间复杂度要大得多,因为同一个状态可以对应于不同的博弈顺序。例如,在图1的井字棋游戏中,棋面上有两个 X 和一个 O,这个状态可能由两种不同的方式形成,具体的形成过程由第一个 X 的下子位置所决定。


图2:井字棋游戏中统一状态的不同形成过程

与状态空间类似,游戏树复杂度的精确值也很难计算。常用的方法是估计其合理的下界:GTC≥b^p,其中 b 表示玩家每回合可用的平均合法移动数目,p 表示平均游戏长度。由此可以看出,拥有更多合法移动的游戏比合法移动较少的游戏更复杂,另外游戏的平均长度也是影响游戏树复杂度的关键因素。

根据经验,井字棋、象棋以及围棋每一步的平均合法移动数目分别为4、35和250;平均游戏长度分别为9、80和150。因此利用上面的公式,可以得出井字棋的游戏树复杂度为10^5 (即49≈105),国际象棋是10^123 (即3580≈10123),而围棋是10^360 (即250150≈10360)。更多完美信息棋牌类游戏的游戏树复杂度参见表1。


表1:完美信息游戏的状态空间复杂度和游戏树复杂度

在传统的完美信息棋牌游戏中,围棋不管从状态空间复杂度,还是游戏树复杂度上都远远领先其他棋牌类游戏。2017年,AlphaZero 利用 MCTS 和深度强化学习,成功解决了包括围棋在内的多个完美信息游戏。目前,学术界研究的热点则转向不完美信息游戏和即时策略游戏等。

不完美信息游戏:信息集数目和平均大小

对于不完美信息游戏,我们仍然可以同完美信息游戏一样计算其状态空间复杂度和游戏树复杂度。然而,在不完美信息游戏中,由于信息是不完全、非对称的(例如扑克和麻将中对手的手牌和游戏剩余的底牌都是未知的),因此对于参与者来说许多不同的游戏状态看起来是无法区分的。例如在扑克游戏中,自己拿了两张 K,对方拿了不同的牌对应不同的状态;但是从自己的视角看,这些状态其实是不可区分的。我们把每组这种无法区分的游戏状态称为一个信息集。

显然,对于不完美信息游戏而言,合理的游戏策略应该建立在信息集而不是游戏状态之上,因为我们依赖未知信息来细粒度出招是没有意义的。相应地,当我们衡量不完美信息游戏的难度的时候,也应该依据信息集的数目,而不是游戏状态空间的大小。信息集的数目通常小于状态空间的数目。对于完美信息游戏,由于所有信息都是已知的,每个信息集只包含一个游戏状态,因此它的信息集数目与状态空间数目是相等的。

除了信息集的数目,还有一个重要的指标:信息集的平均大小,即在信息集中平均有多少不可区分的游戏状态。以两人德州扑克为例,假定我们的手牌是 AA,考虑对手的手牌为 AK 或者 AQ 两种不同情况。因为信息不完全,我们无法区分当前局势到底处在哪个状态,因此会把两种情况都归到同一个信息集。在两人德州扑克中,信息集的大小最多为1326(从52张牌中选择2张:C_522),也就是约为103。容易看出,信息集的数目反映了不完美信息游戏中所有可能的决策节点的数目,而信息集的平均大小则反映了游戏中每个局面背后隐藏信息的数量。显然,信息集平均大小越大,其中包含的未知信息就越多,因此决策的难度就越高。事实上,信息集的平均大小直接影响采用搜索算法的可行性:当对手的隐藏状态非常多时,传统的搜索算法基本上是无从下手的。因此信息集的平均大小也可以作为游戏难度的衡量指标。


表2:不完美信息游戏的信息集数目和信息集平均大小

无限注德州扑克的信息集数目很大,但是因为只有两张不可见的牌,其隐藏信息很少,信息集的平均大小很小。桥牌和麻将由于是每个玩家手里可以有13张未知的手牌,因此隐藏信息的数量远远超过了德州扑克。表2给出了德州扑克、桥牌和麻将的信息集数目和信息集的平均大小。

如果我们以信息集数目和信息集平均大小为准则,来对比像围棋这样的完美信息游戏和表2中的几种不完美信息游戏,会得到非常有意思的结果。如图3所示,围棋和德州扑克的信息集平均大小远远小于桥牌和麻将。AI 在围棋和德州扑克上的成功很大程度依赖于搜索算法,因为搜索可以最大程度地发挥计算机的计算优势。但是因为巨大的信息集平均大小带来的环境不确定性,传统的搜索算法在桥牌和麻将面前很难发挥同样的功效。


图3:围棋、德州扑克、桥牌和麻将的信息集数目和信息集平均大小对比

回顾游戏 AI 的历史,目前大部分完美信息游戏(如国际象棋、围棋等)以及信息集平均大小较小的不完美信息游戏(如两人德州扑克和多人德州扑克等)都有了相当好的解决方法。然而,对于桥牌和麻将这类含有大量隐藏信息的不完美信息游戏,需要我们发明全新的方法论,才能有所突破,而这需要 AI 算法的研究者们持之以恒地探索。

延伸阅读:游戏难度的计算方法

定约桥牌(只考虑打牌阶段)

信息集数目:以防守一方为例,按照游戏轮次来计算。第一轮,每个玩家只能看到自己的13张牌,因此第一轮信息集数目为C_5213=6.3×1011。第二轮,每个玩家剩余12张牌,玩家只能看到自己的12张手牌以及第一轮出的四张牌,因此第二轮信息集数目为C_52^13 C_13^1 C_39^1 C_38^1 C_371=C_5213 A_13^1 A_393。以此类推,第三轮信息集数目为C_5213 C_13^1 C_12^1 C_39^1 C_38^1 C_37^1 C_36^1 C_35^1 C_341=C_5213 A_13^2 A_39^6 … 第13轮信息集数目为C_52^13 A_13^12 A_3936。总的信息集数目为各轮信息集的和,即C_5213 (1+A_13^1 A_393+⋯+A_1312 A_3936)≈1.35×1067。

信息集平均大小:以防守一方为例,第一轮,其他选手有13张牌,所以每个信息集大小为C_39^13 C_26^13 C_1313。第二轮,每位对手还剩12张牌,因此每个信息集大小为C_3612 C_24^12 C_1212。以此类推,第13轮,每个信息集大小为C_31 C_21。对每一轮的信息集大小求平均,得到桥牌的信息集平均大小≈6.77×1015。

麻将

信息集数目:每一局麻将结束的时候,底下有14张牌不会被用到,所以不考虑吃碰杠的情况下,每一局至多会进行17.5轮(136减去13x4共52张手牌再减去14张底牌,总共剩70张牌,每一轮出4张)。与桥牌类似,依然按照游戏轮次来计算。第一轮,每个玩家只能看到自己的13张牌,因此第一轮信息集数目为C_13613(为了计算方便,不考虑重复手牌)。第二轮,由于第一轮每个玩家各出一张牌,一副麻将总共有34种不同的牌,所以第一轮出的四张牌所有可能的情况至多为344,因此第二轮信息集数目为C_136^13 ∙344。以此类推,第18轮信息集数目为C_13613 ∙3468。总的信息集数目为各轮信息集的和,即C_13613 (1+344+⋯+3468)≈7×10^121。

信息集平均大小:第一轮,除去自己13张手牌,总共剩余123张牌,每位对手13张牌,所以每个信息集大小为C_123^13 C_110^13 C_9713(为了计算方便,不考虑重复手牌)。第二轮,除去自己13张手牌,以及第一轮出的四张牌,总共剩余119张牌,因此每个信息集大小为C_11913 C_106^13 C_9313。以此类推,第18轮,每个信息集大小为C_5513 C_42^13 C_2913。对每一轮的信息集大小求平均,得到麻将的信息集平均大小≈1.07×1048。

喜欢这篇文章的可以点个赞,欢迎大家留言评论,记得关注我,每天持续更新技术干货、职场趣事、海量面试资料等等
如果你对java技术很感兴趣也可以加入我的java学习群 V–(ddmsiqi)来交流学习,里面都是同行,验证【CSDN2】有资源共享。

为什么说麻将比围棋难?游戏AI复杂度怎么算相关推荐

  1. 游戏AI的缘起与进化

    作者:微软亚洲研究院 来源:微软研究院AI头条(ID: MSRAsia) 计算机科学家们一直对游戏 AI 乐此不疲,原因并非为了精进棋艺,而是希望在此过程中不断提升人工智能的算法和处理复杂问题的能力. ...

  2. 游戏AI三大难:样本大、成本高、灵活性差

    DeepMind"入侵"安卓游戏了 继攻克围棋.<星际争霸>后,DeepMind开始瞄准手游了. 5月初,DeepMind推出 AndroidEnv后,开始密集测试诸多 ...

  3. AI打王者、星际争霸……你还不懂背后技术?这有一份游戏AI综述

    视学算法报道 机器之心编辑部 游戏中的人工智能所面临的技术.挑战和机遇. 人机游戏有着悠久的历史,已经成为验证人工智能关键技术的主流.图灵测试可以说是人类首次进行人机对抗测试,这激发了研究人员设计各类 ...

  4. 多智能体强化学习及其在游戏AI上的应用与展望

    近年来,人工智能技术在很多领域都取得了亮眼成就,并逐步从感知智能向决策智能迈进.强化学习是实现决策智能的重要路径,而现实世界中往往存在着多智能体的交互,也催生了多智能体强化学习的发展.这篇文章主要对多 ...

  5. 游戏AI:只是AI间的游戏,还是游戏的未来?

    前言背景 1. 雅达利的崛起与沉沦 1974年,一个名叫史蒂夫·乔布斯的年轻人来到了雅达利(Atari)公司位于洛思加图斯的总部,拿着一块他朋友沃兹尼亚克做的电路板,手舞足蹈的比划,试图让对方相信这个 ...

  6. 游戏AI之初步介绍(0)

    目录 游戏AI是什么? 游戏AI和理论AI 智能的假象 (更新)游戏AI和机器学习 介绍一些游戏AI 4X游戏AI <求生之路>系列 角色扮演/沙盒游戏中的NPC 游戏AI 需要学些什么? ...

  7. 游戏AI探索之旅:从AlphaGo到MOBA游戏

    背景:7月28日,腾讯云在北京举办云+社区沙龙,邀请来自腾讯与四川云检科技的五位AI技术专家,分享他们在专业领域的AI开发经验,帮助开发者在具体行业场景中实践AI技术.本文根据王亮在[7.28日腾讯云 ...

  8. 游戏+AI,你不曾想象的未来

    AI,Artificial Intelligence,人工智能. 这词或许过去陌生,但现在几乎妇孺皆知.不管你是不是真的能拼对这个单词,是不是真的能理解其中的含义,都不重要. AlphaGo打败围棋世 ...

  9. 博弈对抗游戏AI的技术方法的一些总结和思考

    目录 一.总体概况 1.博弈类型和算法 1)团队博弈 2)有限零和博弈 3) CFR系列算法 4)NFSP系列算法 2.不同的决策方式 二.不同游戏AI的简单介绍 1.棋盘游戏AI 2.纸牌游戏AI ...

最新文章

  1. Spring Cloud、K8S、Netflix OSS三者啥关系???
  2. java 内存溢出和内存泄漏_JAVA中的内存溢出和内存泄漏有很大的区别
  3. 下列不是python对文件的写操作方法的是_Python—文件读写操作
  4. 转载:一道逻辑题 房间里有100盏电灯
  5. Ubuntu中给eclipse和android studio添加桌面快捷图标
  6. 企业云存储:为什么中大型企业偏爱自建私有云?
  7. python 生成式,迭代器,生成器
  8. linux下DNS服务器的搭建
  9. HDU 1358 Period【KMP】
  10. 用C#语言实现http协议下的多线程文件传输
  11. 解决矢量地图与卫星地图叠加有偏移的两种方法
  12. 浅谈vue 动态加载、注册组件
  13. 计算机视觉知识体系图,计算机视觉系统框架的新构思
  14. 2019xman-shellmaster wp
  15. Codeforces 417D Cunning Gena(状压DP)
  16. CollapsingToolbarLayout用法详解(简洁易懂)
  17. 高通运行linux,高通、mtk及Linux平台的一点个人感受
  18. 【图床】图床、PicGo进行图片管理与上传
  19. 【金猿案例展】某远程教育机构——以用户为中心 打造优势教学内容和智慧化学习产品...
  20. 与卿共赴鸿蒙是什么意思,《山河令》看来周子舒是真的很爱温客行,君心似我心,此生无憾...

热门文章

  1. 用10行代码检测脸部情绪
  2. 查询已激活车辆的车架号和iccid
  3. AppCrawler得使用总结
  4. helmet是一个保护Node.JS应用的安全项目
  5. 机器人用计算机图片,带你深入了解机器人视觉系统!
  6. 学区摇号软件设计_小学摇号,改变了什么?
  7. Clickhouse 使用DBeaver连接
  8. emqx客户端用户名密码登录验证配置
  9. 时势下的HMS和GMS前世今生——今生篇之三问突破口
  10. 一朵玫瑰花的python代码,python玫瑰花代码讲解