User:Xjxxjx1017/sandbox

组合博弈论 有许多方法来衡量 游戏复杂度. 本条目讲述其中的5个：状态空间复杂度( state-space complexity )，游戏树的大小( game tree size )，策略复杂度( decision complexity )，游戏树的复杂度( game-tree complexity )，和计算复杂度( computational complexity ).

状态空间复杂度
游戏的状态空间复杂度指的是从游戏最开始的状态可以变化出的符合规则的状态的数量.

当这太难以计算时, 常常通过包含一些不符合规则的状态或不可能在游戏中出现的状态, 从而计算出一个上界限( upper bound ).

游戏树的大小
游戏树的大小指的是游戏可以被玩弄的总次数: 从游戏树( game tree )最初的根节点开始延伸出的叶子节点的数量.

游戏树通常比状态空间要大得多, 因为同一个状态可以由不同的行为顺序形成. ( 例如, 在一次井字棋( tic-tac-toe )游戏中, 面板上有两个X和一个O, 这个状态可能由两个不同的方式形成, 具体的形成过程由第一个X的下子位置所决定 ). 一个游戏树的大小的最大值有时可以这么计算: 通过仅增大游戏树的方式, 简化游戏的过程( 例如, 允许一些本来不符合规则的行为 ), 直到游戏树的大小变得易于计算.

不过, 对于一些没有行为上限的游戏( 比如说没棋盘大小的界限, 或者有一个可以重复游戏状态的规则 ), 游戏树的大小将会是无限的.

决策树
之后的两种方案用到了决策树的方法. 一个决策树是游戏树的子树. 决策树的状态会被标记上"玩家A获胜", "玩家B获胜", 或者"平局": 如果有那个状态可以被证明具有一个标记( 假设双方都作出了最好的决策 ), 并且光从其它状态就可以得出结论. ( 终端的状态可以直接标记; 如果现在该A行动: 如果下一个状态标志着A的胜利, 那么现在的状态可以被标记为"玩家A获胜"; 如果下一个状态标志着B的胜利, 那么现在的状态可以被标记为"玩家B获胜"; 或者可以被标记为"平局", 如果下一个状态是平局或者B胜利. 相应的对于现在该B行动也是一样. )

决策复杂度
一个游戏的决策复杂度指的是在构成初始状态取值的最小的决策树中, 叶子节点的数量.

游戏树的复杂度
一个游戏的"游戏数的复杂度"指的是在构成初始状态取值的最小"整个"决策树中, 叶子节点的数量. 整个决策树包含树中所有深度的节点.

这是一个为了尝试决定初始状态取值, 所做出的对于需要考虑的节点数量的一个极小化极大算法( Minimax ).

就算是去估量游戏树的复杂度, 那也是很困难的. 不过对于一些游戏, 一个合理的下界限可以由底数为游戏的平均分枝因素( branching factor ), 指数为游戏的平均步数( plies )的幂得出, 可以表示为:

$$GTC \geq b^d$$

计算复杂度
一个游戏的计算复杂度( computational complexity ) 描述了对游戏进行渐近分析( asymptotic )的难度, 随着它变得过于巨大, 用大O符号( big O notation )表示, 或者用复杂性类( complexity class )的成员关系表示. 这个概念并不应用于特定的游戏, 而是用于广义的游戏( generalized ), 它们会变得非常大, 通常在一个n宽n高的面板上玩弄它们. ( 从计算复杂度的角度来看, 一个在有限面板上进行的游戏是一个有限问题, 可以通过计算O(1)解决. 例如遍历从方案到最佳的移动方案的所有方案. )

例子: 井字棋
对于井字棋( tic-tac-toe )来说, 一个简单的状态空间大小的上界限是39 = 19,683. ( 每一个格子中有3种状态, 有9个格子. ) 这样计算包含了许多不合规则的状态, 比如有5个X却没有0的状态, 或者两方玩家都有形成一字的状态. 一个更精细的计算, 除去了这些不合规则的状态之后, 留下5,478个状态. 然后, 如果把旋转或翻转后会得到相同结果的状态算作同一个的状态话, 那么就可以得出765个真正本质上不同的状态.

一个简单的游戏树大小的上界限是9! = 362,880. ( 一开始有9个格子可以下子, 第二回合变为8个, 以此类推. ) 这包括了一方玩家获胜后继续下子的不符合规则的情况. 一个更精细的计算得出的是255,168种游戏过程. 如果把旋转或翻转后会得到相同结果的状态当作相同的话, 那么就仅有26,830种游戏过程.

井字棋的计算复杂度取决与它如何广义化( generalized ). 一种自然的广义化是将其变为m,n,k型游戏( m,n,k-games ): 在一个"m"宽"n"高的棋盘上, 第一个将"k"个子连成一线的玩家获胜. 很容易就可以发现, 这个游戏可以通过查找整个游戏树, 解DSPACE(mn), 得出结果. 这将它归类到了重要的复杂性类PSPACE里面. 稍微再花点功夫, 可以将它变换为PSPACE-complete.

一些知名游戏的复杂度
由于游戏复杂度非常巨大, 下面表中一些数据只显示了以10为底数的指数部分. 下面的表中的数值都需要小心对待: 在游戏中, 一个看起来很微小的规则变换会引起结果的巨大变化( 通常依然会被粗略地估计 ), 可能实际情况会比数值估计的结果要大得多.

参考

 * Go and mathematics
 * Solved game
 * Shannon number
 * list of NP-complete games and puzzles
 * list of PSPACE-complete games and puzzles

外部链接

 * David Eppstein's Computational Complexity of Games and Puzzles

Category:Combinatorial game theory Category:Game theory