• 小结博弈


    参考资料:https://www.cnblogs.com/kuangbin/archive/2011/08/28/2156426.html

    一、巴什博奕

    只有一堆物品,两人轮流取,每次最多m个,最少一个。最后取光者获胜

    分析:假设共n个物品,n=m+1, 那么先手必败。所以为了先手必胜。可以把n表示为

    n = k(m+1) + s  ,  s <= m

    只要先手取s个,把数量维持到m+1的倍数即可。对方取r个,自己就取m+1-r个

    二、威佐夫博弈

    有两堆物品,两人轮流取,每次可以从一堆或两堆取相同数量物品,最少1个,最多不限,最后取光者获胜

    分析:用(ak,bk)ak<bk, k=0,1,2,3……表示两堆的数量,也称局势

    其中如果甲面对(0, 0)局势,那么甲已经输了,称奇异局势

    前几个奇异局势:(0,0) (1,2)   (3,5)  (4, 7)  (6, 10)

    其中ak就是前面未出现的最小数,bk = ak + k

    可以看出奇异局势 有以下三种性质

    ①:任何自然数都包含在一个且仅有一个的奇异局势中

      证明:由于ak是没出现的最小数,所以ak>ak-1 而bk=ak+k>ak-1+k-1=bk-1>ak-1

    ②:任意操作都可以把奇异局势转化为非奇异局势

      证明:若只改变(ak,bk)的某个分量,那么另一个分量一定不在其他奇异局势里。所以必然是非奇异局势。

         如果使两个分量同时减少,由于差不变,肯定也是非奇异局势

    ③:适当操作就可以把非奇异局势转化为奇异局势

      证明有两个不懂。所以(证明见文顶参考资料)

    从以上性质可知:面对非奇异局势,先手必胜;反之,后手必胜

    现在问题就是 如果判断一个局势(a,b) 是不是奇异局势

    深奥的看不是太懂,不过可以这样判断

    已知 a < b, 奇异局势:a = k*1.618

    k = b - a,  1.618=(sqrt(5)+1)/2;

    三、尼姆博弈

    有三堆物品,两人轮流从某一堆取任意多物品,每次至少一个,最后取光者获胜

    分析:与二进制有关,用(a,b,c) 表示某种局势,首先(0,0,0) 是奇异局势,无论谁面对必败。

    第二种奇异局势(0,n,n), 只要对手拿走一样多的物品,最后都将导致(0,0,0)。

    仔细分析(1,2,3)也是奇异局势,无论谁拿,都会变为(0,n,n)

    这里介绍异或运算 二进制对应位 不一样为1,一样为0

    对于奇异局势 (0,n,n) 异或结果为0

    对于任何奇异局势 (a,b,c)  a^b^c = 0

    如果我们面对非奇异(a,b,c),要如何变为奇异局势? 

    假设a<b<c 我们只虚把 c 变为 a^b 即可

    所以就把c减去c-a^b

    重点理解:取火柴游戏:

    题目1:今有若干堆火柴,两人依次从中拿取,规定每次只能从一堆中取若干根, 
    可将一堆全取走,但不可不取,最后取完者为胜,求必胜的方法。 
    题目2:今有若干堆火柴,两人依次从中拿取,规定每次只能从一堆中取若干根, 
    可将一堆全取走,但不可不取,最后取完者为负,求必胜的方法。

    定义:若所有火柴数异或为0,则称为利他态,用T表示,否则就利己态 用S表示

    因为谁面对异或为0, 就输了,所以是利他(对手)态

    第一个题目:

    定理一:对于任何一个S态,总能从一堆火柴中取出若干使之成为T态

    证明:

      若有n堆火柴,每堆A(i) 根火柴,那么既然处于S态,

      c=A(1)^A(2)^……^A(n) > 0

      把c表示成二进制,记最高位为第p位,则必然存在一个A(t), 它的第p位也是1。

      那么我们把 x=A(t)^c , 则得到x<A(t),因为最高位同为1,肯定小了。所以x<A(t)

         A(1)^A(2)^……^x^……^A(n)

      = A(1)^A(2)^……^A(t)^c^……^A(n)

      = A(1)^A(2)^……^A(n)^A(1)^A(2)^……^A(n)

      = 0

      也就是说从A(t)中取出 A(t)-x 根火柴,会从S态变为T态。证毕。

    定理二:T态,取任何一堆的若干根,都成为S态。

    证明:

      反证法:c=A(1)^A(2)^……^A(i)^……^A(n)

      c'=A(1)^A(2)^……^A( i' )^……^A(n) 

      c ^ c' = A(1)^A(1)^A(2)^A(2)^……A(i)^A(i')^……^A(n)^A(n)=A(i)^A(i')=0

      推出A(i)=A(i'),与已知矛盾,所以命题得证

       

    定理三:S态,只要方法正确,必胜

    证明:

      最终胜利即由S态转化为T态,任何一个S态,只要把它变为T态(由定理一,S态可以变为T态),对于T态来说只能变为S态(由定理   二)。所以S态向T态都可以由自己控制,对方只能被动的实现T态变为S态。故S态必胜

    定理四:T态,只要对方方法正确,必败

    证明:

      由定理三易得。

    总结:对于先取光胜利的博弈,S态必胜,T态必败。

    第二个题目:

    定义:若一堆中仅有1根火柴,称为孤单堆。若大于1根,则称为充裕堆

    定义:T态中,若充裕堆的堆数大于等于2,称为完全利他态,用T2表示,若充裕堆为0,称为部分利他态,用T0表示

    不会有T1的存在:因为孤单堆异或只会影响最后一位,一个充裕堆可以影响高位。所以异或和不会为0

    定理五:S0态,即仅有奇数个孤单堆,必败。T0态必胜

    证明:

      S0态就是每次只能取1根,奇数堆,肯定是自己取的最后一根。必败。

      同理 ,T0态必胜。

    定理六:S1态,只要方法正确,必胜

    证明:

      若此时孤单堆为奇数,把充裕堆取完,否则取剩1根。

    定理七:S2态不可一次变为T0态

    证明:

      充裕堆不可能一次由2变为0

    定理八:S2态可一次变为T2态

    证明:

      由定理一,S态可变为T态,又由定理七可知,S2态不可一次变为T0态,所以可一次变为T2态(T1不存在)

    定理九:T2态,只能变为S2态或S1态

    证明:

      由定理二,T态只能变为S态。由于充裕堆不可能一次由2变为0,所以S态不可能为S0态。

    定理十:S2态,只要方法正确,必胜。

    证明:

      1)  S2态,就变为T2态  (定理八)

      2)对方只能变为S2态或S1态 (定理九)

      若变为S2态,继续1)

      若变为S1态,S1必胜。

    定理十一:T2态必输。

    证明:

      由定理十易得。

    总结:对于先取光失败的博弈,必胜态:S2、S1、T0、必败态:S0、T2

    SG值内容留

      

      

  • 相关阅读:
    解决eclipse maven 项目重新下载包这个问题
    Python猴子补丁
    浅谈服务治理与微服务
    微服务
    Tornado部署与运行
    tornado部署
    【测试】Gunicorn , uWSGI同步异步测试以及应用场景总结
    以gevent(协程) 方式跑uwsgi服务
    uwsgi配置理解
    python Web开发你要理解的WSGI & uwsgi详解
  • 原文地址:https://www.cnblogs.com/ACMerszl/p/10371521.html
Copyright © 2020-2023  润新知