博弈论学习笔记
一些概念
组合博弈(combinatorial games)
两个玩家,均可获得完全信息,每一操作均不受随机性影响(例如poker就不是组合博弈)
有偏博弈
两个玩家可以进行的操作有区别,例如象棋和跳棋
无偏博弈
- 两名选手交替对游戏进行移动,每次一步,选手可以在有限的合法移动集合中任选一种进行移动,双方均知道游戏的完整信息。
- 对于游戏的任何一种可能的局面,合法的移动集合只取决于这个局面本身,不取决于轮到哪名选手操作、以前的任何操作、骰子的点数或者其他因素。
- 如果轮到某名选手移动,且这个局面的合法的移动集合为空(也就是说此时无法进行移动),则这名选手负。
- 游戏中的同一个状态不可能多次抵达,游戏以玩家无法行动结束,且游戏一定会在有限步后以非平局结束,即状态图无环。
- 大部分的棋类游戏都不是公平组合游戏。
NIM游戏
有N堆石子,每堆石子的数量是\(a_1,a_2,a_3,...,a_n\),合法的移动是”选择一堆石子并拿走若干颗(不能不拿)”,如果轮到某个人时所有的石子堆都已经被拿空了,则判负(因为他此刻没有任何合法的移动)。
我们将图上的每一个局面看成图上的一个节点,所有的合法节点形成一个DAG。
P-position:先手必败
N-position:先手必胜
例如3堆石子的NIM游戏
- (0,0,0)是必败局面。
- (0,0,n)是必胜局面
- (0,1,1)是必败局面
- (0,1,n)是必胜局面
- (0,n,n)是必败局面
必败/必胜局面的判定引理
- 终局(\(a_1=a_2=a_3=...=a_n=0)\)是必败局面。
- 对于任意必胜局面,都存在一种合法操作使其变为必败局面。
- 对必败局面进行任意操作,都会得到必胜局面,即必败局面不能到达必败局面。
- 有了三条引理,可以对NIM游戏局面做出判定,复杂度\(O(\prod_{i=1}^na_i*\sum_{i=1}^na_i)\),即在DAG上进行dfs的复杂度(记忆化搜索/dp)=点数+边数。
NIM游戏判定引理的等价命题:Bouton's Theorem
对于一个Nim游戏的局面S=(\(a_1,a_2,...,a_n\)),其
\[ Sg(S) = a_1xora_2xor...a_n \]
则有:必败局面Sg(x)=0,必胜局面Sg(x)!=0证明
回顾三条引理
终局(\(a_1=a_2=a_3=...=a_n=0)\)是必败局面。即0^0^0^0^...^=0
对于任意必胜局面,都存在一种合法操作使其变为必败局面。
考虑\(a_1xora_2xora_3xor...a_n=k\),假设k的最高位1在J位,选择第J位是1的\(a_i\),将其取成\(a_ixork\)(易知$a_ixork<a_i)即可,即可以将某一个数异或一下变成0。
对必败局面进行任意操作,都会得到必胜局面,即必败局面不能到达必败局面。
显然若\(a_1xora_2xor...a_n=0\),修改任一\(a_i\)后\(a_1xora_2xor...a_n\neq0\)
我们发现Sg(S)函数成功刻画了三条判定引理的性质。
这样一来,我么可以O(n)对某一局面进行判定。
有向图游戏
- 有向图游戏是一个经典的博弈游戏--实际上,大部分的公平组合游戏都可以转换成有向图游戏。
- 在一个有向无环图中,只有一个起点,上面有一个棋子,两个玩家轮流沿着有向边推动棋子,不能走的玩家判负。
- 单个有向图游戏的胜负可以根据判定引理判定。
对判定引理的数学描述-SG函数
定义mex(minimal excludant)运算,这是一个集合运算,表示最小的不属于这个集合的自然数。例如mex{0,1,2,4}=3,mex(2,3,4) =0,mex{} = 0;
对于一个给定的DAG,定义关于图的每个顶点的SG函数如下:
\[ SG(x)=mex(sg(y)|x->y) \]验证三条定理
- 所有的terminal position所对应的顶点,也就是没有出边的顶点sg值等于0,因为mex{}=0。
- 对于sg\(\neq0\)的必胜局面,必存在一个\(sg=0\)的后继必败局面。
- 对于sg=0的必败局面,必不存在sg=0的后继必败局面。
有向图游戏的和
设\(,G_1,G_2,...,G_n\)是n个有向图游戏,定义游戏G是G1,G2,...,Gn的和(sum),游戏G的移动规则是:任选一个子游戏Gi并移动上面的棋子。则有SG定理:
\[ Sg(G) = Sg(G1)xorSg(G2)xor...xorSg(Gn) \]例如:仅1堆石子的NIM游戏{x},其SG函数可定义为:
Sg(x) = x
满足\(SG(x)=mex(sg(y)|x->y)\),y可取遍[0,x)。
N堆石子的Nim游戏=N个1堆石子游戏的和
\[ Sg(a1,a2,a3,...,an)=sg(a1)xorsg(a2)xor...xorsg(an)=a1xora2xor...xoran \]
来源:https://www.cnblogs.com/AC-AC/p/12457849.html