标题
漫谈组合博弈——从 \((\varnothing \mid \varnothing)\) 开始的异世界生活
Chapter 1 穿越
一觉醒来,环境居然变成了我不熟悉的样子!环顾四周,桌面上出现了一张字条。上面写着:
「神」将要对你委以重任,但是你需要先经过一次「智慧的试炼」。因此,你必须解决下面的问题,否则就会被「神」所抛弃!
「智慧」的试炼内容为:解开「方阵博弈」的秘密。
读完这段文字后,对「方阵博弈」一头雾水之际,纸条在一瞬之间变大,出现了更多的文字。
「方阵博弈」是用一个方阵进行的二人博弈,两个人分为左方和右方轮流行动,就像围棋中的白方和黑方一样。不过,在这博弈中,你作为哪一方以及谁是先手由你决定。
方阵中只有L,R和*三种字符。左方可以选择一个L,然后将这个L与右侧的所有字符变为*;右方可以选择一个R,然后将这个R与右侧的所有字符变为*。先无法进行行动的人输掉博弈。
在你准备好之后,你将会和「神」进行「方阵博弈」。你需要在 \(100\) 次「方阵博弈」中全部获胜即可通过「智慧的试炼」。
下面是一个可能的方阵样例。
*LRR*
RLLLL
RL*LL
“欸?这是,没见过的博弈?看起来十分复杂呢。既然是和「神」进行博弈,当然要做好万全的准备。「神」,总是知道最佳招法的吧!”我这样想着。“左方和右方,先手和后手。开局的选择肯定是胜负的关键点!比方说,如果我选择左方先手,对方就是右方后手。此时如果左方先手是必胜的,那就意味着右方后手是必败的!因为,博弈只有一个人能获胜嘛。选择右方先手时的胜负情况呢?这可就不知道了。”
既然如此,结果可以分成几类呢?对于同样的方阵,对于左方先手和右方先手可能会有不一样的胜负情况呢。因此,结果大致是四种吧。
- 左方先手胜,右方先手胜:先手必胜,表示为
previous的 \(\mathcal{P}\) 好了。 - 左方先手胜,右方先手败:左方必胜,表示为
left的 \(\mathcal{L}\) 好了。 - 左方先手败,右方先手胜:右方必胜,表示为
right的 \(\mathcal{R}\) 好了。 - 左方先手败,右方先手败:后手必胜,表示为
next的 \(\mathcal{N}\) 好了。
然后,就是分析这个博弈具体内容的时候啦!最简单的博弈是什么呢?大概是一个只有 * 的方阵吧。这样轮到谁都输了呢,也就是,\(\mathcal{N}\) 的局面。此外,由于 * 表示啥也没有,以后我们说“字符”这个概念的时候的时候就不包含它了。
如果方阵只有一行同样是简单的。第一个字符是谁的就是谁赢,因为只要轮到他就可以将局面变为全是 * 的 \(\mathcal{N}\) 交给对手。
两行?这就困难多了呢。如果两行的第一个字符都是 L 或者都是 R 那肯定是简单的。所以还剩下的情况是第一行以 L 开始,而第二行以 R 开始。此时依然非常复杂!那么我们再次简化,如果第一行只有 L,第二行只有 R 会怎么样呢?此时两人的最优策略都是从右往左拿,于是问题变为了比较 L 和 R 的个数。结果如下:
L比R多:\(\mathcal{L}\)。L和R一样多:\(\mathcal{N}\)。L比R少:\(\mathcal{R}\)。
读者不妨按照左方先手和右方先手对结果进行验证。那么,复杂一点的局面呢?似乎,总结出这样的规律,并不总是容易的呢。
Chapter 2 局面
正在焦头烂额的时候,桌面上的纸条闪起了金光。上面写着:
遇到了困难?让数学帮助你!尝试将已经发现的东西用数学定义出来吧。
对啊,定义出来!我们所说的“局面”,正是一个基本概念!不过,要定义,就需要知道“局面”之间的根本区别是什么。是什么呢?考虑博弈的进程的话,大概是双方分别能把这个局面推进到什么局面吧。于是,我们定义:
即,一个局面 \(g\) 可以表示为 \((G^L \mid G^R)\),其中 \(G^L, G^R\) 是两个有限集,分别表示左方和右方进行一次行动后能使局面 \(g\) 转化成的局面的集合。设 \(G^L\) 为 \(\{g_1^L, g_2^L, ...\}\),\(G^R = \{g_1^R, g_2^R, ...\}\),我们也可以写作:
这个定义似乎不同于我们常见的定义,是在“用局面定义局面”。这难道不是循环论证吗?不是的。因为说的更详细一点,这是在“用已有的局面定义新局面”。类似数学归纳法,这种定义的方式被称为归纳定义。
既然是“用已有的局面定义新局面”,那么我们最初有什么局面呢?自然是什么都没有的局面——全 *。对于“啥也没有”,我们不妨一个具有相同意义的东西——自然数 \(0\) 来代指这个局面。
注意,这里我们说的是“用自然数 \(0\) 来代指这个局面”。因此,本文中像这样单独出现的数字均表示一个局面而非数字。因此,在后文你可以看到,形如 \(0 + 0 = 0\),\(-1 + 1 = 0\),\(1 > 0\) 等“常识”全都要仔细地定义和验证。因为,将一个被称为 \(-1\) 的局面和一个被称为 \(1\) 的局面“加起来”变成的局面被称为 \(0\)”,肯定不是“显然成立”的。
我们上面的定义将所有局面 \(g\) 都定义为了 \((G^L \mid G^R)\) 的形式。但是,这个定义对作为归纳起点的 \(0\) 是成立的吗?其实成立。\(0\) 被定义为“谁都干不了事情的局面”。因此 \(G^L\) 和 \(G^R\) 都啥都没有。啥都没有的集合是什么?是 \(\varnothing\)!因此我们可以给出 \(0\) 的形式化定义:
在此基础上,形如 \((0 \mid 0)\),\((\varnothing \mid 0)\),\(((\varnothing \mid 0) \mid \varnothing)\) 等等局面都可以诞生啦!
不过,读者可能会想到,这个归纳有一定的问题。按照定义来说,局面 \(g = (g \mid h)\) 是可能存在的。但是这会导致一个“可以进行无限步的博弈”,从而在胜负之外增加一个“平手”的结果。不过,我们的实际问题中显然不会这样(每次操作后 * 一定增加)。因此,这意味着理论偏离实际,要对理论进行一些修正了。
在举例的时候,我们可以感受到,形如 \((0 \mid 0)\) 和 \((\varnothing \mid 0)\) 的局面是“一次嵌套产生的”,而 \(((\varnothing \mid 0) \mid \varnothing)\) 则是“两次嵌套产生的”。一次为基础,我们需要引入局面 \(g\) 的“深度”\(\mathcal{D}(g)\)。作为归纳起点的 \(0\) 深度也是 \(0\) 当然最直观,因此有:
在“嵌套”的时候,获得的局面的深度将会比用来嵌套的最深的局面还深一层。这样就能保证不会出现上面的那种“无穷局面”了!因此,我们如此定义局面 \(g = (G^L \mid G^R)\) 是简单局面当且仅当:
其中那个 \(\max\) 符号表示对于所有满足 \(\in G^L \cup G^R\) 的局面 \(h\),\(\mathcal{D}(h)\) 的最大值。方便起见,下文中“局面”全都指“简单局面”。
根据定义,局面的“深度”有着“在多少步之内博弈一定会结束”的意味呢。然而,“深度”也太无聊了。我看,我们归纳生成局面的过程就像是两个局面交配产生孩子嘛!那么,我们把“深度”称为“生日”好了。
Chapter 3 整数
比 \(0\) 稍微复杂一点的局面是什么呢?大概是 L 这样的。此时左方可以推进到 \(0\),而右方无法行动。根据前面我们的结论,我们能大致感受到:左方此时有 \(1\) 次行动的优势。于是,我们用整数 \(1\) 来代指这个局面。因此,我们定义为:
同理地,R 这个局面当然对应着整数 \(-1\),即:
有了元素,运算当然是必不可少的。那么,我们要用什么样子的运算呢?一个一个思考吧。行拼接?也就是,LR* \(+\) **R \(=\) LR***R?这显然不好。因为没有交换律,这会导致很多事情变得异常复杂。由于我们前面定义的整数基于我们的感受,就没有必要迁就这样一个笨蛋运算。相比之下,列拼接是远远更好的。比方说,纸条上的那个例子就可以通过 *LRR* \(+\) RLLLL \(+\) RL*LL 得到。因为每行是独立的,这个运算有交换律,而且一行的情况我们也有了研究。那么,下面我们就使用这个加法吧!形式化地,我们定义:
这里集合与元素的加法定义为将元素加到集合的每一个元素上所产生的集合。什么意思呢?就是因为行与行是独立的,双方分别可以在 \(g\) 中行动一步或者在 \(h\) 中行动一步。但是唯一的问题是,这怎么看起来也有 \(-1 + 1 \neq 0\) 的问题呢?
不过,对于 L;R 这样的两行(下面我们用 ; 表示换行),其实和 *;* 在结果上来看也没什么两样。当一方走了自己的行动之后,另一方总是能执行“相似”的行动,这样这两次行动就等价于啥也没干。更进一步地,LRRL;RLLR 这样的两行也等价于 ****;****。那么,这个“等价”具体要怎么定义呢?
看看我们所说出的语句,“在结果上来看”就是一个提示。只要把一个局面换成另一个局面后局面的结果都相同就可以认为是等价的。如果我们用 \(o(g)\) 表示局面 \(g\) 的结果,那么就有定义:
与此同时,我们也有了关于“相反数”的感受。什么样子的局面互为相反数呢?就是把局面中的 L 和 R 互换。形式化的表示呢?对于 \(g = (G^L \mid G^R)\),取反之后能干的事情是原先对手能干的事情,并且干完事情之后依然是反着的状态,因此 \(-g\) 中左方可以推进到的局面是 \(-G^R\)。其中对集合取相反数也是指对集合中的每个元素取相反数。因此,我们定义:
举个例子吧。比方说,若 \(g = 0 = (\varnothing \mid \varnothing)\),那么 \(-g = (\varnothing \mid \varnothing) = 0\);若 \(g = 1 = (0 \mid \varnothing)\),那么 \(-g = (\varnothing \mid 0) = -1\)。于是我们终于有 \(-1 + 1 = 0\) 了,吗?
并非。相反数最重要的概念就是 \(g + (-g) = 0\),但是我们还没有证明。我们能不能证明一下呢?在这里,摆弄式子大概率是复杂的。不妨考虑从局面上证明。我们对 \(g\) 的生日进行数学归纳:对于 \(g + (-g)\) 这个局面,若左方先手选择了进入 \(g_1^L + (-g)\),右方就可以进入 \(g_1^L + (-g_1^L)\),若左方先手选择了进入 \(g + (-g_1^R)\),右方就可以进入 \(g_1^R + (-g_1^R)\),此时 \(g_1^L + (-g_1^L)\) 和 \(g_1^R + (-g_1^R)\) 的形式是等同于原先的 \(g + (-g)\) 的,又因为 \(\mathcal{D}(g_1^L), \mathcal{D}(g_1^R)\) 都小于 \(\mathcal{D}(g)\)。根据归纳,起点的时候 \(g = 0\) 右方后手必胜,因此对于所有 \(g + (-g)\) 就都有右方后手必胜。同理可证左方后手必胜,因此我们至少有 \(g + (-g) \in \mathcal{N}\)。
那么我们还要证明 \(\mathcal{N} = \{0\}\)。不妨设一个 $ g \in \mathcal{N}$,那么就要满足 \(g = 0\) 即 \(\forall k, o(g + k) = o(0 + k) = o(k)\)。不妨设 \(k \in \mathcal{L}\),在 \(g + k\) 中,若左方先手,则直接在 \(k\) 行动到可以获胜的 \(k_i^L\),之后右方在哪动自己就在对应位置维持必胜即可;若右方先手,无论在哪下左方都能维持自己在 \(g\) 和 \(k\) 中均必胜。因此,\(g + k \in \mathcal{L}\)。对于其他情况,同理可证。因此,我们终于得到了这个定理:
这样,我们就有了一个完备的“相反数”。因此,我们也就有了减法:
不过,有了加减法之后还停留在 \(-1, 0, 1\) 三个数就很寒碜了。不难证明此时的加减法性质非常好,整数有的性质他们基本上都有。我们根据加减法可以得出,\(2 = 1 + 1 = (1 \mid \varnothing), -2 = (-1) + (-1) = (\varnothing \mid -1), ...\)。即:
读者不难验证,这个定义和我们的加减法是相容的。
Chapter 4 全序集
我们能感受到,对左方来说,正数意味着赢,负数意味着输。但是,现在连局面的正负都没有好的定义!这是因为,正负的判断是要和 \(0\) 做出比较的。因此,进行定义:
但是,\(g - h \in \mathcal{P}\) 怎么办?这似乎是不相容的。不过,我们可以感性地感受到,在「方阵博弈」中,\(g \in \mathcal{P}\) 的局面 \(g\) 是不存在的。毕竟,多进行一次操作肯定不会更好的吧。于是,仿照前面扔掉无限进行的局面,这里直接将 \(g \in \mathcal{P}\) 的 \(g\) 踹出我们的局面,这样形成的局面集合性质可真就足够好了。称之为正则局面。
忽略掉 \(\mathcal{P}\),我现在终于解决了每行只有一种字符的情况,可以通过 \(g\) 与 \(0\) 的大小关系来判断局面的情况。不过,我不是本来就解决这个了吗!辛辛苦苦把局面定义出来还有没有更好的用处呢?
嗯?纸条还在改变着自己的形态。
数学定义!数学定义!你要用数学描述“踢出”\(\mathcal{P}\)!
是啊,我原先对局面的定义似乎有了一些问题。怎么才能在定义的层面上彻底消除 \(g \in \mathcal{P}\) 呢?还是要找核心性质。“行动后一定不会变好”似乎是重要的线索。既然如此,不妨定义一个局面 \(g = (G^L \mid G^R)\) 是正则局面当且仅当:
考虑证明一下,如果 \(g \in \mathcal{P}\),那么对于左方,一定存在一个 \(g_i^L\) 交给右方之后自己还必胜,也就是说 \(g_i^L \ge 0\),那么因为 \(g > g_i^L\) 所以 \(g > 0\)。同理,对于右方,要求 \(g < 0\)。显然构成矛盾,因此得证。此时确实不存在 \(\mathcal{P}\)。
这时,我们的局面构成了完美的全序关系,即任意两个局面都可以比较出结果。那这样,双方又有什么理由选择更不利的推进呢?换句话说,在 \((-1, 0 \mid 1, 2)\) 的局面中,左方没有任何理由选择 \(-1\) 而不选择 \(0\),右方也没有任何理由选择 \(2\) 而不选择 \(1\)(注意数字越小对右方越有利)。所以,这个局面其实就等于 \((0 \mid 1)\)。换句话说,任何局面 \(g = (g^L \mid g^R)\) 都等于一个 \(h = (h^L \mid h^R)\),其中 \(|h^L|\) 和 \(|h^R|\) 均不超过 \(1\)。
那么,局面还能继续化简吗?比方说,\(g = (0 \mid 1)\) 的这个局面?根据定义,\(g\) 满足 \(0 < g < 1\)。因此,整数中已经没有了 \(g\) 的容身之所。我们要引入,什么样的东西呢?我思考着。
Chapter 5 二进分数
忽然,纸条爆发出耀眼的金光。
你终于到这里了啊。为了褒奖你的进步,「神」将降下福祉,告诉你一个定理。
对于正则局面 \(g = (G^L \mid G^R)\),设 \(x\) 为满足 \(\forall h \in G^L, h < x\) 且 \(\forall h \in G^R, h > x\) 的局面中生日最小的局面,则有 \(g = x\)。证明嘛,令 \(p = (G^L \cup X^L \mid G^R \cup X^R)\),分别论证 \(g = p, x = p\) 即可。
这可太关键了。甚至,「神」还给出了证明!根据这个定理,我们就可以进一步刻画局面的结构了。设 \(\mathcal{D}(g) \le i\) 的局面的集合为 \(S_i\),\(S_i\) 中的元素从小到大排序后为 \(g_{i, 0}, g_{i, 1}, ... g_{i, m}\),那么根据定理,只有 \((\varnothing \mid g_{i, 0}), (g_{i, j} \mid g_{i, j + 1}), (g_{i, m} \mid \varnothing)\) 可能成为 \(S_{i + 1}\) 中新产生的元素。显然这些元素在大小上正好插入了 \(S_i\) 中所有的 \(|S_i|\) 个元素之间的 \(|S_i| + 1\) 个空隙(包含两边),因此它们互不相同。并且,可以简单地推出,\(|S_i| = 2^{i + 1} - 1\)。
现在,我完全刻画出了局面的结构,问题是形如 \(g = (0 \mid 1)\) 一类的东西还是不会化简。既然这是由 \(0\) 和 \(1\) 产生的,为什么不试试 \(\frac{1}{2}\) 呢?也即,试试 \(g + g - 1 = 0\)。通过枚举和尝试,我发现这是正确的!因此,我们有:
相似地,可以归纳地证明:
那么其他的,以 \(2^k\) 为分母的分数具有什么样子的形式呢?我们不妨考虑 \(\frac{n}{2^k}\)(\(n\) 为奇数),这个分数可以拆成若干 \(\frac{1}{2^j}\) 的和。按照"双方忽略劣着"的原则不难写出:
就此,我们就可以画出局面的结构啦!

Chapter 5 终章
我似乎已经充分理解了“正则局面”所构成的结构。并且,所有的 \((g^L \mid g^R)\),都可以通过找到中间最高的数字来求出具体的值。现在,向「方阵博弈」进军吧。
对于一个局面 \(g\),在后面增加一个 * 显然没用,在后面增加一个 L 会有 \(g^\texttt{L} = (g^L, g \mid g^R) = (g \mid g^R)\),在后面增加一个 R 会有 \(g^\texttt{R} = (g^L \mid g^R, g) = (g^L \mid g)\)。
对于多行,直接相加即可。比方说,对于样例,有:
*LRR*\(= 0^\texttt{LRR} = (0 \mid \varnothing)^\texttt{RR} = 1^\texttt{RR} = (0 \mid 1)^\texttt{R} = (\frac{1}{2})^\texttt{R} = (0 \mid \frac{1}{2}) = \frac{1}{4}\)。RL*LL\(= 0^\texttt{RLLL} = (0^\texttt{RLL})^\texttt{L} = (-(0^\texttt{LRR}))^\texttt{L} = (-\frac{1}{4})^\texttt{L} = (-\frac{1}{4} \mid 0) = -\frac{1}{8}\)。RLLLL\(= 0^\texttt{RLLLL} = (0^\texttt{RLLL})^\texttt{L} = (-\frac{1}{8})^\texttt{L} = (-\frac{1}{8} \mid 0) = -\frac{1}{16}\)。
因此,样例局面 \(g\) 的总和为 \(\frac{1}{4} - \frac{1}{8} - \frac{1}{16} = \frac{1}{16} > 0\),所以有 \(g \in \mathcal{L}\)。
终于,在进行了大量的计算作为准备之后,我还是开始了「智慧的试炼」。\(100\) 局「方阵博弈」也出乎意料的容易,「神」所考察的是学会计算而不是进行计算。几乎所有给出的局面的值分母都不超过 \(16\)。于是,我跟随「神」,到达了异世界......
结语
关于组合博弈,其实还有多得多的内容,比方说我们这里扔掉的 \(g \in \mathcal{P}\) 可以拓展出无偏博弈。我们禁止的 \(g = (g \mid h)\) 可以拓展出循环博弈,我们要求的 \(G^L,G^R\) 是有限集去除后可以拓展出超现实数理论等等。由于本文主要面向(尤其是在抽象代数方面)零基础的读者,笔者此文只是简要介绍了正则博弈,省略了大量的证明。有兴趣的读者可以自行推导或者在互联网上搜索“组合博弈论”来获取本文中缺失的,或者有意省略的内容。如果反响比较好,笔者可能会在下一期会刊中投稿本文的续作。
对抽象代数有了解的读者可以发现本文介绍的“局面”构成群,并在其上定义了一个全序关系。事实上,允许无限集参与构造的正则博弈所导出的超现实数是最大的有序域,拥有着一些美好的性质。具有了抽象代数的前置知识也就可以真正地,理性地证明本文中提到与没提到的大量性质与定理了。感兴趣的读者可以尝试自行证明。
by the way,本人在“菜菜杯”所命的第一题就是本文中「方阵博弈」的推广。读完本文后十分推荐大家以那题作为“课后作业”来自己实践一下。
浙公网安备 33010602011771号