博弈论(1)

定义

博弈论(Game Theory)是研究理性主体在相互依存的决策环境中如何选择策略以最大化自身收益的数学理论,这个“博弈”泛指任何存在多个决策者、且每个人的结果不仅取决于自身选择、还取决于他人选择的情境。

构造类博弈

例 1

\(n\) 个石子,Alice 和 Bob 轮流拿,每次可以取走 \(1\) 个或 \(2\) 个,Alice 先手,取走最后一个石子者赢,问 Alice 是否有必胜策略。

注意到,当 \(n\) 为 \(3\) 的倍数时,每次先手取 \(1\) 个,后手就取 \(2\) 个,先手 \(2\) 个后手就 \(1\) 个,这样可以保证石子数一直是 \(3\) 的倍数,因此先手必败。

若 \(n\) 不为 \(3\) 的倍数,则先手可以一步将石子数变为 \(3\) 的倍数,先手必胜。

例 2

\(n\) 个石子排成一个环,Alice 和 Bob 轮流取,每次可以取走相邻的 \(1\) 个或 \(2\) 个,Alice 先手,取走最后一个石子者赢。

我们让后手每次都取走与先手取走的石子对称的石子,第一步时根据 \(n\) 的奇偶性,偶数时显然可以对称,奇数时取走与先手第一步不同的石子数,转换为偶数情况。

当 \(n\leq 2\) 时,显然先手必赢,若 \(n>2\) 则根据上述方案,后手必赢。

有向图博弈

一些博弈中,每个局面都可以表示为一个点,每个点都有先手必赢(N-position)或者后手必赢(P-position)。

对于每个点,我们定义 \(win_x\) 为 \(0\) 则先手必败,\(win_x\not = 0\) 则先手必胜。

那么就有 \(win_x=\mathrm{mex}\{ win_y\mid (x,y)\in E\}\)。

一般配合记忆化搜索实现。

SG 函数

Nim 游戏

\(n\) 堆石子,每堆 \(a_i\) 个,Alice 和 Bob 轮流取,每次取一堆中的至少一个,取走最后一个石子者赢。

记 \(G=a_1\oplus a_2\oplus \dots \oplus a_n\)

当 \(G=0\) 时,任何操作都会使得 \(G\not = 0\)。

将一堆 \(a_i\) 个石子取走 \(k\) 个,变为 \(a_i'\) 个,那么新的 \(G'=G\oplus a_i\oplus a_i'=0\oplus a_i\oplus a_i'=a_i\oplus a_i'\)。

\(a_i\not =a_i'\) 所以 \(a_i\oplus a_i'\not = 0\) 因此 \(G'\not =0\)。

当 \(G\not = 0\) 时,一定存在一个合法操作使得 \(G = 0\)。

设 \(G\) 的最高位为 \(2^m\) 那么一定有 \(a_i\) 的第 \(m\) 位为 \(1\)。

构造 \(a_i'= a_i \oplus G\)。

\(a_i'\) 的第 \(m\) 位变为 \(0\),且 \(m\) 以前的位都与 \(a_i\) 相同,因此一定有 \(a_i'<a_i\)。

结论:当 \(G=0\) 时,后手必胜,反之则先手必胜。

SG 定理

SG定理(Sprague–Grundy Theorem)将 Nim 的异或规则推广到了所有无偏有限博弈(impartial combinatorial games)。

无偏有限博弈:

  • 双方在任何局面之下,可以执行的操作集合完全相同。
  • 有限步数内游戏一定会结束,不会平局等。
  • 无法操作者输。

Grundy 数/SG 函数

在我们抽象出来的 DAG 中,对于每个局面 \(x\),其所有后继局面 \(y\) 的 Grundy 数的集合为 \(S\),那么就有

\[SG(x)=\mathrm{mex}\{S\} \]

其中 \(\mathrm{mex}\) 即为不在 \(S\) 中的最小自然数。

且 Grundy 数的边界(终态)即为无合法操作的情况,此时 Grundy 数的值为 \(0\)。

Sprague–Grundy Theorem 定理包含两个性质。

  • 等价性 每个无偏有限博弈的局面 \(x\) 都等价于一个大小为 \(SG(x)\) 的 Nim 堆。

    \(SG(x)=0 \Longleftrightarrow x\) 是 P-position。

    \(SG(x)\not=0 \Longleftrightarrow x\) 是 N-position。

  • 直和的可加性 对于一个复合局面 \(G\) 的若干独立子博弈 \(G_1,G_2,\dots, G_n\)(每步只能选择其中一个子博弈操作一次),则有:

    \[SG(G_1+G_2+\dots+ G_n)=SG(G_1)\oplus SG(G_2)\oplus\dots\oplus SG(G_n) \]

等价性易证,直和可加性的证明可以参考 Nim 游戏的证明。

我们还可以从异或性质的角度来理解直和可加性,我们可以将异或的性质与博弈联系起来:

  • 交换律:任意交换两个子博弈,最终答案不会改变。
  • 结合律:将多个子博弈分组,最终答案不会改变。
  • 自反性:两个相同子博弈会互相抵消,对答案不影响。

利用 SG 函数解释一下上文

在上文的 Nim 游戏取石子中,本质上 \(n\) 堆石子就是 \(n\) 个独立子博弈,且每堆石子的 Grundy 数就是它的石子数。

  • 证明:

    显然 \(SG(0)=0\),每次都可以取大于 \(1\) 个的任何数目,因此就有 \(SG(i)=\mathrm{mex}\{SG(i-j)\mid j\geq 1\}\)。

    于是 \(SG(n)=n\) 得证。

单堆取石子

\(n\) 个石子,Alice 和 Bob 轮流拿,每次可以取走 \(1\) 个或 \(2\) 个,Alice 先手,取走最后一个石子者赢,问 Alice 是否有必胜策略。

该题也可以用 SG 函数解决,令 \(SG(i)\) 为还剩 个石子时的 Grundy 数,那么就有:

令 \(SG(i)\) 为还剩 \(i\) 个石子时的 Grundy 数,那么就有:

\[SG(0)=0 \]

\[SG(1)=\mathrm{mex}\{SG(0)\}=1 \]

\[SG(2)=\mathrm{mex}\{SG(1),SG(0)\}=2 \]

\[SG(3)=\mathrm{mex}\{SG(2),SG(1)\}=0 \]

然后开始长度为 \(3\) 的循环,与上文直接分析结果一致。

Bash Game

这是单堆取石子问题的扩展版。

我们考虑将问题扩展为每次可以取走 \(1\) 和 \(m\) 之间的任何整数。

同理的构造方法,就有:

\[SG(0)=0 \]

\[SG(n)=\mathrm{mex}\{SG(n-i)\mid 1\leq i\leq m \} \]

所有就有 \(n\equiv 0\pmod {m+1}\) 时,\(SG(n)=0\)。

阶梯 Nim

\(n\) 个阶梯,每个阶梯上有 \(a_i\) 个石子,每次取一个阶梯中的至少一个石子,将其移动到下一层阶梯,若已经是第一层,则直接取走,取走最后一个石子者赢。

我们考虑新增一个 \(0\) 号阶梯,将石子挪至 \(0\) 号阶梯上就视为被取走。

注意到如果先手挪动了偶数阶梯上的石子,后手可以将这些石子再向下挪一层,这样直到 \(0\) 层时,一定执行了偶数次操作,就不会造成先后手互换,因此,偶数阶梯上的棋子都不会影响答案。

进一步考虑,偶数阶梯上的石子都不会影响答案,因此我们可以把所有移动到偶数阶梯上的石子视作直接被取走。

于是,奇数阶梯上的石子只要被挪动就相当于消失,该问题转换为了普通的 Nim 游戏。

posted @ 2026-08-28 15:51  will111  阅读(17)  评论(0)    收藏  举报