Game Theory(长期更新)

感觉Game Theory极其困难,尝试写一点东西。

OI中常见博弈分成几种:

  • 经典的模型以及转化。

  • 套不了模型,需要用定理和人类智慧分析。

  • 只是套着博弈的皮,实际上是在贪心/etc.

基本概念

组合游戏

  • 两人参与,双方交替行动。

  • 双方决策时都知道当前游戏局面的完整信息,并且知道可以转移到的状态。

完全信息博弈

博弈双方都知道对方目的。

平等博弈(无偏博弈)

决策集合只与游戏局面有关。可以知道在平等博弈中,只要游戏可以终止,那么每个状态都可以被分为先手必胜或者先手必败。

有向图博弈

是从平等博弈中抽象出的概念,将游戏状态抽象成点,将作出决策抽象为边,就构成了有向图。

如果有向图是DAG,那么可以拓扑排序处理出每个点的状态。否则可能在环处出现平局。

公平组合游戏

  • 组合游戏,平等博弈,且平等博弈的有向图是DAG。无法行动的参与者为败者。

非公平组合游戏

  • 与公平组合游戏的区别在于不是平等博弈。

反常游戏

  • 与公平组合游戏的区别在于第一个无法行动的参与者为胜者。

理论基础

有向图博弈上得到的结论

定义\(P\)状态为先手必胜状态,\(N\)状态为先手必败状态。

通过有向图的模型,可以发现:

  • 一个状态为\(P\),当且仅当其存在一个后继状态为\(N\)

  • 一个状态为\(N\),当且仅当其所有后继状态为\(P\)

Sprague-Grundy定理

即SG定理。应对一般的公平组合游戏。

对于有向图(或者更进一步,DAG)上的博弈,对每个点定义\(SG\)函数。对于没有出边的点,函数值为\(0\),表示这是一个\(N\)状态。对于其他结点,定义\(SG(u)=mex\{SG(v) | (u,v)\in E\}\)

则一个结点为\(N\)当且仅当其\(SG\)函数为\(0\)

Sprague-Grundy定理:对于多个平行进行的组合游戏构成的博弈,其整体的\(SG\)函数为各个组合游戏的\(SG\)函数值的异或和。

考虑证明这个东西,不会,参考OI-wiki。

使用时,要是可以直接通过递归式找到\(SG\)函数值更好,不能直接找到就直接找规律然后数归。

SJ定理

用以应对反常游戏,可以看做反常游戏中的SG定理。

经典模型

Ferguson Game

Q:有两堆石子\(n\)\(m\)个,每次操作是清空其中一堆石子并将另一堆石子分成非空的两堆,无法操作者输,求\((n,m)\)的状态。

Sol:

可以发现终止状态为\((1,1)\),为\(N\)。再想一步,就可以得到对任意\(x\)\((2,x)\)\(P\),并且对于任意一种方式,过程中都会经过\((2,x)\)的状态。看到\(2\)以及加减运算,就可以考虑奇偶性了。现在就是要让对方拿不到\(P\),即不会经过\((2,x)\)的状态。现在的目的转化为不让对方拿到\(2\),并且让自己尽可能拿到\(2\)。对奇偶性分讨,若手上有一个偶数,就可以把它分成两个奇数给对方,于是对方不可能拿到\(2\),对方必败,于是自己必胜。若手上都是奇数,无论如何操作,对方都可以拿到一个奇数和一个偶数,然后运用上一种策略使自己必败。

综上,可以得到结论:\((n,m)\)\(P\)当且仅当\(n\)\(m\)中有一个偶数。

Chomp Game

Q:有一块\(n\times m\)的网格,双人博弈,每次操作可以选择一块没有被删除的格子\((x_0,y_0)\),并删除掉所有\((x,y)\)满足\(x\ge x_0,y\ge y_0\)的格子。删除了\((1,1)\)的人输。问\(P\)/\(N\)

Sol:

可以发现,第一次操作后,\((n,m)\)这个格子一定被删掉了。假设先手必败:

  • 如果先手选的不是\((n,m)\),那么可以改为选\((n,m)\),于是就将一个\(N\)状态留给了另一个人。

  • 如果先手选的是\((n,m)\),那么可以改为选另一个人第一次选的位置,于是就将自己的\(N\)状态留给了另一个人。

于是在修改决策后先手总是\(P\),除了\(n=m=1\)时先手为\(N\)

这一证明是非构造性的,很牛。

目前没有Chomp Game的一般性的必胜策略,也就是说给不出构造。

高维Chomp Game

几乎一样的证法,总是先手必胜,除非只有一块。

Bash Game

Q:双人博弈,有\(n\)个石子,每次操作可以取走\(x\in [1,m]\)个石子,无法操作者输。求当前局面的状态。

Sol:

首先可以关注较小的情况。当\(n\in [1,m]\)时,总是先手必胜的。而当\(n=m+1\)时,是先手必败的,因为每一个后继状态都是\(P\)。于是转化到有向图上,对于一个点\(x\),其后继状态为\(x-1,x-2,\dots x-m\)。如果这些后继状态中有一个是\(m+1\)的倍数,那么这个后继状态就是\(N\),于是当前状态为\(P\)。否则这些后继状态中没有\(m+1\)的倍数,那么\(x\)就是\(m+1\)的倍数,此时状态为\(N\)

综上,先手必败当且仅当\(n\equiv 0\pmod {m+1}\),否则先手必胜。

Nim Game

Q:有\(n\)堆石子,第\(k\)堆有\(a_k\)个,双人博弈,一次操作为选择一堆石子,从中取出至少一个。无法操作者输。问\(N\)/\(P\)

Sol:

可以发现每一堆之间相互独立,于是这个游戏就是若干有向图游戏的组合,上SG定理,就可以只研究一堆之中的\(SG\)值。对于一堆\(x\)个石子,其后继状态为\(0,1,\dots,x-1\),其中\(SG(0)=0\)。于是递推可知\(SG(x)=x\)。然后直接SG定理就好了。

Nim Game 的重要地位在于,一个\(SG=x\)的游戏,几乎是与一堆有\(x\)个石子的Nim游戏是等价的。唯一的不同之处在于,其他游戏可能会有\(SG>x\)的后继状态。但是可以证明,在最优策略下不会向\(SG\)更大的状态转移,因为后手的策略会更多。于是几乎等价。

这样的观点在Nim的各种变式中很有用。

Lasker's Nim Game

Q: 有\(n\)堆石子,双人博弈,一次操作可以选择一堆石子,从中取出至少一个,或者将其分成非空的两堆。问\(N\)/\(P\)

Sol:

对每堆石子求\(SG\),然后求异或和。

\[SG(z)=mex\Big\{\{SG(x)|0\le x<z\}\cup\{SG(x)\oplus SG(y)|x+y=z\}\Big\} \]

然后打表找规律,然后上数归。可证\(k\ge 1\)时,\(SG(4k)=4k-1,SG(4k+1)=4k+1,SG(4k+2)=4k+2,SG(4k+3)=4k+4\)

于是就酱。

Nim-k Game

Anti-Nim Game

Fibonacci Nim

Staircase Nim

Wythoff's Game

常见转化

先满足某种条件就获胜的转化——来自神秘棋盘游戏

Q:有一个\(m\times m\)的棋盘,其上有\(n\)枚棋子,双人博弈,每次操作可以选择一枚棋子,设其坐标为\((x,y)\),那么可以将它移动到\((x,y-k)\)\((x-k,y)\)\((x-k,y-k)\)\(k\in N_+\))。第一个将一枚棋子移动到\((0,0)\)的人赢。求当前状态。

Sol:

棋子相互独立,然后上SG定理。可以发现两个人只要将棋子移到\((1,2)\)或者\((2,1)\)后就不会再动它(只要还有别的选择)。于是可以将这两个点设成终止点,然后就变成了正常的游戏,直接递推出每个点的\(SG\)函数就行。

可以类似转化各种“先满足某种条件便获胜”的游戏。

还有例子

Q:有\(1\times n\)的纸条,初始全为空,双人博弈。每次操作可以选择一个格子涂黑。第一个操作后有三个连续的格子为黑色的人获胜。问\(N\)/\(P\)

Sol:

转化,当一个格子被涂黑后,后手一定不会涂这个格子旁边两格内的格子。于是就转化成第一个无法操作的人输的正常情况。
这等价于选取一个格子并删除以之为中心的\(5\)个格子,然后生成一个(边界的情况)或者两个相互独立的游戏。于是可以递归计算\(SG\)

posted @ 2024-08-17 11:28  RandomShuffle  阅读(2)  评论(0编辑  收藏  举报