zoukankan      html  css  js  c++  java
  • 博弈论笔记[未完成]

    <1> 分析博弈: 小红是个游戏迷,他和小蓝一起玩拿石子游戏。游戏规则为2个人轮流拿石子。一次可以拿1颗或3颗,规定谁取到最后一颗石子谁就胜出。最后决定由小红先取。两人都是游戏高手,该赢的绝不会输(表示不会失误)。问在知道石子总数的情况下,怎样快速预测谁将会胜出。

    取石子分为3种情况:
    ①: (1, 1) 共取走2个石子
    ②: (1, 3) 共取走4个石子
    ③: (3, 1) 共取走4个石子
    ④: (3, 3) 共取走6个石子

    则最后会剩下0, 1, 3三种情况的石子

    设①共进行N1次, ②进行N2次, ③进行N3次, ④进行N4次 ,最后剩下的为K个

    则总数 S = (1 + 1)*N1 + (1 + 3)*N2 + (3 + 1)*N3 + (3 + 3)*N4 + K
    = 2*N1 + 4*N2 + 4*N3 + 6*N4 + K
    = 2 * (N1 + 2*N2 + 2*N3 + 3*N3) + K
    因为 2 * (N1 + 2*N2 + 2*N3 + 3*N3) 为偶数, 所以剩下 K 个的时候, 又该第一个人取了

    当 K = 1 或者 3 时, 必胜;
    当 K = 0 时, 必败;

    可以写成:
    K 为偶数时, 必败;
    反之, 必胜;

    又因为 S 的奇偶性取决于 K 的奇偶性, 所以 K 的奇偶性关系到整个游戏的成败
    所以直接判断 S 奇偶就可以了
    ①: S 为奇数, 则 K 为1或3, 必胜
    ②: S 为偶数, 则 K 为0, 必败


    <2> 威佐夫博弈: 两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,
    多者不限,最后取光者得胜。

    我们用(ak,bk)(ak ≤ bk ,k=0,1,2,……,n)表示两堆物品的数量并称其为局势,如果甲
    面对(0,0),那么甲已经输了,这种局势我们称为奇异局势:
    (0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)..

    可以看出,a0 = b0 = 0,ak是未在前面出现过的最小自然数,而 bk = ak + k,奇异局势有如下三条性质:

    性质1: 任何自然数都包含在一个且仅有一个的奇异局势中
    证:
    因为ak 为未在前面出现过的最小自然数,那么ak > ak-1, 所以bk = ak + k > [ak-1 + (k - 1)] == bk-1
    所以性质1成立

    性质2: 任意操作都可以把奇异局势变为非奇异局势

    若只修改(ak, bk)其中一个分量,则另一个分量不可能是另一个奇异局势的分量,必为非奇异局势
    若把两个都减去同一个值,则两个分量的差值没有变,故必为非奇异局势

    性质3: 进行适当的操作, 就可以将非奇异局势变为奇异局势

    假设当前局势是(a, b)

    If (a == b) 同时取走 a 个物品, 局势变为(0, 0)

    If (a == ak && b > bk) 取走b - bk个物品, 局势变为(ak, bk)

    If (a == ak && b < bk) 未完成

    If (a > ak && b == ak + k) 取走a - ak个物品, 局势变为(ak, bk)

    If(a < ak && b == ak + k) 未完成
    If(a == aj (j < k)) 取走b - bj个物品, 局势变为(aj, bj)
    If(a == bj (j < k)) 取走b - aj个物品, 局势变为(aj, bj)

    故从上面的3个性质得到, 奇异局势可以变为非奇异局势, 非奇异局势可以变为奇异局势;
    所以面对奇异局势, 先手必败, 反之必胜

    判断奇异局势:
    假如局势是(a, b), 有如下公式
         黄金分割数
           |
           |
    ak = [k * (1 + √5) / 2] (方括号表示取整)
    bk = ak + k
    注:k 为 a 与 b 的差值
    若满足上述条件, 则为奇异局势, 即先手必败


    <3> 斐波那契博弈:
    未完成


    Nim:
    证:
    A1 ^ A2 ^ A3 ^… ^ AN = j

    At ^ j < At && At ^ j < j

    取石子使At => At ^ j

    原式 = j ^ j = 0


    阶梯Nim游戏:
    有n个位置1…n, 每个位置上有ai个石子. 有两个人轮流操作。操作步骤是:
    挑选1…n中任一一个存在石子的位置i, 将至少1个石子移动至i−1位置(也就是最
    后所有石子都 堆在在0这个位置), 谁不能操作谁输。
    求先手必胜还是必败。

    只看奇数位的石子堆, 进行Nim游戏, 也就是计算奇数位石子数量的异或和若某个人想要破环造成
    的Nim局势, 将偶数位的石子移到了奇数位, 那么另一个人就可以将移到i位置的石子移到i-1,
    Nim局势仍然没变, 故只用看奇数位的Nim异或和即可了

    后续点:是指按题目要求的走法可以一步达到的那一个点

  • 相关阅读:
    request.json 打印中文乱码解决
    看懂项目代码需要掌握的技能 (java语言)
    jmeter响应断言通过,结果树中却显示红色
    nginx的upstream后端名称居然变成了请求的host了?
    基于QRcode创建和识别二维码的研究
    thinkphp访问mysql中文字段问题
    apache https访问配置
    如何获得bibitem格式的参考文献
    CSharp: Image Matting
    word2vec回顾
  • 原文地址:https://www.cnblogs.com/zbr162/p/11822695.html
Copyright © 2011-2022 走看看