博弈论乱写1:常见模型
按照自己的学习顺序写的,可能有点奇怪。
ICG 游戏
Nim 游戏
有 \(n\) 堆石子,第 \(i\) 堆有 \(a_i\) 个,每次行动可以从任意一堆中取出任意多个(至少一个),两人轮流行动,先不能行动者输。问谁有必胜策略。
在解决具体的问题前,我们首先关注博弈本身的性质。
用 \(x\) 表示一个局面,用一个局面先手必胜,那么 \(P(x)=1\),否则 \(P(x)=0\)。类似的,后手必胜时有 \(N(x)=1\),否则 \(N(x)=0\)。我们有 \(P(x)\oplus N(x)=1\),这里 \(\oplus\) 表示按位异或运算(也记为 \(\operatorname{xor}\)),也就是说一个局面要么先手必胜,要么后手必胜。这个结论的严谨证明将在后面出现。
更进一步,如果一个局面 \(x\) 存在后续局面 \(y\) 有 \(P(y)=1\),那么 \(P(x)=1\),否则 \(P(x)=0\)。类似的,如果一个局面 \(x\) 所有后续局面 \(y\) 都有 \(N(y)=1\),则 \(N(x)=1\),否则 \(N(x)=0\)。
基于这样基本的理论,我们可以轻易的写出 dp 转移来解决这个问题,不够这样的复杂度是 \(O(V^n)\) 的,其中 \(V\) 表示 \(a_i\) 的最大取值,这样的复杂度是难以接受的。
找规律的做法
试着发掘 Nim 游戏本身的性质,下面是两个例子。此处用 \((a_1,a_2,a_3\ldots a_n)\) 表示有 \(n\) 堆石子,第 \(i\) 堆有 \(a_i\) 个的局面。
-
一开始,局面为 \((x,x)\),那么先手后手只需要模仿先手的操作,局面就总是形如 \((x,x)\),且该先手操作,易知石子个数单减,于是局面 \((x,x)\) 下后手必胜。如果 \(x\) 表示若干堆石子的状态,不难发现上面的过程依然可以使得后手必胜。
-
一开始,局面为 \((2,3)\),先手只需从第 \(2\) 堆中取 \(1\) 个,使局面变为 \((2,2)\),就可以变为上面的情形,故局面 \((2,3)\) 是先手必胜的。
-
一开始,局面为 \((1,2,3)\),尝试所有可能后可以发现是后手必胜的。
可以用程序验证更大的例子,观察 \((x,y,z)\) 在 \(1\le x\le y\le z\le6\) 的答案( Previous 表示先手必胜,Next 表示后手必胜 ):
(1,1,1)=Previous (1,1,2)=Previous (1,1,3)=Previous (1,1,4)=Previous (1,1,5)=Previous (1,1,6)=Previous
(1,2,2)=Previous (1,2,3)=Next (1,2,4)=Previous (1,2,5)=Previous (1,2,6)=Previous
(1,3,3)=Previous (1,3,4)=Previous (1,3,5)=Previous (1,3,6)=Previous
(1,4,4)=Previous (1,4,5)=Next (1,4,6)=Previous
(1,5,5)=Previous (1,5,6)=Previous
(1,6,6)=Previous
(2,2,2)=Previous (2,2,3)=Previous (2,2,4)=Previous (2,2,5)=Previous (2,2,6)=Previous
(2,3,3)=Previous (2,3,4)=Previous (2,3,5)=Previous (2,3,6)=Previous
(2,4,4)=Previous (2,4,5)=Previous (2,4,6)=Next
(2,5,5)=Previous (2,5,6)=Previous
(2,6,6)=Previous
(3,3,3)=Previous (3,3,4)=Previous (3,3,5)=Previous (3,3,6)=Previous
(3,4,4)=Previous (3,4,5)=Previous (3,4,6)=Previous
(3,5,5)=Previous (3,5,6)=Next
(3,6,6)=Previous
(4,4,4)=Previous (4,4,5)=Previous (4,4,6)=Previous
(4,5,5)=Previous (4,5,6)=Previous
(4,6,6)=Previous
(5,5,5)=Previous (5,5,6)=Previous
(5,6,6)=Previous
(6,6,6)=Previous
我们可以猜测先手必胜的条件是 \(a_1\oplus a_2\oplus a_3\oplus \cdots \oplus a_n\ne0\),考虑证明:
等价的命题是:后手必胜的条件是 \(a_1\oplus a_2\oplus a_3\oplus \cdots \oplus a_n=0\)。下面先给出构造。
我们假设 \(a_1\oplus a_2\oplus a_3\oplus \cdots \oplus a_n=x\)。
由异或的性质可知,一定存在 \(a_k\),使得 \(\operatorname{highbit}(a_k)=\operatorname{highbit}(x)\)。从第 \(k\) 堆中取出 \(a_k-(a_k\oplus x)\) 个后,第 \(k\) 堆余下 \(a_k\oplus x\) 个,此时有
如果当前已经有 \(a_1\oplus a_2\oplus \cdots \oplus a_n=0\),那么不管先手如何操作,之后都有 \(a_1\oplus a_2\oplus \cdots \oplus a_n\ne0\),因为对于任意的 \(x\),有且只有 \(x\) 满足 \(x\oplus x=0\)。
而终止局面 \((0)\) 时显然满足 \(a_1=0\),且这个局面是后手必胜的。那么通过上文的构造方式就可以使得 \(a_1\oplus a_2\oplus a_3\oplus \cdots \oplus a_n\ne0\) 时先手必胜。
分析的做法
我们期望可以用 \(x\) 描述一个任意多堆的 Nim 游戏,假设只有一堆 \(a_i\) 个,那么我们 naive 的设 \(x=a_i\),此时显然有
这是十分简洁的性质,我们期望多个 Nim 游戏保留这个性质。
设两堆石子 \((x,y)\) 可以表示成 \(x\oplus y\),使得 \(x\oplus y\) 满足上面的性质,其中 \(\oplus\) 表示某个我们尚不知道的运算。
我们知道 \((x,y)\) 可以到达的状态有 \((x^\prime,y)\) 或 \((x,y^\prime)\),当然,\(0\le x^\prime<x,0\le y^\prime<y\)。
由定义,我们有
假设两个玩家 \(L\) 和 \(R\),现在 \(L\) 操作,如果 \(L\) 是必胜的,即当前局面先手必胜,意味着存在下一局面是后手必胜的,从而有 \(x\oplus y\ne0\iff\exists x^\prime\oplus y=0\or\exists x\oplus y^\prime=0\)。
类似的,如果当前局面后手必胜,以为着当前的先手只能操作到一个先手必胜的局面,形式化的说,\(x\oplus y=0\iff \forall x^\prime,x^\prime\oplus y\ne0\and\forall y^\prime,x\oplus y^\prime\ne0\)。
同时,我们还知道,\((x,y)\) 和 \((y,x)\) 是等价的局面,也就是说 \(x\oplus y=y\oplus x\)。
由于我们已经知道了一堆的情形,此时可以看作有一堆为 \(0\),即 \(x\oplus 0=0\oplus x=x\)。
只需要构造出满足上述要求的运算即可。
灵光一现的,我们定义 \(\operatorname{mex}(S)\) 表示最小的集合 \(S\) 中未出现过的自然数,比如 \(\operatorname{mex}(1,2,3)=0,\operatorname{mex}(0,1,2,3)=4,\operatorname{mex}(0,1,2,4)=3\)。
我们设
虽然需要灵感,但这是比 \(\operatorname{xor}\) 自然得多的想法,此时一个局面之和一个局面的所有后续局面有关。
考虑 \(x\oplus y=k>0\) 的情况,此时 \(\{0,1,2\ldots k-1\}\) 对应的局面一定可以从当前局面到达,故游戏一定还未结束,先手可以移动后使得局面满足 \(x\oplus y=0\)。
如果 \(x\oplus y=0\),分情况讨论:
- \(x=y=0\),此时游戏结束,显然有后手必胜。
- 否则一定存在后续局面,有 \(\operatorname{mex}\) 的定义,后续局面中没有 \(x^\prime\oplus y=0\) 或 \(x\oplus y^\prime=0\) 的局面,故会转化为 \(x\oplus y>0\) 的情况。
递归的唯一终止位置是在 \(x\oplus y=0\) 时,而石子数量单减,故 \(x\oplus y\ne0\) 时先手必胜。
发现我们并没有使用 \(\operatorname{mex}\) 的太多性质,比如我们定义 \(\operatorname{Mex}(x)\) 表示后续状态有 \(0\) 则为 \(1\),否则为 \(0\)。
不难发现我们随便定义的 \(\operatorname{Mex}\) 可以替换 \(\oplus\) 定义中的 \(\operatorname{mex}\)。这个 \(\operatorname{Mex}\) 运算写成规范一点的形式是 \(\operatorname{Mex}(a_1,a_2\ldots a_n)=\urcorner a_1\or\urcorner a_2\or\cdots\or\urcorner a_n\)。
不难验证 \(\operatorname{xor}\) 也是一种满足要求的运算。
反常 Nim 游戏
Nim 游戏胜负规则相反。
直接上结论了:
满足下列条件之一时先手必胜,否则后手必胜。
- 有偶数堆 \(1\) 个石子的堆。
- 有至少一堆石子个数 \(>1\),且 \(a_1\oplus a_2\oplus \cdots \oplus a_n\ne0\)。
第一个条件显然,考虑第二个条件:
若只有一堆石子个数 \(>1\),那么我们可以分奇偶讨论。
- 如果有偶数堆,那么把 \(>1\) 的那堆取完。
- 如果有奇数堆,那么把 \(>1\) 的那堆取到只有 \(1\) 个。
易知此时先手必胜。
若有多堆石子个数 \(>1\),考虑 \(a_1\oplus a_2\oplus \cdots \oplus a_n=x\)。
- \(x=0\),考虑可能的转移。
- 拿走一堆使得其余下的个数 \(\le1\),那么可以转化为先手必胜的情况。
- 否则一定有 \(x^\prime\ne0\),转化为下面的情况。
- \(x\ne0\),用 Nim 游戏一样的构造转移到上面的状态。注意到转移时石子个数递减,最终转移一定变成只有一堆石子时先手必胜。
综上可知先手必胜。
SG 函数
SG 定理
到这里,我们终于可以给出 ICG 游戏的定义:
在一个 DAG 上,有一个棋子,两人轮流移动一步(走过一条边),先不能移动者负。
定义 \(\text{SG}(x)\) 函数,其中 \(x\) 是 DAG 上的一个点。
定义 \(\operatorname{SG}(x)=0\) 当 \(x\) 出度为 \(0\),否则 \(\operatorname{SG}(x)=\operatorname{mex}(\{\operatorname{SG}(v)\mid x\rightarrow v\})\),即其所有后继的 \(\operatorname{SG}\) 值的 \(\operatorname{mex}\)。
如果一个点 \(x\) 满足 \(\operatorname{SG}(x)=0\),那么在这个点处后手必胜,否则先手必胜。
证明和 Nim 游戏几乎一模一样:终止处 \(\operatorname{SG}(x)=0\),而 \(\operatorname{SG}(x)>0\) 意味着可以从这个点走到 \(\operatorname{SG}(x)=0\) 的点,于是只需要把 Nim 游戏中的名词替换一下就可以了。
k-SG
更常见的情形是有多个 ICG 游戏同时存在,每次可以选择其中一个操作。
不加证明的,我们给出 \(\operatorname{SG}(x)=\operatorname{SG}(x_1)\oplus \operatorname{SG}(x_2)\oplus \operatorname{SG}(x_3)\oplus\ldots\oplus \operatorname{SG}(x_n)\)。其中 \(x_1,x_2\ldots x_n\) 表示 \(n\) 个子游戏。
证明过程和上面几乎一致,故略去。
anti-SG
一个 ICG 游戏,先不能行动者赢。
和 anti-Nim 游戏几乎一样,考虑游戏的 \(\operatorname{SG}(x)\) 和子游戏个数。
先手在满足下列条件之一时必胜:
- \(\operatorname{SG}(x)=0\),没有子游戏 \(\operatorname{SG}(x_k)>1\)。
- \(\operatorname{SG}(x)\ne0\),\(\exists \operatorname{SG}(x_k)>1\)。
证明也和反 Nim 游戏差不多。
策梅洛定理
就是 Nim 游戏里说后面会证的那个东西。
对于一个博弈,如果满足下列条件,那么任何局面要么先手必胜,要么后手必胜。
- 两个玩家轮流操作,他们都足够聪明。
- 下一个局面只和当前局面有关,和谁操作无关。
- 双方都完全了解这个博弈的所有信息。
- 博弈过程中不涉及随机变量,且胜负只由局面唯一决定。
- 终止状态时,一个人赢,另一个人输,且不存在平局。
- 博弈总会停止。
证明其实很简单,从终止局面向初始局面编号为 \(0,1,2\ldots n\),在第 \(0\) 个局面时的后手如果输了,说明在 \(1\) 个局面时(此时他是先手)他已经必败了,否则他不是足够聪明的。以此类推,用数学归纳法不难得出正整数时任何局面 \(x\) 都满足 \(P(x)\oplus N(x)=1\)。