博弈知识点整理
博弈满足的条件:
玩家只有两个人,轮流做出决策
游戏的状态集有限,保证游戏在有限步后结束,这样必然会产生不能操作者,其输
对任何一种局面,胜负只决定于局面本身,而与轮到哪位选手无关
一、巴什博弈(Bash Game)
- 问题模型:
只有一堆 n 个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m 个,最后取光者得胜。 - 解决思路:
当 n=m+1 时,由于一次最多只能取 m 个,所以无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜,所以当一方面对的局势是n 时,其面临的是必败的局势。所以当 n=(m+1)∗r+s ,( r 为任意自然数,s≤m )时,如果先取者要拿走 s 个物品,如果后取者拿走x(x≤m) 个,那么先取者再拿走 m+1−k 个,结果剩下 (m+1)(r−1) 个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下 (m+1) 的倍数,就能最后获胜。 - 变形:
条件不变, 改为最后去光的人输。 - 解决思路:
结论:当 (n−1)%(m+1)==0 时后手胜利。
二、尼姆博弈(Nim)
- 题目类型:
有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。 - 解决思路:
用 (a,b,c) 表示某种局势,显证 (0,0,0) 是第一种奇异局势,无论谁面对奇异局势,都必然失败。第二种奇异局势是 (0,n,n) ,只要与对手拿走一样多的物品,最后都将导致 (0,0,0) 。 根据 (0,n,n) , 我们可一得到a^b^c == 0 为必败状态。
证明a^b^c != 0为必胜
拓展到n个数
三、约数博弈:
- 题目类型:
甲乙两个人玩一个博弈游戏。游戏初始状态包含1-n, 这n个正整数。
甲乙两个人轮流玩这个游戏。每轮游戏中,游戏者任意选择一个还存在的数,然后删掉它和它所有的约数。
谁最后没有数可删,谁就输掉了。 - 解决思路:
先手有必胜策略。这个证明不是构造性的,也就是说没有给出先手怎么下才能赢。反证法:假设后手B有必胜策略,而先手A第一次取数1,B取了一个数x是必胜策略,然而A完全可以第一次取x(同时也必取了1)是必胜策略。故B必没有必胜策略。 - 变形:
考虑一个新的规则“不准写数字1”。如果加上这个新规则后先写者有必胜策略,那么这个策略对于原游戏同样适用(因为1是所有数的约数,本来就不能写);如果在新规则下后写者必胜,则原游戏中的先写者写下数字1,然后他就变成了新规则下的后写者。于是不管怎么样,先写者总是有必胜策略。
四、 斐波那契数列博弈(Fibonacci)
- 问题类型:
有一堆个数为n的石子,游戏双方轮流取石子,满足:
- 先手不能在第一次把所有的石子取完;
- 之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。 约定取走最后一个石子的人为赢家。
- 解决思路:
当n为Fibonacci数时,先手必败。即存在先手的必败态当且仅当石头个数为Fibonacci数。 - 证明:
用第二数学归纳法证明:
- 为了方便,我们将
n
记为
f[i] 。当 i=2 时,先手只能取 1 颗,显然必败,结论成立。 - 假设当
i<=k 时,结论成立。 则当 i=k+1 时, f[i]=f[k]+f[k−1] 。
则我们可以把这一堆石子看成两堆,简称 k 堆和k−1 堆。
- (一定可以看成两堆,因为假如先手第一次取的石子数大于或等于 f[k−1] ,则后手可以直接取完 f[k] ,因为 f[k]<2∗f[k−1] )
- 对于
k−1
堆,由假设可知,不论先手怎样取,后手总能取到最后一颗。下面我们分析一下后手最后取的石子数x的情况:
- 如果先手第一次取的石子数 y>=f[k−1]3 ,则这小堆所剩的石子数小于 2y ,即后手可以直接取完,此时 x=f[k−1]−y ,则 x<=23∗f[k−1] 。
- 我们来比较一下 23∗f[k−1] 与 12∗f[k] 的大小。即 4∗f[k−1] 与 3∗f[k] 的大小,对两值作差后不难得出,后者大。
- 所以我们得到,
x<12∗f[k]
。即后手取完
k−1
堆后,先手不能一下取完
k
堆,所以游戏规则没有改变,则由假设可知,对于
k 堆,后手仍能取到最后一颗,所以后手必胜。 即 i=k+1 时,结论依然成立。
- 那么,当n不是Fibonacci数的时候,情况又是怎样的呢?
- 这里需要借助“Zeckendorf定理”(齐肯多夫定理):任何正整数可以表示为若干个不连续的Fibonacci数之和。
- 分解的时候,要取尽量大的Fibonacci数。
比如分解85:85在55和89之间,于是可以写成85=55+30,然后继续分解30,30在21和34之间,所以可以写成30=21+9,依此类推,最后分解成85=55+21+8+1。
- 则我们可以把
n
写成
n=f[a1]+f[a2]+……+f[ap]。(a1>a2>……>ap) - 我们令先手先取完
f[ap]
,即最小的这一堆。由于各个
f
之间不连续,则
ap−1>ap+1 ,则有 f[ap−1]>2∗f[ap] 。即后手只能取 f[ap−1] 这一堆,且不能一次取完。 - 此时后手相当于面临这个子游戏(只有 f[ap−1] 这一堆石子,且后手先取)的必败态,即先手一定可以取到这一堆的最后一颗石子。
- 同理可知,对于以后的每一堆,先手都可以取到这一堆的最后一颗石子,从而获得游戏的胜利。
- 为了方便,我们将
n
记为
威佐夫博奕
五、公平组合博弈(Impartial Combinatori Games)
- 定义:
(1)两人参与。
(2)游戏局面的状态集合是有限。
(3)对于同一个局面,两个游戏者的可操作集合完全相同
(4)游戏者轮流进行游戏。
(5)当无法进行操作时游戏结束,此时不能进行操作的一方算输。
(6)无论游戏如何进行,总可以在有限步数之内结束. - 模型:给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移动者判负。事实上,这个游戏可以认为是所有公平组合游戏(Impartial Combinatori Games)的抽象模型。其实,任何一个ICG都可以通过把每个局势看成一个顶点,对每个局势和它的子局势连一条有向边来抽象成这个“有向图游戏”。
- 一个状态是必败状态当且仅当他的所有后继状态都是必胜状态
- 一个状态是必胜状态当且仅当他至少有一个后继点是必败状态
- Sprague-Grudy定理 (SG函数):
- 令 N={0,1,2,3,...} 为自然数的集合。Sprague-Grundy 函数给游戏中的每个状态分配了一个自然数。结点v的Grundy值等于没有在v的后继的Grundy值中出现的最小自然数.
- 形式上:给定一个有限子集 S⊂N ,令mex S(最小排斥值)为没有出现在S中的最小自然数。定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数。例如 mex{0,1,2,4}=3、mex{2,3,5}=0、mex{}=0 。
- 对于一个给定的有向无环图,定义关于图的每个顶点的Sprague-Garundy函数g如下: g(x)=mex{g(y)|y是x的后继} 。
- 性质:
- (1)所有的终结点所对应的顶点,其SG值为 0 ,因为它的后继集合是空集——所有终结点是必败点(P点)。
- (2)对于一个
g(x)=0 的顶点 x ,它的所有后继y 都满足 g(y)!=0 ——无论如何操作,从必败点(P点)都只能进入必胜点(N点)//对手走完又只能把N留给我们。 - (3)对于一个 g(x)!=0 的顶点,必定存在一个后继点y满足 g(y)=0 ——从任何必胜点(N点)操作,至少有一种方法可以进入必败点(P点)//就是那种我们要走的方法。