通过优锐课核心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)。例如在估计围棋状态数目上