博弈简介
有很多经典博弈模型,想都看是不可能的,简单列举如下:
- Bash Game
- Fibonacci’s Game(要借助Zeckendorf定理)
- Wythoff Game(要借助Betty定理)
- 还有最重要的Nimm Game,一类最基本的组合游戏(借助SG定理)
所有博弈的基本思想都是一样的,都是先手想要赢,就必须尽力维持在自己操作后,所达到的局面能满足某些特殊的性质,而这些性质是终结态所具有的。这样一直维持这种性质直到终结状态,当前的先手就能赢。
Nimm Game
- 问题:n堆石子,每次在某一堆取任意多,先取完获胜。
- 策略:尽力维持所有堆的剩余量异或和为0。
- 分析:最后的终结态是所有剩余量都是0,显然异或和是0。如果目前的异或和是0,那么取一堆之后肯定改变异或和,异或和变得不是0,因为只能在一堆取。如果当前异或和不是0,那么在剩余量最多的堆里取某个数,一定可以做到剩下的异或和为0。所以如果目前异或和为0,先手一定可以一直维持异或和为0的性质,所以余量异或和不为0是必胜态,否则必胜态。
- 可以看出,如果一个状态的所有出路都通向必胜态,那么它就是必败态。如果存在一个出路通向必败态,那他就是必胜态。
- 必胜和必败针对的是目前状态的先手。
SG函数
每个状态构造一个SG值。这个值是0,则为必败态,否则必胜态。要构造一种函数,使得SG值满足上面那个性质(实际上构造方法还要满足下面一部分的提到的SG定理)。有人想出了一种很精妙的构造方法,如下。
SG函数的定义:
S
G
(
x
)
=
{
0
x=无出路的装态(一般是x=0)
S
G
(
x
)
=
m
e
x
(
{
S
G
(
y
)
∣
y
是
x
的
后
继
}
)
x=其他
SG(x)= \begin{cases} 0& \text{x=无出路的装态(一般是x=0)}\\ SG(x)=mex(\{SG(y) | y是x的后继\}) & \text{x=其他} \end{cases}
SG(x)={0SG(x)=mex({SG(y)∣y是x的后继})x=无出路的装态(一般是x=0)x=其他
其中
m
e
x
(
S
)
mex(S)
mex(S)表示不再S集合中的最小非负整数的数值。
- 为什么这么构造SG函数呢,因为这样可以用数学归纳法证明状态SG值是0,则为必败态,否则必胜态。
SG定理
对于一个组合游戏,可以把游戏分成多个规则统一的局面,分治计算SG值。则总的SG值是各个分治局面的SG值的异或和。 g ( G ) = g ( G 1 ) ⊕ g ( G 2 ) ⊕ . . . ⊕ g ( G n ) g(G)=g(G1)\oplus g(G2)\oplus...\oplus g(Gn) g(G)=g(G1)⊕g(G2)⊕...⊕g(Gn)
SG理论在基本Nimm Game的体现
首先把每个堆看为一个分局面。每堆的SG值就是这堆的剩余量。所以异或和为0说明总SG值为0,SG为0是必败态。所以开始的策略符合SG定理。
- 为什么每一堆的SG值是这堆的剩余量呢。这个可以用第二类数学归纳法证明。因为某个状态可以取任意多个,就可以到比他小的任何状态。而假设前面所有状态的SG值都是他门身,显然能推出当前状态的SG也是本身。
SG定理的理解与证明
SG定理证明和Nimm游戏策略的证明一样。
- 就是把SG值当成剩余量来看。
- 首先各个局面终结态的SG值都是0,异或和自然为0。
- 如果当前SG值异或和不是0,那么一定存在一个非0的SG值。找到那个最大的SG值 m a x max max,从这个分局面的根状态往下走。根据SG值的定义,这个根状态下面的儿子SG值肯定比根小,且从 0 ∼ m a x − 1 0\sim max-1 0∼max−1所有数都出现过。就相当于任意取走一定个数的石子了。所以总能维护SG异或值为0。
- 如果当前异或和不是0,那么必须改变某个SG值,异或和绝对变得不是0。
- 所以只要所有SG值的异或和不为0,就是必胜态,否则必败态。SG定理就证明完了。
PS:以上均为自己的理解,可能不太严谨,弄明白就行。