博弈论
巴什博弈(Bash Game)
只有一堆
n
n
n个物品,两个人轮流从这堆物品中取,规定每次至少取一个,最多取
m
m
m个,最后取光者得胜。
如果
n
=
(
m
+
1
)
r
+
s
,
r
n=(m+1)r+s,r
n=(m+1)r+s,r为任意自然数,
s
≤
m
s\le m
s≤m,那么先取者拿
s
s
s个,后取者拿
k
(
≤
m
)
k(\le m)
k(≤m)个,那么先取者再拿走
m
+
1
−
k
m+1-k
m+1−k个,剩下
(
m
+
1
)
(
r
−
1
)
(m+1)(r-1)
(m+1)(r−1)个,那么先取者必胜当且仅当
s
≠
0
s\ne 0
s=0。或者说当
n
%
(
m
+
1
)
=
=
0
n\%(m+1)==0
n%(m+1)==0时,后手必胜,否则,先手必胜。
反巴什博弈
最后取光者败;
等价于谁先取完
n
−
1
n-1
n−1个物品,谁胜。
当
(
n
−
1
)
%
(
m
+
1
)
=
=
0
(n-1)\%(m+1)==0
(n−1)%(m+1)==0时,后手必胜,否则,先手必胜。
威佐夫博弈(Wythoff Game)
由两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
我们用
(
a
[
k
]
,
b
[
k
]
)
(a[k],b[k])
(a[k],b[k])表示一个局势,如果一个人面对
(
0
,
0
)
(0,0)
(0,0),那他已经输了,称这种必败态为奇异局势。前几个奇异局势是:
(
0
,
0
)
,
(
1
,
2
)
,
(
3
,
5
)
,
(
4
,
7
)
,
(
6
,
10
)
,
(
8
,
13
)
,
(
9
,
15
)
,
(
11
,
18
)
,
(
12
,
20
)
(0,0),(1,2),(3,5),(4,7),(6,10),(8,13),(9,15),(11,18),(12,20)
(0,0),(1,2),(3,5),(4,7),(6,10),(8,13),(9,15),(11,18),(12,20)。
可以观察到
a
[
0
]
=
b
[
0
]
=
0
a[0]=b[0]=0
a[0]=b[0]=0,
a
[
k
]
a[k]
a[k]是前面未出现过的最小自然数,
b
[
k
]
=
a
[
k
]
+
k
,
k
b[k]=a[k]+k,k
b[k]=a[k]+k,k从0开始。
奇异局势有如下三个性质:
1、任何自然数都包含在一个且仅有一个奇异局势中。
2、任意操作都可将奇异局势变为非奇异局势。
3、采用适当的方法,可以将非奇异局势变为奇异局势。
结论:面对非奇异局势,先手必胜;否则,面对奇异局势,后手必胜。
那么怎么判断一个局势
(
a
,
b
)
(a,b)
(a,b)是否是奇异局势呢?我们有如下公式:
a
[
k
]
=
⌊
k
1
+
5
2
⌋
,
b
[
k
]
=
a
[
k
]
+
k
,
k
=
0
,
1
,
2
,
…
…
,
n
a[k]=\lfloor{k\frac{1+\sqrt{5}}{2}}\rfloor,b[k]=a[k]+k,k=0,1,2,……,n
a[k]=⌊k21+5⌋,b[k]=a[k]+k,k=0,1,2,……,n
尼姆博弈
任意堆石子,每次可以取任意的石子,至少一个(不能不取),最后一个拿光石子的人胜利。
每个石子堆的
S
G
SG
SG值就是
a
[
i
]
a[i]
a[i],所以结论为:
若
a
[
1
]
⊕
a
[
2
]
⊕
…
⊕
a
[
n
]
!
=
0
a[1]\oplus a[2]\oplus…\oplus a[n]!=0
a[1]⊕a[2]⊕…⊕a[n]!=0,先手必胜;否则后手必胜。
反尼姆博弈
先取完者判输:
结论:统计一下所有数大于1的个数,并将所有数字异或一遍,若大于1的个数为0&&异或和为0||大于1的个数大于0&&异或和不为0,则先手胜,否则后手胜。
其他变形
1、限制最多取的个数,例如第
i
i
i堆石子共有
m
m
m个,最多取
r
r
r个,先对
m
=
m
%
(
r
+
1
)
m=m\%(r+1)
m=m%(r+1);然后再进行异或求和;
2、先手的人想赢,第一步有多少种选择。当先手必输时,很显然是0。如果先手赢,那么先手必须努力创造奇异局势,即让其剩余的石子量异或和为0。我们首先求出所有堆异或后的值
s
u
m
sum
sum,再用这个值去对每一个堆进行异或,令
r
e
s
=
x
1
⊕
s
u
m
res=x_1\oplus sum
res=x1⊕sum,(
s
u
m
sum
sum是所有堆的异或和)。如果
r
e
s
<
x
1
res<x_1
res<x1的话,当前玩家就从
x
1
x_1
x1中取走
(
x
1
−
r
e
s
)
(x_1-res)
(x1−res)个,使
x
1
x_1
x1乘下
r
e
s
res
res这样必然导致所有的堆的异或值为0,也就是必败点(达到奇异局势),这就是一种方案。遍历每一个堆,进行上面的判断就可以得到总的方案数。
斐波那契博弈
有一堆个数为
n
n
n的石子,游戏双方轮流取石子,满足:
(1)先手不能在第一次把所有的石子取完;
(2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)
取走最后一个石子的人为赢家,求必败态。
结论:先手必胜当且仅当
n
n
n不是Fibonacci数,或者说,必败态构成Fibonacci数列
Zeckendorf定理:任何正整数可以表示为若干个不连续的Fibonacci数之和。
SG函数
必胜点和必败点的概念:
P点:必败点;
N点:必胜点;
性质:
1、所有终结点是必败点P;
2、从任何必胜点N操作,至少有一种方式可以进入必败点P;
3、无论如何操作,必败点P都只能进入必胜点N。
SG定理:
游戏和的SG函数等于各个游戏SG函数的Nim和。
SG函数:
首先定义
m
e
x
mex
mex运算,表示最小的不属于这个集合的非负整数。例如
m
e
x
{
0
,
1
,
2
,
4
}
=
3
mex\{0,1,2,4\}=3
mex{0,1,2,4}=3、
m
e
x
{
2
,
3
,
5
}
=
0
mex\{2,3,5\}=0
mex{2,3,5}=0、
m
e
x
{
}
=
0
mex\{\}=0
mex{}=0
对于任意状态
x
x
x,定义
S
G
(
x
)
=
m
e
x
(
S
)
SG(x)=mex(S)
SG(x)=mex(S),其中
S
S
S是
x
x
x后继状态的SG函数值的集合。如
x
x
x有三个后继状态分别为
S
G
(
a
)
,
S
G
(
b
)
,
S
G
(
c
)
,
SG(a),SG(b),SG(c),
SG(a),SG(b),SG(c),那么
S
G
(
x
)
=
m
e
x
{
S
G
(
a
)
,
S
G
(
b
)
,
S
G
(
c
)
}
SG(x)=mex\{SG(a),SG(b),SG(c)\}
SG(x)=mex{SG(a),SG(b),SG(c)}。这样集合
S
S
S的终态必然是空集,所以
S
G
SG
SG函数的终态为
S
G
(
x
)
=
0
SG(x)=0
SG(x)=0,当且仅当
x
x
x为必败点P时。