zoukankan      html  css  js  c++  java
  • 经典博弈论

    基本性质

    一、必胜点与必败点

    • (P)点:必败点, 在双方都无比聪明的情况下,当前先手的人必败的情况。
    • (N)点:必胜点,在双方操作都正确的情况下,先手必胜的位置。

    几个性质

    • 所有终止位置都是必败点。(可当做公理,即所有公式的推理都在这个性质成立的基础上进行)。
    • 从任意一个必胜点(N)出发,至少有一种方式到达一个必败点(P)
    • 从一个必败点(P)出发,所有的移动都会到达必胜点(N)

    二、无偏博弈

    无偏博弈是一类任意局势对于游戏双方都是平等回合制双人游戏。这里平等的意思是所有可行的走法仅仅依赖于当前的局势,而与现在正要行动的是哪一方无关。换句话说,两个游戏者除了先后手之外毫无区别。此外还需要满足以下性质:

    • 完全信息,任意一个玩家都能够知晓整个游戏状态。
    • 无随机行动,所有的行动都会转移到一个唯一确定的状态。
    • 在有限步内游戏会终止, 此时有位移的必胜者。

    三、常见模型

    • 巴什博弈(Bash Game)
    • 尼姆游戏(Nim Game)
    • 威佐夫博弈(Wythoff Game)
    • Anti-SG游戏
    • Multi-SG游戏
    • Every-SG游戏
    • 翻硬币游戏

    巴什博弈

    基本问题

    有一堆石子,总个数是 n,两名玩家轮流在石子堆中拿石子,每次至少取 1 个,至多取 m 个。取走最后一个石子的玩家为胜者。判定先手和后手谁胜。

    解决方法

    ((m+1) mid n) 时,先手必败,否则先手必胜。
    证明
    假设 ((m + 1) mid n) ,先手面对这样一种情况拿了 x 个,后手就会拿 m+1-n 个,这样无论怎么拿,最后只会剩下 m+1 个,在这种情况下,无论先手拿 1~m 中的哪一个,都会剩下 m+1-x 个,且 (1 leq m + 1 - x leq m) ,因此后手可以将剩下的石头取光而必胜。

    当上边假设不成立的情况时, 先手可以先取走 (n operatorname{mod} (m+1)) 个 ,这样问题就转化成了后手面对 ((m+1) mid n) 个石子的情况了, 也就是这种情况的后手转化成了上一种情况的先手。因此在这种情况下先手必胜。

    题目 & 代码

    HDU 1846 Brave Game

    尼姆游戏

    基本问题

    有 n 堆石子 (x_1, x_2,x_3,dots,x_n),两人轮流取,每次可以从任意一堆石子中取走任意多个石子(不能不取),问先后手谁胜。

    解决方法

    对于 Nim 游戏,前辈们发现了一条重要的性质;
    当 n 堆石子的数量异或和等于 0 时,先手必胜,否则先手必败。

    证明
    (oplus)表示异或
    Nim 游戏的必败态很显然,就是当前 n 堆石子的数量都为 0 的时候。
    我们们用 (a_i) 来表示第i堆石子的数量,那么当前的局面就是:
    (0 oplus 0 oplus 0 oplus 0 oplus 0 oplus 0 = 0)

    • 对于先手来说,如果当前的局面为 (a_1 oplus a_2 oplus a_3 oplus dots oplus a_n = k)

    那么一定存在某个(a_i), 它的的二进制表示在最高位 k 上一定为1。
    我们将(a_i oplus k) 就变成了:

    [a_1 oplus a_2 oplus a_3 oplus dots oplus a_n oplus k = 0 ]

    此时先手必胜。

    • 对于先手来说,如果当前的局面为(a_1 oplus a_2 oplus a_3 oplus dots oplus a_n = 0)

    我们并不可以将一个 (a_i) 异或上一个数之后使得 (a_1 oplus a_2 oplus a_3 oplus dots oplus a_n = 0)

    此时先手必败。

    拓展形式

    • 每次取石子的时候有一个上界 m 。

    这是一个 Bash Game + Nim Game,只需要将所有的石子数对 m+1 取膜然后再异或就可以了。

    • 每次允许从 k 堆石子中取 ((Nim_k))。

    我们一般考虑的情况为 (Nim_1) (也就是上边一般的 Nim 游戏), 我们的解法是考虑2进制下的异或和是否为 0, 而异或是不进位的加法。
    同理对于 (Nim_k) 的情况, 我们考虑 k+1 进制下的每一位不进位加法的结果,如果每一位都为 0 的话就为 P 局面, 否则就是 N 局面。

    题目 & 代码

    洛谷P2197 Nim游戏

    威佐夫博弈

    基本问题

    有两堆石子,两个顶尖聪明的人在玩游戏,每次每个人可以从任意一堆石子中取任意多的石子或者从两堆石子中取同样多的石子,不能取得人输,分析谁会获得胜利。

    解决方法

    打表找规律
    威佐夫博弈不同于 Nim 游戏与巴什博弈,他的特别之处在于不能将两堆石子分开处理。
    前辈们在对该博弈游戏进行大量的探索之后,最终找到了一些非常有趣的性质。

    定义先手必输的局势为奇异局势,经过打表找规律之后发现前几个奇异局势是这样的:
    ((0. 0) (1. 2) (3, 5) (4, 7) (6, 10) dots)

    我们设 ((x, y)) 为第 k 个奇异局势。

    性质:

    1. x为前 (1 dots k) 个奇异局势中未出现的最小正整数,y=x+k 。
      打表找规律即可证明
    2. 任何一个自然数都包含在在一个且仅有一个奇异局势中。

    证明
    证明上述性质只需要证明两点:
    1.任意自然数都出现过。 2.任意自然数仅出现过一次。
    对于1.
    反证法,假设一个数 v 没有出现过。
    (ecause) 一个数 v 并没有出现过。
    ( herefore) v 可以组成一个新的奇异局势。
    假设不成立。
    对于2.
    反证法,假设一个数 v 出现过两次。
    (ecause) 奇异局势 ((x, y)) 中的 x 为之前未出现过的最小正整数。
    ( herefore) v 不能为 x。
    ( herefore) v 只能为奇异局势中的 y。
    (ecause) 任意一个奇异局势中的差值不相同。
    因此 v 不可能出现两次。

    1. 任何操作都能将奇异局势变为非奇异局势。

    若取走一堆中的石子,堆石子的差值就会改变,必将成为非奇异局势。
    若两堆石子中都取一个,因为同一差值只会对应一种奇异局势,因此必将成为非奇异局势。

    1. 可以用适当的方法将非奇异局势转化为奇异局势。

    可以通过改变两堆的差值来将非奇异局势转化为奇异局势,或者说知道差值之后改变两堆大小也可以转化为奇异局势。

    结论

    人们通过对上述性质的探索, 同时结合Betty定理,给出了威佐夫博弈的重要结论。

    假设两堆石子为 ((x, y) (x < y))

    当且仅当 $(y - x) imes frac{sqrt 5 + 1} {3} = x $ 时先手必败。

    其中 $frac{sqrt 5 + 1} {3} $ 为 (1.618dots) (黄金分割数)。

    证明的话你要先会证明 Betty定理

    然后才是 威佐夫博弈结论

    题目 & 代码

    取石子游戏

    小结

    主要是定义难理解。
    主要参考, yyb的博弈论总结 & attack 大爷的blog

  • 相关阅读:
    20181022-JSP 开发环境搭建
    20181019-JSP 教程/简介
    20180829-Java多线程编程
    20180827(02)- Java发送邮件
    20180827-Java网络编程
    20180912-Java实例02
    docker安装redis
    springboot2集成swagger2出现guava包下的FluentIterable.append方法找不到
    Linux Centos7 网络设置UUID号的修改方法
    CentOS 7 主机名bogon解决办法
  • 原文地址:https://www.cnblogs.com/zzz-hhh/p/13625295.html
Copyright © 2011-2022 走看看