简单博弈游戏学习笔记

博弈游戏,也有很多人把它叫做博弈论,但是博弈论的英文确实和 Game 这个词有关,所以也可以说是博弈游戏。

博弈游戏可以看作是一个专门的小领域(例如 数论、图论、或者是概率论),它的板块非常非常大。

所以这篇文章所写的可能只是很小的一部分,这里先开一个坑,我以后再来填写。

如果我没有听错的话,博弈游戏的全部介绍的书,好像有 800 多页。所以我们这些人学的都是冰山一角。

ICG 游戏

ICG 游戏是一个类别,也只是博弈游戏里面很简单的一类。

ICG,顾名思义,就是公平组合游戏

这个概念怎么判断呢?它有着几个条件:

  • 两个人玩,即恰好有两个玩家。轮流行动。

  • 信息是公开的,即目前游戏的状态大家都知道。

  • 行动与当前游戏的状态有关(即与当前是哪个玩家是无关的)。

    • 举个例子,你和我在玩国际象棋。你的车只能上下左右走,但是我可以说我开了 VIP,可以让车斜着走!

    • 这样显然不是 ICG 游戏,因为 可以对车执行的行动 和玩家是谁有关。这也是所谓的公平。你只能横着走,我可以斜着走,公平吗?

  • 同一个状态不能重复出现。

  • 游戏一定会结束(没有平局,只有一个人胜)。且两个人成功的目标一致。


我们来看几个例子,看一下他们到底是不是 ICG。这一点很重要!如果我们面对的游戏不是 ICG 游戏,那么后面的一些理论也不可以用了。

扫雷:不满足第一条,不是 ICG。

麻将:首先不满足第一条,其次也不满足第三条(每个人的牌都可能不同)。

象棋 :虽然这是两个人的游戏,虽然有公开的棋盘,虽然公平,但是可能会出现死局的情况(例如最终只剩下两个将了,完全就结束不了)。

NP 态

注意,这个时候我们讨论的是 ICG 游戏。

NP 是不是能够让你们想到 NP 问题,很抱歉,这里没有任何的联系。

既然 ICG 游戏已经要求最终一定要分出胜负,所以就设两个状态:N 态 和 P 态。

如果游戏的某一个状态是 N 态,则达到这个状态之后的先手必胜(所以所有人都尽量不走到为 N 态的状态,因为这样相当于给对方送命!)。

如果游戏的某一个状态是 P 态,则达到这个状态之后的先手必败(所以所有人都尽量走到为 P 态的状态,因为这样相当于自己必胜!)。

可以证明 ICG 游戏中,任何一个状态要么就是先手一定会胜利,要么就是先手一定会失败。

接下来我们来看几个经典的游戏。

在 DAG 上面的 ICG 游戏

当这个游戏是 ICG 游戏,且状态形成的关系构成一个有向无环图(DAG),就可以使用 NP 态很容易地求解必胜策略和必败策略。

注意,在这里求解 NP 态的时候,我们必须要化身"先知者",首先需要得知可以到达的所有的状态 NP 态分别是什么,再决定自己的 NP 态。

这个 DAG 的每一个点都是游戏的某个状态,每一条边都是游戏状态的变换(即如果我能通过游戏给出的操作把状态 1 变成状态 2,则连 状态 1 \(\to\) 状态 2 的一条边)。

于是这个游戏的行动就变成了**在 DAG 上面,从当前点选一条边走。**这是对于任何 ICG 且状态可以形成一个 DAG 的游戏都适用的。

设我们有这个 DAG。

我们需要对于每一个点求出从这个点开始,最终是否必胜还是必败。即求出每一个点的 NP 态。

不妨设游戏终止条件为:不能走就是输了。

注意,这里我只是为了让读者理解一下 NP 态的转移策略,实际上游戏的终止条件各不相同,需要具体问题具体分析


显然穷途末路的几个点一定是先手必败的,因为走到这些点就不会再有出路。

设 P 态为红色,N 态为绿色。

考虑那个画绿色的点。

显然它往哪走都可以,因为哪里走都是 P 态。

于是,这里我们得出:**只要我们的这个状态能够到达一个 P 态的状态,这个状态就一定先手必胜。**这是容易理解的。

同理:

对于绿色点中的最上面的那个点,它虽然也会到达一个绿色点,但是它不走那个绿色点不就行了!它明明可以到达那个红色点的,所以它也是 N 态。


考虑标了红色箭头的点。

显然,它不能到达任何的红色点,而它往哪里走都是绿色点,即后手一定胜,先手一定败。所以,它是 N 态。下面的那一个点同理。

所以,我们又可以得出另外一个真理:如果这个点只能到达绿色点,这个点一定是 P 态。


整合起来,NP 态的转移关系满足:

  • N 态:后继结点有 P 态。

  • P 态:后继结点全是 N 态。


还是那句话,NP 态并不适用于所有的博弈游戏。它只适用于只有必胜和必败的情况。

举个例子,还记得那道CSP-S T2,策略游戏吗,就是那道 6 个 ST 表的题目。但是这个题目只能化身"先知者",大力分类讨论,但是不能使用 NP 态了。因为这个游戏没有胜负。

Bash 博弈

我们来看几个很经典的博弈例子。

Bash 博弈:有 \(n\) 个石子,每次可以取 \([1,k]\) 个,不能取的人输

很熟悉对吧???结论很简单,就是如果 \((k+1) | n\),则先手必败。否则先手必胜。

考虑从 DAG 的视角来看这个问题。设 \(n=7,k=2\),显然可以建出如下的图:

然后就变成了一个 DAG 上面的博弈。

显然可以得出。

显然有必胜策略:把石子数量取成 \(k+1\) 的倍数,然后一直保持 \(k+1\) 的倍数就可以获胜。

威佐夫博弈

威佐夫博弈,英文 wythoff game

模型描述:有两堆石子,分别有 \(x\) 个和 \(y\) 个(\(x \le y\)),每次可以取一堆的任意数量或者两堆的相同数量,不能取的人输。

最终的结论很奇妙:

  • 如果 \(x = \lfloor \frac{\sqrt 5 +1}{2} \rfloor \times (y-x)\),则先手必胜。

  • 否则先手必败。

这个东西的黄金比哪来的呢?对不起。

这个东西很恶行,虽然最终的结论很奇妙,但是其证明很繁琐很复杂,这里就不再阐述了。

威佐夫博弈的证明里面有:click here

斐波那契博弈

模型描述:有 \(n\) 个式子,第一次可以取 \([1,n-1]\),以后每一次都最多只能取到上一次的两倍,不能取的人输。

考虑枚举!

1 是显然可以的。

2 是不行的,3 也是不行的。

4 是可以的。

5 的话呢,如果一开始取 1,则不行。一开始取 2,对面可以取 3,也不行。

这下看出来规律了吗:当 \(n\) 是斐波那契数的时候,一定先手必败。否则先手必胜。

尼姆博弈

前面我们讲得都是非常偏僻的内容,尼姆博弈(Nim Game)才是 ICG 游戏中最核心的部分,包括以后博弈论很常用的 SG 函数也需要使用尼姆博弈的结论。

模型描述:有 \(n\) 堆石子,每一次可以选一堆区任意的数量(\(>1\)),不能取的输。

结论:当 \(n\) 堆石子的异或和 \(=0\),先手必败。当异或和 \(\not = 0\),先手必胜。

结论很简单,但是怎么证明呢?


考虑对于一个可能是正确的必败条件,考虑怎么分析。

显然,如果目前已经满足了这个必败条件,则需要证明怎么操作最终都会输掉。

而对于所有输掉的游戏,其一开始的状态存在满足这个必败条件。


显然到了所谓的必败条件的时候(即异或和为 \(0\)),则么走都不会一步内再使得异或和为 \(0\),这是显然的。

而根据 NP 态的转移关系,这样子一定是 P 态。

这是比较好证明的。

所以我们可以证明,如果目前已经满足了这个必败条件,则怎么操作最终都会输掉。


不好证明的在于后面的那一部分。看上面的文章即可。

阶梯尼姆

阶梯尼姆,英文 Staircase Nim

模型描述:有 \(n\) 堆式子,每一次可以取一堆的任意数量,然后放入前一堆中(第一堆要放入第 \(0\) 堆中),不能选就是输了。

思想很简单:偶数位作为垃圾桶。

然后,奇数位就相当于一个 Nim 模型了。就是这么简单。

考虑证明。如果奇数位到了偶数位就相当于从奇数位里面取出来一些东西,和 Nim 一样。如果偶数位有回到了奇数位,我们还可以再从奇数位丢掉从而进行操作还原,做了和没做一样。

战斗结束。

反尼姆

反尼姆游戏,英文 Anti Nim

模型描述:有 \(n\) 堆石子,每一次可以选一堆取任意数量(大于 \(1\)),不能取

结论:

  • 如果石子数全为 \(1\) 且 \(n\) 为偶数则必胜

  • 如果石子数不是全为 \(1\) 而且异或和不等于 \(0\) 则也必胜

  • 否则必败。

CF1215D Ticket Game

我们来看一道题。

这道题里面的游戏就不是 ICG 游戏了,因为两个人的目标不一致。怎么办呢?

这道题也告诉我们了如何思考博弈论题目。


考虑一下,如果两个人分别选了两边的 ?

先手博弈策略:一定会选择对差值增大有利的选项。

后手博弈策略:跟先手选一样,来弥补差值。

所以左右的 ? 会两两抵消,那么剩下的 ? 都会出现在一边。此时问题似乎已经简化许多了。

显然这一边的问号数量一定是偶数。


那么现在:

设现在的差值为 \(dis\),? 的数量为 \(num\),则按照两者的关系分类讨论:

  • \(num / 2 \times 9 < dis\):先手不断选 \(0\) 就可以赢,后手会不断地选 \(9\)。

  • \(num / 2 \times 9 > dis\):先手不断选 \(9\) 就可以赢,后手会不断地选 \(0\)。

  • \(num / 2 \times 9 = dis\):后手只要不断地选和先手相加等于 \(9\) 的情况即可。后手必胜。

于是就直接分类讨论即可。