• 博弈论学习笔记


    写在前面

    博弈论(game theory)是一个神奇的东西。

    做得出来就做起飞,做不出来就裂开。结论找不到,挖坑往里跳。动手不动脑,费力不讨好。

    感谢神仙(yyb)​学长的讲课!!

    SG 函数

    P&N

    P点:必胜点

    N点:必败点

    性质:

    • 所有的终止位置都是必败点 P

    • 从任何一个必胜点 N 操作,至少有一种方法可以达到一个
      必败点 P。

    • 从一个必败点 P 出发,只能够到达必胜点 N。

    • P点较少,所以对于博弈游戏最基本的方法就是搜索P点。按游戏图的拓扑序转移,如果一个点出度为 0 并且没有被标记那么就为P点。

    • P 点之间不可以直接转移。

    无偏博弈

    • 平等的回合制双人游戏两个人除了先后手的区别之外就不存在任何区别。
    • 完全信息,任何一个游戏者都能够知晓整个游戏状态。
    • 无随机行动,所有的行动都会转移到一个唯一确定的状态。
    • 在有限步内游戏会终止,此时有唯一的胜者。

    SG定理

    Sprague − Grundy定理。

    所有一般胜利下的无偏博弈都能够转化成尼姆数表达的尼姆堆博弈,一个无偏博弈的
    尼姆值定义为这个博弈的等价尼姆数。

    SG函数

    Sprague − Grundy函数。

    条件:无偏博弈,决策集合为空的游戏者输(即不能操作者输)。元素之间不存在依赖关系。

    SG 函数可以有效的将相互独立的博弈局面分开,是处理博弈问题的一个有效的工具。

    [SG(x)=mex(SG(y)),x ightarrow yin E ]

    E为边集。

    一个局面的SG函数为它所有后继节点的(mex)

    同时:

    [SG(S)=oplus SG(x),xin S ]

    一个大游戏局面的SG函数为它的所有字游戏的SG函数的异或和。

    SG为0时先手必败。

    基本模型

    Bash博弈

    描述

    HDU1846

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

    结论

    ((m+1)|n)先手必败,否则先手必胜。

    要么先手把余数拿走,要么后手拿走余数。

    Wythoff博弈

    描述

    HDU1527 LuoguP2252

    有两堆石子,石子数可以不同。两人轮流取石子,每次可以在一堆中取,或者从两堆中取走相同个数的石子,数量不限,取走最后一个石头的人获胜。判定先手是否必胜。

    结论

    先手必败的状态形如:

    [([ix],[ix^2]) ]

    (x=frac{sqrt{5}+1}{2},[])表示下取整。

    Nim博弈

    描述

    LuoguP2197

    桌子上有(N)堆石子, 游戏者轮流取石子。每次只能从一堆中取出任意数目的石子, 但不能不取。
    无法操作者失败。

    结论

    最基本的博弈。

    (SG(x)=x)

    将每堆的石子数异或起来,先手必败当且仅当异或和为0。

    Nim拓展1(Nim+Bash)

    描述

    每次取的石子存在上界(m)

    结论

    需要把所有石子按照(m + 1)取模再考虑 Nim 游戏就好了。

    Nim拓展2(Nimk)

    描述

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

    结论

    我们一般考虑的情况是(Nim_1) ,我们的解法是考虑 2进制下的异或和是否为 0,而异或和是不进位的加法,同理,对于(Nim_k) 的情况,我们考虑 (k+1)​进制下每一位不进位加法的结果。先手必败当且仅当结果为0。

    Nim拓展3(阶梯博弈)

    描述

    阶梯博弈,即博弈在阶梯上进行,每次可以将一堆的若干式子移动到上一阶去,不可操作者输。

    结论

    忽略所有的偶数阶梯,只留下奇数阶梯,转化为普通的 Nim 游戏。

    对方移偶:我原封不动的放到再上一个奇数阶上去。

    对方移奇:相当于取石子。

    Anti-SG博弈

    描述

    LuoguP4279

    决策集合为空者的操作者胜利。

    给定 n 堆石子,每次每个人可以从任意一堆石子中拿走不少于一个的石子,拿走最后一个石子的人输。

    结论

    SJ 定理:于一个 Anti − SG 游戏,如果我们规定当前局面中所有单一游戏的 SG 为 0 时,游戏结束。

    则先手必胜的条件为:

    • 游戏的 SG 值不为 0,且存在一个单一游戏的 SG 值大于 1。
    • 游戏的 SG 值为 0,且不存在一个单一游戏的 SG 值大于 1。

    学长反复强调:记好了啊!!!

    Multi − SG 博弈

    描述

    决策集合为空的操作者输。一个单一游戏的后继可以是多个单一游戏。

    给定你(n)堆石子,每次可以取走任意数量个,或者将一堆式子拆分成两堆(事实上更多也是可行的)非空石子,不能操作者输,判定胜负。

    结论

    用SG函数解决。

    发现规律:

    (SG(x)=egin{cases}x-1&(x\%4=0)\x&(x\%4=1||2)\x+1&(x\%4=3)end{cases})

    Every−SG博弈

    描述

    HDU3595

    对于没有结束的任何一个单一游戏,操作者必须对其进行一步操作,无法操作者输。

    结论

    所有游戏都是独立的,并且我们发现无法操作者输,而同时又在进行多个游戏。因此,我们知道胜负情况只与最后结束的游戏的胜负情况相关。既然只与最后结束的游戏相关,那么我们这样分析:首先对于一个能够取得胜利的游戏,我们必定会取得胜利,这样一定不会让结果更差,因为只要赢了,这局游戏
    就一定不会让自己输。那么对于所有单个游戏的胜负情况,我们一定可以判定,但是对于整个 Every − SG 的情况,我们只能够通过最后结束的游戏判定。所以,对于一个我们必胜的游戏,我们一定会想办法将其尽可能的向后拖,即我们期望它尽可能完的结束;反过来,对于一个必败的游戏,我们一定会让他尽可能早的结束。这几句推论正确的理由都是所有游戏都是互相独立的。

    摘自学长课件。

    先手必胜的条件:当且仅当所有单一游戏的最大 step 是一个奇数。

    树的删边游戏

    描述

    给定一个 n 个节点的有根树,两人轮流删边,删去边之后,不和根节点联通的部分都会被移除。不能操作者输,判断胜负。

    结论

    定义叶子节点的 SG 值为 0,其他所有节点的 SG值为它所有儿子的 SG 值加 1 后的异或和。

    一些题目

    HDU1846

    HDU1527

    BZOJ1299

    POJ1704

    HDU1848

    HDU3032

    BZOJ2940

    HDU3595

    LuoguP2252

    LuoguP2197

    LuoguP4279

    LuoguP3185

    LuoguP3235

    有时间会写题解的。

    总结

    任重而道远。博弈论博大精深。考场上,一步动错,满盘皆输。

    物如此,事犹是,人亦然。

    未完待续❀

  • 相关阅读:
    [Swift通天遁地]四、网络和线程-(4)使用Alamofire实现网络请求
    [Swift通天遁地]四、网络和线程-(3)线程组:使用DispatchGroup(调度组)对线程进行分组管理
    [Swift通天遁地]四、网络和线程-(2)通过BlockOperation实现线程的队列
    [Swift]LeetCode253.会议室 II $ Meeting Rooms II
    [Swift通天遁地]四、网络和线程-(1)线程的锁和解锁
    [Swift]LeetCode252.会议室 $ Meeting Rooms
    [Swift]LeetCode251.展平二维向量 $ Flatten 2D Vector
    [Swift]LeetCode250.计数相同值子树的个数 $ Count Univalue Subtrees
    [Swift]LeetCode249.群组偏移字符串 $ Group Shifted Strings
    [Swift]LeetCode248.对称数 III $ Strobogrammatic Number III
  • 原文地址:https://www.cnblogs.com/xxbbkk/p/15066109.html
Copyright © 2020-2023  润新知