博弈论入门指北
普通 NIM 游戏
游戏规则
- 初始状态:有若干堆石子,每堆石子的数量任意。例如:三堆石子,数量分别为 3, 4, 5。
- 玩家:两名玩家,轮流行动。
- 合法操作:选择其中一堆,从中取走任意数量的石子(至少取 1 颗,最多可以取完这一整堆)。
- 胜负判定:取走最后一颗石子的人获胜。
必败与必胜的数学本质
尼姆游戏是一个无偏博弈,意味着双方可执行的操作集合完全相同。
根据斯普莱格-格隆迪定理,它的局面可以用一个特定的数值——尼姆和 来评估。
核心概念:尼姆和
尼姆和的计算方法是:将所有堆的石子数量进行二进制异或运算(XOR,记作 ⊕)。
设各堆石子数为 \(a_1, a_2, ..., a_n\),则尼姆和 \(S = a_1 \oplus a_2 \oplus ... \oplus a_n\)。
胜负判定法则(Bouton定理):
- 必败局面:当且仅当尼姆和 \(S = 0\) 时,轮到的玩家必败。
- 必胜局面:当且仅当尼姆和 \(S \neq 0\) 时,轮到的玩家必胜。
必胜策略
如果当前 \(S \neq 0\),总能找到至少一堆石子,通过取走若干石子,使得新的尼姆和变为 0,将必败局面留给对手。具体操作方法是:
- 计算当前尼姆和 \(S\)。
- 寻找某一堆石子 \(a_i\),满足 \(a_i \oplus S < a_i\)。这样的堆一定存在。
- 将该堆的石子数从 \(a_i\) 减少到 \(a_i \oplus S\)。
- 操作后,新的尼姆和变为 \(S' = (a_i \oplus S) \oplus (\text{其余堆的异或和}) = S \oplus S = 0\)。
例子:
局面为 (3, 4, 5)。
- 计算尼姆和:3 (011) ⊕ 4 (100) ⊕ 5 (101) = 010 (即 2) ≠ 0,所以是必胜局面。
- 寻找操作:
- 对于堆 3 (011):3 ⊕ 2 = 1 < 3。可行。将第一堆取剩 1 颗(取走 2 颗)。
- 对于堆 4 (100):4 ⊕ 2 = 6 > 4。不可行。
- 对于堆 5 (101):5 ⊕ 2 = 7 > 5。不可行。
- 所以唯一正确的操作是将第一堆从 3 颗变为 1 颗。新局面 (1, 4, 5) 的尼姆和:1 (001) ⊕ 4 (100) ⊕ 5 (101) = 0。将必败局面留给了对方。
证明:
假设当前局面有 \(n\) 堆石子,数量分别是 \(a_1, a_2, \dots, a_n\)。
当前尼姆和为:
我们假设 \(S \neq 0\),所以要找一个堆 \(a_i\),满足 \(a_i \oplus S < a_i\),然后把它变成 \(a_i' = a_i \oplus S\)。
操作后,新局面的尼姆和是:
把第 \(i\) 堆排除在外,剩下所有堆的异或和,记为:
根据异或的定义,原来的尼姆和 \(S\) 满足:
操作后,第 \(i\) 堆变成了 \(a_i \oplus S\),其余堆没变,所以:
异或运算满足交换律和结合律,所以括号可以重新组合:
因为
所以代入:
经过这一系列推导,我们证明了:只要按照规则选择一个合适的堆,将其石子数变为原来的 \(a_i \oplus S\),那么操作后整个局面的尼姆和就会变成 \(0\)。
这正是在尼姆游戏中保证必胜策略的核心所在。
阶梯尼姆游戏
阶梯尼姆是普通尼姆的一种经典变体,它将石子堆排列在一个阶梯结构上,并通过改变取子规则,将其与尼姆和巧妙地联系起来。
游戏规则
- 初始状态:有 \(N\) 个阶梯(或一堆堆成阶梯状的格子),从 0 级(地面)开始,往上到第 1 级、第 2 级……直到第 \(N\) 级。每个阶梯上可以放任意数量的石子。地面上(第 0 级)的石子可以被认为是已经"出局"的,不起作用。
- 玩家:两名玩家,轮流行动。
- 合法操作:选择某一级阶梯(假设是第 \(i\) 级,\(i \ge 1\))上的任意数量石子(至少 1 颗),将它们向下移动,放到第 \(i-1\) 级阶梯上。
- 胜负判定:通常是谁无法继续操作谁输)。这和将最后一个石子从第1级移到第0级的玩家获胜是等价的。
核心思想
这个游戏的神奇之处在于,它完全可以转化为一个经典的尼姆游戏,而转化的关键就在于奇偶性。
结论:阶梯尼姆游戏等价于一个只考虑所有"奇数级"阶梯上石子数量的普通尼姆游戏。
- 偶数级阶梯(2, 4, 6...)可以完全忽略,它们上的石子数量不影响游戏的胜负状态。
- 奇数级阶梯(1, 3, 5...)上的每一堆石子,就等同于普通尼姆游戏中的一堆石子。
为什么可以这样转化?
让我们模拟一下:
- 如果你将石子从奇数级(比如第 1 级)移到偶数级(第 0 级地面),在普通尼姆的视角里,这就相当于从奇数堆(第1级)中取走石子并丢弃。这是标准的尼姆操作。
- 如果你的对手将这些石子从偶数级(比如第 2 级)移到奇数级(第 1 级),在你(必胜方)的视角里,这相当于对手向你的尼姆游戏里增加了某堆的数量。在普通尼姆中,对手是不允许这样做的。但在阶梯尼姆中,作为必胜方的你,可以立即将这些石子从第 1 级再次移到第 0 级(丢弃),从而抵消对手的操作,将局面还原到你原本预设的必败局面。
- 这种"对称策略"保证了偶数级石子只是"延迟"了游戏进程,但不会改变由奇数级石子决定的胜负归属。只要你的策略是基于奇数级尼姆和的,你就能通过"对手移下到奇数,你就立刻把它们移下到偶数"的方式,始终将必败局面留给对手。
- 这就和普通的 NIM 游戏没有区别了。
SG 函数
核心思想
SG 函数的精髓在于两点:
- Grundy 数:每个局面都有一个 SG 值,相当于这个局面"等价于"一堆几颗石子的 Nim 堆。
- 复合博弈:多个独立子博弈的总 SG 值,等于各子博弈 SG 值的按位异或(Nim-Sum)。这被称为 Sprague-Grundy 定理。
前置概念
1. 无偏博弈
必须同时满足:
- 两个玩家可执行的操作完全相同。
- 完全信息、无随机因素。
- 正常规则下,无法行动的玩家判负。
Nim、围棋的"吃子"不是无偏的,但整盘围棋不是无偏博弈。典型的无偏博弈有:取石子、剪纸游戏、DAG上的移动游戏等。
2. P 局面与 N 局面
- P 局面:先手必败。
- N 局面:先手必胜。
一个局面是 P 局面,当且仅当它所有后继都是 N 局面;是 N 局面,当且仅当存在至少一个后继是 P 局面。
3. mex 运算
mex 是集合中未出现的最小非负整数。
例如:\(mex\{0, 1, 3\} = 2,mex\{1, 2, 3\} = 0,mex\{\} = 0\)。
SG 函数的定义
对于一个博弈局面 \(G\),其 SG 值定义为:
递归基:终止局面(无合法操作)的后继集合为空,所以 SG 值为 mex{} = 0。这与 P 局面对应。
SG 函数的性质
-
SG = 0 ⇔ P 局面(先手必败)
-
值非 0 ⇔ N 局面(先手必胜)。
-
复合博弈求和:
若整体博弈 \(G\) 可分解为若干个独立的子博弈 \(G_1, G_2, ..., G_n\),每步只能选一个子博弈行动,则:\[SG(G) = SG(G_1) \oplus SG(G_2) \oplus ... \oplus SG(G_n) \]
经典例子
例1:简单 Nim 堆
一堆 \(n\) 颗石子,可取 1~\(m\) 颗。
- 终止局面 0 颗:SG(0) = 0。
- \(SG(1) = mex\{ SG(0)\} = mex\{0\} = 1\)。
- \(SG(2) = mex\{SG(1), SG(0)\} = mex\{1,0\} = 2\)。
- ...
- 当可取任意颗(\(m=\infty\))时,\(SG(n) = n\)。
这解释了"Nim 博弈中每堆石子数异或和为 0 则必败"的结论,因为 Nim 堆本身的 SG 值就是石子数。
例2:有约束的取石子
一堆 \(n\) 颗,每次可取 1、2 或 4 颗。
递推:
- \(SG(0) = 0\)
- \(SG(1) = mex\{SG(0)\} = mex\{0\} = 1\)
- \(SG(2) = mex\{SG(1), SG(0)\} = mex\{1,0\} = 2\)
- \(SG(3) = mex\{SG(2), SG(1)\} = mex\{2,1\} = 0\)
- \(SG(4) = mex\{SG(3), SG(2), SG(0)\} = mex\{0,2,0\} = 1\)
可见 SG 值循环出现:\(0,1,2,0,1,2,0,1,2...\) 周期为3。因此对于任意堆,\(SG(n) = n % 3\)。
例3:DAG 上的移动棋子
一个有向无环图,一枚棋子。玩家轮流沿有向边移动一步,无法移动者输。
每个节点的 SG 值等于其所有后继节点的 SG 值的 mex。这是 SG 函数最直接的应用。如果多枚棋子在同一个图或不同图上独立移动,则总 SG 等于各棋子所在节点 SG 值的异或。
例4:Subtraction Game(减法游戏)
给定一个允许减去的集合 \(S\),一堆 n 个物品。\(SG(n) = mex\{ SG(n - s) | s ∈ S, n ≥ s \}\)。这种游戏常用于生成周期性 SG 序列,可利用周期性优化计算。

浙公网安备 33010602011771号