博弈论入门总结

时间:2021-07-13 23:23:37

博弈论

一些简单的定义:

必胜点(N点):走到必胜点的玩家一定胜利。必败点(P点):走到必败点的玩家一定失败。

定理1.所有游戏终结的点都是必败点。
定理2.所有一步能走到必败点的就是必胜点。因为对手将面临必败点。
定理3.通过一步操作只能到必胜点的就是必败点。因为对手将获得必胜点。

取石子游戏

有两堆石子和两个玩家。
每回合,玩家可以选择从某一堆取走一个石子,或者从两堆中都取走一个石子。

最后无法操作的玩家失败。

分析

(A,B)

表示当前的状态:第一堆有 A 个石子,第二堆有 B

个石子。
由于这个游戏没有和局,所以某个状态不是必败点就是必胜点。

首先考虑终结点:两堆石子都空了,面对这个状态的玩家必败。
于是有了第一个必败点: (0,0)

定理2.所有一步能走到必败点的就是必胜点。因为对手将面临必败点。

由于 (0,1)

(1,0) 能走到 (0,0)

,因此它们是必胜点。

定理3.通过一步操作只能到必胜点的就是必败点。因为对手将获得必胜点。

考虑 (0,1)

,显然 (0,2) 只能走到 (0,1) ,所以 (0,2) 是必败点。由于 (0,3) 能走到 (0,2) 让对手必败,所以 (0,3) 是必胜点。
以此类推,我们得到结论: (0,2k) 是必败点, (0,2k+1)

是必胜点。

如何让对手面临 (0,2k)

呢?显然,当目前局面是 (1,2k+1) 时,可以两堆各取一个石子,所以 (1,2k+1) 是必胜点。类似地, (1,2k) 是必胜点,因为:
1. 先手不取 1 那一堆石子。则后手得到 (1,2k1) 必胜。因此不会这样选。2. 先手取走 1 那一堆石子。则后手得到 (0,2k) 局面必败。先手胜。3. 两堆石子都取。则后手得到 (0,2k1)

必胜,因此不会这样选。

因此我们得到结论: (1,)

是必胜点。

由于 (1,)

必胜,且 (2,2) 只能走到 (1,) ,所以 (2,2) 必败。
(2,3) (3,3) 是必胜点。由于 (2,4) 是必败点,所以 (3,4)
是必胜点。

稍微推理一番就得知:

(偶数,偶数)是必败点。
(奇数,偶数)是必胜点。
(偶数,奇数)是必胜点。
(奇数,奇数)是必胜点。

Nim游戏

Alice和Bob正在玩一个游戏,Alice先手。

他们面前有三堆石子。Alice和Bob轮流操作,每次从某堆中取走任意张。
没石子可取的玩家失败。

那么这个博弈如何做?

像之前那样以 (a,b,c)

表示状态。结论是( 表示异或,两数不同结果为1,两数相同结果为0):
1. 当且仅当 abc=0 时, (a,b,c)
  是必败点。2. 否则就是必胜点。

结论可以推广:
若有 n
堆石子,则当且仅当 abcd=0 时,此点是必败点。

浅谈博弈论

The theory of relative balancesoul of animals in the natof decision makers isquoted from the art about the mobile addicts andure and in the expectation called the game theory.icle Bible of Game Theory

综述

我们先讨论一类组合游戏问题的解法,这列问题具有如下特征:

1.游戏有两个人参与,二者轮流做出决策。且这两个人的决策都对自己最有利。
2.当有一人无法做出决策时游戏结束,无法做出决策的人输。无论二者如何做出决策,游戏可以在有限步内结束。
3.游戏中的同一个状态不可能多次抵达。且游戏不会有平局出现。任意一个游戏者在某一确定状态可以作出的决策集合只与当前的状态有关,而与游戏者无关。

这样一类游戏可以用 SG函数解决,我们将其称之为 SG-组合游戏(ICG游戏)。

对“最有利”的解释:本文所说的最有利,是指对于当前要做出决策的游戏者,如果他存在一种决策,使得后手进入到一个无论怎样做出决策都一定会输的的状态,那么结局一定是当前的游戏者胜。

Nim游戏

描述

有若干堆石子,每堆石子的数量都是有限的,合法的移动是“选择一堆石子并拿走若干颗(不能不拿)”,如果轮到某个人时所有的石子堆都已经被拿空了,则判负(因为他此刻没有任何合法的移动)。

手动模拟

假如只有一堆石子,那么先手直接拿完,胜利。

假如有两堆石子,先手先把两堆石子拿成数量一样。以后如果对手在某一堆里拿若干颗,你就可以在另一堆中拿同样多的颗数,直至胜利。反正假如一开始就一样了,先手就必败。

三堆以后手玩就非常累了,有没有更好的方法?

定义

定义P-position和N-position,其中P代表Previous,N代表Next。

直观的说,上一次move的人有必胜策略的局面是P-position,也就是“后手可保证必胜”或者“先手必败”,现在轮到move的人有必胜策略的局面是N-position,也就是“先手可保证必胜”。

更严谨的定义是:

  • 1.无法进行任何移动的局面(也就是terminal position)是P-position;
  • 2.可以移动到P-position的局面是N-position;
  • 3.所有移动都导致N-position的局面是P-position。

但是有了这个还不够,我们还需要一个结论

Bouton’s Theorem

对于一个Nim游戏的局面(a1,a2,…,an),它是P-position当且仅当a1^a2^…^an=0,其中^表示异或(xor)运算。

证明

我们用哪个更严谨的定义来证明一下。

1.对于无法进行任何移动的局面就是 0  0    0=0

,满足
2.对于一个N-position,设它是 a1  a2    an=k ,则一定存在某个 ai ,它的二进制表示在k的最高位上是1(否则k的最高位那个1是怎么得到的)。这时 ai  k<ai 一定成立。则我们可以将 ai 改变成 ai=ai  k ,此时 a1  a2    ai    an=a1  a2    an  k=0
3.若 a1  a2    an=0 ,一定不存在某个合法的移动,将 ai 改变成 ai 后满足 a1  a2    ai    an=0 。因为异或运算满足消去率,由 a1  a2    an=a1  a2    ai    an 可以得到 ai=ai 。所以将 ai 改变成 ai

不是一个合法的移动。

抽象模型

描述

给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移动者判负。

组合游戏中状态空间向图的转化

事实上,这个游戏可以认为是所有ICG游戏的抽象模型。

我们可以将组合游戏中的每一个状态抽象成图中的一个点,将每一步决策抽象成图中的一条边。我们将这个图称为该组合游戏的游戏图。

这样,对于组合游戏中的每一次对弈,我们都可以将其抽象成游戏图中的一条从某一顶点到出度为0的点的路径。

SG函数

SG函数是对游戏图中每一个节点的评估函数。它的定义如下:

f(v)=mex{f(u)|There is an edge from v to u}

其中 mex

是定义在整数集合上的。自变量是一个整数集合,函数值是不属于该整数集合的最小自然数。

我们可以发现SG函数的一些性质

1) 当X为结束状态时,它是必败状态, f(x)=


2) 当X不是结束状态时,如果它能到达必败状态,那么 f(x) ,X是必胜状态。
3) 如果X不是结束状态且它到达的所有状态未必败状态,那么 f(x)=

,它是必败状态。

以上表明,顶点x所代表的postion是P-position当且仅当sg(x)=0(跟P-positioin/N-position的定义是完全对应的)。

拓展

但是,SG函数的用途远没有这样简单。如果将有向图游戏变复杂一点,比如说,有向图上并不是只有一枚棋子,而是有n枚棋子,每次可以任选一颗进行移动,这时,怎样找到必胜策略呢?

让我们再来考虑一下顶点的SG值的意义。当sg(x)=k时,表明对于任意一个 0i<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堆及以后石子里取任意颗。(HDU 1536)

我们可以把它看作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。两人轮流取操作,操作时可以将楼梯j(1<=j<=n)上的任意多但至少一个硬币移动到楼梯j-1上。无法移动者判负。

解决

这个问题与Nim游戏的区别在于移走的硬币不是被扔掉而是被放进了另一堆硬币之中,考虑能否将这一部分楼梯排除考虑范围。奇数号楼梯只能将硬币扔到偶数号楼梯之中,同样偶数号楼梯上的硬币也只会被扔上奇数号楼梯。只考虑奇数号楼梯Nim,若偶数楼梯只作容器,那么游戏变为Nim。我们仍然可以用Nim的方法判断必败状态。

翻转硬币

描述

N枚硬币排成一排,有的正面朝上,有的反面朝上。我们从左开始对硬币按1到N编号。

两人轮流根据某些约束翻硬币(如:每次只能翻一或两枚,或者每次只能翻连续的几枚),但他所翻动的硬币中,最右边的必须是从正面翻到反面。谁不能翻谁输。

解决

基于转化的思想,如果将正面朝上,位置i的硬币看作一堆规模为i的石子,我们就能看到游戏与Nim的相似点。

不过有许多Nim中的合法操作在这个游戏中是无法实现的,比如说,我们就无法从一堆规模为10的石子中取出其中的5个。不过我们将10与5同时翻转,所得到的状态,对应的Nim状态SG值与从10中取5是相同的。因此我们猜想这个游戏的状态SG函数值与对应的Nim相同。

事实上,虽然这个游戏无法实现Nim的所有操作,但它的状态所能到达的状态SG函数值集合与对应的Nim游戏状态相同。因此,它的状态SG函数值与对应Nim相同。

实际上,有这样的结论:

局面的SG值为局面中每个正面朝上的棋子单一存在时的SG值的异或和。

Anti-SG游戏和SJ定理

描述

两人轮流取N堆石子。每次只能从一堆中取出任意数目的石子,但不能不取。取走最后一个石子者败。

解决

这个问题有一个结论,先手必胜当且仅当:

所有堆的石子数都为1且游戏的SG值为0
有些堆的石子数大于1且游戏的SG值不为0

下面给出证明。

游戏分三种情况:

1234567891011121314151617181920     每个堆只有一个石子        如果异或值=0,即有偶数个堆,则先手必胜(A        如果异或值≠0,即有奇数个堆,则先手必败(B    只存在一堆石子数>1,则先手必胜(C        可以发现在这种情况下,异或值一定≠0。并且可以发现,        在这种情况下先手一定有一种方法使得剩下奇数个石子个数都为1的堆,        即转化为B状态。所以先手必胜。    存在至少2堆石子数>1        当异或值=0时,先手必败(D        当异或值≠0时,先手必胜(E        关于这一步的证明应该把这两个状态结合来看。        首先,参考Nim游戏的证明,            当异或值=0时,无论进行怎样的操作都会使异或值≠0            而当异或值≠0时,一定存在一种移动方案,使得异或值=0        这个性质符合N,P状态的转换。        而不断地进行这种转换,总会有一个时刻局面变成了C状态,而C状态一定是从D状态转移过来的。        所以可以证明D状态总会在一个时刻必须转移到先手必胜态,        D状态是先手必败态。相应地,我们就可以证明E状态是先手必胜态。    证明结束。 

延伸

我们来定义Anti-SG游戏

Anti-SG游戏规定,决策集合为空的游戏者赢。
Anti-SG其他规则与SG游戏相同

SJ定理

对于任意一个Anti-SG游戏,如果我们规定当局面中所有的单一游戏的SG值为0时,游戏结束,则先手必胜当且仅当:

(1)游戏的SG函数不为0且游戏中某个单一游戏的SG函数大于 1;
(2)游戏的SG函数为0且游戏中没有单一游戏的SG函数大于1。

其实我们可以类比Nim游戏与SG函数的证明方法,来感性地理解一下SJ定理的正确性。这里mex和sg的定义都是完全相同的,不再给出证明。

Multi-SG游戏

描述

两人轮流取N堆石子,每一次可以从任意一堆中拿走任意个石子,也可以将一堆石子分为两个小堆。先拿完者获胜。

解决

这个问题可以用SG函数来解决。首先,操作①其实和Nim游戏没什么区别,对于一个石子数为k的点来说,后继可以为0…k-1。而操作②实际上是把一个游戏分成了两个游戏。根据上文提到的游戏的和的概念,这两个游戏的和应该为两个子游戏的SG函数值的异或。而求某一个点的SG函数要利用它的后继,它的后继就应该为当前局面能产生的所有单一游戏,以及当前局面所有能分成的多个单一游戏的游戏的和。

比如说,状态3的后继有:0、1、2、(1,2),他们的SG值分别为0、1、2、3,所以sg(3) = 4。
那么这样,我们就能用SG函数解决这个问题。

但是,如果数据范围非常大的时候SG函数就不能用了,通过打表可以发现一个更优美的结论:

sg(x)=x1,x,x+1,xmod4=0xmod4=1 or xmod4=2xmod4=3

延伸

根据题目的描述,尝试定义Multi-SG游戏

Multi-SG 游戏规定,在符合拓扑原则的前提下,一个单一游戏的后继可以为多个单一游戏。
Multi-SG其他规则与SG游戏相同。

考虑更一般的Multi-SG游戏解法,发现依然和SG函数有关。

对于一个单一游戏,不同的方法可能会将其分成不同的多个单一游戏。每一方法对应的多个单一游戏的游戏的和即可以表示这种方法的NP状态。而这个单一游戏的SG函数即为未在所有方法的SG函数值中出现过的最小值。

Every-SG

描述

给定一个有向无环图,某些定点上有一些棋子。两人轮流移动棋子,每一次移动要求必须移动所有可以移动的棋子,无法移动的人判负。

解决

这种类型,可以想成这样,有N组游戏,有N个人先手,有N个人后手,这个时候,编号相同的人和游戏分到一组游戏,既第i号先手的人和第i号后手的人做第i个游戏。游戏开始后,首先所有先手的人先操作,然后所有后手的人再操作,这样轮流下去。直到最后还没游戏完的一组,这组如果是先手的人胜利,那么该游戏先手必胜,如果是后手的人胜利,就是先手必败。

很明显,Every-SG不仅仅像其他SG那样仅仅跟SG值有关,还与一个游戏的时间长度有关。

如果先手想赢,那么,在做先手必胜的单一游戏时,他肯定是想把战线尽量拉长。在做先手必败的单一游戏时,他肯定是想把游戏尽快结束。

于是我们开一个Step数组。表示对于先手必胜的单一游戏而言,它最少走好多步胜利。对于先手必败的单一游戏而言,它最多走好多步。

这样,我们只需要看最后所有单一游戏最大的step那组的SG是0还是非0就可以断定是否先手必胜了。

很容易得出:

12345 uv的子状态)step[v]= 0                v为终止状态)step[v]= max{step[u]}+ 1  sg[v]>0,sg[u]=0step[v]= min{step[u]}+ 1  sg[v]==0 

现在需要证明两个东西:

(1)先手必胜,step表示的是最少走好多步。
(2)先手必败,step表示的是最多走好多步。

证明(1):

对于v点,先手必胜。先手总是从sg>1的到sg==0,他可以保证自己每次减少的步数为1。对手每次是从sg==0到sg>1,最少将步数减小1,既对方走的min值所取的结点,如果选其他的,步数反而到那步后还要增加。所以,先手必胜,step表示的是最少走好多步。
(反起想,这也是为什么step第三个递推式是用min的原因。)

证明(2):

对于v点,先手必败。先手总是从sg==0到sg>1,他可以保证自己每次减少的步数为1。对手每次是从sg>1到sg==0,对手肯定想让战线拉长,那么他只让步数减少1.所以,先手必败,step表示的是最多走好多步。

这里,式子的推导和证明柔和起来看更有利于理解。

值得注意理解的是,这里的最多和最少并不是绝对的最多最少。

对于(1)(2)而言,都是先手保证自己的操作后,看对手操作而决定最多最少。

而这里的最多最少正好等于step也是我们强制先手每次只减少步数1而得来的。

定理

对于Every-SG游戏先手必胜当且仅当单一游戏中最大的step为奇数。

定理是显然的:最大的单一游戏步数如果是奇数的话那么肯定是先手取得进行最后一步,否则一定是对手取走最后一个棋子。

树的删边游戏

描述

给出一个有 N个点的树,有一个点作为树的根节点。游戏者轮流从树中删去边,删去一条边后,不与根节点相连的部分将被移走。谁无法移动谁输。

解决

我们有如下定理:

叶子节点的SG值为0;中间节点的SG值为它的所有子节点的SG值加1后的异或和。

博弈论入门总结
博弈论入门总结

无向图的删边游戏

描述

一个无相联通图,有一个点作为图的根。

游戏者轮流从图中删去边,删去一条边后,不与根节点相连的部分将被移走。

谁无路可走谁输。

解决

对于这个模型,有一个著名的定理——Fusion Principle。

定理

我们可以对无向图做如下改动:将图中的任意一个偶环缩成一个新点,任意一个奇环缩成一个新点加一个新边;所有连到原先环上的边全部改为与新点相连。这样的改动不会影响图的SG 值。

博弈论入门总结

这样的话,我们可以将任意一个无向图改成树结构,“无向图的删边游戏”就变成了“树的删边游戏”。

题目

每个分类难度尽量升序

并没有什么理论基础的机智博弈

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

hdu 2509