博弈 总结和思考 更新中

来源:互联网 发布:网络维修电话 编辑:程序博客网 时间:2024/06/18 04:48

一、状态分析

在做某些博弈题的时候,最重要的就是P/N局面的分析了。

所谓的P局面及必败点,N局面及必胜点,我所理解的P/N局面是谁走到P点或者N点就必须承受这点所带来的状态,必败或者必胜。所以我摒弃了那种P点即是前一个选手将取胜的位置,N点即是下一个选手将取胜的位置的理解模式,很烦,事实上是一样的,但是一开始我们不用管这个概念,不然绕弯弯也能把自己绕晕。

所以必败点和必胜点满足三个性质:

第一个性质:所有的终结点都是必败点,都必须标记为P点。

          解释:很明显,谁最后站在了终结点无法移动的时候,就必须承受这点输的状态,所以终结点一定是必败点。

第二个性质:从任何必胜点(N点)操作,一定有一种策略可以进入必败点(P点)。

          解释:初次接触这个的时候,觉得貌似不好理解,我想很多人也是模棱两可,甚至当公式一样背下来,其实很简单,这点之所以被称作必胜点,就是因为处在这点的人一定能采取某种状态将对手置于必败状态,那么当轮到对手操作的时候就必须承受这个必败的状态,从而这点就是必胜点。所以必胜点是一定有方法走到一个必败点的。

第三个性质:无论怎么操作,从必败点(P点)都只能进入必胜点(N点)。

          解释:和第二个性质的思考方式一样,试想为什么这点被称作必败点,那是因为走到这点的人,无论怎么操作,就是无论怎么走,都只能走到一个必胜点,那么当下一个人操作的时候承受的是这个必胜点的必胜状态,所以走到这点的人是一定会输的。

在理解第三条性质的时候,我常常想到证明一个公式的合理性,如果能举一个反例把这个公式推翻,那这个公式就肯定不成立,所以要证明一个点是必败点,那么你就想想有没有方法可以走到一个必败点,让对方处于必败状态,如果没有,那么这点当然就必败了。反之,你要有方法走到这么一点,让对方处于必败状态,那么处在这点的人不一定会输,所以这点当然不能成为必败点了。所以从必败点只能走到必胜点。

实战演练:杭电2147 kiki's gamehttp://acm.hdu.edu.cn/showproblem.php?pid=2147

这个题就是简单的分析必败点和必胜点的。

题意:给你一个n*m的棋盘,首先硬币是放在右上角的,每次只能往左或者往下,或者往左下方走,如果谁走到某个点不能再动谁就输了。

很明显,终点是左下角这个点,因为无论谁走到这一点,都没法动了,所以走到这点的人就输了。

所以根据这三条性质我们可以试着描述下PN点得状态。

假设棋盘是5*3的,那么这个PN分析状态就是如下:

PNP
NNN
PNP
NNN
PNP

终点左下角标记为P,从这个点开始,我们看和它相近的点(4,1)(4,2)(5,2),显然这三点是都可以一步走到终点的,也就是说这三点能走到一个必败点,使对方置于必败状态,所以这三点都标记为N点,必胜点,再看(5,3)这点,此时无论走到这点的人采取什么策略,都只能往(5,2)这点走,而(5,2)已经标记为N点,所以它只能走到必胜点,因此它被标记为P点,即是必败点。依次类推,就能把这个图画出来。

我们已经学会了分析必败点和必胜点,那么也就能把这题做出来了。我们不妨从n,m的奇偶性去思考,上面我们分析的是n,m都是奇数的,此时右上角是P点,及必败点,所以先手必输。那么我们不妨再考虑下n为偶数m为奇数,n为奇数m为偶数,n,m都为偶数的P/N图,我们会发现只有n,m都为奇数的时候,先手必输,所以这题得到完美解答。

二、NIM问题

经典的取石子问题,有N堆石子,其中第i堆有Pi颗石子,从某一堆里取出若干石子去掉,两人轮流操作,谁不能继续取石子,谁就输了。

这个问题有个结论:S=p1^p2……p^n ,当S=0的时候是必败点。

那么怎么理解?首先看终点,肯定是0,0……0,所以S=0,满足这个结论。

然后看其他点,当S=0的时候,及S=p1^p2……^pi……^pn=0,那么S=p1^p2……^pn(不异或pi)肯定是等于pi的,不然S=p1^p2……^pi……^pn也不可能等于0,那么我们从pi取出一些石子后,pi'也就不再等于pi了,所以S=p1^p2……^pi'……^pn肯定就不等于0了。由此可知从S=0这个点,无论怎么走,都只能走到S<>0(S不等于0)的点,所以S=0的点称为必败点。

再看S!=0的时候,设S的二进制位是A1…An,考虑第一位是1的。在P中取出该位同是1的,不妨设为P1。可知P1 ^S<P1,令P1’=P1 XOR S。可知P1’ XOR P2 XOR … XOR Pn=0。即满足N局面存在至少一个子局面是P局面。所以这点就是N点,必胜点。

三、NIM问题的扩展问题。

还是取石子问题。有N堆石子,第i堆有Pi个石子,每次去掉某一堆里最多m颗石子,(m>0),两人轮流操作,谁不能继续取石子,谁就输了。

这个问题的结论是:将每堆石子对m+1取模后异或,若异或等于0,就是必败点。

怎么理解?其实有了上面的基础,这个问题真的很好理解了。我们把所有的石子分成两部分,一部分是m+1的倍数r1r2……rn,一部分为p1',p2'……pn'.那么p1',p2'……pn'这部分就直接按nim的方法取石子就行了,而对于r1,r2……rn这部分,由于他们是m+1的倍数,所以我们可以在对手取K颗石子的时候,我们取m-k+1颗。

若初始局面为胜局面,P1 ’ P2 ’ P3 ’ … Pn ’部分NIM方法取子必胜,由于r1r2r3 …rn都为m+1的倍数,因此,按m+1互补的取法,先手一定能取到最后K<=m颗石子。

四、NIMk问题

还是取石子问题。
有N堆石子,其中第i堆有Pi颗石子,每次可以从最多K堆中选出若干石子去掉(但不能不去石子),两人轮流取石,谁不能继续取谁就输了。什么情况下先手必胜,什么情况下后手必胜?

K=1,为Nim问题。
对于K>1的情况,我们令把P1~Pn这n个数,转成二进制,然后每位分别相加,每位最后结果mod (K+1)即可。如果每一位结果都是0,则为P局面,否则是N局面。
示例
P1P2P3P4=3,5,10,15  ,K=2

         3——————               1  1
         5——————           1  0  1
       10——————       1  0  1  0
       15 ——————      1  1  1  1
                                        2  2  0  0
所以这是N局面。
证明与NIM证明类似。

五、MisèreNim问题

有N堆石子,每次从某一堆里选出若干石子去掉(但不能不去石子),两人轮流取石,谁不能继续取谁就赢了。

所有石子堆的数目都为1:显然,若有偶数堆石子堆,则必胜,否则必败。
如果恰好只有一堆石子数目大于1。
我们可以把这堆石子取完或者取得只剩下1,使得只剩下奇数堆数目为1的石子留给对方,由1),必胜。

如果有至少2堆石子的数目大于1。
 考虑异或值:若异或值不为0,则按照Nim走法取石。
这样,当对手某次取完石子后,肯定会出现情况2,必胜。


证明:按照Nim走法则取完石子后,必定会给对手留下异或值为0的局面。
因此不可能给对手留下情况2 的局面(容易证明,情况2 局面的异或值肯定不为0),
而对手一次最多将一堆石子数大于1的石子堆处理掉。因此情况2 的情况肯定会出现。
 相反,若异或值为0,则无论如何走都会给对方留下情况2 或情况3的情况,必败。

例题:

http://acm.hdu.edu.cn/showproblem.php?pid=1907

http://acm.hdu.edu.cn/showproblem.php?pid=2509

 六、翻硬币游戏  http://blog.sina.com.cn/s/blog_8f06da99010125ol.html

翻硬币游戏

一般的翻硬币游戏的规则是这样的:

N枚硬币排成一排,有的正面朝上,有的反面朝上。我们从左开始对硬币按1N编号。

第一,游戏者根据某些约束翻硬币,但他所翻动的硬币中,最右边那个硬币的必须是从正面翻到反面。例如,只能翻3个硬币的情况,那么第三个硬币必须是从正面翻到反面。如果局面是正正反,那就不能翻硬币了,因为第三个是反的。

第二,谁不能翻谁输。

有这样的结论:局面的SG值为局面中每个正面朝上的棋子单一存在时的SG值的异或和。即一个有k个硬币朝上,朝上硬币位置分布在的翻硬币游戏中,SG值是等于k个独立的开始时只有一个硬币朝上的翻硬币游戏的SG异或和。比如THHTTH这个游戏中,2号、3号、6号位是朝上的,它等价于THTTHTTTTTH三个游戏和,即sg[THHTTH]=sg[TH]^sg[TTH]^sg[TTTTTH].我们的重点就可以放在单个硬币朝上时的SG值的求法。

约束条件一:每次只能翻一个硬币。

一般规则中,所翻硬币的最右边必须是从正面翻到反面,因为这题是只能翻一个硬币,那么这个硬币就是最右边的硬币,所以,每次操作是挑选一个正面的硬币翻成背面。

对于任意一个正面的硬币,SG值为1

有奇数个正面硬币,局面的SG==1,先手必胜,有偶数个正面硬币,局面的SG==0,先手必败。

约束条件二:每次能翻转一个或两个硬币。(不用连续)

每个硬币的SG值为它的编号,初始编号为0,与NIM游戏是一样的。

如果对于一个局面,把正面硬币的SG值异或起来不等于0,既a1^a2^a3^^an==x,对于an来说一定有an'=an^x<an

如果an'==0,意思就是说,把an这个值从式子中去掉就可以了。对应游戏,就是把编号为an的正面硬币翻成背面就可以了。因为an^x==0,而a1^a2^a3^^an==x,即an^a1^a2^a3^^an==0,即a1^a2^a3^^an-1==0,只要在原来的x里面去掉an就可以了。

如果an'!=0,意思就是说,把an这个值从式子中去掉后再在式子中加上an'an'<an。对应游戏,去掉an就是把编号为an的正面硬币翻成背面,加上an',如果编号为an'的硬币是正面,我们就把它翻成背面,是背面就翻成正面,总之,就是翻转编号为an'的硬币。因为an^x!=0,所以an^a1^a2^a3^^an!=0,即a1^a2^a3^^an-1!=0,而这里的

an'=a1^a2^a3^^an-1,所以在x中去掉an后,要对an'进行异或,也就是翻转,正转反,反转正。

约束条件三:每次必须连续翻转k个硬币。

我们以k==3为例。

我们计算的是个数为N的硬币中,其中最后一个硬币为正面朝上,sg值。

N==1时,硬币为:正,先手必输,所以sg[1]=0

N==2时,硬币为:反正,先手必输,所以sg[2]=0

N==3时,硬币为:反反正,先手必胜,所以sg[3]=1

N==4时,硬币为:反反反正,先手操作后为:反正正反,子状态局面的SG=0^1=1,那么sg[4]=0

N==5时,硬币为:反反反反正,先手操作后为:反反正正反,子状态局面的SG=1^0=1,那么sg[5]=0

N==6时,硬币为:反反反反反正,先手操作后为:反反反正正反,子状态局面的SG=0^0=0,那么sg[6]=1

根据观察,可以知道,从编号为1开始,sg值为:001 001 001 001……

根据观察,可以知道,sg的形式为00001 00001,其中一小段0的个数为k-1

约束条件4:每次翻动一个硬币后,必须翻动其左侧最近三个硬币中的一个,即翻动第x个硬币后,必须选择x-1x-2x-3中的其中一个硬币进行翻动,除非x小于等于3。(Subtraction Games

N==1时,硬币为:正,先手必赢,所以sg[1]=1

N==2时,硬币为:反正,先手必赢,因为先手可以翻成反反或正反,可能性为2,所以sg[2]==2

N==3时,硬币为:反反正,先手操作后可以为:反正

位置x123456 789 101112 1314...

sg[x]12301 230 123012…

这个与每次最多只能取3个石子的取石子游戏的SG分布一样,同样还有相似的这类游戏,约束条件5也是一样。

约束条件5:每次必须翻动两个硬币,而且这两个硬币的距离要在可行集S={1,2,3}中,硬币序号从0开始。(Twins游戏)

N==1时,硬币为:正,先手必输,所以sg[0]=0

N==2时,硬币为:反正,先手必赢,所以sg[1]=1

N==3时,硬币为:反反正,先手必赢,所以sg[2]=2

N==4时,硬币为:反反反正,先手必赢,所以sg[3]=3

N==5时,硬币为:反反反反正,先手必输,所以sg[4]=0

位置x012345 678 91011 121314...

sg[x]01230 123 0123012…

约束条件6:每次可以翻动一个、二个或三个硬币。(Mock Turtles游戏)

http://acm.hdu.edu.cn/showproblem.php?pid=3537

初始编号从0开始。

N==1时,硬币为:正,先手必胜,所以sg[0]=1.

N==2时,硬币为:反正,先手必赢,先手操作后可能为:反反或正反,方案数为2,所以sg[1]=2

N==3时,硬币为:反反正,先手必赢,先手操作后可能为:反反反、反正反、正反正、正正反,方案数为4,所以sg[2]=4

位置x012345678910111213 14...

sg[x]12478 11 13 1416192122252628…

看上去sg值为2x或者2x+1。我们称一个非负整数为odious,当且仅当该数的二进制形式的1出现的次数是奇数,否则称作evil。所以1247odious因为它们的二进制形式是1,10,100,111.0,3,5,6evil,因为它们的二进制形式是0,11,101,110。而上面那个表中,貌似sg值都是odious数。所以当2xodious时,sg值是2x,当2xevil时,sg值是2x+1.

这样怎么证明呢?我们会发现发现,

evil^evil=odious^odious=evil

evil^odious=odious^evil=odious

假设刚才的假说是成立的,我们想证明下一个sg值为下一个odious数。注意到我们总能够在第x位置翻转硬币到达sg0的情况;通过翻转第x位置的硬币和两个其它硬币,我们可以移动到所有较小的evil数,因为每个非零的evil数都可以由两个odious数异或得到;但是我们不能移动到下一个odious数,因为任何两个odious数的异或都是evil数。

假设在一个MockTurtles游戏中的首正硬币位置x1,x2,…,xn是个P局面,即sg[x1]^^sg[xn]=0.那么无可置疑的是n必定是偶数,因为奇数个odious数的异或是odious数,不可能等于0。而由上面可知sg[x]2x或者2x+1sg[x]又是偶数个,那么x1^x2^^xn=0。相反,如果x1^x2^^xn=0n是偶数,那么sg[x1]^^sg[xn]=0。这个如果不太理解的话,我们可以先这么看下。2x在二进制当中相当于把x全部左移一位,然后补零,比如说2的二进制是10,那么4的二进制就是100。而2x+1在二进制当中相当于把x全部左移一位,然后补1,比如说2的二进制是105的二进制是101。现在看下sg[x1]^^sg[xn]=0,因为sg[x]2x或者2x+1,所以式子中的2x+1必须是偶数个(因为2x的最后一位都是0,2x+1的最后一位都是1,要最后异或为0,2x+1必须出现偶数次)。实际上的情况可能是这样的:

博弈-翻硬币游戏

MT游戏当中的P局面是拥有偶数堆石子的Nim游戏的P局面。

约束条件7:每次可以连续翻动任意个硬币,至少翻一个。(Ruler游戏)

初始编号从1开始。

那么这个游戏的SG函数是g(n)=mex{0,g(n-1),g(n-1)^g(n-2),,g(n-1)^^g(1)}

根据SG函数可以得到SG值表如下。

位置x123456 789 101112 13141516...

g(x): 121412 181 21412116…

所以sg值为x的因数当中2的能达到的最大次幂。比如14=2*7,最大1次幂,即216=2*2*2*2,最大4次幂,即16

这个游戏成为尺子游戏是因为SG函数很像尺子上的刻度。

约束条件8:每次必须翻转4个对称的硬币,最左与最右的硬币都必须是从正翻到反。(开始的时候两端都是正面)(Grunt游戏)

这是Grundy游戏的变种,初始编号从0开始。

当首正硬币位置为0,1,2时是terminal局面,即终结局面,sg值都是0。当首正硬币位置n大于等于3的时候的局面可以通过翻0,x,n-x,n四个位置得到(其中x<n/2可保证胜利)

这就像是把一堆石子分成两堆不同大小石子的游戏,也就是Grundy游戏。

附注:

参考资料http://blog.sina.com.cn/s/blog_51cea4040100h3wl.html

部分内容还是《Game Theory》翻译过来的

 

 

七、博弈树,极大极小

1、美中军事政治博弈

我们通过一个简单的例子来说明序贯博弈的(离散策略的)扩展式表达和逆向归纳法求解方法。这个例子可以称做美中军事政治博弈,或者叫“毛泽东的对外军事政治战略”。

故事模型

在我国解放初期,美国一直试图对我国实施打击。此时,我国必须对美国采取应对之策。就我国对美国可以采取的行动而言,无非是回击或不回击。用更符合毛泽东的话来说,美国可以“犯我”或“不犯我”,而我们可以“犯人”或“不犯人”。

由此我们可以刻画出一个动态博弈:

●博弈方:美国、中国;

●行动空间:美国可选择的行动是“犯我”或“不犯我”;中国的选择是“犯人”或“不犯人”;

●行动顺序:美国先行动;中国观察到美国的行动后再选择自己的行动;

●赢利:我们这样假设赢利状况(数字是虚拟的);

●如果美国“犯我”,中国“犯人”,恶战再所难免,则美国亏损2,中国亏损2;

●如果美国“犯我”,中国“不犯人”,那么中国沦为美国的附庸,丧失国家主权,则美国获得2,中国亏损4;

●如果美国“不犯我”,中国“犯人”,那么就是中国挑起战事,美国正好有借口纠合国际力量打击中国,则美国得3,中国亏损5;

●如果美国“不犯我”,中国“不犯人”,各自和平地发展经济,则美国得1,中国得1。

2、博弈树

对于上述动态博弈,我们可以用博弈树(game tree)表达如下(图5-1):

                        

                       犯我                    不犯我

中国                         中国    

             犯人          不犯人          犯人           不犯人

         (-2,-2)    (2,-4)        (3,-5)           (1,1)

                         图5-1 美中军事政治博弈

图5-1的博弈树是这样解读的:美国先选择“犯我”或“不犯我”,然后中国观察美国的选择后选择“犯人”或“不犯人”;最右边的括号内数字是各种情况下双方的赢利状况,前一个数字代表第一个行动人(美国)的赢利,第二个数字代表第二个行动人(中国)的赢利。依此类推,如果有更多的参与人序贯行动,则赢利的排列顺序与行动顺序一致。

3、逆向归纳法

究竟什么是图5-1博弈的均衡呢?在完美信息动态博弈中,我们要找的均衡实际上是一条路径,即从第一个行动人决策结点出发,一直到某一个终点之间的路径。所谓均衡路径就是在每一个决策阶段,没有人会偏离这条路径。这条路径所代表的策略均衡被称做子博弈完美均衡。

下面我们介绍如何用逆向归纳法来求解博弈的均衡。逆向归纳的步骤是这样的:

● 首先,从最后阶段行动的参与人决策开始考虑。在图5-1的博弈中,最后行动的是中国,因此我们先考虑中国怎么决策。在考虑中国的决策时,我们假定美国已经选了“犯我”或“不犯我”;

◆ 如果美国选择了“犯我”,在图5-1中可发现,中国选择“犯人”会得到-2,选择“不犯人”会得到-4;因此中国必然选择“犯人”——我们就在中国“犯人”的分枝上画上一个短短的横线标记;

◆ 如果美国选择了“不犯我”,从图5-1中可发现,中国选择“犯人”会得到-5,选择“不犯人”会得到1,因此中国必然选择“不犯人”——我们就在中国“不犯人”的分枝上画上一个短短的横线标记。

● 然后,考虑次后阶段行动的人(例子中只有两个阶段,因此实际上就是第一阶段行动的人)——美国。美国决策时会考虑中国的反应,而现在它已预见到中国将选择的行动就是两条划了双横线的分枝。所以,它很容易推出自己面临的情况是:

◆  若选择“犯我。,则必然导致中国“犯人”,则美国得到-2;

◆  若选择“不犯我”,则中国必选择“不犯人”,则美国得到1;

◆  结果美国宁愿选择“不犯我”。照规矩,我们在美国“不犯我”的一个分枝上画上横线。

● 如果存在一个路径,其每个分枝都画上了横线,那么这条路径就是均衡路径。可发现,在图5-1的例子中,均衡路径将是美国选择“不犯我”,而中国选择“不犯人”。

因此,美中博弈的子博弈完美均衡结果是:美国不侵犯中国,而中国也不侵犯美国。

逆向归纳法对于求解子博弈完美均衡之所以适用,其原因就在于它的解过程很好地体现了子博弈完美均衡的定义:一个策略组合只有在其路.既满足是整个博弈的均衡又满足该路径上每一个子博弈的均衡时候,‘才是子博弈完美均衡。

 

 

 

原创粉丝点击