基础博弈【理解】
来源:互联网 发布:手机视频分享网站源码 编辑:程序博客网 时间: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。
即如果你是必输的局面,那么意味着不管比赛有没有分出最后的结果,你的所有移动得到的结果都是对方胜利的局面,或者说都是对方又可以把你置为必输的局面的位置
- 基础博弈【理解】
- 基础博弈
- 博弈基础
- 博弈基础
- 基础博弈
- 博弈基础
- 基础博弈—Nim博弈
- 基础博弈—Nim博弈
- 博弈问题的理解
- 深入理解 Nim 博弈
- 组合博弈基础
- 基础博弈总结
- 基础博弈小结
- hdoj博弈基础题
- 三大基础博弈
- 巴什博弈基础
- 威佐夫博弈基础
- 威佐夫博弈基础2
- selenium三种方法isEnable()、isDisplayed()和isSelected()的区别
- cookie实现用户登录
- 2017多校7-三道水题
- Node.js模块
- Zipper(动态规划)
- 基础博弈【理解】
- js页面传参
- configuration
- 横竖屏切换时候Activity的生命周期的总结
- ios调用相机,info.plist
- surrounded-regions
- opengl 原理介绍
- Oracle游标
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解