您的位置:首页 > 其它

博弈论-巴什博弈、威佐夫博奕、尼姆博奕

2015-08-18 21:18 281 查看

博弈论

1.巴什博弈(Bash Game)

问题描述:

巴什博奕(Bash Game): 只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,

最多取m个。最后取光者得胜。

问题分析:

一堆物品共 n 个,两人轮流从中取物,规定每次至少取一个,最多取m个。最后取光者得胜。

设 n=(m+1)q+r ( 0≤r≤m )

①若 r=0, 后取者必胜,策略如下:

若先取者拿走 k 个,则后取者拿走 m+1-k 个,结果剩下(m+1)(q-1) 个,保持这种取法,则后取者必胜。

②若 r≠0, 先取者必胜,策略如下:

先取者先拿走 r 个,若后取者拿走 k 个,则先取者拿走 m+1-k 个,结果剩下 (m+1)(q-1) 个,

保持这种取法,则先取者必胜。

总之,要保持给对手留下(m+1)的倍数,就能最后获胜。

扩展

若规定最后取光者输,设 n-1=(m+1)q+r( 0≤r≤m )

①若 r=0, 后取者必胜,策略如下:

若先取者拿走 k 个,则后取者拿走 m+1-k 个,结果剩下(m+1)(q-1)+1 个,

保持这种取法,先取者将取到最后一个物品。

②若 r≠0, 先取者必胜,策略如下:

先取者先拿走 r 个,若后取者拿走 k 个,则先取者拿走 m+1-k 个,结果剩下 (m+1)(q-1)+1 个,

保持这种取法,后取者将取到最后一个物品



2.威佐夫博奕(Wythoff Game)

问题描述:

有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,

规定每次至少取一个,多者不限,最后取光者得胜。



问题分析:

(ak,bk)(ak ≤ bk ,k=0,1,2,...,n)表示奇异局势,即先者必输局势。

两个人如果都采用正确操作,那么面对非奇异局势,先者必胜;反之,则后者取胜。

例如前9个奇异局势:(0, 0)、(1, 2)、(3, 5)、(4, 7)、(6, 10)、(8, 13)、(9, 15)、(11, 18)、(12, 20)。

从中可以发现3个威佐夫博弈的性质:

性质1:任何自然数都包含在一个且仅有一个奇异局势中。

性质2:任意操作都可将奇异局势变为非奇异局势。

性质3:一定存在规则允许的某种操作可将必胜点(非奇异)移动到必败点(奇异);

性质证明:

性质1证明:

ak是未在前面出现过的最小自然数,所以有ak > ak-1 ,

而 bk= ak + k > ak-1 +k-1 = bk-1 > ak-1 。所以性质1。成立。

性质2证明:

1.若只改变奇异局势(ak,bk)的某一个分量,那么另一个分量不可能在其他奇异局势中,

所以必然是非奇异局势。

2.若使(ak,bk)的两个分量同时减少,则由于其差不变,且不可能是其他奇异局势的差,

因此也是非奇异局势。

性质3证明:

假设面对的局势是(a,b) 若 b = a,则同时从两堆中取走 a 个物体,就变为了奇异局势(0,0);

1.如果a = ak,

1.1 b > bk, 那么,取走b - bk个物体,即变为奇异局势(ak, bk);

1.2 b < bk, 则同时从两堆中拿走 ak – a[b – ak]个物体,变为奇异局势(a[b – ak] , a[b – ak]+ b - ak);

2.如果a = bk,

2.1 b > ak ,则从第二堆中拿走多余的数量b – ak

2.2 b < ak ,则 若b = aj (j < k) 从第一堆中拿走多余的数量a– bj; (a > bj)

若b = bj (j < k) 从第一堆中拿走多余的数量a– aj; ( a > aj)

问题实现:

求法:

ak =[k(1+√5)/2], bk= ak + k (k=0,1,2,...,n 方括号表示取整函数)

判断问题中已知的m, n是否是奇异局势,若是,后者胜,否则,先者胜。

判断算法:

Gold=(1+sqrt(5.0))/2.0;

1)假设(a,b)为第k种奇异局势(k=0,1,2...) 那么k=b-a;

2)判断其a==(int)(k*Gold),相等则为奇异局势



3.尼姆博奕(Nimm Game)

问题描述:

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

问题分析:

定义:局势(x1, x2, x3, x4, x5••••xn) Nim-Sum = x1^ x2^x3^••••xn

则奇异局势:(a1, a2, a3, ••••an) 其中:Nim-Sum =0

证明:

这种情况最有意思,它与二进制有密切关系,我们用(a, b, c)表示某种局势,

首先(0, 0, 0)显然是奇异局势,无论谁面对奇异局势,都必然失败。

第二种奇异局势是(0, n, n),只要与对手拿走一样多的物品,最后都将导致(0, 0, 0)。

仔细分析一下,(1, 2, 3)也是奇异局势,无论对手如何拿,接下来都可以变为(0, n, n)的情形。



计算机算法里面有一种叫做按位模2加,也叫做异或的运算,我们用符号(+)表示这种运算。

这种运算和一般加法不同的一点是1+1=0。先看(1, 2, 3)的按位模2加的结果:

1 =二进制01

2 =二进制10

3 =二进制11 (+)

———————

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) (+) (b (+) b)
= 0 (+) 0 = 0。

要将c 变为a(+)b,只要从 c中减去 c-(a (+) b)即可。



例如:(14, 21, 39),14(+)21=27,39-27=12,所以从39中拿走12个物体即可达到奇异局势(14,21,27)。

问题实现:

求法:

奇异局势:(a1, a2, a3, ••••an) 其中:Nim-Sum =0

判断问题中已知的(a1, a2, a3, ••••an)是否为奇异局势,若是,后者胜,否则,先者胜。

判断算法:

if(a1^a2^a3••••an ==0) return 后者胜

else return 先者胜
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: