zoukankan      html  css  js  c++  java
  • 平等博弈

    前言:博弈论博大精深。

       所谓平等博弈只是博弈论,应该说是组合博弈的一个分支。

        本来还想做一篇详细基础解说向,但是实在嫌麻烦,所以我要强调一下本文属于补充备注类型,甚至可以说是记录的草稿。建议看了推荐的那些东西再来看本文作为一个补充吧。

       总之,有什么说的不对的,还请大家不惜余力指出。

    推荐:

      http://blog.csdn.net/acm_cxlove/article/details/7854526 cxlove总结得很好。最重点是里面的一些论文+"Game Theory"那篇。

          http://www.cnblogs.com/kuangbin/archive/2011/08/28/2156426.html

     


    约定:

    符号   意义
    P(Previous) 先手
    N(Next) 后手

    一般博弈:最后取光的人获胜,也就是当什么都没有的时候,P. —— 0 : P

    ANTI-博弈:最后取光的人获胜,也就是当什么都没有的时候,N. —— 0 : N



    一般博弈:

    然后,在正文开始之前,我还是再次强调一下判断胜负的逻辑吧,因为这是做出决定的最基础理由:

      若P,则任何一个下一步都会是N。

      若N,则存在一个下一步是P。

    解释:

    1、"若P,则任何一个下一步都会是N。" —— 我现在下,我是先手,P也就意味着是"我会输",那么除非我现在下的每一步都会导致对方是赢的(因为博弈的前提是双方要选的每步都是最优的,如果我有可以不让对方赢的一步可以走,那我肯定走那一步啦~)——而"对方是赢的"对应着对方的N。(因为我相对于对方来说是后手。)

    2、有了上一个的解释,这个就容易了。"若N,则存在一个下一步是P。"——我现在下,我是先手,后手输,就意味着"对方会输",那么只要我有一个"下一步"会导致对手输就够了(因为每次我都会选最优的解呀~)。——而"对方是输的"对应着对方的P。(因为下一步的对方就是整个游戏的先手。)

     

    平等博弈:什么是平等博弈? 简单来讲就是双方的约束是一样的,比方说取石子,规定你取[1,m]个,规定我也是[1,m]个,那就是平等的。

         如果说规定你取奇数,我取偶数,那就不平等了。

      那有什么区别呢?最直接的区别就是,平等博弈可以用SG解,而不平等博弈按照方展鹏的论文要用到超实数(超现实数,surreal number)。

     


     OK!准备完毕,让我们进入正题吧~

    基本分类

    1. 巴什博奕(Bash Game): 只有一堆n个物品,两个人轮流从这堆物品中取物,每次只能选择从其中一堆中取,至少取一个,最多取m个。最后取光者得胜。
    2. 威佐夫博奕(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
    3. 尼姆博奕(Nim Game):有n堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
    4. Anti-SG 和SJ定理 
    5. Mulit-SG
    6. Every-SG
    7. 翻硬币
    8. 无向图删边——树的删边
    9. 证明(虽然在博客里并不摆出证明,但是证明还是很重要的,主要是对变形很重要,而且花点时间看看证明也很有趣~)

     【4-9详见推荐论文】



     

    然后简单讲一下前3种模型的解决方式:


     

    1、巴什博奕(Bash Game:只有一堆n个物品,两个人轮流从这堆物品中取物,每次只能选择从其中一堆中取,至少取一个,最多取m个。最后取光者得胜。

         注意:取石子的数定要为不间断整数[1,m]

      这种最简单,就算不知道博弈论,在数据量小的情况下也能用递推得出。当然,我们递推进行真假判断的依据,就是一开头列出的逻辑。

      其实,在我看来,这个模型的博弈的意义,主要还是找规律,其实就是找循环节。有了推理逻辑,递推很快可以出结论,但是这样不快——其实只要稍微枚举一下就可以发现规律。然后就可以用规律来改进递推了。  

    例1:现有一堆21个物品,两个人轮流从这堆物品中取物,每次只能选择从其中一堆中取,至少取一个,最多取5个。最后取光者得胜。

    分析: 最后取光者得胜——当n = 0 时,P。

    例1: n = 21,m = 5
    n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
    status P N N N N N P N N N N N P N N N N N P N N N

     

    可以看出,从0开始,每次都是隔m个N是一个P。当然,这是一个规律,可是为什么呢?

    解释:

    因为当有m+1个元素的时候,由于每次最多只能取m个,所以我们怎样都取不完。那么剩下的部分rest = (m+1)-i [1=<i<=m],会得出 1=<rest <=m,刚好满足最少取1个,最多取m个——也就是说另一个人一定可以取完(因为我们的前提是每个人足够聪明,每次都能走最优解嘛~),所以现在走的人在现在还剩下m+1个石子时,不管怎么取都是输的。

    所以有了如下思路:作为先手,我们要是能保证——每次对方取时都会遇到类似m+1这种情况,那么我们就一定能赢。

    所以当n = (m+1)*k + x[i]  (1=<x[i]<=m)时,先手一定能取胜。

    具体策略是这样的: 由于是先手,所以可以先拿走i个,把局面变成了n =  (m+1)*k个,然后对方只能最多拿m个,按照之前的分析,又到我下的时候,局势又会变成 n = (m+1)*(k-1) + x[j] (1=<x[j]<=m)个(其实就是原来的局势)。依次类推到n = m+1的时候刚好是对方下的时候,BINGO,我们赢了!

    所以我觉得这类博弈就算是找规律也很好就解出来了,遇到这种题拼的就是手速了(TmT)。

     

    练习题目 HDU:1846,2149


     2、威佐夫博奕(Wythoff Game:有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

      首先,这种只有"2堆"+"2个人"+"轮流取"的题目很容易让人想到递推,而且我记得这类的题目在我还不知道博弈论为何物的时候的确就是用递推做的,当然数据量小的时候,还是可以做的 。0 0……

      虽然很多人,尤其是第一次看的时候,会觉得"尼姆博奕(Nimm Game)"用的方法更加有特色,或者说更加有算法的技巧性;但是我本人还是觉得"威佐夫博奕"模型(以下简称WG)的结论是这3类博弈中最优美的。

      设黄金分割数为 φ = (1+5/2

      结论为:ak =floor(k*φ)bk= ak + k  k=012,…,n 方括号表示取整函数)

      具体实现:因为 k = bk - ak

           所以程序判断是否为P的局势时,只要判断 ak == (int)((bk - ak)*(1+5)/2) ,是真则P,假则N。

       Wythoff Game具体也可以参看一篇英文论文……忘了叫什么了……要指出的是该论文也没有具体证明黄金分割数的由来, 但是其中一些理解和解释更加浅显,并且比很多公式化的解说有趣得多


     3、尼姆博奕(Nim Game):有三堆各若干个物品,分别为x1,x2,x3,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

     判断方法:x1⊕x2⊕x3 == 0 ↔ P. (⊕为异或,英文:xor)

    推广:有n堆各若干个物品,x1,x2,x3……xn,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

     判断方法:x1⊕x2⊕x3⊕……⊕xn == 0 ↔ P.

    由于(0,0,0,……0)是P,若把全部xi变成二进制,那么(0,0,0,……0)的状态就是0⊕0⊕……⊕0,以后只要每次我们取完石子后,使得对方面临的状态是所有堆数异或起来是0(每位1的数量是偶数),那么对方每次取都会使得某位上的1的数量为奇数。所以我们面对的是某位上的1的数量为奇数的局势,而且我方一定有方法使对方一定面对"每位1的数量是偶数"的局势……这样下去总会到对方面对的是(0,0,0,……0)的局势。然后我方就赢了……囧。

    具体的,若有3堆x1,x2,x3,且一开始的时候 x1⊕x2⊕x3!=0, 那么我们怎么做才能使对方面对的是"某位上的1的数量为奇数"的局势呢?

      如果我们要移x1那一堆,那么由异或的特性可以知,我们移动x1到(x2⊕x3)的数量即可(当然,x1本身要大于(x2⊕x3)才行……总不能越取越多吧……)。

    【说明】  若 x1' = (x2⊕x3); 则局势变为 (x1',x2,x3)→ x1'⊕x2⊕x3 → x2⊕x3 ⊕x2⊕x3  = 0

     HDU:1850

     

    精简版小结一下4种博弈

    名称 描述 解决方法 注释 要点+注意事项
    Bash  1堆+2人+某1堆取[1,m]个 if(n%(m+1)) N; else P . n为这一堆的石子个数 当n = (m+1)*k + x[i]  (1=<x[i]<=m)时,先手一定能取胜(N)。
    Wythoff 2堆+2人+某1堆至少1个 或 某2堆相同个 if(ak == (int)((bk - ak)*(1+5)/2)) P; else N.   (ak,bk)分别为2堆石子个数,且ak<bk.  
    Nim  n堆+2人+ 某1堆至少1个 if(x1⊕x2⊕x3⊕……⊕xn == 0) P;else N.    xi为第i堆的石子个数【1】  

    【1】:对于Anti-SG为什么要提出所有xi为1时的特例,而不是其他?

    答:本人是觉得,因为当xi>1时,可以选择控制xi到0或者到1——有主动权。而当xi==1时,就只能到0了。

     

    转:

      SG函数适用范围和限制条件:

    • 甲乙两人取石子游戏及其类似的游戏;——2人
    • 每一步只能对某一堆石子进行操作;
    • 每一步操作的限制,只与这堆石子的数目或一些常数有关;—— 如:1、至少1个,2、[1,m]个,3、连续相邻x个等
    • 操作在有限步内终止,并不会出现循环;
    • 谁无法继续操作,谁就是输家。 —— 0:P

     其余部分就如cxlove所说张一飞+贾志豪+方展鹏+曹钦翔这几个人的论文写得很清楚了,况且现在国家集训队的论文什么的都是些烂大街的资料了……所以大家自己找来看看吧。我也就不说了。

    为什么这样是对的? 为什么那样是错的? 凭什么这样是最优的? 凭什么那样不是最优的? 为什么没有更优的解法? 就不能找一个更好的解法吗? 若不知其所以然何苦知其然?
  • 相关阅读:
    LA 2038 Strategic game(最小点覆盖,树形dp,二分匹配)
    UVA 10564 Paths through the Hourglass(背包)
    Codeforces Round #323 (Div. 2) D 582B Once Again...(快速幂)
    UVALive 3530 Martian Mining(贪心,dp)
    UVALive 4727 Jump(约瑟夫环,递推)
    UVALive 4731 Cellular Network(贪心,dp)
    UVA Mega Man's Mission(状压dp)
    Aizu 2456 Usoperanto (贪心)
    UVA 11404 Plalidromic Subsquence (回文子序列,LCS)
    Aizu 2304 Reverse Roads(无向流)
  • 原文地址:https://www.cnblogs.com/PeanutPrince/p/3512951.html
Copyright © 2011-2022 走看看