基础博弈【理解】

来源:互联网 发布:手机视频分享网站源码 编辑:程序博客网 时间:2024/06/10 21:07

这里的博弈,即两个人轮流进行决策的非合作博弈,并且两人都使用最优策略来获取胜利,遵循相同的规则且均不会出现失误, 博弈的次数是有限的。


1.巴什博弈(Bash Game)

只有一堆n块石子,两个人轮流取石子,规定每次最少取1个,最多取m个,最终先取完者获胜。通常来想,如果n=m+1,那么无论先取者拿走多少个,后取者都能一次拿走剩余的物品,后取者胜利。

(1). 如果n = (m+1) * r,(r为任意正整数),先取者拿走k块石子,无论k为多少,后取者只要取(m+1-k),则后取者必胜。

(2). 如果n = (m+1) * r + s,(r为任意正整数,s<=m), 先取者拿走s块石子【给对手留下了(m+1)的倍数,相当于交换了先后顺序】后取者拿走k块,先取者拿走(m+1-k)块,那么剩下 (m+1)*(r-1) 块,故和(1)类似,则先取者必胜。

伪代码:if(n%(m+1)!=0) 先取者必胜; else 后取者必胜



2.威佐夫博奕(Wythoff Game)

有两堆石子,两人轮流从其中一堆至少取一块石子,最多不限,或从两堆中同时取相同件物品,规定先取完者获胜。

可以用两个数(a[k],b[k])(a[k]≤b[k])表示两堆石子的数量。 如果说先手遇到了(0,0)这样的局势,那么先手就输了,被称为奇异局势

前几个奇异局势如下:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)···
首先要明确先手不能把任意一堆取完,如果取完了很明显后手会取完另外一堆那么先手必输。

eg1.遇到(1,2),先手必输。

4种取法:
1)取 1 中的一个,那么后手取第二堆中两个。
2)取 2 中一个,那么后手在两堆中各取一个。
3)在 2 中取两个,那么后手在第一堆中取一个。
4)两堆中各取一个,那么后手在第二堆中取一个。
遇到(3,5),先手必输。

eg2.遇到(3,5),先手必输。
考虑先看在一堆中取,取1个,后手在第2堆取4个,就变成(1,2)了;取2个,后手取3。考虑在第二堆里取,同理...

规律:他们的差值是0,1,2,3..,n递增的;还发现局面中第一个值为前面局面中没有出现过的第一个值;发现第一个值 = 差值 * 1.618 ;而1.618 = (sqrt(5)+ 1) /  2 。
0.618是黄金分割率。而威佐夫博弈正好是1.618!



3.尼姆博弈(Nimm Game) 可以引申为多堆物品,
有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

(a,b,c)表示某种局势,(0,0,0)显然是必败态;第二种必败态是(0,n,n),先手在某一堆拿走k(k ≤ n)个物品,对方只要在另一堆拿走k个物品,都将面临(0,0,0)的局势。(1,2,3)也是必败态,无论自己如何拿,接下来对手都可以把局势变为(0,n,n)。

异或也叫半加运算,其运算法则不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位。异或简称为XOR、EOR、EX-OR。】

看(1,2,3)的按位模2加的结果:
1 = 二进制01
2 = 二进制10
3 = 二进制11  XOR
——————————
0 = 二进制00 (注意不进位)
对于奇异局势(0,n,n),异或结果也是0。

任何奇异局势(a,b,c)都有a^b^c = 0。

面对非必败态(a,b,c),如何变为必败态呢?
假设 a < b < c,我们只要将 c 变为a^b,即可。因为:a^b ^(a^b)=(a^a) XOR (b^b)=0^0 =0
所以说:要将c 变为a XOR b,只要对在c中取走 c-(a^b)这么多即可。



4.Fibonacci博弈

有一堆个数为n的石子,游戏双方轮流取石子,规定:
1)先手不能在第一次把所有的石子取完;
2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。
约定取走最后一个石子的人为赢家,求必败态。

当n为斐波那契数的时候,必败。
f[n]:1,2,3,5,8,13,21,34,55,89,… 



证明:根据“Zeckendorf定理”(齐肯多夫定理):任何正整数可以表示为若干个不连续的Fibonacci数之和。

如n=83 = 55+21+5+2     :假如先手取2颗,那么后手无法取5颗或更多,而5是一个Fibonacci数,那么一定是先手取走这5颗石子中的最后一颗,同理,接下去先手取走接下来的后21颗中的最后一颗,再取走后55颗中的最后一颗,那么先手赢。

反证:如果n是Fibonacci数,如n=89:记先手一开始所取的石子数为y
 (1)若y>=34颗(也就是89的向前两项),那么一定后手赢,因为89-34=55=34+21<2*34。
 (2)y<34时剩下的石子数x介于55到89之间,它一定不是一个Fibonacci数,把x分解成Fibonacci数:x=55+f[i]+…+f[j],若,如果f[j]<=2y,那么对B就是面临x局面的先手,所以根据之前的分析,后手只要先取f[j]个即可,以后再按之前的分析就可保证必胜。

也可参考这个博客:http://blog.csdn.net/dgq8211/article/details/7602807



ps.  关于P(previous)N(next)

必败点(P点) :前一个选手(Previous)将取胜的位置称为必败点
必胜点(N点) :下一个选手(Next)将取胜的位置称为必胜点

1.无法进行任何移动的局面是P-position。
2.可以移动到P-position的局面是N-position;
即如果当前的局面你如果可以胜利,那么必然意味着你能创造一个必输的局面给对方
3.所有移动都导致N-position的局面是P-position。
即如果你是必输的局面,那么意味着不管比赛有没有分出最后的结果,你的所有移动得到的结果都是对方胜利的局面,或者说都是对方又可以把你置为必输的局面的位置