博弈论-巴什博弈、威佐夫博奕、尼姆博奕
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 先者胜
相关文章推荐
- POJ 3685 Matrix(二分套二分)
- android批量添加联系人工具
- python实现大文件分割与合并
- 00 声明
- uva 11383 Golden Tiger Claw (KM算法)
- ListView异步加载图片
- 卡券创建Json字段解析
- Delphi 记事本 TMemo(5篇)
- Kafka入门经典教程
- POJ 2367 Genealogical tree 【拓扑 基础题】
- Alignment
- hdu5402 Travelling Salesman Problem
- hdu 4109
- 【分享】妹调教日记完整汉化硬盘版
- 【转载】UBUNTU 下GIT的安装
- Alignment
- HDOJ Choose the best route (最短路倒着构图Dijkstra)
- python中迭代器和iter()函数
- const int * pt和int * const pt的区别
- hdu5400