zoukankan      html  css  js  c++  java
  • 【读书笔记】基础博弈知识小结

    一些概念和约定

    公平游戏:

      这里讨论的组合游戏都是公平游戏,也就是说一个游戏者可以把状态A变成B,那么另一个游戏者也可以。比如下棋就不是公平游戏,因为白方可以移动白子而黑方不能。

    状态图:

      我们可以把游戏的状态用图的形式来组织。一个状态是一个节点,一条边代表通过一次操作将一个状态转移到另一个状态。

    xor为二进制的异或运算,n个数的异或和在组合游戏中也称Nim和。

    有的资料中把必败状态也叫做奇异状态,但我感觉必败状态这种叫法更直白一些。

    假设游戏者双方都足够聪明,所以有这样两条规则:

    • 一个状态是必败状态当且仅当它所有的后继都是必胜状态。
    • 一个状态是必胜状态当且仅当它至少有一个后继是必败状态。

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

      显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的 法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个, 结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下(m+1)的倍数,就能最后获胜。

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

    本以为这是个比较简单的博弈,后来喜欢刨根问底的我发现涉及到的东西还真不少。

    主要参考资料:http://scimath.unl.edu/MIM/files/MATExamFiles/Cotton_MATpaper_Final_EDITED.pdf

    这个问题还可以描述成这样:

    • 有一个棋子在棋盘的(n, m)位置上,有两位个人分别轮流移动这枚棋子。移动的规则是:向左移动若干格子,或者向下移动若干格子,或者向左下移动若干格子。移动到左下角即(0, 0)的人获胜。

    先看几个比较简单的状态,如果先手面对的局面是(a, 0)或(0, a)或(a, a),那么直接将所有石子全部拿走即可获胜(或者说是将棋子直接移到左下角)。

    如果现在状态是(1, 2)会怎样呢?枚举一下所有可能的情况:

    • 拿走第一堆的一个石子,状态变为(0, 2),那么第二个人将第二堆的两个石子全部拿走即可获胜。
    • 拿走第二堆的一个石子,状态变为(1, 1),那么第二个人将两堆石子全部拿走即可获胜。
    • 拿走第二堆的两个石子,状态变为(1, 0),那么第二个人将第一堆的石子拿走即可获胜。
    • 分别拿走第一堆和第二堆的一个石子,状态变为(0, 1),那么第二个人拿走第二堆的一个石子即可获胜。

    也就是说无论第一个人怎样拿,第二个人都会获胜。那么称(1, 2)这个状态为必败状态或者奇异状态

    对于状态(1, 3)应该怎样?根据前面的分析,显然先手在第二堆取一个石子,将状态转移为(1, 2)就能获胜。

    同样地,对于状态(2, 3),先手分别在两堆中各拿走一个石子,就能把状态转移为(1, 2)。

    所以,对于状态(1, p)(p > 2)和状态(p, p+1)(p>1),先手将其转移为(1, 2)即可获胜。

    其他奇异状态

      如图A,两个黑色的格点(1, 2)和(2, 1)是已知奇异状态,过这两个格点向右向上向右上作射线,则这些射线上的点都可以转移到黑色的格点上去。所以这些射线上的点对应的状态是必胜状态。然后我们再取没被标记过的横纵坐标最小的格点作为新的奇异状态,也就是(3, 5)和(5, 3)。然后再过这两个点作射线,继而得到新的奇异状态,以此类推。

      有了这样一个过程,我们也很容易找到必胜的策略:如果现在的状态是必胜状态,那么必有一条射线经过该点。所以只要顺着这条射线将棋子移动到奇异状态(也就是图中的黑色格点)即可。这样对手在面对奇异状态的时候,不论怎么走,走到的都是有射线的格子(想一想,为什么)。所以你又可以把必胜状态转变为奇异状态给对手,最终获胜。

    不妨再多找几个奇异状态试试:

    因为两堆石子除了数量以外没有任何区别,所以只考虑(A, B)(A ≤ B)的奇异状态,做成表格如下:

    n 0 1 2 3 4 5 6 7 8 9 10
    A 0 1 3 4 6 8 9 11 12 14 ...
    B 0 2 5 7 10 13 15 18 20 23 ...

    容易发现一些规律:

    • An + n = Bn
    • ,这个可能不太好理解,不妨举个例子看一下:A3 + B3 = 4 + 7 = 11 = A7

      这两个数列还可以按这样的方法得到,An为A、B中前n-1个数中为出现过的最小的正整数,Bn = An + n。比如,A1 = 1, B1 = A1 + 1 = 2;A2为为出现的最小的正整数3,B2 = A2 + 2 = 5;A3为未出现的最小正整数4,B3 = A3 + 3 = 7...

    更强悍的通项公式

    设φ为黄金分割率(Golden Ratio),有,解得

    然后就有个神奇的结论:

    知道有人喜欢不服,又懒得自己算,所以这里好心再附上一张表格验证一下:

    n 0 1 2 3 4 5 6 7 8 ...
    φ⋅n 0 1.618 3.236 4.854 6.472 8.090 9.708 11.326 12.944 ...
    ⎣φ⋅n⎦ 0 1 3 4 6 8 9 11 12 ...
    φ2⋅n 0 2.618 5.236 7.854 10.472 13.090 15.708 18.326 20.944 ...
    ⎣φ2⋅n⎦ 0 2 5 7 10 13 15 18 20 ...

    最后还有一个事实要告诉大家:

      每个正整数只在A或者B中出现,且仅出现一次。换句话说就是,A和B中没有相同的正整数,但是A和B并起来就得到了所有的正整数。

    楼主的好奇心已经爆棚得不得了了,=_=||,干脆最后一口气又从维基百科上学了一下这个定理:

    Beatty sequence

      两个无理数α和β满足:

      那么两个数列{ ⎣α⎦, ⎣2α⎦, ⎣3α⎦... } 和 { ⎣β⎦, ⎣2β⎦, ⎣3β⎦... }是不相交的,而且他们的并集是所有的正整数。

    Rayleigh theorem

      感觉第二个证明的反证法比较好懂一些,英语并不是很多,所以就不翻译了。

       

    三、尼姆博弈(Nim Game):有三堆各若干个石子,两个人轮流从某一堆取任意多的石子,规定每次至少取一个,多者不限,最后取光者得胜,或者说最后不能操作的人输。

    因为是三堆石子,所以我们用(a, b, c)来表示一个状态。

    还是从最简单的状态开始:显然(0, 0, 0)是必败状态,其次(0, x, x)也是必败状态,因为你从某一堆中取k个石子,对手只要和你一样从另一堆中取同样的石子,保持两堆石子数量相同即可,这样最终取完的人将会是对手。

    Bouton定理:状态(a, b, c)为必败状态当且仅当a xor b xor c = 0.

    1).对于必胜状态,一定有一个后继必败状态。

      假设三堆石子的个数的异或和为X(X > 0),X最高位的1在第k位,那么一定有一堆石子的数量第k位为1。

      设这堆石子的数量为Y,我们只要把这堆变为X xor Y,就将必胜状态变为了必败状态。

      首先说明 X xor Y < Y,因为X的第k位左边全部为0,所以X xor Y后,Y的第k位左边不变,而第k位变为0,所以Y xor X后Y变小。

      下面计算Y变为X xor Y后所有数字的异或和:除了Y,所有数字的异或和为X xor Y,因为异或一个数两次相当于没有异或,然后再异或上Y改变以后的值X xor Y,最终答案为X xor Y xor (Y xor X) = 0,所以这是一个必败状态。

    2).对于必败状态,所有的后继都是必胜状态。

      因为要改变其中一堆火柴,不论哪一位发生变化,最终的xor和都不是0.

    另类的Nim游戏:还是和原来一样n堆里面取石子,每次只能从一堆里面取若干个,至少取一个。但取到最后一个石子的人

    天真地猜想一下,那结论是不是也要反过来呢?Nim为0必胜,不为0必败,很遗憾我误导你们了,=_=||

    这个问题变得更复杂了,所以得再引入一些新的概念才能解决。

    以下分析转自kuangbin的博客:http://www.cnblogs.com/kuangbin/archive/2011/08/28/2156426.html

    可能原文说得比较乱,所以这里把定义的概念统一列出来方便阅读:

    • T状态,即Nim和为0的状态
    • S状态,Nim和不为0的状态
    • 孤单堆,只有一个石子的石子堆,好吧,确实很孤单=_=||
    • 充裕堆,和孤单堆相反,至少有两个石子的石子堆。
    • 所以,一个石子堆不是孤单堆就是充裕堆

    将S、T状态与充裕堆的数量结合就可以得到分类更细致的状态:

    • S2,Nim和不为0,至少有两个充裕堆
    • S1,Nim和不为0,只有一个充裕堆
    • S0,Nim和不为0,没有充裕堆,也就是只有奇数个孤单堆
    • T2,Nim和为0,至少有两个充裕堆
    • T1,404 Not Found!孤单堆只会影响Nim和的最后一位,而充裕堆必然有一个高位的1,将导致Nim和中对应的高位也是1,所以不存在这样的状态
    • T0,Nim和为0,没有充裕堆,也就是只有偶数个孤单堆

    原文中还有更详细的推导:

    [定理5]:S0态,即仅有奇数个孤单堆,必败。T0态必胜。 
    证明:
    S0态,其实就是每次只能取一根。每次第奇数根都由己取,第偶数根都由对 
    方取,所以最后一根必己取。败。同理,  T0态必胜#
    [定理6]:S1态,只要方法正确,必胜。 
    证明:
    若此时孤单堆堆数为奇数,把充裕堆取完;否则,取成一根。这样,就变成奇数个孤单堆,由对方取。由定理5,对方必输。己必胜。  # 
    [定理7]:S2态不可转一次变为T0态。 
    证明:
    充裕堆数不可能一次由2变为0。得证。  # 

    [定理8]:S2态可一次转变为T2态。 
    证明:
    由定理1,S态可转变为T态,态可一次转变为T态,又由定理6,S2态不可转一次变为T0态,所以转变的T态为T2态。  # 
    [定理9]:T2态,只能转变为S2态或S1态。 
    证明:
    由定理2,T态必然变为S态。由于充裕堆数不可能一次由2变为0,所以此时的S态不可能为S0态。命题得证。 
    [定理10]:S2态,只要方法正确,必胜. 
    证明:
    方法如下: 
          1)  S2态,就把它变为T2态。(由定理8) 
          2)  对方只能T2转变成S2态或S1态(定理9)
        若转变为S2,  转向1) 
        若转变为S1,  这己必胜。(定理5) 
    [定理11]:T2态必输。 
    证明:同10。 
    综上所述,必输态有:  T2,S0 
              必胜态:    S2,S1,T0.

    最后说一下

    SG函数和SG定理:对于任意状态x,定义SG(x) = mex(S),其中S是x的后继状态的集合。SG(x) = 0当且仅当x为必败状态。

    组合游戏的和:假设有k个组合游戏G1,G2...Gk,定义一个新游戏:每个回合当前游戏者选择一个子游戏进行合法的操作,直到不能操作者输。这样和游戏的SG函数值为各个子游戏的SG函数值的Nim和。

    因为水平有限,仅仅是刚刚接触博弈论,所以这篇博客可能以后还会继续补充新的内容。

  • 相关阅读:
    [转]DllMain中不当操作导致死锁问题的分析——DllMain中要谨慎写代码(完结篇)
    【机器学习】深入理解人工神经网络结构
    【机器学习】初识人工神经网络
    【机器学习】通过正则化解决过拟合问题
    【机器学习】逻辑回归
    【机器学习】用Octave实现一元线性回归的梯度下降算法
    【机器学习】对梯度下降算法的进一步理解
    【机器学习】从分类问题区别机器学习类型 与 初步介绍无监督学习算法 PAC
    【机器学习】感知机学习算法(PLA)
    【机器学习】1 监督学习应用与梯度下降
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/4396404.html
Copyright © 2011-2022 走看看