博弈总结

来源:互联网 发布:物理数据模型转换为sql 编辑:程序博客网 时间:2024/06/16 17:57

Bash's Game(巴什博弈)

【描述】只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取1个,最多取m个,最后取光者得胜。

【策略】如果 n = (m + 1) * r + s (r为任意自然数,sm),即n%(m+1) != 0,则先取者肯定获胜。因为,如果n=(m+1)r + s(r为任意自然数,sm),那么先取者要拿走s个物品,如果后取者拿走k(m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1),以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下(m+1)的倍数,就能最后获胜。

【另一种问法】两个人轮流报数,每次至少报1个,最多报m个,谁能报到n者胜。

【策略】只要给对方留下的报数空间是m+1的倍数,就可以保证获胜。

【变形拓展】减法博弈:有一个由n个石子组成的石子堆,两名玩家轮流从中拿走石子,每次拿走石子的个数只能是集合S(比如S = {1, 3, 4})中的数。拿走最后一枚石子的玩家获胜。

【策略】筛选法,对于一个Px,那么P+Si都是N点(比如x+1x+3x+4),这样用筛选法可以计算出一定范围内所有的P点和N点。

Wythoffs Game (威佐夫博弈)

【描述】所谓威佐夫博弈,是ACM题中常见的组合游戏中的一种,大致上是这样的:

有两堆石子,不妨先认为一堆有 10,另一堆有 15 个,双方轮流取走一些石子,合法的取法有如下两种:

1、在一堆石子中取走任意多颗;

2、在两堆石子中取走相同多的任意颗;

约定取走最后一颗石子的人为赢家,求必胜策略。

【策略】设k为任意正整数,有以下两个函数:

1、m(k) = k * (1 + sqrt(5)) / 2

2、n(k) = m(k) + k

(m(k), n(k))和点(n(k), m(k))都是P点其余都是N点(我并不能证明>_<!

P点的性质】

1、所有自然数都会出现在一个必败点中,且仅会出现在一个必败点中。

证明:m(k)是前面没有出现过的最小自然数,自然与前k-1个必败点中的数字都不同;m(k)>m(k-1),否则违背m(k-1)的选择原则;n(k)=m(k)+k>m(k-1)+(k-1)=n(k-1)>m(k-1),因此n(k)比以往出现的任何数都大,即也没有出现过。又由于m(k)的选择原则,所有自然数都会出现在某个必败点中。

2、规则允许的任意操作可将必败点移动到必胜点。

证明:以必败点(m(k),n(k))为例。若只改变两个数中的一个,另一个数出现在另一个状态中,由于性质1,所有的自然数仅会出现在一个必败点中,所以得到的点一定是必胜点;若同时增加两个数,由于不能改变两数之差,每一个必败点的两个数之差是一一对应的,又有n(k)-m(k)=k,故得到的点也一定是必胜点。

3、一定存在规则允许的某种操作可将必胜点移动到必败点。

证明:以某个必胜点(i,j)为例,其中j>i。因为所有自然数都会出现在某个必败点中,故要么i等于m(k),要么j等于n(k)

i=m(k)j>n(k),可从j中取走j-n(k)个石子到达必败点;

i=m(k)j<n(k),可从两堆同时拿走m(k)-m(j-m(k)),注意此时j-m(k) < n(k)-m(k) < k,从而到达必败点( m(j-m(k))m(j-m(k))+j-m(k))

i>m(k)j=n(k),可从i中取走i-m(k)个石子到达必败点;

i<m(k)j=n(k),需要再分两种情况,因为i一定也出现在某个必败点中,若i=m(l),则从j中拿走j-n(l);若i=n(l),则从j中拿走j-m(l),从而到达必败点(n(l),m(l))

【例题】HDU1527

Ferguson博弈(清空/分割游戏)

【描述】在游戏的开始,第一个盒子中有n枚石子,第二个盒子中有m个石子(n, m > 0)。参与游戏的两名玩家轮流执行这样的操作:清空一个盒子中的石子,然后从另一个盒子中拿若干石子到被清空的盒子中,使得最后两个盒子都不空。当两个盒子中都只有一枚石子时,游戏结束。最后成功执行操作的玩家获胜。

【策略】对于一个位置(x, y)来说,如果x, y中有一个偶数,那么(x, y)N(必胜)位置。如果xy都是奇数,那么(x, y)P位置(必败)。

证明(归纳法):

1、当max(x,y)=2时,即(x,y)=(1,2)或(2,1)或(2,2),先手留下一个2分为(1,1),先手获胜,即当max(x,y)=2时结论成立。

2、假设max(x,y)<k时结论都成立,现证max(x,y)=k时结论成立

若(x,y)中有一个偶数(设为a),先手将另一个清空,把偶数a分为两个奇数bc,由于bc<a 小于等于 k,即max(b,c)<k,由假设,在(b,c)位置上后手作为新先手必败,故先手胜

(x,y)都为奇数,先手只能保留一个奇数并将其分解为一奇a一偶b,由于max(a,b)<max(x,y)=k,由假设,在(a,b)位置上后手作为新先手必胜,故先手败

Fibonaccis Game (斐波那契博弈)

【描述】有一堆个数为 的石子,游戏双方轮流取石子,满足:

1. 先手不能在第一次把所有的石子取完;

2. 之后每次可以取的石子数介于 到对手刚取的石子数的 倍之间(包含 和对手刚取的石子数的 倍)。

约定取走最后一个石子的人为赢家,求必败态。

【策略】必败态构成Fibonacci数列

证明:去问数学大神吧^_<

尼姆博弈(Nimm's Game)

【描述】有3堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取1个,多者不限,最后取光者得胜。

【拓展】有n堆若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

【策略】状态(x1, x2, x3, , xn)P状态当且仅当x1 xor x2 xor x3 xor … xor xn =0。这样的操作也称为Nim(Nim Sum) 

如果每一种大小的子堆的个数都是偶数,我们就称Nim博弈是平衡的,而对应位相加是偶数的称为平衡位,否则称为非平衡位。因此,Nim博弈是平衡的,当且仅当:

as +bs + … + ms 是偶数,即as XOR bs XOR … XOR ms  = 0

……

a1 +b1 + … + m1 是偶数,即a1 XOR b1 XOR … XOR m1 = 0

a0 +b0 + … + m0是偶数,即a0 XOR b0 XOR … XOR m0 = 0

必胜操作:先手面对非平衡局面时,在个数为x[i]的那一堆里取出x[i] - x[1]^x[1]^x[i-1]^x[i+1]^x[n]个物品,让对方面对平衡局面即可。

下面应用此获胜策略来考虑4堆的Nim博弈。其中各堆的大小分别为791215枚硬币。用二进制表示各数分别为:0111100111001111。于是可得到如下一表:

23 = 8

22 = 4

21 = 2

20 = 1

大小为7的堆

0

1

1

1

大小为9的堆

1

0

0

1

大小为12的堆

1

1

0

0

大小为15的堆

1

1

1

1

具体做法有多种,先手可以从大小为12的堆中取走11枚硬币,使得游戏达到平衡(如下表)

 

23 = 8

22 = 4

21 = 2

20 = 1

大小为7的堆

0

1

1

1

大小为9的堆

1

0

0

1

大小为12的堆

0

0

0

1

大小为15的堆

1

1

1

1

之后,无论后手如何取子,先手在取子后仍使得游戏达到平衡。

同样的道理,先手也可以选择大小为9的堆并取走5枚硬币而剩下4枚,或者,先手从大小为15的堆中取走13枚而留下2枚。

【再拓展】如果规定最后取光者输,情况是怎样的?

【策略】和上面的一样。

原因:首先按照上面的规则一样的策略进行,直到只有一堆物品的个数大于1,其他堆均为1。在这样的情况下,只需要把堆x中的物品拿得只剩1个物品或者拿完,让对手面临奇数堆物品,这奇数堆物品每堆恰好1个物品。这样的状态显然是必败的。由于你每次操作后需要保证Nim和为0,因此不可能在你操作后首次出现“恰好有一个物品数大于1的堆”。新游戏得到了完美解决。

SG函数与SG定理

【一个一般的游戏】给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移动者判负。

【引例】在一行中有n个木瓶,你和你的朋友轮流用保龄球去打这些木瓶,由于你们都是高手,每一次都可以准确的击倒一个或相邻的两个木瓶,谁击倒最后一个剩余的木瓶谁将获得胜利。如果由你先打,请你分析,你应该采取什么策略来确保赢得胜利?

分析:为了看清楚问题的本质,用另一种方式来描述这个游戏。最开始有一堆石子(n个),每一次你可以进行以下四种操作中的一种:

1. 从中取出一颗石子;

2. 从中取出两颗石子;

3. 从一堆中取出一颗石子,并且将这一堆中余下的石子任意分成两堆(每堆至少一颗);

4. 从一堆中取出两颗石子,并且将这一堆中余下的石子任意分成两堆(每堆至少一颗)。

这四种操作,实际上就依次对应于原来游戏中的以下四种击倒法:

1. 击倒一段连续的木瓶中最靠边的一个;

2. 击倒一段连续的木瓶中最靠边的连续两个;

3. 击倒一段连续的木瓶中不靠边的一个;

4. 击倒一段连续的木瓶中不靠边的连续两个。

【SG函数】任何一个公平组合游戏都可以通过把每个局面看成一个顶点,对每个局面和它的子局面连一条有向边来抽象成这个“有向图游戏”。下面我们就在有向无环图的顶点上定义Sprague-Garundy函数,简称SG函数

首先定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数。例如集合N={0,1,2,3,4,5,6},则mex{0,1,2,4}=3mex{2,3,5}=0mex{}=0

函数g(x)=mex{ g(y) | yx的后继 },或者表示为:g (X)= min{n| nN, n>=0,n≠ for y, yx的后继},形象的说就是x的g函数值为x的后继点的SG值中没有出现过的最小值。

以引例为例,如果当前局面被分成了M堆,对某一堆来说:

显然,SG(0)=0

剩余1个时,只能取到0个,而SG(0)=0,所以SG(1)=1

剩余2个时,可以取到01,其中SG(0)=0SG(1)=1,所以SG(2)=2(因为mex{0,1}=2)。

SG函数的性质】

1、所有的终点(先手必败态),也就是没有出边的顶点,其SG值为0,因为它的后继集合是空集;

2、对于一个g(x)=0的顶点x,它的所有后继y都满足g(y)!=0

3、对于一个g(x)!=0的顶点,必定存在一个后继y满足g(y)=0

【引理】对于任意的局面x,若g(x)=0xP局面(必败态),否则xN局面(必胜态)。

【复杂一点】有向图上并不是只有一枚棋子,而是有n枚棋子,每次可以任选一颗进行移动,这时,怎样找到必胜策略呢?

【Sprague-Grundy定理】游戏和的SG函数等于各子游戏SG函数的Nim和,即:设gi(x)GiSG函数(1 ≤ ≤ n),则G = G1+ G2+ … + GnSG函数g( x1, x2, , xn ) = g1(x1)⊕ g2(x2) ⊕ … ⊕ gn(xn)(其中⊕为异或运算)。

例如引例中的一堆石子,剩余3个时,我们可以把局面变成12或两堆均为1,其中SG(1)=1SG(2)=2SG(1, 1)=SG(1) ⊕ SG(1)=0,所以SG(3)=mex{0,1,2}=3。同理,SG(4)可分解为{SG(2), SG(3),SG(2)SG(1), SG(1)SG(1)} ={2,3,3,0},所以SG(4)=1

【用途】由Sprague-Grundy定理可知,对于复杂的公平组合博弈,如果我们可以将它们分解成若干个子游戏的联合,就可以通过求解子游戏的SG函数,方便地求得原游戏的SG函数,从而快速判断胜负情况:SG值为0的状态为必败状态(P态),SG值非0的状态为必胜状态(N态)。

0 0
原创粉丝点击