【知识总结】博弈论入门

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

主要参考资料: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\times B\) 为:

\[A\times B=\{(x,y)|x\in A, y\in 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)\oplus\dots\oplus SG(s_n) \]

证明如下:

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

  • \(s\) 的后继 \(t\) 中不存在 \(SG(t)=x\)
  • 对于所有 \(0\leq 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)\neq SG(t_i)\) 。其余的小游戏是不变的,即 \(SG(s_j)=SG(t_j),j\in[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)\neq x\) 。第一个命题得证。

现在,对于 \(0\leq 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\) 一定存在。第二个命题得证。

posted @ 2020-03-14 23:35  Inspector_Javert  阅读(372)  评论(0编辑  收藏  举报