浅谈博弈论

· · 算法·理论

前言

前几天与 fyh 谈了谈博弈论,感觉挺有意思的,决定学习一下,也分享一下收获。

海盗分金币

海盗分金币是博弈论里一个简单的经典游戏,需要一定的思维。

假设现在有五个海盗(P1, P2, P3, P4, P5),他们都极度聪明、理性、自私,优先考虑自己的生存,再考虑将金币最大化,且如果收益相同,海盗倾向于杀死前面的人。

他们得到了 100 枚金币,需要指定分配方案。规则如下:

1.海盗们按照顺序,一个接一个提出分配金币方案;

2.如果一个海盗的建议有百分之五十及以上的人同意,则这个方案通过,否则他将被杀死。

为了解决这个问题,我们可以从最简单的开始考虑。

1.一个海盗(P5)

这个海盗可以将所有金币独吞,此时 P5 最大收益为 100

2.两个海盗(P4,P5)

P4 可以将金币独吞,此时 P5 反抗也没有用,因此 P4 最大收益为 100

3.三个海盗(P3,P4,P5)

因为 P3 知道如果他死了那么 P5 一个金币也得不到,因此他可以给 P5 \ 1 个金币,那么 P5 就会支持他,因此 P3 的最大收益是 99

4.四个海盗(P2,P3,P4,P5)

因为 P2 知道他死了后 P4 没有金币,所以他可以给 P4 \ 1 个金币收买人心,所以 P2 的最大收益是 99

5.五个海盗(P1,P2,P3,P4,P5)

因为 P1 知道他死了后 P3 和 P5 都没有金币,因此他可以分别给他们 1 枚金币,于是 P1 的最大收益是 98

至此我们便解决了这个简单的问题。

巴什博弈

巴什博弈是最基础的取石子游戏之一,其规则如下:

1.最开始有一堆石子,总共 n 个;

2.玩家轮流取石子,每次至少取 1 个,至多取 m 个;

3.取走最后一颗石子的胜。

必胜策略

n \bmod (m + 1) = 0 时,后手有必胜策略;

n \bmod (m + 1) \ne 0 时,先手有必胜策略。

证明

n \bmod (m + 1) \ne 0 时,先手可以取 n \bmod (m + 1) 个石子,然后无论后手取 x 个,先手都可以取 m + 1 - x 个石子,直至先手胜利,反之亦然。

Nim游戏

Nim 游戏是组合数学和博弈论中的经典问题,可以看作是多堆的巴什博弈。它的规则简单,但蕴含数学原理。

游戏规则

1.初始状态:n 堆石子,每堆分别有 p_1,p_2,\dots,p_n 个石子; 2.玩家操作:轮流拿石子,每次必须从 n 堆中的任意一堆中拿走至少 1 个石子(可以拿完); 3.胜负判定:谁拿走最后一颗石子谁获胜。

解决方法

我们可以通过“Nim 和”来判断先手是否有必胜策略。

Nim 和

“Nim 和”其实就是所有石子数量的异或和。

异或就是一个二进制中的运算,在异或中相同位为 0,不同位为 1,通常计为 \operatorname{xor} ,如 4\operatorname{xor}5 = (100)_2\operatorname{xor}(101)_2 = (001)_2 = 1

我们记“Nim 和”为 S,则 S = p_1\operatorname{xor}p_2\operatorname{xor}\dots\operatorname{xor}p_n

于是我们得到这个结论:

1.当 S\ne0 时先手有必胜策略;

2.当 S=0 时后手有必胜策略。

下面我们证明这个结论。

证明

假设此时 S=0,则根据异或性质,无论怎么选,结果都是 S\ne0,因为当选走了某堆中的某些石子时,设选了第 i 堆 中的 x 个,则 S=p_1\operatorname{xor}\dots\operatorname{xor}(p_i-x)\operatorname{xor}\dots\operatorname{xor}p_n, 所以其中二进制中每位相同的数字的数量的奇偶性一定会发生变化,即新“Nim 和” S\ '\ne S,因此 S\ '\ne0

而若此时 S\ne0,则我们可以选出一堆石子满足条件 p_i\operatorname{xor}S \le p_i,然后取走里面 p_i-p_i\operatorname{xor}S 个石子,于是新“Nim 和” S\ '= S\operatorname{xor}p_i\operatorname{xor}(p_i-(p_i-p_i\operatorname{xor}S))=S\operatorname{xor}p_i\operatorname{xor}p_i\operatorname{xor}S=0

因此若 S\ne0 当先手按上文方案取石子时便可使 S=0,而后手无论怎么选都会使 S\ne0,于是先手有必胜策略,反之亦然。

于是我们便证明了“Nim 和”可以判断先手、后手有无必胜策略。

SG函数

定义

对于一个游戏状态 x,其 SG 函数的值的定义为:

SG(x)=\operatorname{mex}\{SG(y)\mid x\to y\}

其中 \operatorname{mex} 表示集合中最小的未出现过的非负整数,x\to y 表示 yx 的后继。

性质

z 满足条件 z=x+y 时,SG(z)=SG(x)\operatorname{xor}SG(y),注意,这里的 x+y 表示 xy 的组合,即在此处意义下 2+4=(2,4)

于是由结合律推广,SG(x)=SG(x_1+x_2+\dots x_n)=SG(x_1)\operatorname{xor}\dots\operatorname{xor}SG(x_n)

下面我们证明这个结论。

证明

由上文,SG(z)=\operatorname{mex}\{SG(w)\mid z\to w\},又因为 z = x+y,z\to w,所以 w = x+ uw= y+v,于是得到 SG(z)=SG(x+y)=\operatorname{mex}\{\{SG(x+u)\mid y\to u\}\,\cup\,\{SG(y+v)\mid x\to v\}\}

现在假设我们已经得到 SG(x+u)=SG(x)\operatorname{xor}SG(u)SG(y+v)=SG(y)\operatorname{xor}SG(v),我们便可以推出 SG(x+y) = SG(x)\operatorname{xor}SG(y),原因是我们知道当 SG(x)=0SG(y)=0SG(z)=0

下面给出证明方法。

我们令 X=SG(x)Y=SG(y)A=\{SG(x+u)\mid y\to u\}B=\{SG(y+v)\mid x\to v\}

于是我们需要证明:

SG(x+y)=\operatorname{mex}\{A\,\cup\,B\}=X\operatorname{xor}Y

即需证明:

1.X\operatorname{xor}Y\notin A\,\cup\,B

2.对于所有 W < X\operatorname{xor} Y都有 W\in A\,\cup\,B

第一部分

假设 X\operatorname{xor}Y\in A,则存在 u 使得 SG(x+u)=X\operatorname{xor}Y。因为 y\to u,所以 SG(u)\ne SG(y)。但因为 SG(x + u)=SG(x)\operatorname{xor}SG(u),所以:

SG(u)\operatorname{xor}X=X\operatorname{xor}Y\Longrightarrow Y=SG(u)

Y\ne SG(u) 矛盾,因此 X \operatorname{xor}Y\notin A

同理可得 X\operatorname{xor}Y\notin B,所以 X\operatorname{xor}Y\notin A\,\cup\,B

第二部分

W<X\operatorname{xor}Y,我们需要证明 W\in A\,\cup\,B

令:

Z=X\operatorname{xor}Y\operatorname{xor}W

因为 W < X\operatorname{xor}Y,所以 Z\ne0

所以 Z\operatorname{xor}X=W\operatorname{xor}Y<X,即 x 存在某个后继 v 使得:

SG(v)=W\operatorname{xor}Y

于是:

SG(y + v)=SG(v)\operatorname{xor}SG(y)=(W\operatorname{xor}Y)\operatorname{xor}Y=W

所以 W\in B

因此我们便证明了上面两个条件,即:

SG(x+y)=SG(x)\operatorname{xor}SG(y)

证毕。

结语

信息竞赛接触的博弈论并不多,基本就是这些,其他的下次再写吧!