【博弈论记录】

有向无环图游戏模型

把所有局面看做点,操作看做有向边,则整个游戏为一个DAG。
这个DAG有一个初始点,两个人轮流操作,每次操作可以选当前点的任意一条出边的终点作为新的当前点。最终无法移动的人输。

证明博弈论的基本思路:

  1. 将所有局面划分为两个集合,一类对应先手必败,一类对应先手必胜。
  2. 证明任意一个必胜局面,可以走到一个必败局面
  3. 证明任意一个必败局面,一定会走到一个必胜局面

SG函数

对于一个局面,即DAG上的一个点\(x\),定义这个点的\(sg(x)=mex(\{sg(y)|(x,y)\in E\})\),其中\(sg(x)=0\)的点\(x\)为必败局面,反之,为必胜局面
对于一个有向无环图游戏,我们总可以把这个DAG建出来,暴算\(sg\),来判断局面,但是大多数情况点数,边数过多,因此要用到更巧妙的证明或是打表找规律。
对于单个的有向无环图游戏,其实没必要让\(sg\)函数取\(mex\),只用\(0/1\)就够了,若能到达\(0\),则\(sg=1\),否则\(sg=0\).
但是之所以要用mex运算,是因为mex运算的sg函数,可以用于sg定理。

有向无环图游戏的组合:

即有多个DAG,每个DAG都有一个当前点,每个两人轮流操作,每次选择一个DAG,将上面的当前点沿着一条边移动,最终无法操作的人输。

SG定理

对于有向无环图游戏的组合,先手必胜当且仅当所有子游戏的初始局面的sg函数的异或和不为0
证明:
对于最终态,所有子游戏的sg都为0,此时sg函数的异或和为0,对应必败状态
当当前局面不为最终态时,

  1. 若sg函数的异或和为0,那么对任意一个DAG操作,这个sg函数的值一定与原先不同(mex运算说明不存在一条出边,其终点与当前点的sg相同),那么所有sg函数的异或和一定改变,即不为0。也就是证明了必败一定走向必胜
  2. 若sg函数的异或和不为0,考虑提供最高位1的DAG,那么把这个DAG的sg的这一位改为0,后面的位根据异或和,若为1,则取反;否则不变。显然这种构造方式使得新局面的异或和为0,且这个DAG的新的sg函数一定小于之前的sg,那么这个新的sg也一定能走到(mex运算说明任意一个小于当前点的sg值,当前点一定有一条出边满足条件)

应用

  1. Nim游戏
    有n堆石子,每堆石子有\(a_i\)个,两人轮流从任意一堆石子中选一堆拿走至少一个,无法操作的人输
    实际上每堆石子是一个子游戏,设\(sg(x)\)表示有x个石子的子游戏的sg值,那么发现\(sg(x)=x\),所以直接判断\(a_i\)的异或和即可。
  2. Bash-Nim
    取石子时,每堆石子至少拿一个,至多拿\(b_i\)个,其余同上
    不难发现,\(sg(i,x)=x\%(b_i+1)\),然后套sg定理即可
    思考:如果取石子时再给定一个下界,还能做吗
  3. K-nim
    先把SG定理拓展一下:若每次操作可以选择1~k个子游戏进行操作,那么先手必败当且仅当把所有子游戏的sg值写成二进制后,每一位上都有k+1倍数个1(相当于写成二进制后做k+1进制下不进位加法后结果为0)
    注意到普通SG是k=1下的情形。
    证明:
  1. 若结果为0,则先手无论如何操作都会将至多k个DAG的sg值变小,考虑所有改变的sg中最高位,这一位置,只能从1变到0,否则说明更高位会有1变到0,与前提不符;那么最多改动k个,这一位最终一定不会为0,导致所有sg的k+1进制下加法结果不为0
  2. 若结果不为0,考虑这样一个流程,从最高非0位开始枚举,假设这一位值为\(b\),之前已经选了\(c\)个sg的值进行改动,其中有\(c_1\)个sg的值这一位为1,有\(c_2\)个sg的值这一位为0,那么\(0\leq b\leq k,0\leq c_1+c_2\leq k\)\(1^\circ\)\(b\leq k-c_2\),那么一定可以从\(c_1\)个已经选的数和没选的\(k-(c_1+c_2)\)中选出b个这一位为1的变成0.\(2^\circ\)\(b>k-c_2\),移项得\(c_2>k-b\),也就是\(c_2\geq k+1-b\),那么只需从\(c_2\)中选出\(k+1-b\)个1变为0,即可满足条件。
    根据拓展后的sg定理,把石子数作k+1进制下的不进位加法,判断是否为0即可。
  1. 阶梯nim
    有n堆石子,每次操作可以选择2~n中的数k,把第k堆石子中的一部分放到第k-1堆,或者把第一堆中的一些石子移出游戏,最终无法操作者输。
    结论:先手必胜当且仅当奇数堆的石子的异或和不为0
    证明前先考虑博弈论中一种常用的策略:模仿
    如果对手把偶数堆中的石子拿到奇数堆,那么一定可以在下一步把奇数堆中的石子放入偶数堆,这提醒我们偶数堆中的石子没有意义
    证明:
  1. 若奇数堆石子的异或和为0,那么不论怎么移动,都会导致这个局面被破坏
  2. 若奇数堆石子的异或和不为0,那么考虑提供最高位1的奇数堆石子,一定可以通过减小这堆石子的数量,使得奇数堆石子的异或和为0
posted @ 2022-08-03 22:03  glq_C  阅读(67)  评论(0)    收藏  举报