• Game


    Part.1

    我们现在讨论的Game具有以下特征:
    Double(双人):游戏由两个人进行。
    Symmetric(对称):在同一种局面下两个人的决策集合是相同的。
    Sequential(轮流):两个人轮流执行决策。
    Finite(有限):游戏在有限步之后一定会终止。
    Exact(确定):决策不带有随机性。
    Open(公开):游戏的信息是完全公开的。
    Intelligent(聪明):两个人都是绝顶聪明的。

    如果没有说明我们认为无法决策的人输。
    因此这样的游戏一定是Non-cooperative的。

    游戏图

    我们将一个局面看做是一个点,将某个局面的一种决策看做是这个点的出边,那么一个满足上述条件的游戏就可以和一张DAG对应起来。

    N&P

    定义先手必胜为N态,先手必败为P态。
    一个状态为P态的充要条件是该状态的出边到N态。
    在此基础上,一个状态为N态的充要条件是该状态至少存在一条出边可以走到P态。

    SG函数

    全名叫做Sprague-Grundy Function。
    定义(operatorname{mex}(S))为集合(S)中未出现的最小自然数。
    定义一个局面(u)的SG函数为:
    (SG(u)=egin{cases}0&E_u=varnothing\operatorname{mex}(SG(E_u))&E_u evarnothingend{cases})

    定理1:

    (SG(x)=0Leftrightarrow xin P)

    不难发现这就是SG函数与NP态定义的相似性。

    游戏的和

    给定若干个游戏,每轮玩家可以任选一个游戏进行一次决策,最后无法进行决策的人输。

    Sprague-Grundy定理:

    (SG(u+v)=SG(u)oplus SG(v))

    考虑根据拓扑序归纳。
    (u,v)中某个局面的出边为空集时显然成立。
    那么我们设(u,v)的出边分别到达(a_1,cdots,a_n)(b_1,cdots,b_m)
    那么我们轻松地得到如下两个结论:
    (SG(u)oplus SG(v) otin{SG(u+b_i)}cup{SG(a_i+v)})
    ([0,SG(u)oplus SG(v))cupmathbb Zsubseteq{SG(u+b_i)}cup{SG(a_i+v)})
    命题得证。

    定理2:

    (SG(u)=SG(v)),则(u,v)等价。

    Beatty定理:

    若有两个无理数(p,q)满足(frac1p+frac1q=1),则({lfloor pn floor|ninmathbb{N_+}},{lfloor qn floor|ninmathbb{N_+}})(mathbb{N_+})的一组划分。

    Nim游戏

    桌子上有(n)堆石子,分别有(a_1,cdots,a_n)个。
    每次只能从一堆中取出任意数目的石子,但不能不取。

    一堆(x)个石子的SG函数值为(x)

    Bash博弈

    在Nim游戏的基础上加上这样一条限制:每次取石子的数目不超过(m)

    一堆(x)个石子的SG函数值为(xmod(m+1))

    阶梯博弈

    (n)堆石子放在(n)层阶梯上。
    每次可以选择某一层,将这一层的若干石子放入下一层。
    (0)层就是垃圾桶。

    偶数层阶梯上一堆(x)个石子的SG函数值为(0)
    奇数层阶梯上一堆(x)个石子的SG函数值为(x)

    Wythoff博弈

    有两堆石子,分别为(n,m)个。
    每次可以从一堆扔掉若干石子,或者从两堆中扔掉相同数量。

    对于一个局面((x,y)),不妨设(xle y)
    那么((x,y))为P态(Leftrightarrow x=lfloor(y-x)(frac{sqrt5-1}2) floor)

    Moore-Nimk游戏

    在Nim游戏的基础上修改规则:每次可以选不超过(m)堆石子,从这(m)堆中每堆取出一些石子。不能不取。

    写出每一堆石子数的二进制,统计每一位中(1)的个数之和。
    一个局面为P态(Leftrightarrow)每一位的(1)的个数之和都是(m+1)的倍数。

    树上删边游戏

    给定一棵有根树, 每次操作选择一条边, 删除此边以及删掉后与根不连通的部分。

    (SG(u)=egin{cases}0& ext{u is a leaf}\igopluslimits_{vin son_u}(SG(v)+1)& ext{u isn't a leaf}end{cases})

    树上删边游戏ex

    在树上删边游戏游戏的基础上,有一些点可能会挂一个环。

    奇环的SG函数值为(1),偶环的SG函数值为(0)

    无向图删边游戏

    在树上删边游戏的基础上把树变成无向图。

    Fusion准则

    对于一个偶环,把它缩成一个点。
    对于一个奇环,把它缩成一个点连出去一条边。
    这样整个局面的SG函数值不变。

    推论1:

    奇e-dcc的SG函数值为(1),偶e-dcc的SG函数值为(0)

    动态减法游戏

    有一个正整数(n),双方轮流让(n)减去一个正整数。
    第一次不能减(n),若第(i)轮减了(x),则第(i+1)轮减的数不超过(f(x))
    (f(x))单调不降。

    (H_i)为第(i)个P态,不妨记(H_1=1)
    (f(H_i)ge H_i),则(H_{i+1}=H_i+minlimits_{jle iwedge f(H_j)>H_i}H_j)
    (f(H_i)<H_i),则不存在(H_{i+1})

    移棋子游戏

    给定一个无向图,初始某个节点有一个棋。双方轮流选一条边,让棋子沿这条边走出去,并删掉之前在的点。

    一个局面为N态(Leftrightarrow)初始节点一定在某个最大匹配中。

    Shannon开关游戏

    给定一个无向图,先手每次可以选一条未被保护的边删除,后手玩家每次可以选择一条边保护,直到无法操作为止。游戏结束后如果图连通则后手获胜,否则先手获胜。

    后手必胜的充要条件是原图存在两棵边不相交的ST。

    Rim游戏

    在Nim游戏的基础上修改规则:每次从某一堆取出一些石子之后可以把这堆石子划分成若干小堆。

    SG函数值和Nim游戏的一样。

    Multi-SG游戏

    一个局面的后继可以是多个独立的局面的集合。

    一个后继的SG函数值为其包含的各个局面的SG函数值的异或和。

    Multi-Nim游戏

    (SG(x)=egin{cases}x-1&4|x\x&xmod4in{1,2}\x+1&xequiv3pmod 4end{cases})

    Anti-SG游戏

    决策集合为空的玩家获胜。

    注意到并不能够直接用SG函数是否为(0)判断了,因为SG函数值为(0)的局面的决策集合不一定为空。

    SJ定理:

    对于一个Anti-SG游戏,一个局面(S)为N态当前仅当下列两个条件同时成立或同时不成立:
    (1.SG(S)=0)
    (2.forall xin S,SG(x)le1)

    Every-SG游戏

    对于还没有结束的单一游戏,玩家必须对该游戏进行一步决策。

    我们有一个贪心策略:对于自己必败的游戏,我们会尽可能让它早结束。对于自己必胜的游戏,我们会尽可能让它晚结束。(当然是在不改变游戏结果的前提下)
    因此对于SG函数值为(0)的点,我们需要知道最快几步可以使得游戏终止。
    对于SG函数值非(0)的点,我们需要知道最慢几步可以使得游戏终止。
    定义一个局面(u)的step函数为:
    (step(u)=egin{cases}0& ext{u is an ending state}\maxlimits_{vin E_uwedge SG(v)=0}(step(v))+1&SG(u) e0\minlimits_{vin E_u}(step(v))+1&SG(v)=0end{cases})

    对于Every-SG游戏,一个局面为N态(Leftrightarrow)该局面包含的单一游戏中最大的(step)为奇数。

    翻硬币游戏

    一排(n)个硬币,有的正面朝上有的反面朝上。
    给定一个约束,每次可以在符合约束的条件下翻转一些硬币,但是必须满足满足翻转的最右边的硬币必须是正面朝上。

    首先给出一个结论:
    一个局面的SG函数值为每个正面朝上的硬币单一存在时的局面SG函数值的异或和。
    对于一个正面朝上的硬币,把它左边反面朝上的硬币放在它左边,这样就构成了该正面朝上的硬币单一存在时的局面。
    也就是说我们只需要计算(SG(x)):有(x)个硬币,其中最右边的是正面朝上,其它的都是反面朝上这一局面的SG函数值。
    然后我们考虑各种约束的情况。

    Game1

    每次可以翻转连续的(k)个硬币。

    (SG(x)=[k|x])

    Game2

    每次可以翻一或两个硬币。

    等价于Nim游戏。
    (SG(x)=x)

    Subtraction游戏

    若翻了硬币(x)(x>k),则必须翻(x-1,cdots,x-k)中的一个。

    等价于Bash博弈。
    (SG(x)=xmod(k+1))

    Twins游戏

    每次必须翻动恰好两个距离不超过(k)的硬币,硬币序号从(0)开始。

    等价于Bash博弈。
    (SG(x)=xmod(k+1))

    Ruler游戏

    每次可以翻转任意个连续的硬币,不能不翻。

    (SG(x)=2^k(2^k|x))

    Mock Turtles游戏

    每次可以翻一或两或三个硬币。

    (SG(x)=2x+[2|operatorname{bitcnt}(2x)])

    策略模仿

    黑板上写着(n)的所有约数,双方轮流选择一个黑板上的数(x),擦掉(x)和它的所有约数。
    不能行动的人获胜。

    先手必败(Leftrightarrow n=1)
    (n e1)时,先手先擦掉(1)
    若后手此时有必胜策略,设擦掉了(x)
    那么先手可以不擦掉(1),转而选择擦掉(x)并完全模仿后手的必胜策略。
    因为两个人都是绝顶聪明的,所以只要后手在第二步存在必胜策略,先手就一定可以在第一步执行。
    因此我们虽然不知道必胜策略是什么,但是先手是一定必胜的,
    这个方法的扩展性很强。

    Part.2

    我们现在讨论的Game具有以下特征:
    Double(双人):游戏由两个人进行。
    Simultaneous(同时):双方同时执行决策。
    Zero-sum(零和):一次博弈双方的收益和为一个定值。
    Selfish(自私):两个人都只想最大化自己的收益。
    Open(公开):游戏的信息是完全公开的。
    Intelligent(聪明):两个人都是绝顶聪明的。

    收益矩阵

    假如双方各有一些决策:(x_1,cdots,x_n;y_1,cdots,y_m)
    若双方分别选中(x_i,y_j),那么第一个人的收益为(f(x_i,y_j)),第二个人的收益为(g(x_i,y_j))
    我们可以将收益写成一个矩阵的形式。
    在零和博弈中(f(x_i,y_j)+g(x_i,y_j))等于一个定值(V)

    Nash均衡

    很显然双方的决策都是概率分布(X,Y)
    Nash均衡指的是对于双方的决策的分布(X={p_1,cdots,p_n},Y={q_1,cdots,q_n}),满足任何一方单方面地修改自己的决策分布都不会使得自己的期望收益变大。
    在零和博弈中,任意Nash均衡的收益差是相等的。

    囚徒困境

    这并不是Zero-sum的。
    收益矩阵如下:

    $A/B$ 合作 背叛
    合作 $R/R$ $S/T$
    背叛 $T/S$ $P/P$

    其中:
    (T>R>P>S)

    囚徒困境的Nash均衡为({0,1},{0,1})
    可以看到不管对方选择什么,己方选择背叛一定更优。

    但是进行无限次那么Nash均衡为({1,0},{1,0})
    因为双方都可以针对对方在上一回合的背叛进行报复。
    但是进行有限次的Nash均衡和一次是一样的。
    因为最后一次双方一定都会选择背叛,也因此倒数第二次双方都会选择背叛。。。

    猎鹿博弈

    这并不是Zero-sum的。
    收益矩阵如下:

    $A/B$ 猎鹿 猎兔
    猎鹿 $R/R$ $P/0$
    猎兔 $0/P$ $P/P$

    其中:
    (R>P)

    猎鹿博弈的Nash均衡为({0,1},{0,1})({1,0},{1,0})

    智猪博弈

    这并不是Zero-sum的。
    收益矩阵如下:

    $A/B$ 行动 等待
    行动 $R_A/R_B$ $S_A/T_B$
    等待 $T_A/S_B$ $P_A/P_B$

    其中:
    (T_A>R_A>S_A>P_A)
    (T_B>R_B>P_B>S_B)

    智猪博弈的Nash均衡为({1,0},{0,1})
    对于(B)而言选择等待一定更优,因此对于(A)而言选择行动更优。

    Part.3

    一些其它的有趣的博弈模型。

    枪手博弈

    有甲乙丙三个枪手,命中率分别为(0.8,0.6,0.4),现在三个人决斗。
    为了公平起见开枪顺序为丙-乙-甲,如果某个人死了就跳过。
    三个人都会最大化自己的生存率,问最优策略。

    最优策略:丙放空枪,甲乙互锤。

    海盗博弈

    (n)个海盗分(m)块钱,从第(n)个人到第(1)个人依次提出方案,提出方案之后投票,如果超过半数的人不赞同这人就会被扔下去,否则就会按照该方案直接进行分配。
    海盗的行为准则从高到低有三点:(1.)不被扔出去;(2.)多赚钱;(3.)把别人扔出去。
    求第(n)个人的最优分配方案。

    如果(nle2m)
    对于第(n)个人而言,它会选择自己拿(m-lfloorfrac{n-1}2 floor),编号为(n-2k(kin[1,lfloorfrac{n-1}2 floor))的人拿(1)
    如果(n>2m)
    (n=2m+2^t(tinmathbb N)),那么对于第(n)个人而言,它会选择自己拿(0),编号为(2k-[2|t](kin[1,m]))的人拿(1)
    (n e2m+2^t(tinmathbb N)),那么他已经死了。

  • 相关阅读:
    [LeetCode] 101. 对称二叉树
    [LeetCode] 394. 字符串解码!!!!
    USACO Ordered Fractions
    USACO The Castle
    遇到的Mysql的一个坑
    USACO-palsquare 遇到的一个坑
    大整数相乘
    vs2012扩展
    JS实现文字倒计数
    jqAutoComplete 和 knockout
  • 原文地址:https://www.cnblogs.com/cjoierShiina-Mashiro/p/12296410.html
Copyright © 2020-2023  润新知