小白算法很一般,曾经在算法课上被博弈论弄晕了头脑,当时没有时间精力去弄明白,所以现在回来复仇。感谢博客文章https://blog.csdn.net/niushuai666/article/details/6638943
如果不知道什么是ICG博弈论的,请翻看这篇文章或者自行搜索:博弈论的总结
如果很懒打开链接的,小白简单总结一下: 两人公平比赛,不许耍赖皮,你一步我一步的回合制,每个回合的走法是有限的,不能继续下一步的当输,一定可以在有限个回合内结束游戏。
说明:围棋和象棋都不是ICG博弈,因为每一盘棋的走法是无限的,比如围棋,你我约定不围对方,那么最终会平局,没有输赢之分,再比如象棋,你我约定不将军,那么我们可以玩到地球爆炸那一刻。
对于ICG博弈,解决(想赢)的办法是基于SG函数的,也就是ICG博弈有一个SG函数(有时候并不显式需要它),它可以回答游戏的输赢问题,它有三个性质,比较关心的是其中两个:
1、无论怎样走,必败态都会进入必胜态。【如果必败态下一步可以是必败态,游戏可能会无法结束】
2、至少有一种方法,可以把必胜态转变为必败态。【如果没有方法,游戏依然可能会无法结束】
理解完ICG博弈论的铺垫后,可以去玩巴什博弈了。
· 有n个物品放置一堆,两个人轮流从中取物, 规定每次至少取1个,最多取m个,最后取光者得胜。
乍一看好像是凭运气才能获胜的游戏,而且小白一开始也是一脸茫然,我们可以一步步分析。
说明:当前局面指的是自己的回合。博弈两人都是智商超凡,不分彼此,每个人的决策都是全局或者局部最优。
我们的目标是根据当前的局面去判断全局输赢【可能会很惊讶,只凭当前局势居然可以判断全局输赢,但ICG博弈的定义和SG函数确保了这点】,当前局面有且只有两种状态:
1、当前局面是必败态,那么直接认输【投降输一半】,因为根据SG函数性质,无论你怎么走下一局都留给对手必胜态,而必胜态是有办法转变为必败态的,因此下一次你又是必败态,直到游戏结束。
2、当前局面是必胜态,那么至少有一种办法能够把必胜态转变为必败态,这样下一局对手就面对着必败态,而必败态下一步是必胜态,于是轮到你的时候又是必胜态,直到游戏结束。
现在关键在于如何判断当前局面是必胜态还是必败态,我们先找出必败态【古语有云“方法总比困难多”,我们选择困难数量少的路去走】。
我们用一个数字(x)表示一堆物品中剩下的数量,显然,让你面对的局面是(0)的时候是一种必败态,必败态有多个,那么其余的必败态是怎样的?注意到至少要拿1个,最多拿m个,考虑当前局面是(m+1),就会出现很尴尬的情况:
①你不能取完,因为最多取m个。
②你至少要拿1个,于是留给对手的局面是(x)而且1 ≤ x ≤ m,对手可以一次拿完,游戏结束。
所以 (m+1)也是一个必败态。
现在我们可以考虑当前局面是(m+2)、(m+3)、(m+4)…的情况,这些情况应该在m+1的基础上思考,所以分析(m+1+k)的情况。
1、如果k == 0,当前局面是(m+1)必败态,可以投降了。
2、如果k > 0,我们又可以分为2种情况
2.1、如果 0 < k ≤ m,那么可以一次性把 k 拿走,局面(m+1)留给对手,对手进入必败态,我方必赢。
2.2、如果k > m,那么k可以表示为k = t*(m+1) + r,其中t≥0,0 ≤ r ≤ m【 t=k/(m+1)向下取整,r=k%(m+1) 】,整合一下,(m+1+k)的局面就是( t*(m+1)+r ),发现了吗?又回到形如(m+1+k)的情况了,因为如果局面是( t*(m+1) ),其实就是进行了 t 轮的(m+1),是一个和(m+1)等价的必败态。因此对 r 的分析和对 k 的分析是一致的,而且我们已知0 ≤ r ≤ m,如果 r ≠ 0,我们可以一次性取完,留下( t(m+1) )必败态给对手。
到此,我们已经得出必败态的表达方式了。
对于当前局面(x),我们总可以变换为( t(m+1) + r ),其中t≥0,0 ≤ r ≤ m,如果 r=0,是一个必败态,如果r ≠ 0,是一个必胜态。
以上的推导都是简单明了的过程,欠缺一个严肃的数学证明(严肃而有美德的人令人肃然起敬的 —— 培根【不是麻辣烫那个】)
A、B两人进行巴什博弈,假设A先行:
命题1:x = t(m+1) + r,其中t ≥ 0,0 ≤ r ≤ m,如果 r = 0,当前局面(x)是一个必败态,A必输。
命题2:x = t(m+1) + r,其中t ≥ 0,0 ≤ r ≤ m,如果 r ≠ 0,当前局面(x)是一个必胜态,A必赢。
再次说明:当前局面指的是自己的回合。博弈两人都是智商超凡,不分彼此,每个人的决策都是全局或者局部最优。
先来证命题1,当r = 0的时候,当前局面x = t(m+1),根据游戏规则,必须取走 1 ≤ k ≤ m 的物品,于是剩下的(t-1)(m+1) + (m+1-k),而且1 ≤ (m+1-k) ≤ m,这个局面是留给B的,B一次性把(m+1-k)取走,剩下 (t-1)(m+1)的局面给A,就这样经过t-1轮后,A当前局面是(m+1),取走k后,剩下1 ≤ (m+1-k) ≤ m,B取走(m+1-k),物品已经取完,A当前局面是0,A输B赢,因此x是一个必败态,A必输。
证命题2,当 r ≠ 0的时候,A一次性把 r 取完,剩下t(m+1)局面给B,根据命题1可知,B进入必败态,A赢B输,因此x是一个必胜态,A必赢。
此文为巴什博弈,可以看到图中还有威佐夫博弈和尼姆博弈,他们是比巴什博弈更加复杂的ICG博弈,后面会继续写出。
其实关于巴什、威佐夫和尼姆博弈的文章非常非常多,为什么小白还要继续写,目的已经在文章开头说明了,目的不是为了脱颖而出,而是为了探索一个新领域,弄清楚当年的迷惑。(觉得复仇更加接地气)