把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

博弈论·公平组合游戏 学习笔记

写在前面:发现是好久之前存在草稿里的,偶然间翻出来了,稍微完善了一下。


公平组合游戏ICG

我们把这样的一类问题称作ICG:

  1. 游戏有两个人参与,二者轮流做出决策,决策是有限的。且这两个人的决策都对自己最有利。当有一人无法做出决策时游戏结束,无法做出决策的人输
  2. 游戏过程中任意时刻有确定的状态
  3. 无论二者如何做出决策,游戏可以在有限步内结束
  4. 游戏中的同一个状态不可能多次抵达。且游戏不会有平局出现
  5. 任意一个游戏者在某一确定状态可以作出的决策集合只与当前的状态有关,不取决于轮到哪名游戏者,之前的操作等(且两人操作的对象是一样的,如围棋就不是ICG,因为两人操作的对象不同
  6. 游戏者拥有游戏本身,和游戏过程的所有信息,比如规则、以前自己和对手的操作

N状态和P状态

N状态:Next player(下一个走的游戏者) wins
P状态: Previous player(刚走完的游戏者) wins

NP态理论:

  1. All terminal positions are P-positions
  2. From every N-position, there is at least one move to a P-position
  3. From every P-position, every move is to an N-position

游戏图

游戏可以转化成有向无环图,一个状态(局面)是一个点,一个决策是一条边,这个图叫做游戏图。
游戏图的终止状态出度为0。
对于两人进行ICG的操作,可以抽象为游戏图中的一条从起点出发到达一个出度为0的点的路径。

Sprague-Grundy SG函数

定义:
S G ( u ) = m e x ( S G ( v ) ∣ v 是 u 的 后 继 状 态 ) SG(u)=mex(SG(v)|v是u的后继状态 ) SG(u)=mex(SG(v)vu)

m e x ( m i n i m a l mex(minimal mex(minimal e x c l u d a n t ) excludant) excludant)是定义在整数集合上的操作。它的自变量是任意整数集合,函数值是不属于该集合的最小自然数。

结论必败态的SG函数值为0

数学归纳法证明:

  1. 最终状态 S G SG SG=0。
  2. 对于任意一个必胜态 S G ≠ 0 SG≠0 SG=0,存在一个后继态 S G = 0 SG=0 SG=0
  3. 对于任意一个必败态 S G = 0 SG=0 SG=0,不存在一个后继态 S G = 0 SG=0 SG=0

(以上也是 S G SG SG函数很重要的一些性质)

事实上,我们可以通过游戏图的拓扑关系算出每一个状态点的 S G SG SG函数值(只需算出是否为0即可),然后就知道了当前状态是N状态还是P状态,从而解决问题。

但是这个算法的时空开销是很大的,我们需要处理到所有的局面。

这个思路没有考虑到ICG的一些特殊性质。
我们先引出Nim游戏&游戏的和的概念:

Nim游戏

Nim游戏是一类简单的组合游戏,大概长这样:

桌子上有 N N N堆石子,每堆 a i ai ai个,游戏者轮流取石子。每次只能从一堆中取出任意数目的石子,但不能不取。取走最后一个石子者胜。

结论:若先手必败,则有 a 1 ⊕ a 2 ⊕ . . . ⊕ a n = 0 a1⊕a2⊕...⊕an=0 a1a2...an=0

数学归纳法证明:

  1. 最终状态异或和为0。
  2. 对于任意一个必胜态(异或和不为0),存在一个必败后继状态(异或和为0)。
    a 1 ⊕ a 2 ⊕ . . . ⊕ a n = S a1⊕a2⊕...⊕an=S a1a2...an=S,一定存在 a i ai ai S S S的最高位为1,只要改变 a i ai ai使这一位为0,后面的位相应改变使总体异或和为0就行了
  3. 对于任意一个必败态(异或和为0),不存在一个必败后继状态(异或和为0)

游戏的和

考虑任意多个同时进行的SG-组合游戏,这些SG-组合游戏的和是这样一个SG-组合游戏,在它进行的过程中,游戏者可以任意挑选其中的一个单一游戏进行决策,最终,没有办法进行决策的人输。

如果用之前的方法,计算游戏的和的时空开销是单独计算这些单一SG-组合游戏的开销的积。
而我们要做的,是利用SG-组合游戏的性质,把积变成和。

SG定理

若游戏 X X X由若干个子游戏 X 1 , X 2... X n X1,X2...Xn X1,X2...Xn构成,则 S G ( X ) = S G ( X 1 ) ⊕ S G ( X 2 ) ⊕ . . . ⊕ S G ( X n ) SG(X)=SG(X1)⊕SG(X2)⊕...⊕SG(Xn) SG(X)=SG(X1)SG(X2)...SG(Xn)

posted @ 2020-10-19 15:11  Starlight_Glimmer  阅读(11)  评论(0编辑  收藏  举报  来源
浏览器标题切换
浏览器标题切换end