前几天看到了反nim博弈于是又从头学了下博弈,真心感觉好神奇啊,像那种组合博弈之类的,将一些奇奇怪怪的博弈问题转换成Nim博弈的想法真的好IMBA,感觉智商被碾压。这里写下一些我学习博弈的笔记和心得。
博弈问题本质是数学问题(讲道理,计算技术数学也是数学,而且和可怕),这是一类有固定规则的零和游戏(胜败方的获得数和失去数总和为0),另外博弈游戏并不都是公平的,很多胜负在游戏开始之前就决定了(“ ”)。我们生活中的很多博弈游戏,像象棋、围棋、军棋等。这些游戏经过后人长时间的修改,到现在基本变得比较公平(当然智商碾压不算)。
博弈问题一般都有必胜态和必败态的概念,也就是当两个人智商都无限大的情况下,一般说在必胜态的人必胜,必败态的人必败(没办法,作为一个数学问题总是要有一定的局限性,既然是严肃的数学问题就不能有“主角光环”,主角在必败态反杀,这是不科学的)。
基础的博弈问题有三种:
一、巴什博弈(Bash Game)
一堆n个物品,两人轮流取,从这对物品中取物,规定每次最都取m个,不能不取(不取就太任性了,两个人要是都任性这游戏还玩不玩了),取最后一个物品的人获胜。
这个问题还是很眼熟的吧,小时候不是经常被骗玩报数的游戏(从1开始报道n,每次最多报m个数,不能不报,报道n的人获胜),在经过多次挣扎后发现,有很多关键点,就变成了抢关键点,最后才知道先后手才是关键(笔者的血泪史啊,果然智商低就是要被欺负的)。
我们根据经验得出当n=(m+1)r+s,其中s>=0且s<k,s为0是后手胜,否则就先手胜。
一般说的关键点也就是(m+1)的倍数,也就是一般的博弈问题。
参考例题: hdu 2149 hdu 2188 hdu 1846
二、威佐夫博弈(Wythoff Game)
两堆若干个物品。两个人轮流从某一堆或同时从两堆中取同样多的物品,取最后一个物品的人获胜。
这问题乍一看就像是两个巴什博弈,也就是两个巴什博弈都赢就行了,但是细想会发现,如果你一堆一堆取,当你赢了第一堆时,你很有可能会陷入必败的局势,你要是两队一起取,对方如果只取一堆的话又打乱了你的计划,也很有可能会输。
我们来小步探究一下,这种游戏的必败态是(0,0),(1,2),(3,5),(4,7),(6,10),(8,13),(9,15)。。。。。。
不难发现这么几种性质:
1.每次出现在必败态的值一定是之前没出现过的最小的值,并且每组必败态的差值都不相同。
2.任何操作都将会使必败态转化成非必败态。(这里的必败是对当前的人而言的,所以其实意思就是,如果你面对的是必败态那么你不可能将局势转化成新的必败态给你的对手)
3.非必败态态一定可以通过某种手段转换成必败态。
4.必败态的其中一堆最小值=差值*1.618(没错就是黄金比例)
由第四条可以推第三条。
这样的关键点就是必败态,保证对方每次都是必败态,你就一定能赢。
参考例题:hdu 1527
三、尼姆博弈(Nim Game)
有三堆若干个物品,两人轮流取某一堆人任意多的物品,至少一个,多者不限,去最后一个石子的人获胜。
还是像之前的做法,我们试着探究一下结论,看看能不能从结论中推出过程。
首先(0,0,0)这个状态一定是必败态,然后我们试着简化问题发现只有两堆发现(0,n,n)其实也是必败态,另外我们不难推出(1,2,3)也是必败态,发现规律了吗,好吧其实我也没发现,可能还需要更多的就算和尝试,我们最后发现其实是每一堆的数利用位的摸2加法,也就是抑或相加,最后的结果如果是0,那就是必败态。
从结论中我们不难发现,每一个非必败态都是可以转化成必败态的,即如果是(a,b,c)我们可以从,第一推中拿出c-(a^b)个就可以了、
其实尼姆博弈也并不只有这样。我们来看两个问题。
问题一:有若干堆棋子,两个人轮流取,每次可以取若干根,甚至可以拿完,但是不能不拿,拿完最后一根的人获胜。
问题二:有若干堆棋子,两个人轮流取,每次可以取若干根,甚至可以拿完,但是不能不拿,拿完最后一根的人失败。
和第二种博弈中提到的一样,最后一根失败并不是单纯反其道行,因为必败态同样也可以转换成必败态,所以没有这么简单。
对于第一个问题,我们假设所有棋子数的抑或和是0的状态为利他态T,否则为利己态S。
定理一:对于任何一个S态,总能找到一个方法,从一堆中取若干个,使之成为T态、
利己态总是有办法转换成利他态(因为轮流取,其实还有对己方有利)
定理二:对于T态,取任何一堆的若干根,都能成为S态。
因为轮流取,所以其实还是对己方不利。
有这两个定理,推出了剩下的几个定理。
定理三:对于S态只要方法正确,就一定必胜。
定理四:对于T态只要对手方法正确,就一定败。
不难发现,其实定理三和定理四讲的是同一个意思。
对于第二个问题,我们追加一些定义,然后你们就知道我们什么将s命名成利己态而不是必胜态了。
定义:只有一个棋子的堆,我们称为孤单堆,大于1的称为充裕堆。
对于s,t态,其中充裕堆为0的称为s0,t0;充裕堆为1的称为s1,s2;充裕堆大于等于2的称为s2,t2
那么就衍生出以下定理:
定理五:S0,即仅有奇数个孤单堆的情况,必败,而T0,必胜。
定理六:S1只要方法正确必胜。
当孤单堆为奇数个的时,将充裕堆取完;否则就取到只剩一个。这样就剩下奇数个孤单堆,由定理五可知,对方必败。
定理七:S2不能一次转换成T0
很明显,你不可能一次取完多个充裕堆。
定理八:S2可一次转换成T2
其实就是定理一。
定理九:T2只能变成S2或者S1
由定理二和定理七可得、
定理十:S2态,只要方法正确必胜。
(1)S2->T2(定理八)
(2)对方将T2转换成S1或者S2(定理九)
如果对方转成了S2,那就重复(1)
否则S1必胜(定理六)
定理十一:T2态必败,同定理十。
总结:
必胜态有:T0,S2,S1
必败态有:T2,S0
第一题的全过程其实如下:
S2->T2->S2->T2-> …… ->T2->S1->T0->S0->T0->……->S0->T0(全0)
第二题的全过程其实如下:
S2->T2->S2->T2-> …… ->T2->S1->S0->T0->S0->……->S0->T0(全0)
我们不难发现,S1态可以转变为S0态(第二题做法),也可以转变为 T0(第一题做法)。哪一方控制了S1态,他即可以有办法使自己得到最后一根(转变为 T0),也可以使对方得到最后一根(转变为S0)。
所以,抢夺S1是制胜的关键!
为此,始终把T2态让给对方,将使对方处于被动状态,他早晚将把状态变为S1.
未完待续!!!