博弈论

感觉这东西像我的人生一样莫名其妙。

在 oi 生涯结束前再留一些遗产吧。

upd:完了,突然感觉还挺有意思的。


0.1. 公平组合游戏

公平组合游戏(ICG),是满足以下特征的一类问题:

  • 双人,回合制;
  • 游戏规则对于两个玩家是公平的;
  • 游戏的状态有限,能走的步数也有限;
  • 两人轮流行动,当一个玩家不能行动时,游戏结束,故无平局;
  • 游戏的局势不能区分玩家身份,即双方可采取的行动以及胜利目标都相同;
  • 无随机因素。

该问题有一个特征:给定初始局势,在指定先手玩家的情况下,如果双方都采取最优策略行动,那么获胜者就已经确定了。也即,ICG 问题存在必胜策略。

0.1.1. Bash Game

\(n\) 个石子,每次取走 \([1,m]\) 个,无法操作者输。

结论:\(n\)\(m+1\) 的倍数时,先手必败,否则先手必胜。

0.1.2. Nim Game

\(n\) 堆石子,数量分别为 \(\{a_1,\cdots,a_n\}\),每次选一个石子堆 \(i\),取走 \([1,a_i]\) 个石子,不能不取,无法操作者输。

结论:若 \(\bigoplus\limits_{i=1}^n a_i=0\),先手必败,否则先手必胜。

0.1.3. N-position、P-position 与图游戏

图游戏定义为有向无环图 \(G(X,F)\)\(X\) 是点的非空集合,\(F\)\(X\) 上的函数,对于 \(\forall x\in X,F(x)\subset X\);对于给定的 \(x\in X\)\(F(x)\) 表示玩家从 \(x\) 出发能移动到的位置集合,若 \(F(x)\) 为空,则说明无法进行移动,此时 \(x\) 为终点位置。

定义 P-position 表示马上走下一步的先手必败的位置,N-position 则表示必胜位置。

更严谨的定义为,对于 \(x\in X\)

  • \(x\) 为无法移动的点(terminal-position),此时它是 P-position;
  • \(\exists y\in F(x)\) 满足 \(y\) 为 P-position,此时 \(x\) 为 N-position;
  • \(\forall y \in F(x)\) 均有 \(y\) 为 N-position,此时 \(x\) 为 P-position。

容易发现所有的 ICG 问题都可以看作一种图游戏,其中点表示当前的局面状态,函数的对应关系则为连边指向后继节点,比如 Bash Game 中每个点为一个数字,表示还剩下几个石子,\(5 \rightarrow 3\) 则表示可以通过一次行动使得石子数从 \(5\) 变为 \(3\)

于是可以简单用 N-position、P-position 这套理论证明一下上述游戏,具体来说,如果一组对于 N/P-position 的构造说明可以满足如上三条定义,那就可以证明其正确性。

对于 Bash Game,读者自证不难,于是现用 Nim Game 举例,证明对于任意一个状态 \(\{a_1,\cdots,a_n\}\),若 \(\bigoplus\limits_{i=1}^n a_i=0\),则在该点先手必败,为 P-position,否则先手必胜,为 N-position,则只需要证明:

  • 没有石子时的终态点是 P-position;
    Proof. 显然当 \(\forall a_i=0\),有 \(\bigoplus\limits_{i=1}^n a_i=0\)
  • 一定能从 N-position 到达一个 P-position;
    给出构造:记 \(s=\bigoplus\limits_{i=1}^n a_i\),有 \(s\not = 0\),则对于 \(s\) 最高位 \(1\),一定至少有一个 \(a_k\) 中含有这一位,则将任意一个满足条件的 \(a_k\gets s\oplus a_k\),得到的状态必然为可达的 P-position。
    Proof. \(s\oplus a_k\) 一定不含有最高位 \(1\),故 \(s\oplus a_k<a_k\),所得状态为可达后继;根据异或的性质,容易得到 \(s\oplus a_k\oplus (s\oplus a_k)=0\),所以是 P-position。
  • P-position 只能到达 N-position。
    Proof. 任何一堆石子的数量严格减少都会使得 \(\bigoplus\limits_{i=1}^n a_i\) 不再为 \(0\)

于是我们就证明了 Nim Game 的结论。

上述证明的每一步都浑然天成,在感受算法精妙的同时我不禁在想,是否还会有不同的构造方式也符合这个定义,以及为什么只需要证明一个构造满足了三条定义就能说明它一定是没错的,我总在心里暗暗觉得限制还不够紧。

对于第一个问题,我可以给出肯定的答案,确实有可能存在不同的构造方式,然而由于 N/P-position 是固定的,所以不同的构造方式虽然给出的描述不同,但得到的点一定是相同的,于是可以称构造方式只是为了贴合 N/P-position 的定义,故它们从结果上来看相同,因此广义上是没有任何区别的。

而对于第二个问题,则可以归纳证明,若 \(x\) 的后继节点均已确定状态,切均符合构造的描述,这样推出的 \(x\) 状态也一定符合构造的描述,而对于采取最优策略的人来说,也一定会按照该策略行动。

0.2. Sprague-Grundy 函数

在一个有向无环图 \(G(X,F)\) 中,定义节点 \(x\) 的 Sprague-Grundy 函数 \(sg(x)\)\(\operatorname{mex}_{y\in F(x)}\{ sg(y) \}\),其中 \(\operatorname{mex} S=\min\limits_{i\ge 0\wedge i\notin S} \{i \}\),游戏的 \(sg\) 值即为起始节点 \(s\) 的 SG 函数 \(sg(s)\)

根据该函数的定义,可以推出三个性质:

  • \(x\) 无后继节点时,\(sg(x)=0\),此时 \(x\) 为 P-position;
  • \(\exists y\in F(x),sg(y)=0\) 时,\(sg(x)>0\),此时 \(x\) 为 N-position;
  • \(\forall y \in F(x),sg(y)>0\) 时,\(sg(x)=0\),此时 \(x\) 为 P-position。

这和 N/P-position 的定义是一致的。

0.3. Sprague-Grundy 定理

莫名其妙的定理啊,很想证明一下。

回到公平组合游戏,发现除了公平,还没有详细谈到组合

事实上,可以将 Nim Game 看作多个子游戏的组合,每个子游戏只有一堆石子,即 \(m=n\) 的 Bash Game。

故有若干个有向无环图,每次每个人选择一张图移动一下棋子,当所有图都不能移动就输了。

这与 0.1.3. 中”只建出一个图,每个点上是 \(n\) 维状态“本质相同,我们想要简化问题,减小规模,从而需要证明二者等价。

0.3.1. 内容

对于任意一个公平组合游戏,有:

  • 该游戏可拆分成若干个公平的子游戏,其 \(sg\) 值等于每个子游戏的 \(sg\) 值的按位异或和,换个说法是,设 \(x_1,x_2,\cdots x_n\) 为 ICG 的子游戏状态,则有 \(sg(x_1+x_2+\cdots + x_n)=sg(x_1)\oplus sg(x_2) \oplus \cdots \oplus sg(x_n)\)
  • \(sg(x)=0\) 时,该状态先手必败,否则 \(sg(x)>0\),则先手必胜。

0.3.2. 证明

第二条在前文定义处已有直接的证明,接下来证明第一条。

只需要证明若 \(a,b\) 为两个子游戏,则对于组合起来的游戏 \(a+b\),有 \(sg(a+b)=sg(a)\oplus sg(b)\),通过两维扩展至 \(n\) 维。

根据 SG 函数的定义,有 \(sg(a+b)=\operatorname{mex}\{ sg(x) | (a+b)\leadsto x\}\),而根据子游戏状态的独立性,必然可以将 \(x\) 拆成 \(c+b\)\(a+d\) 的形式,其中 \(c\in F(a),d\in F(b)\),于是有:

\[sg(a+b)=\operatorname{mex}( \{sg(c+b)|a\leadsto c\}\cup \{ sg(a+d)|b\leadsto d\}) \]

由于有向无环图的拓扑结构(简直是为归纳的证明量身定做的),我们可以采用数学归纳法,也就是说对于后继状态 \(c+b\)\(a+d\),有 \(sg(c+b)=sg(c)\oplus sg(b)\)\(sg(a+d)=sg(a)\oplus sg(d)\)

于是 \(sg(a+b)=\operatorname{mex}( \{ sg(c)\oplus sg(b) |a\leadsto c\} \cup \{ sg(a)\oplus sg(d) |b\leadsto d\})\)

更进一步的,只需要证明 \(sg(a)\oplus sg(b)\) 没有在 \(\{ sg(c)\oplus sg(b) |a\leadsto c\} \cup \{ sg(a)\oplus sg(d) |b\leadsto d\}\) 中出现过,且 \(<sg(a)\oplus sg(b)\) 的所有数都出现过。

为了方便,记 \(sg(a)=A,sg(b)=B,sg(c)=C,sg(d)=D\)

  • \(A\oplus B \notin (\{C\oplus B\}\cup \{A\oplus D\})\)
    Proof. 由于 \(c\in F(a),d\in F(b)\),根据 SG 函数的定义,必然有 \(A\not= C\wedge B\not= D\)
  • \(\forall x< A\oplus B,x\in (\{C\oplus B\}\cup \{A\oplus D\})\)
    Proof. 令 \(y=A\oplus B\oplus x\),因为 \(x< A\oplus B\),故 \(y\not = 0\),且 \(y\) 最高位的 \(1\) 一定来自于 \(A\oplus B\)。不妨设来自 \(A\),于是有 \(A\oplus y< A\),即 \(B\oplus x <A\),根据 SG 函数的定义,一定存在 \(c\in F(a)\),使得 \(C=B\oplus x<A\),故该种情况下有 \(x=C\oplus B\)

于是我们证明了 Sprague-Grundy 定理。

参考资料

一只绝帆 若干 SG 函数笔记

王赟 Sprague-Grundy 定理是怎么想出来的

posted @ 2024-12-20 11:12  syta  阅读(128)  评论(1)    收藏  举报