博弈论基础入门

扩展

读完本篇 blog 后,您还可以继续阅读:

公平组合游戏 ICG

一个游戏满足以下条件时被叫做公平组合IGC游戏

  • 两名玩家交替行动。
  • 游戏进程的任意时刻,可以执行的操作和操作者本人无关。
  • 不能行动的玩家判负,不存在平局。

本蒟蒻的理解:公平组合游戏都可以转化为博弈论问题来解决。例如经典的 “NIM游戏”“有向图游戏” 都是公平组合游戏。类型的问题也可以转化成前两种模型解决。

NIM游戏

洛谷 题目地址

定理:

  • NIM游戏先手必赢,当且仅当 \(A_1 \ \mathrm{xor}\ A_2 \ \mathrm{xor}\ ... \ \mathrm{xor}\ A_n ≠ 0\)

证明:
最后所有石子都取完是必败态,此时 \(\mathrm{xor}\) 和为 \(0\)
由此可以推得必败态的上一个状态 \(\mathrm{xor}\) 和不为 \(0\)
对于一个任意 \(\mathrm{xor}\) 不为 \(0\) 的状态,令 \(x=\sum{\mathrm{xor}} A_i\),假设 \(x\) 的最高位为 \(k\),那么一定存在 \(A_j\) 的第 \(k\) 也为 \(1\),在 \(A_i\) 中取走 \(A_i-A_i \mathrm{xor}\ x\) 颗石子(即剩下 \(A_i \mathrm{xor}\ x\) 颗石子),则操作后的状态异或和为 \(0\)
对于任意一个 \(\mathrm{xor}\) 和为 \(0\) 的状态,无论怎么选取,下一个的状态的异或和必定不为 \(0\)
重复以上操作,根据数学归纳法,初始状态 \(\mathrm{xor}\) 和不为 \(0\),先手必胜。
证毕。

有向图游戏

给定一张有向无环图,初始在起点 \(s\) 处放一枚棋子。每一回合玩家可以向出边移动一步,不能移动者失败。问是否有先手必赢策略?

想要解决这个问题,我们首先要引入 \(\mathrm{mex}\) 运算\(SG\) 函数

\(\mathrm{mex}\) 运算

\(\mathrm{mex}\) 运算是求一个集合里面没有的最小非负整数,用数学语言表达即(\(N\) 是自然数集):

\[\mathrm{mex}(S) = \min\{x,x \notin S,x \in N\} \]

\(SG\) 函数

(特指有向图游戏)在有向图游戏中,对于每个结点 \(x\),其 \(SG\) 函数为:

\[SG(x) = \mathrm{mex} \{ SG(y_1),SG(y_2),...,SG(y_k) \} \]

\(y_i,1 \le i \le k\)\(x\)\(k\) 条出边的第 \(i\) 条出边所指向的点)

可以发现,\(SG\) 函数是递归定义的。\(SG\) 函数的终点即为不可移动的点,因为没有出边,所以不可移动的点的 \(SG\) 函数等于 \(0\)

特别的,一个有向图游戏 \(G\)\(SG\) 函数是该有向图的起点 \(s\)\(SG\) 函数,即 \(SG(G) = SG(s)\)


回到有向图游戏,对于这个游戏,有一个定理。

定理:

  • 有向图游戏先手必赢,当且仅当 \(SG(G) \neq 0\)

对于该定理的证明,可以结合 \(SG\) 函数意义数学归纳法进行证明。过程比较简单,留给读者自行证明。

多个有向图游戏

(并不知道有什么专业名称) 类似于NIM游戏与有向图游戏的相结合。

定义多个有向图游戏 \(G_1,G_2,...,G_n\),每一回合玩家可以在任意一个有向图游戏 \((G_i,1 \le i \le n)\) 上移动一步,不可移动者失败。问先手是否有必赢策略?

定理

  • 多个有向图游戏先手必赢,当且仅当 \(SG(G_1) \ \mathrm{xor} \ SG(G_2) \ \mathrm{xor} \ ... \ \mathrm{xor} \ SG(G_n) \neq 0\)

关于该定理的证明,读者可以在自主完成上一定理的证明后,结合NIM游戏定理的证明,感性理解一下。(因为我也不会呀qwq)

题目

更多博弈论基础入门好题:

POJ2311 剪纸游戏

变形

每次取 \([1,x]\) 的 NIM 游戏

题目大意: \(n\) 堆石子,第 \(i\) 堆石子有 \(a_i\) 个,给定 \(x\),每次可以取 \([1,x]\) 个石子,问先手是否必胜。

结论:\(\bigoplus\limits_{i=1}^n (a_i \% (x+1)) \not = 0\) 则先手必胜,否则先手必败。

感性理解一下:对于某一堆石子 \(a_i\),当 \(a_i>(x+1)\),后手取掉一个数 \(y \in [1,x+1)\),先手可以取一个数 \(z\),满足 \(z=x+1-y\)\(z\) 一定是可以取到的(也就是说\(z\in [1,x+1)\)),则 \(a_i\) 变为了 \(a_i - (x+1)\),以此类推,该堆石子变为 \(a_i\%(x+1)\) 时,这堆石子就可以取任意数了。推广到每一堆石子,就转化成了 NIM 游戏。

posted @ 2020-02-08 16:05  基地AI  阅读(500)  评论(0编辑  收藏  举报