博弈论

Nim游戏

石子模型 地上有\(n\)堆石子,第\(i\)堆石子的数量为\(a_i\),甲乙二人交替取石子,每次只能从任意\(1\)堆中取,每次至少取\(1\)个,最后没有棋子可取的人输,问是否存在先手必胜的策略

结论 先手必胜态$a_1\oplus a_2 \oplus \dots \oplus a_n\ne 0 \(;先手必败态\)a_1\oplus a_2 \oplus \dots \oplus a_n = 0 $

定理1 必胜态的后继状态至少存在一个必败态

证明:设\(a_1\oplus a_2 \oplus \dots \oplus a_n=s\ne 0\)\(s\)的二进制位为\(1\)的最高位为第\(k\)位,则\(a_1\sim a_n\)中一定有奇数个数,其二进制位第\(k\)位为\(1\),此时选择一个\(a_i\),用\(a_i\oplus s\)替换表达式中的\(a_i\),有

\[a_1\oplus a_2 \oplus \dots \oplus a_i\oplus s\oplus a_{i+1} \oplus \dots \oplus a_n=s\oplus s=0 \]

为必败态,因为\(^1a_i\oplus s <a_i\),这是合法的状态转移

[1]因为\(a_i\)的某位\((k\)以下\()\)会从\(1\)变成\(0\)

定理2 必败态的后继状态均为必胜态

证明:设$a_1\oplus a_2 \oplus \dots \oplus a_n = 0 $,则相同位上\(1\)的个数均为偶数。此时,无论减少哪个数,都会使得异或和不为零

必胜态与必败态交替出现,末态\((a_1=a_2=\dots=a_n=0)\)为必败态

如何取胜 如果先手必胜,第一次应该如何取

for(int i = 1 ; i <= n ; i ++)
{    
    if((a[i]^s) >= a[i]) continue; //没法取
    a[i] = a[i]^s;
    break;
}

台阶模型\(n\)级台阶,第\(i\)级台阶上摆放\(a_i\)个石子,每次操作可以将第\(k\)级台阶上的石子移动一些到第\(k-1\)级台阶上,移动到第\(0\)级台阶(地面)上的石子不能再移动,如果没有石子可以移动,则输掉比赛,问是否先手必胜

结论 若奇数台阶上\(a_1\oplus a_3 \oplus \cdots \oplus a_{2k-1}\ne 0\),则先手必胜,反之,先手必败

有向图游戏

模型 给定一个有向无环图(DAG),图中只有一个起点,在起点上放一个棋子,两个玩家轮流沿着有向边推动棋子,每次走一步,不能走的玩家失败

n1

\(mex\)运算 \(mex(S)\)表示不属于\(S\)中的最小非负整数,规范化的,有

\[mex(S)=\min\{x\}(x\in \N ,x\notin S) \]

例如\(mex(\{0,1,2\})=3\)\(mex(\{1,2\})=0\),特别的,\(mex(\phi)=0\)

\(SG\)函数 设状态\(x\)\(k\)直接后继:\(y_1,y_2,\cdots,y_k\),则有

\[SG(x)=mex(\{SG(y_1),SG(y_2),\cdots,SG(y_k)\}) \]

这里的状态指的是棋子位置

\(SG\)定理\(n\)个有向图游戏组成的组合游戏,设起点分别为\(s_1,s_2,\dots ,s_n\),当

\[\bigoplus_{i=1}^nSG(s_i)\ne 0 \]

时,先手必胜;反之,先手必败

我们才有数学归纳法尝试证明:

(1)所有子游戏都处于终点状态,此时\(SG(s_i)=0(i=1,2,\dots,n)\),有

\[\bigoplus_{i=1}^nSG(s_i) = 0 \]

\(^2\)先手必败态,且无后继状态

(2)假设:

  1. 对于所有\(\bigoplus_{i=1}^nSG(s_i) = 0\)的状态,都是必败态,先手无论怎么操作,都会进入\(\bigoplus_{i=1}^nSG(s_i) \ne 0\)的状态
  2. 对于所有\(\bigoplus_{i=1}^nSG(s_i) \ne 0\)的状态,先手都可以操作进入\(\bigoplus_{i=1}^nSG(s_i) = 0\)的状态

(3)证明

这就是Nim游戏分析中的定理1和定理2,我们来仿照其证明

假设1 设当前异或和

\[S=\bigoplus_{i=1}^nSG(s_i) \ne 0 \]

对于\(S\)的二进制表示\((S^{(n)}表示第n位)\),设其非零最高位为\(k\),形式化的有

\[S^{(k)}=1且\forall i>k,S^{(i)}=0 \]

显然,存在\(2p-1(p>0)\)\(SG(s_i)\),使得

\[\bigoplus_{j=1}^{2p-1}SG(s_{i_j}^{(k)})=1 \]

从中取\(i=i_{j_0}\),令\(t=SG(s_{i_{j_0}})\oplus S\),因为\(t^{(k)}=0\),且\(\forall i >k,t^{(i)}=SG^{(i)}(s_{i_{j_0}})\),所以

\[t<SG(s_{i_{j_0}}) \]

根据\(SG\)函数的定义

\[SG(s_{i_{j_0}})=mex\{SG(y)|y是s_{i_{j_0}}的后继\} \]

由于\(t<SG(s_{i_{j_0}})\),因此\(t\in \{SG(y)|y是s_{i_{j_0}}的后继\}\),因此存在\(s_{i_{j_0}}\)的后继\(s'\),使得

\[SG(s')=t \]

因此先手一定可以选择\(s'\)状态,而新的状态

\[\bigoplus_{j\in\{1,2,\dots,n\}-\{i_{j_0}\}}SG(s_j) \oplus SG(s')\\=\bigoplus_{j\in\{1,2,\dots,n\}-\{i_{j_0}\}}SG(s_j) \oplus SG(i_{j_0})\oplus S\\ =S\oplus S=0 \]

到达必败态

假设2 设当前异或和

\[S=\bigoplus_{i=1}^nSG(s_i) = 0 \]

设其中任意一个子状态\(s_j\to s_j'\),假设

\[(\bigoplus_{i\in\{1,2,\dots,n\}-\{j\}}SG(s_i))\oplus SG(s_j)=0 \]

则前后状态相等,有

\[SG(s_1)\oplus \cdots \oplus SG(s_j)\oplus \cdots \oplus SG(s_n)=SG(s_1)\oplus \cdots \oplus SG(s_j')\oplus \cdots \oplus SG(s_n) \]

根据异或的运算性质,可得

\[SG(s_j)=SG(s_j') \]

但是\(s_j'\)\(s_j\)的后继,根据\(SG\)函数的定义,\(SG(s_j')\)不会存在于后继\(SG\)取值集合中,否则\(mex\)会取更小的数,与假设矛盾,因此必有

\[SG(s_1)\oplus \cdots \oplus SG(s_j)\oplus \cdots \oplus SG(s_n)\ne SG(s_1)\oplus \cdots \oplus SG(s_j')\oplus \cdots \oplus SG(s_n) \]

\[(\bigoplus_{i\in\{1,2,\dots,n\}-\{j\}}SG(s_i))\oplus SG(s_j)\ne0 \]

均为必胜态

n3

[2]这里有一个理解上的误区,必败态是先手选择进入的,留下必败态给后手,\((0,0,\dots,0)\)是先手选择进入的,留给对手的自然是失败

posted @ 2025-10-06 16:06  _P_D_X  阅读(8)  评论(0)    收藏  举报