博弈论

             最近,由于省赛的二试最后一题,我对博弈兴起了一种莫名其妙的兴趣。看了差不多两天的论文和资料,今天就在这里总结一下博弈中最简单的一类问题:取石子游戏。

例题1:巴什博弈(Bash Game)
             有一堆石子,两个人取,每次至少取一个,最多取M个,取完最后一个的胜。问先者胜还是败?
             对于博弈问题,我觉得最关键的是八个字:运筹帷幄,操纵全局!!!
             我们考虑的方向是:假设我最后能取得胜利,那么我们该怎么维持这个胜局?
             为了达到这个目的,我们就得想到一个“平衡”策略来使对方改变不了局势。
             例如这一道题。由于最多只能取M个,所以说只要自己取剩下的个数不小等于M,对方就赢不了,假设你这时处于优势,那最后的胜利者就一定是你了。
             所以我们的平衡策略是:首先将石子数取剩(M+1)的倍数,然后保持对方和自己每轮取的石子总和等于M+1,使剩余的石子数总是(M+1)的倍数,那么最后先者就能胜利。相反,如果石子数一开始就是(M+1)的倍数,那么你就会被对方给“平衡”了,先者败。

例题2:威佐夫博弈(Wythoff Game)
             两堆石子,两人取,两种操作:1 同时两堆取x个;2 只对一堆取x个(x均大于0)。取完最后一个胜。
             首先(0,0)肯定是先者败,其余(0,k)(k>0)都肯定是先者胜。我们称先者胜的局势叫“必胜态”,先者败的局势是“必败态”。
            由于这道题的必败态比较少,所以我们先列举出必败态:(0,0)、(1,2)、(3,5)、(4,7)......
             调转一下也一样,这些必败态比较特殊,叫做“奇异局势”。
             为什么特殊呢?因为它既有一个强大的性质,又有一个更强大的公式。
             性质:任何自然数都被包含在一个且仅有一个奇异局势中。
             公式:ak=int(k*(1.0+sqrt(5.0))/2.0),bk=ak+k(不知怎的跟黄金分割竟然有关)
             在这里,我强调一下博弈的两个命题,命题的正确性十分重要。
                   1 任何出度不为0的必败态 一定转化为必胜态
                   2 任何必胜态都 至少可以转化为一个必败态
             这一题就是这两个命题表现很好的例子。

例题3:尼姆博弈(Nim Game)
           有N堆石子,两人轮流取子,每次可以选任意一堆取x个(x>0),取完最后一个胜。
           这是一道博弈里非常有名的题目。我们要充分使用博弈的“八字战略”和“二命题判定”来解决它。                 
             那首先我们如何“运筹帷幄,操纵全局”呢?
             我们聪明的Nim就想到了用二进制来表示全局状态。
             算法:对于所有的石子堆,把石子个数异或一下,如果!=0先者胜,==0先者败。
             很神奇的说。。。
             二命题判定:
                   1 任何一个非全0的状态且异或值为0的状态一定转化为异或值为非0数的状态。
               2 任何一个异或值非0的状态都可以转化为异或值为0的状态。
                    即必败定转为必胜,必胜至少可转为必败。
           对于这两个命题,我们可以给出如下证明:
                命题1: 因为没有全0状态,所以二进制每一位上1的个数为偶数且不为0,当我们拿走任意一堆的石子数若干个之后,那堆石子的二进制必有1个1降位,那么就破坏了每一位1的个数为偶数的性质。
               命题2: 我们首先可以先找到异或值之后最高为的1在那一堆石子里,那堆石子至少有2^k个石子(k是异或值后1的最高位)。然后在那堆石子里取1-2^k个石子,使其降位,然后重新分配0-k-1位的0和1,使得剩下的每一位二进制的异或值都为0。
           证毕。。。

例题4:Nim Staircase(Nim Game的拓展)
           有1-n堆石子,现在要把所有石子都一道0号位置(第1堆的左边),最后移动的人获胜。
           这道题先给出算法,然后再想想为什么?记得活用博弈八字和二命题,以及前面的例题。
             算法:把所有奇数位的石子数异或,!=0先者胜,==0先者败。
             很简单吧。。这道题就是活用八字战略就可以了,二命题证明上面就已经讲过了。。。
             我们的目的是把所有石子移到0号堆,而直接跟0号堆有关系的就是1号堆,所以我们不能让对方控制住1号堆,那该怎么办呢?
             很简单。以子之矛,攻子之盾。
             对方想要控制1号堆,就必须用2号堆来打乱一号堆的秩序(因为1号堆刚开始是在先者的控制下),所以只要对方移x个进入1号堆,我们就把这x个立刻移到0号堆。这样他就得不到主动权了。
             同理,对于所以偶数位的石堆,只要它被对方移到奇数位的石堆,我们就把它在往左移回到偶数位,最终也只是由我方移到0号堆。
             因此,我方的问题就是要把奇数位的石子正确地移动到偶数位恶上,只要移动到偶数位上,就相当于移到了0号堆上。这样只能移到相邻的左边堆的限制就相当于没有了,完全就是赤裸裸的Nim Game问题了。。。

例题5:
             有n堆石子,每次在任何一堆可以取至少1个,最多m个,最后取完者胜。
             这个其实就是例题1和例题3的完美结合。。。
             我的理解:退一步,进两步。。。
             由于我们取石子没有多少限制,没一种状态都是对任何一堆取1-m个(当然全0的状态除外),所以我们取石子的顺序,对后面任何一个石子堆的结果都是一样的,可以符合交换律。所以问题可以如下转换:
             首先,我方先让对方一步,但是我们必须按从1-n堆的顺序取,当每堆石子取剩下的个数不超过M的时候,换取下一堆。直到所有石子堆里的石子数都不超过M。这一局可以用例题1的方法取子。
             接下来,无论上一局的最后一个是谁取的,这一局都是我方先取(相当于把第一步移了过来),这时,所有石堆的个数都不超过M,相当于没有M个的限制,那么就可例题3的取子方法一样了。
             所以最后的算法就是:先把所有的石子个数mod(M+1),然后异或剩下的石子数,!=0先者胜,==0先者败。

例题6:Nimk问题
             有n堆石子,每次最多可以选择k堆石子取若干个(不可不取),最后取完者胜。
             算法:把n堆石子转化成二进制,然后每位相加,最后各自mod(k+1),如果最后每一位mod的结果都是0,那么先者败,否则先者胜。
             这是一道很好的拓展题,它是我们更深一层体会到了Nim的原理,而不只是表面上的公式。
             由每次控制1位,到每次控制1-k位,都很好的运用了八字战略和二命题判定。
             八字战略,是博弈的核心所在,体现了博弈的本质,所以我们要时常怀着它做博弈,那就会简单些。
             二命题判定,我希望我们能每一次都能清楚的写出来,证明好,想好了再做,这样能避免很多错误。
                   1 对于非全0必败态每位相加并取mod(k+1)必定会转化为有一位相加取mod不为0的必胜态。
                   2 对于任何一个必胜态至少可以转化为全部位置相加取mod等于0的必败态。
             证明和每次只能取一堆的类似,在此略过。交给读者自己解决吧。。。

例题7:SJ定理
             接下来,简单介绍一下贾志豪大牛的SJ定理吧。。
             有n堆石子,每次可选一堆石子取若干个,不能不取,取到最后石子的人输。
             SJ定理(先手必胜的两种情况):
                     1 游戏的异或值不为0且其中某个石堆的个数大于1
                     2 游戏的异或值等于0且游戏中没有石堆的个数大于1
             二命题:
                     1 非终止先手必败局一定只能转移到先手必胜局
                     2 先手必胜局一定能转移到至少一个先手必胜局

例题8:
             N粒石子,两人轮流取,一次至少拿一粒,最多拿先前对方的两倍,先者不能一开始拿完。最后拿完的胜。
             摘自骆骥大牛的论文,简单说一下他论文的内容。
             1 一般性解法:N<=100。记忆化搜索。F[n][k]代表剩下n个,最多取k个的胜负状态。时间O(n^3)。
             2 特殊性解法:找规律,Fibonacci数。并给出了证明(在本文略过),时间O(log N)。

=================================================
              博弈论可以说是博大精深,刚刚我讲的那些还只是皮毛,接下来我还会有更进一步的学习。
       请记住博弈八字战略和二命题判定。
参考文献:
             《策略游戏》 From 朱全民老师
             《组合游戏略述——浅谈SG游戏的若干拓展即变形》 From 贾志豪
             《浅析解“对策问题”的两种思路》 From 骆骥
             《解析一类组合游戏》From 王晓珂
             《由感性认识到理性认识——透析一类搏弈游戏的解答过程 》 From 张一飞
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值