在《博弈圣经》中博弈论的定义:我们把动物利用大自然移动的瘾魂,在决策人期待的空间里,形成三维均衡的语文学理论,称为博弈论。
博弈论又被称为对策论(Game Theory)既是现代数学的一个新分支,也是运筹学的一个重要学科。
博弈论主要研究公式化了的激励结构间的相互作用。是研究具有斗争或竞争性质现象的数学理论和方法。 博弈论考虑游戏中的个体的预测行为和实际行为,并研究它们的优化策略。生物学家使用博弈理论来理解和预测进化论的某些结果。
本文只是讨论了信息学竞赛中博弈方面最基本最简单的几个方法和结论。
由于这一类博弈问题都有一个共同的要求就是博弈双方都是“绝对聪明”的,所以据说只有“绝对聪明”的人才能学好博弈论哦。
下面就让我们一起来感受博弈问题的美妙吧。
从一个问题进入。
今天我们要认识一对新朋友,Alice与Bob。
Alice与Bob总是在进行各种各样的比试,今天他们在玩一个取石子的游戏。
在这个游戏中,Alice和Bob放置了N堆不同的石子,编号1..N,第i堆中有 Ai 个石子。
每一次行动,Alice和Bob可以选择从一堆石子中取出任意数量的石子。至少取1颗,至多取出这一堆剩下的所有石子。
Alice和Bob轮流行动,取走最后一个石子的人获得胜利。
假设每一轮游戏都是Alice先行动,请你判断在给定的情况下,如果双方都足够聪明,谁会获得胜利?
这是一个古老而又经典的博弈问题:Nim游戏。
Nim游戏是经典的公平组合游戏(ICG),对于ICG游戏我们有如下定义:
对于第三条,我们有更进一步的定义Position,我们将Position分为两类:
它们有如下性质:
在这个游戏中,我们已经知道A[] = {0,0,…,0}的局面是P局面,那么我们可以通过反向枚举来推导出所有的可能局面,总共的状态数量为 A1∗A2∗...∗AN 。并且每一次的状态转移很多。
虽然耗时巨大,但确实是一个可行方法。
当然,我们这里会讲这个题目就说明肯定没那么复杂。没错,对于这个游戏有一个非常神奇的结论:
对于一个局面,当且仅当 A1 xor A2 xor ... xor AN =0 时,该局面为P局面。
对于这个结论的证明如下:
以上三条满足ICG游戏中N,P局面的转移性质,所以该结论的正确性也得到了证明。
而根据这些性质,我们可以在 O(n) 的时间内判断一个Nim的局面的性质,且如果它是N-position,也可以在 O(n) 的时间内找到所有的必胜策略。Nim问题就这样基本上完美的解决了。
从上文可以看出,Nim游戏有着极其简单的规则和无比优美的结论。但如果把Nim的规则略加改变,你还能很快找出必胜策略吗?比如说:有n堆石子,每次可以从第1堆石子里取1颗、2颗或3颗,可以从第2堆石子里取奇数颗,可以从第3堆及以后石子里取任意颗……这时看上去问题复杂了很多,但其实,类似的千变万化的问题都是不成问题的。
而这一问题的应用,就要用到下文即将介绍的SG(Sprague-Garundy)函数。
同样从一个问题进入。
给定一个有向无环图和一个起始顶点上的一枚棋子,Alice和Bob交替的将这枚棋子沿有向边进行移动,无法移动者判负。问是否有必胜策略。
事实上,这个游戏可以认为是所有ICG游戏的抽象模型。也就是说,任何一个ICG游戏都可以通过把每个局面看成一个顶点,对每个局面和它的子局面连一条有向边来抽象成这个“有向图游戏”。下面我们就在有向无环图的顶点上定义SG(Sprague-Garundy)函数。
首先定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数。例如mex{0,1,2,4}=3、mex{2,3,5}=0、mex{}=0。
对于一个给定的有向无环图,定义关于图的每个顶点的SG函数sg如下:sg(x)=mex{ sg(y) | y是x的后继 }。也就是说,一个点的SG函数为在它所有后继中都未出现的最小的值。
来看一下SG函数的性质。首先,所有的没有出边的顶点,其SG值为0,因为它的后继集合是空集。然后对于一个sg(x)=0的顶点x,它的所有后继y都满足 sg(y) ≠ 0。对于一个sg(x) ≠ 0的顶点,必定存在一个后继y满足sg(y)=0。
这个时候你就应该有所发现了!SG函数的性质和N,P局面的性质非常相似!
以上表明,顶点x所代表的postion是P-position当且仅当sg(x)=0(跟P-positioin/N-position的定义是完全对应的)。
但是,SG函数的用途远没有这样简单。如果将有向图游戏变复杂一点,比如说,有向图上并不是只有一枚棋子,而是有n枚棋子,每次可以任选一颗进行移动,这时,怎样找到必胜策略呢?
让我们再来考虑一下顶点的SG值的意义。当sg(x)=k时,表明对于任意一个 0≤i<k ,都存在x的一个后继y满足sg(y)=i。也就是说,当某枚棋子的SG值是k时,我们可以把它变成0、变成1、…、变成k-1,但绝对不能保持k不变。
不知道你能不能根据这个联想到Nim游戏,Nim游戏的规则就是:每次选择一堆数量为k的石子,可以把它变成0、变成1、…、变成k-1,但绝对不能保持k不变。这表明,如果将n枚棋子所在的顶点的SG值看作n堆相应数量的石子,那么这个Nim游戏的每个必胜策略都对应于原来这n枚棋子的必胜策略!
对于n个棋子,设它们对应的顶点的SG值分别为 (a1,a2,...,an) ,再设局面 (a1,a2,...,an) 时的Nim游戏的一种必胜策略是把 ai 变成k,那么原游戏的一种必胜策略就是把第i枚棋子移动到一个SG值为k的顶点。这听上去有点过于神奇——怎么绕了一圈又回到Nim游戏上了。
其实我们还可以证明这种多棋子的有向图游戏的局面是P-position当且仅当所有棋子所在的位置的SG函数的异或为0。这个证明与上节的Nim游戏的证明几乎是完全相同的,只需要适当的改几个名词就行了。
刚才,为了使问题看上去更容易一些,认为n枚棋子是在一个有向图上移动。但如果不是在一个有向图上,而是每个棋子在一个有向图上,每次可以任选一个棋子(也就是任选一个有向图)进行移动,这样也不会给结论带来任何变化。
所以我们可以定义有向图游戏的和(Sum of Graph Games):设 G1、G2、…、Gn 是n个有向图游戏,定义游戏G是 G1、G2、…、Gn 的和(Sum),游戏G的移动规则是:任选一个子游戏 Gi 并移动上面的棋子,则sg(G)=sg( G1 ) xor sg( G2 ) xor … xor sg( Gn )。也就是说,游戏的和的SG函数值是它的所有子游戏的SG函数值的异或。
其实,任何一个ICG都可以抽象成一个有向图游戏。所以“SG函数”和“游戏的和”的概念就不是局限于有向图游戏。我们给每个ICG的每个position定义SG值,也可以定义n个ICG的和。所以说当我们面对由n个游戏组合成的一个游戏时,只需对于每个游戏找出求它的每个局面的SG值的方法,就可以把这些SG值全部看成Nim的石子堆,然后依照找Nim的必胜策略的方法来找这个游戏的必胜策略了!
回到上一节提出的问题。有n堆石子,每次可以从第1堆石子里取1颗、2颗或3颗,可以从第2堆石子里取奇数颗,可以从第3堆及以后石子里取任意颗。
我们可以把它看作3个子游戏,第1个子游戏只有一堆石子,每次可以取1、2、3颗,很容易看出x颗石子的局面的SG值是x%4。第2个子游戏也是只有一堆石子,每次可以取奇数颗,经过简单的画图可以知道这个游戏有x颗石子时的SG值是x%2。第3个游戏有n-2堆石子,就是一个Nim游戏。对于原游戏的每个局面,把三个子游戏的SG值异或一下就得到了整个游戏的SG值,然后就可以根据这个SG值判断是否有必胜策略以及做出决策了。其实看作3个子游戏还是保守了些,干脆看作n个子游戏,其中第1、2个子游戏如上所述,第3个及以后的子游戏都是“1堆石子,每次取几颗都可以”,称为“任取石子游戏”,这个超简单的游戏有x颗石子的SG值显然就是x。其实,n堆石子的Nim游戏本身不就是n个“任取石子游戏”的和吗?
至此,我们对于Nim游戏和SG函数的讨论基本结束。
有许多硬币任意分布在楼梯上,共n阶楼梯从地面由下向上编号为0到n。Alice和Bob轮流取操作,操作时可以将楼梯j(1<=j<=n)上的任意多但至少一个硬币移动到楼梯j-1上。无法移动者判负。
这个问题与Nim游戏的区别在于移走的硬币不是被扔掉而是被放进了另一堆硬币之中,考虑能否将这一部分楼梯排除考虑范围。奇数号楼梯只能将硬币扔到偶数号楼梯之中,同样偶数号楼梯上的硬币也只会被扔上奇数号楼梯。只考虑奇数号楼梯Nim,若偶数楼梯只作容器,那么游戏变为Nim。我们仍然可以用Nim的方法判断必败状态。
基于转化的思想,如果将正面朝上,位置i的硬币看作一堆规模为i的石子,我们就能看到游戏与Nim的相似点。
不过有许多Nim中的合法操作在这个游戏中是无法实现的,比如说,我们就无法从一堆规模为10的石子中取出其中的5个。不过我们将10与5同时翻转,所得到的状态,对应的Nim状态SG值与从10中取5是相同的。因此我们猜想这个游戏的状态SG函数值与对应的Nim相同。
事实上,虽然这个游戏无法实现Nim的所有操作,但它的状态所能到达的状态SG函数值集合与对应的Nim游戏状态相同。因此,它的状态SG函数值与对应Nim相同。
实际上,有这样的结论:
局面的SG值为局面中每个正面朝上的棋子单一存在时的SG值的异或和。
我们不妨从最本质的Anti-Nim游戏入手。
Alice和Bob轮流取N堆石子。每次只能从一堆中取出任意数目的石子,但不能不取。取走最后一个石子者败。
这个问题有一个结论,先手必胜当且仅当:
下面给出证明。
游戏分三种情况:
证明结束。
我们来定义Anti-SG游戏
定理:SJ定理
对于任意一个Anti-SG游戏,如果我们规定当局面中所有的单一游戏的SG值为0时,游戏结束,则先手必胜当且仅当:
(1)游戏的SG函数不为0且游戏中某个单一游戏的SG函数大于 1;
(2)游戏的SG函数为0且游戏中没有单一游戏的SG函数大于1。
其实我们可以类比Nim游戏与SG函数的证明方法,来感性地理解一下SJ定理的正确性。这里mex和sg的定义都是完全相同的,不再给出证明。
同样从一个最简单的问题出发。
Alice和Bob轮流取N堆石子,每一次可以从任意一堆中拿走任意个石子,也可以将一堆石子分为两个小堆。先拿完者获胜。
这个问题实际上是一个经典的Lasker’s Nim游戏:每一轮允许两会中操作之一:①从一堆石子中取走任意多个②将一堆数量不少于2的石子分成都不为空的两堆。
这个问题可以用SG函数来解决。首先,操作①其实和Nim游戏没什么区别,对于一个石子数为k的点来说,后继可以为0…k-1。而操作②实际上是把一个游戏分成了两个游戏。根据上文提到的游戏的和的概念,这两个游戏的和应该为两个子游戏的SG函数值的异或。而求某一个点的SG函数要利用它的后继,它的后继就应该为当前局面能产生的所有单一游戏,以及当前局面所有能分成的多个单一游戏的游戏的和。
比如说,状态3的后继有:0、1、2、(1,2),他们的SG值分别为0、1、2、3,所以sg(3) = 4。
那么这样,我们就能用SG函数解决这个问题。
但是,如果数据范围非常大的时候SG函数就不能用了,通过打表可以发现一个更优美的结论:
根据题目的描述,尝试定义Multi-SG游戏
考虑更一般的Multi-SG游戏解法,发现依然和SG函数有关。
对于一个单一游戏,不同的方法可能会将其分成不同的多个单一游戏。每一方法对应的多个单一游戏的游戏的和即可以表示这种方法的NP状态。而这个单一游戏的SG函数即为未在所有方法的SG函数值中出现过的最小值。
又一个SG函数的变形。
给定一个有向无环图,某些定点上有一些棋子。Alice和Bob轮流移动棋子,每一次移动要求必须移动所有可以移动的棋子,无法移动的人判负。
很容易想到:对于我们可以赢的单一游戏,我们一定要拿到这一场游戏的胜利!
所以,我们只需要考虑如何让我们必胜的游戏尽可能长的玩下去。
但是对手却不希望他必败的单一游戏玩的太久,这就是Every-SG游戏不同于其他 SG游戏的地方:一般的 SG游戏只有胜与负之间的博弈,而 Every-SG 游戏又添加了长与短之间的博弈。
定义Every-SG游戏:
在通过拓扑关系计算某一个状态点的SG函数时(事实上,我们只需要计算该状态点的SG值是否为0),对于SG值为0的点,我们需要知道最快几步能将游戏带入终止状态;对于SG值不为0的点,我们需要知道最慢几步游戏会被带入终止状态,我们用step函数来表示这个值。
那么
对于Every-SG游戏先手必胜当且仅当单一游戏中最大的step为奇数。
定理是显然的:最大的单一游戏步数如果是奇数的话那么肯定是先手取得进行最后一步,否则一定是对手取走最后一个棋子。
给出一个有 N个点的树,有一个点作为树的根节点。游戏者轮流从树中删去边,删去一条边后,不与根节点相连的部分将被移走。谁无法移动谁输。
我们有如下定理:
叶子节点的SG值为0;中间节点的SG值为它的所有子节点的SG值加1后的异或和。
证明(数学归纳法)
先证明第一部分:
我们假设树G的根为A,A只与B相连,图中共有N+1个节点,去掉A后以B为根节点的图为G’,下面证明SG(G)=SG(G’+1).
若我们去掉 AB之间的边,则所有的边都被删除
∴G存在 SG值为0的后继局面;①
若我们去掉 G中的除AB外的边 E,则删除后总边数小于等于K
设以B为根的G’去掉E以后的后继局面的SG值为P
∵以A为根的G去掉E以后图中的总边数小于等于K
又∵中间节点的SG值为它的所有子节点的SG值加1后的异或和
∴A为根的G去掉E以后的后继局面的SG值为P+1
∵以B为根的G’可以通过去边操作使得后继局面的SG值变为0到SG(G’)-1
∴以A 为根的G可以通过删除 G’中有的边使得后继局面的SG值变为1到SG(G’) ②
由①②得,SG(G)=SG(G’)+1
再证明第二部分
我们假设树G的根为A,A与T个节点相连,为 B1 、 B2 、…、 BT ,设去掉(T-1)个与A相连的边( ABX 保留)后,以A为根的树为 GX ,第二部分即证明SG(G)=SG( G′1 ) xor SG( G′2 ) xor … xor SG( G′T )
而根据前文提到的知识,这就有相当于是一个游戏的和,或者简单来说就是一个Nim游戏!
至此证明结束。
一个例题:Christmas Game(PKU3710)
题目大意:
这道题与我们上一节所讲的内容基本相同,唯一不同的是图中出现了环,所以,环的处理成为了解题的关键。
我们来分析环的性质:环保证不共用边,且只与基础树有一个公共点。因此题中所有的环都是从树中某一个点连出又连回同一个点的简单环!
我们通过分析发现了如下奇妙的性质:
所以我们可以去掉所有的偶环,将所有的奇环变为长短为1的链,就将这道题转化成了上面已经讨论过的模型。
我们将Christmas Game这道题进行一步拓展——去掉对环的限制条件,这个模型应该怎样处理?
无向图的删边游戏:
对于这个模型,有一个著名的定理——Fusion Principle。
定理
我们可以对无向图做如下改动:将图中的任意一个偶环缩成一个新点,任意一个奇环缩成一个新点加一个新边;所有连到原先环上的边全部改为与新点相连。这样的改动不会影响图的SG 值。
这个原理的证明十分复杂,这里不给出证明(记个结论吧)
这样的话,我们可以将任意一个无向图改成树结构,“无向图的删边游戏”就变成了“树的删边游戏”。
通过本文,你或许对博弈问题有了更深一层的认识。
很多博弈问题都是以Nim游戏为原型的。而Nim游戏虽然有简单无比的结论,但是如果我们进一步探究这个结论的本质的话,你会发现有更普遍更广泛的结论。无疑,SG函数是解决博弈问题的强有力工具。但是同样有一些题目由于时间或空间的限制我们无法用最基本的方法求解,这时候也需要我们将问题特殊化来寻求更有用的性质。
让我们在不断地思考与质疑中继续体会博弈论的美妙吧。
Thomas S. Ferguson 《GAME THEORY》
IOI2009国家集训队论文 贾志豪《组合游戏略述——浅谈SG游戏的若干拓展及变形》
IOI2007国家集训队论文 王晓珂《解析一类组合游戏》
每个分类难度尽量升序
并没有什么理论基础的机智博弈
pku 2484
bzoj 2463
bzoj 3895
pku 1740
bzoj 1982
pku 2505
Nim游戏
pku 2975
bzoj 1299
SG函数
pku 2425
pku 2960
bzoj 1874
阶梯博弈
bzoj 1115
BC #90B
pku 1704
hdu 4315
hdu 3389
Anti-Nim
bzoj 1022
Multi-SG
hdu 3032
pku 2311
pku 3537
bzoj 2940
bzoj 1188
bzoj 3576
Every-SG
hdu 3595
树的删边游戏
pku 3710
Anti+Multi SG 233
hdu 2509