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\),然后求异或和。
然后打表找规律,然后上数归。可证\(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\)。