• 【知识总结】博弈论入门


    我要是再不好好学博弈!就当场!把!这个!电脑屏幕!吃掉!

    主要参考资料:lca 学长的组合博弈论课件。

    组合游戏

    具有以下几个性质的游戏是组合游戏:

    • 两名玩家
    • 轮流操作
    • 每个玩家掌握游戏的所有信息,例如游戏的当前局面、自己和对手之前的操作等
    • 操作是确定的,没有随机

    为了简化问题,OI 中的组合游戏通常还具有以下性质:

    • 没有平局,双方互为胜负
    • 游戏一定能在有限步内结束
    • 两个玩家的操作规则相同
    • 玩家的操作规则仅由当前的游戏状态(或者说游戏局面)决定,与其他因素(如之前的操作)无关
    • 双方都以最优策略操作

    例如,中国象棋是组合游戏,但不是 OI 中的组合游戏,因为两个玩家操作规则不同(一个只能动红子,一个只能动黑子)。

    飞行棋不是组合游戏,因为有随机性(掷骰子)。

    石头剪刀布不是组合游戏,因为不是轮流操作。

    取石子(有若干堆石子,两个人轮流从一堆中取任意多个,取完者胜)是组合游戏。这个游戏也是组合游戏的一个经典模型。

    CS: GO 不是组合游戏,上面那一堆性质除了两名玩家勉强满足外全部不符合。比如沙鹰抽奖具有随机性,除了透视以外的玩家不知道对方在哪(游戏信息不完整),双方能起的枪和胜利条件不一样(规则不同),国服官匹可以平局,玩家的操作规则不仅与游戏状态有关还与有没有开挂有关等。

    以下讨论的组合游戏都是 OI 中的组合游戏,默认无法操作(转移)时算输。

    先手必胜和先手必败

    既然游戏一定能决出胜负,且操作规则仅仅与当前状态有关,那么就可以把状态分为先手必胜和先手必败(后手必胜),简称必胜和必败。如果 面对 某个状态的玩家(他还没有操作,称为先手)一定能获胜,那么它就是先手必胜否则先手必败。

    以取石子游戏为例,如果一个玩家面对的是没有石子的状态,那么他就失败了,也就是说「没有石子」是先手必败的状态。如果一个状态能转移到一个先手必败的状态,那么当前的先手一定会转移到先手必败的状态,让对方(也就是下一步的先手)面对这个必败的状态。因此,如果一个状态能转移到至少一个先手必败的状态,那么这个状态就是先手必胜的。否则,转移到的所有状态都是先手必胜,那么这个状态就是先手必败的。

    根据定义,状态和转移组成了一个 DAG 。如果状态数和转移数很少,就可以直接做一遍递推就能得出每个状态是必胜还是必败。

    SG 函数

    说到 SG ,你有没有想到 ……

    (图片来自萌娘百科)

    对于一个游戏状态 (s) 定义 SG 函数:

    [SG(s)=mathrm{mex}({x|x=SG(t)}) ]

    其中 (t)(s) 可以直接转移到的状态(称为「后继」),(mathrm{mex}(S)) 表示最小的不在集合 (S) 中的非负整数。

    如果 (SG(s)=0) ,那么 (s) 是必败状态,否则是必胜状态,归纳证明如下:

    根据定义,没有出边的状态(必败)的 SG 函数值是 0 ,满足这个性质。当 (s) 能到达的所有状态都满足这个性质(因为是 DAG 所以不存在循环归纳),如果存在 (s) 的后继 (t) 满足 (SG(t)=0) (必败),那么此时根据 mex 的定义, (SG(s)>0) ,是必胜的,否则是必败的。

    当然现在看来这个 SG 函数好像并没有什么用 ,只是把必胜必败状态用 0 和非 0 表示了一下 ……

    不要尝试找出 SG 函数的不同非 0 值有什么实际意义,至少我至今不知道(谁知道给我说一下谢谢)。这只是一个巧妙的构造罢了。下面会说它巧妙在哪以及有什么用。

    SG 定理

    说到 SG …… 啪!再扯 CS: GO 打死你

    定义两个集合的 笛卡尔积 为从这两个集合中各选出一个元素组成的有序二元组的集合。即 (A)(B) 的笛卡尔积 (A imes B) 为:

    [A imes B={(x,y)|xin A, yin B} ]

    定义两个组合游戏的 为把这两个组合游戏放在一起,游戏之间互不影响。每个人任选一个游戏进行操作,如果所有游戏都无法操作就输了。例如,把 一堆 石子看作一个组合游戏,取石子游戏就是若干个这种组合游戏的和。

    现在讨论 (n) 个小游戏的和,方便起见称这个和为「大游戏」。显然,大游戏的状态集合就是 (n) 个小游戏的状态集合的笛卡尔积。设大游戏的状态 (s=(s_1,s_2,dots,s_n)) ,其中 (s_i) 是第 (i) 个小游戏的状态。

    SG 定理(其中 (oplus) 表示异或):

    [SG(s)=SG(s_1)oplus SG(s_2)oplusdotsoplus SG(s_n) ]

    证明如下:

    设等号右边那一堆的值为 (x) 。现在要证明两件事:

    • (s) 的后继 (t) 中不存在 (SG(t)=x)
    • 对于所有 (0leq y<x) ,都存在一个 (s) 的后继 (t) 满足 (SG(t)=y)

    根据 mex 的定义, (SG(s)=x) 当且仅当这两个命题成立。

    接下来口胡一番证明,我也不知道对不对 qwq。

    对于所有小游戏都无法操作的状态 (p),所有 (SG(p_i)=0) 。由于这是无法操作的必败状态,(SG(p)=0) ,这种状态下满足这个性质。

    依然是归纳证明。假设现在所有 (s) 能到达的状态都满足这个性质。设从 (s) 到后继 (t) 操作的游戏为 (i) ,由 mex 的定义显然 (SG(s_i) eq SG(t_i)) 。其余的小游戏是不变的,即 (SG(s_j)=SG(t_j),jin[1,i)cup(i,n]) 。因此, (SG(t)=SG(s)oplus SG(s_i)oplus SG(t_i))

    假设 (SG(t)=SG(s)=x) ,则给两边同时异或 (x) 得到 (SG(s_i)oplus SG(t_i)=0)(SG(s_i)=SG(t_i)) ,矛盾。因此 (SG(t) eq x) 。第一个命题得证。

    现在,对于 (0leq y<x) ,要找到一个 (t) 使得 (SG(t)=y)

    因为

    [y=SG(t)=SG(s)oplus SG(s_i)oplus SG(t_i) ]

    所以

    [SG(s_i)oplus SG(t_i)=SG(s)oplus y ]

    (SG(s)oplus y) 的最高二进制位(即 (SG(s))(y) 最高的不一样的位)是第 (k) 位。由于 (y<SG(s)) ,所以一定存在这样的位,且 (SG(s)) 的第 (k) 位一定是 1 ,由此可得至少存在一个 (SG(s_i)) 的第 (k) 位是 1 。

    把这样的 (i) 作为这一步操作的游戏。它需要变成的数 (SG(t_i)=SG(s_i)oplus SG(s)oplus y) 。由于第 (k) 位也是 (SG(s_i))(SG(t_i)) 最高的不一样的位,且 (SG(s_i)) 这一位为 1 ,所以 (SG(t_i)<SG(s_i))

    根据 mex 的定义,(SG(s_i)) 可以转移到任意一个比它小的 (SG(t_i)) ,因此这样的后继状态 (t) 一定存在。第二个命题得证。

  • 相关阅读:
    SQL Server数据库中批量替换数据的方法
    js 鼠标移上去弹出层效果
    50个jQuery代码段帮你成为更好的JavaScript开发者
    MSN、腾讯QQ、SKYPE、阿里旺旺网页在线客服源代码
    正则表达式基础知识
    常用邮箱POP3和SMTP服务器汇总
    CS5序列号
    如何使用Oracle SQLDeveloper 中连接MS SQLServer和MySQL数据库
    Silverlight与后台数据库的三种技术实现基本的互操作(转)
    ADO 与ADO.NET
  • 原文地址:https://www.cnblogs.com/zyt1253679098/p/12495218.html
Copyright © 2020-2023  润新知