游戏背后的数学,如何在游戏中必胜?
50 颗糖每次拿 1 到 3 颗,为什么先手只能拿 2?从终局往回标,可以证明剩 4 的倍数必败;两堆相等时后手模仿必胜,三堆则要看二进制不进位的加法。井字棋能被完整搜成和棋。有限、看得全、没有运气的游戏因此开局就有定论,但策梅洛 1913 年写的比这句口号窄。策略窃取常常只证明先手不会输,却不交出第一口。
桌上有 50 颗糖。两人轮流拿,每次只能拿 1 颗、2 颗或 3 颗,拿到最后一颗的人赢。你先拿。
可以先背一句“抢 4 的倍数”。先别背。我们从一颗糖都不剩的时候往回看。口诀会自己冒出来,而且你能看见它在哪一步成立、改一条规则后又会在哪里失效。
这条从终局倒推的路,借自漫士的视频《游戏背后的数学,如何在游戏中必胜?》。糖、两堆和有毒巧克力的形状沿用了那个讲法。下面的格子、步数和证明边界,按规则重新算过,并核对到论文实际写到的地方。
一、先把 0 颗标成必败
规则要先说死,否则同一堆糖会算出两张表。
- 轮流拿,每次 1、2 或 3 颗,不能跳过。
- 拿走最后一颗的人赢。桌上已经没有糖时,轮到的人走不了,也就是输了。
- 两人都能看见还剩多少,没有骰子,也没有藏起来的糖。
0 颗是终局:上一手已经把最后一颗拿走。所以 0 是必败格——这里的“必败”指轮到走的那个人输,而且双方之后都走最优时仍然输。
1 颗:拿走 1 颗,留给对方 0。你赢。2 颗、3 颗同样,一次拿完。
4 颗:拿 1 留 3,拿 2 留 2,拿 3 留 1。三格都是对方必胜。你没有第四种拿法。所以 4 是必败格。
5 颗就有出路了:拿 1,留下 4。6 颗拿 2,7 颗拿 3。8 颗又会把对方留在 7、6 或 5,三格都是对方必胜。
图 1:从左往右读,先定 0,再看哪一步能把对方留在虚线格。虚线格写着“无好手”,实线格的“拿 1”“拿 2”“拿 3”是唯一能走到必败格的数量。橙框沿格子走一遍后消失,只提示次序;减少动态效果时不显示橙框,字一直都在。单独打开,刷新可重播。
图只画到 8。一般结论可以用归纳说完。
设剩 \(n\) 颗时,轮到的人在双方都最优的前提下:
- \(n\) 是 4 的倍数,则必败;
- 否则必胜,而且唯一的胜着是拿走 \(n\) 除以 4 的余数。
\(n=0\) 已经核对过。假定所有更小的颗数都符合这句话。
若 \(n=4k\),而且 \(k\ge 1\),拿走 1、2、3 之后剩下 \(4k-1\)、\(4k-2\)、\(4k-3\),都不是 4 的倍数。按归纳,对方必胜。三步全输,所以这一格必败。
若 \(n=4k+r\),\(r\) 是 1、2 或 3,拿走 \(r\) 就留下 \(4k\),对方落到必败格。拿走别的数量,剩下的不是 4 的倍数,对方会必胜。所以胜着只有这一手。
50 颗:\(50=4\times 12+2\)。先手只能拿 2,留下 48。此后对方拿 \(r\) 颗(\(r\) 为 1、2 或 3),先手就拿 \(4-r\) 颗,始终把 4 的倍数还回去,直到把 0 留给对方。最后一颗是先手拿的。
脚本把 0 到 50 的每一格都按“所有拿法”倒推了一遍,和这条规律一致。拿错一次,节拍就交给对方。比如 5 颗时若贪心拿 2,留下 3,对方一次拿完,你输。
如果改成“拿最后一颗的人输”,0 颗不再是同一种终局,整张表都要重标。本文只算“拿走最后一颗的人赢”。
这种从终局往回贴标签的办法,叫做逆向归纳。标签不是“这一局谁手气好”,而是:轮到走的人,有没有一套应对,使得无论对方下一步怎么走,自己都能维持优势。
二、两堆一样多时,模仿就够了
再加一把规则:糖分成两堆。每次只能从同一堆里拿走至少 1 颗,可以整堆拿走。拿到桌上最后一颗的人赢。
(0, 0) 仍是必败。只剩一堆 \(n\) 颗、另一堆是 0 时,轮到的人把那一堆全拿走就赢,所以 \((n,0)\) 和 \((0,n)\) 在 \(n\ge 1\) 时必胜。
把 0 到 5 的每一对都这样倒推,必败格刚好落在对角线上:两堆颗数相等。
图 2:列是甲堆,行是乙堆,格里先写甲、再写乙。实线格必胜,虚线格必败。下方的例子从 5 比 2 拿到 2 比 2;若对方再把甲堆拿成 1,就从乙堆拿 1,回到 1 比 1。0 到 5 的每一格都由倒推得到。
对角线可以不靠穷举,直接写成策略。
两堆相等时,对方无论从哪一堆拿走 \(t\) 颗,两堆就不再相等。你从另一堆也拿走 \(t\) 颗,相等恢复。糖的总数每次都在减少,不能永远拿下去。最后一次:对方面对 \((k,k)\),拿走其中一堆的 \(k\) 颗,你拿走另一堆的 \(k\) 颗,最后一颗在你手里。
两堆不相等时,你先从多的那堆拿走差额,把它变成相等,然后用同一套模仿。
所以开局若是两堆各 100 颗,后手必胜:先手一动,后手就把它补平。若开局是 100 和 97,先手从 100 里拿 3,之后改由自己模仿。
这和单堆不一样。单堆的必胜是“每次把 4 的倍数留给对方”。两堆的必胜是“每次把相等留给对方”。两套策略都能写下来,不必把更大的格子再算一遍。
三、三堆糖为什么突然冒出二进制?把它想成“分袋配对”!
一旦变成三堆糖,上一节的左右照镜子立刻失灵了:比如三堆各 1 颗 (1, 1, 1),你拿走任意一堆,反而把相等的两堆 (1, 1) 送给了对方,对方照镜子稳赢。
1901–1902 年,哈佛大学数学家查尔斯·布顿(Charles L. Bouton)在《数学年刊》上彻底解开了任意多堆的玩法,并给它起名 Nim(尼姆游戏)。他的结论刚听起来像变魔术:把每堆颗数写成二进制,竖着对齐相加且不进位(今天记作异或 \(\oplus\));如果每一竖列的 1 都是偶数个,这就是轮到谁走谁必败的安全局!
很多读者第一次看到这里都会纳闷:好端端拿糖果,凭什么跟二进制扯上关系?
其实根本不用先背异或公式,只要把每堆糖按 \(8\) 颗、\(4\) 颗、\(2\) 颗、\(1\) 颗的规格分装进小袋子,它瞬间就变回了上一节的“两两配对照镜子”!
- 任何正整数都能唯一拆成不同规格的 2 的幂之和:比如布顿原文里的三堆
9, 5, 12——9 = 8 + 1(一袋 8、一袋 1),5 = 4 + 1(一袋 4、一袋 1),12 = 8 + 4(一袋 8、一袋 4)。 - 现在看图 3 左表,把同规格的袋子排成一竖列:8 颗袋正好 2 个(成一对!),4 颗袋正好 2 个(成一对!),1 颗袋也正好 2 个(成一对!)。没有任何一个袋子落单!
图 3:把二进制每一位看作
8、4、2、1 颗规格的小糖袋。左图 (9, 5, 12) 每种袋子都成双成对(列和全偶,异或和为 0),谁先动都会拆散至少一对,必败;右图 (3, 4, 5) 里 4 颗袋成对、1 颗袋成对,唯独甲堆多出一只落单的 2 颗袋——把这 2 颗拿走变成 (1, 4, 5),所有袋子重新成双成对!单独打开图片
一旦想通了“糖袋成双配对”,整套必胜法则就顺理成章了(只用两句话就能严密证完):
- 全配好对的安全局,一动必破功:设当前每列都是偶数个
1(即 \(a\oplus b\oplus c = 0\))。规则只许你动同一堆,不管你从这堆拿走几颗,这堆糖的二进制至少有一位会发生改变(0变1或1变0),那一竖列原本成双成对的偶数立刻变成奇数——你被迫把“有落单袋子”的好局面送给对手! - 有落单袋子的局面,一定能一步补齐所有配对:设当前至少有一列是奇数(异或和 \(s = a\oplus b\oplus c \neq 0\))。盯住规格最大的那个落单列(即 \(s\) 的最高位
1),必然至少有一堆糖拥有这只大袋子(记作 \(x\) 堆)。我们就在 \(x\) 堆里动手:把所有落单列的袋子状态全部翻转(多退少补,算式即改成 \(x\oplus s\))。因为最大那只袋子是退掉(最高位从1变0),哪怕后面小规格袋子补进几个(\(4 > 2+1\),\(8 > 4+2+1\)),总颗数也严格减少,完全符合“往外拿糖”的规则!
拿图 3 右边的 (3, 4, 5) 手算一遍:4 颗袋有两只(乙、丙),1 颗袋有两只(甲、丙),只有甲堆那只 2 颗袋孤零零落单(\(3\oplus 4\oplus 5 = 2\))。直接从甲堆把这 2 颗拿走,留下 (1, 4, 5),全场袋子瞬间全部配平!两堆相等其实就是它的特例——两堆完全一样,自然每种规格的糖袋都一模一样各有一只。
四、井字棋小到可以搜完
井字棋还是同一套标签,只是局面从“还剩几颗”换成“棋盘长什么样”。
× 先下,○ 后下。横、竖、斜连成三子的人赢。下满 9 格仍没有三子,就是和棋。
终局有三种:× 胜、○ 胜、和。往回标的时候:
- 存在一步,使自己立刻赢,或使对方落入必败,则这一盘必胜;
- 每一步都让对方必胜,则这一盘必败;
- 没有必胜步,但有一步能走到“双方都能守住和棋”的局面,则这一盘是和棋。
空棋盘用这套规则搜完,值是和棋。双方都最优时,谁也不能强迫对方犯错。
搜的过程里还能看见,最优和“随便下”不是一回事。下面这盘已经下了 6 子,轮到 ×。三个空位里,只有右上角能把和棋守住。× 若占左上,○ 占右上,右上、正中、左下三枚圈连成一线,○ 立刻赢。上边正中那个空位也会输,只是 ○ 不能在下一手就连成。
图 4:左盘轮到 ×,完整搜索的值是和。中盘的两枚橙格有先后:× 先占左上,○ 再占右上并连成。右盘 × 改占右上,这是三个空位里唯一仍为和棋的选择;之后的每一步图中没有逐着画出,搜索确认 ○ 无论怎么应,× 都还能守和。
把所有合法下法都数一遍,和“最优是和棋”是两份账。
脚本规定:有人连成三子就停止,不再把剩下的格子填完。这样数下来,× 胜 131184 局,○ 胜 77904 局,下满仍无人三连的有 46080 局,合计 255168。能走到的不同局面是 5478 个。若规定即使已经分出胜负也要把 9 格下满,末端会是 \(9!=362880\) 条,那是另一种计数,里面包含已经结束后的废着。
131184 大于 77904,只说明随便下时先手赢的条数更多。它不能推翻空棋盘的搜索值。那 46080 条和棋里,也有很多是中途放过了赢着。最优对局里,结果是和;能下成和棋的路径却不只一条,而且其中大量路径并不是最优。
井字棋因此是一个可以握在手里的样品:局面种类有限,终局清楚,倒推能跑完,空棋盘的答案是和棋。国际象棋和围棋的开局,缺的就是这最后一句“跑完”。
五、开局可以已有定论
把前面的贴标签说成一句一般的话。
考虑这样的游戏:
- 两人轮流走,每一步的合法着法只有有限种。
- 局面完全看得见。没有骰子,没有暗牌。
- 无论双方怎么走,对局都会在有限步内结束。
- 终局由规则判成某一方胜,或判成和。双方都更愿意自己赢,其次接受和,最不愿意自己输。
那么每一个局面恰属三类之一:轮到走的人能迫使自己赢;对方能迫使轮到的人输;或者双方都有办法避免自己输,也就是把结果守成和棋。
证明仍是倒推,只是这次对“最多还要走多少步”做归纳。
终局已经由规则标好:这一步若让对局结束,就按规则记成我胜、我负或和。还没结束的局面,用它已经标好的那一类。若每一步都通向“对方能迫使获胜”,则轮到的人必败。若存在一步通向“对方必败”,包括自己立刻获胜的终局,则轮到的人必胜。若两种都不是,那就没有获胜步,但存在一步走到和棋局面;走那里,并在之后继续使用那个局面上“避免失败”的应对。对方在和棋局面里同样无法迫使获胜。所以双方都能把结果守成和。
有限步是归纳的地板。局面可以循环时,不存在“最多还剩几步”,这套归纳就没有起点。
1913 年,恩斯特·策梅洛发表了《论集合论在国际象棋理论中的一项应用》,文章来自 1912 年剑桥国际数学家大会。他讨论的是两人、没有运气、利益相反、局面种类有限的游戏,并以国际象棋为例。他允许对局无限下下去,并把无限对局看作和棋。论文的主要问题是:若一方确实能迫使获胜,需要的步数有没有上限。他的回答是:有,而且可以不超过局面的总数。
后来的文献常把另一句话称作策梅洛定理:此类游戏里,先手必胜、后手必胜、双方都能守和,三者恰有其一。施瓦尔贝和沃克对照原文后写明,这句三选一更接近后来的整理。登内什·柯尼希在 1927 年指出,策梅洛原来关于“步数不超过局面数”的论证有漏洞;策梅洛在柯尼希论文的附录里给了补正。拉斯洛·卡尔马在 1928/29 年把局面分成甲方必胜、乙方必胜、以及双方都能避免失败的和棋。施瓦尔贝和沃克还写明:1913 年那篇论文并没有使用今天教科书里这种从终局逐层倒推;把倒推写成标准方法,是更后面的事。
上面这段证明用的,是对局长度有上限时的倒推。它可以说明空棋盘也有一个确定的值。它不告诉你这个值是先手胜、后手胜,还是和棋,也不把每个局面的应着交到你手里。
国际象棋要套进“长度有上限”,得靠终局规则把无限循环截断。香农在 1950 年讨论机器下棋时,就明确用到了五十步和棋规则,从而说变化树会结束。现行规则里还有三次重复可要求和棋,以及更晚的自动和棋条款。不同年代的规则文本,上限不一样。
围棋也一样。若规则禁止棋盘回到此前出现过的形状,局面种类有限,对局就不能无限循环。没有这种限制时,不能直接说每一盘都会在有限步内结束。规则文本对“同形”的定义并不统一,这里只把逻辑条件写出来。
“围棋之神在落第一子之前已经算完”是一个比喻:在长度有上限的规则下,开局的值已经确定。它不是一份已经算完的对局记录。国际象棋的开局属于胜、负、和中的哪一种,这句定理没有回答,到今天也还没有人把整棵树跑完。
六、不把树算完,有时也能证明先手不会输
有些游戏大到跑不完,却仍然能证明“后手不可能有必胜策略”。办法是反证,常被叫做策略窃取。它经常不告诉你第一手该下在哪。
先看一块可以算完的巧克力,把“证明存在”和“指出那一口”分开。
毒在左下角。选一格,把它和右上方还在的格子一起吃掉。吃到毒的人输。只剩毒的时候,轮到的人只能吃毒,所以 \(1\times 1\) 必败。
在 \(3\times 3\) 上,只吃右上角会输。对方接着吃掉中心及其右上方,留下一个 L:底边一整行,加上左边除去底角之外的格子。面对这个 L 的人必败。而“吃成这个 L”在开局就是合法的一口。所以先手自己第一口就该这样吃。此后对方吃掉一臂上的一截,先手就在另一臂上吃对称的一截。
图 5:先看右上角被吃掉之后的盘子,再看对方把它吃成 L,这一口会输。第二行是先手自己留下同一个 L;对方若吃掉底边右端,先手吃掉左边上端,两臂恢复一样长。虚线是已经吃掉的格子。图里只画了一种防御;脚本对其余防御也做了对称回应,并在边长 2、3、4 的正方形上核对过。
正方形上,留下 L 再镜像,是写得出来的策略。存在性证明更短,它只证明好的第一口存在:
假设后手有一套必胜应对。看“只吃最右上角一格”这一口。若这一口已经必胜,先手会赢,与“后手有必胜应对”矛盾。若这一口会输,后手就有一个应着,吃到某个形状 \(P\),并从 \(P\) 开始一直赢。在这套吃法里,少了右上角之后能一步吃到的形状,完整盘子也能一步吃到:你选中的那一格若不是右上角,连它右上方一起吃时,本来就会把右上角吃掉。于是 \(P\) 是开局就能直接吃出来的形状。先手本可以把第一口吃成 \(P\),然后照着那套原属于后手的应对接着下。后手的必胜应对因此也可以被先手使用。这与假设矛盾。
所以后手没有必胜应对。毒块迟早会被吃到,对局没有和棋。后手不能必胜,就意味着先手必胜。
证明用到了“假如后手会应对”。你若算不出那个应对,证明并不把第一口放进手里。\(3\times 3\) 上,只吃右上角恰恰会输,真正的第一口是对方用来惩罚它的那一口。\(2\times 3\) 上,脚本得到的唯一好第一口又恰好是只吃右上角。同一句证明,两块巧克力,第一口不一样。
大卫·盖尔在 1974 年的《美国数学月刊》上发表了这个游戏和这段存在性证明。正方形上的镜像用到了额外的对称性,存在性证明本身不给出这一口。
六贯棋(Hex)把同一招反证法搬到了连通棋盘上。先看一眼图 6,认识一下这个规则极简却深不见底的棋盘:
图 6:六贯棋盘由正六边形格子拼成菱形(实战常用 11×11,左图画 5×5 便于看清)。蓝方执先,目标是把上下两条蓝岸连成不断开的桥;橙方执后,目标是把左右两条橙岸连成桥。右图总结约翰·纳什证明“先手必胜”的两步逻辑链。单独打开图片
双方轮流往空格放子,落子不移、也不吃子。为什么纳什(John Nash,约 1949 年)连一盘棋谱都不用算,就能断定任何尺寸的对称六贯棋都是先手必胜?需要扣紧两环(缺一环都不行):
- 第一环(多一子绝不吃亏 ⇒ 后手不可能有必胜法):在六贯棋里,棋盘上白白多送你一枚自己的棋子,只会帮你搭桥,绝不会坏你的事。假如后手握有一本必胜秘籍,先手第一手随便瞎下一格,然后把那枚棋子当空气,假装自己是后手照抄秘籍(万一秘籍让你下在刚才那颗棋子上,就随便另挑一格空位下),就能把必胜秘籍原封不动偷过来!矛盾说明后手绝无必胜策略。
- 第二环(为什么不会像井字棋那样只是“双方守和”?——六贯棋定理:绝无和棋!):皮特·海因 1942 年发明六贯棋时就发现了图 6 右上的奇妙性质——哪怕乱下把整个棋盘填满,也必定恰好有一方连成了桥,绝不可能两家都没连上! 最直观的想法人人能懂:把蓝格想成低洼河道,橙格想成高耸堤坝。从北岸往蓝格里灌水,如果水流到了南岸,蓝方已经赢了;如果水流不到南岸,水潭边缘挡住去路的那一圈陆地,必定是一道从西岸一直连到东岸、滴水不漏的橙色堤坝——那橙方就已经赢了!(大卫·盖尔在 1979 年严格证明,这条“不能和棋”在数学上等价于拓扑学里的布劳威尔不动点定理。)
“后手不可能必胜”加上“绝无和棋”,直接锁死先手必胜!但就像有毒巧克力一样,策略窃取只证明必胜走法存在,却半个字也不透露第一步该下哪儿——直到今天,标准 \(11\times 11\) 六贯棋依然没有任何人或计算机能写出完整的必胜应着表。
无禁手五子棋要再分一层。
棋盘可能下满仍没有五连,所以和棋存在。策略窃取在这里最多说明后手没有必胜策略,先手可能只是能守和。而且“多一子永远无害”依赖规则:长连也算赢时,多一枚自己的子不会毁掉自己的五连。必须恰好五子才算赢时,多一子可能把五连加成六连,胜负条件反而没了,窃取论证的前提就站不稳。
L. 维克托·阿利斯在 1994 年的博士论文里研究了这两种 15×15:长连算赢,以及双方都只有恰好五连才算赢。论文把它们当作已经解出的游戏;1993 年的会议摘要写明,执先的程序在对方最优应对下取胜。那是搜索证明,不是策略窃取单独给出的一句口号。连珠再给黑棋加上禁手,长连、双三、双四可以判黑负。多一枚黑子可能直接违规。阿利斯没有把职业连珠算进同一份已完成的证明。
国际象棋和围棋里,多走一步也可能害自己。单堆糖剩下 4 颗就是最小的样品:若允许弃权,轮到的人会选择不动,把必败格留给对方;规则强迫他拿 1 到 3 颗,他就输。这种“轮到谁走,谁就把局面走坏”的位置,象棋里叫做迫移。策略窃取要的那句“多一枚己方棋子绝不会更糟”,在这里不成立。
七、答案存在,不代表谁拿得出
有限步那条定理说的是:值已经确定。香农在 1950 年就把“从终局倒推,可以判断一个局面是胜、负还是和”写进了让计算机下国际象棋的论文,并立刻说明这条路走不通。
他用的是数量级,不是逐个点名。典型局面大约有 30 步合法着法。白方一步加黑方一步有 \(30\times 30=900\) 种,他粗算成大约 \(10^3\) 种。一盘大约 40 个来回,于是 \((10^3)^{40}=10^{120}\)。直接计算 \(30^{80}\),大约是 \(10^{118.2}\)。两个数的差别,就是这回从 900 到 \(10^3\) 的舍入。他据此说,即便每微秒处理一条变化,算第一步也要超过 \(10^{90}\) 年。按他写下的 \(10^{120}\) 条、每微秒一条去除,大约是 \(3\times 10^{106}\) 年。两种写法都只说明:整棵树不能这么读。
他另外估计局面个数,用了一个摆放棋子的粗算式 \(64!/(32!(8!)^2(2!)^6)\),说数量级大约是 \(10^{43}\)。把式子算完,大约是 \(4.6\times 10^{42}\)。这个式子没有排除王相邻、兵出现在不该在的横线、被将军等不合法局面。它不是合法局面的普查。
阿利斯在 1994 年用另一种估法:国际象棋平均分支因子取 35、平均长度取 80 手,博弈树大约 \(10^{123}\);围棋平均分支因子取 250、平均长度取 150 手,大约 \(10^{360}\)。这是“典型长度的搜索树有多大”的估计。约翰·特龙普在 2016 年算的是另一件事:19 路围棋上,每一块棋都有气的合法局面,精确值约 \(2.082\times 10^{170}\),一共 171 位。全部涂成黑、白或空的 \(3^{361}\) 大约是 \(10^{172}\),其中大约 1.2% 合法。对局条数又是第三个数。非常长的对局会使它比 \(10^{360}\) 更大;特龙普给出的下界远高于这个典型树的估计。
可观测宇宙里的原子数目,用普朗克卫星 2015 年的宇宙学参数做换算,大约是 \(5\times 10^{79}\),常被说成 \(10^{80}\) 量级。香农的 \(10^{120}\) 大约是它的 \(10^{40}\) 倍。两边都是数量级:一边是他假设的变化条数,一边是重子密度乘上可观测体积。即便原子数再差一两个数量级,也装不下那棵树。人和机器都不能靠“每个局面背一条应着”来下棋。
既然整棵树大到宇宙都装不下,计算机下棋怎么尽可能少看冤枉路?第一招基本功叫极小化极大(Minimax)与 α-β 剪枝。
先看懂什么叫“极小化极大”:搜到固定步数(叶子)后,给每个局面打一个评估分——约定分数越高对先手(MAX 方)越有利,分数越低对后手(MIN 方)越有利。往回倒推时,轮到后手走的那一层永远会挑最小分来坑你;轮到先手走的那一层则在后手留出的结果里挑最大分。
一旦明白“你挑大、他挑小”,α-β 剪枝的省力机关就一目了然了(看图 7):
图 7:先看左支:两片叶子是 5 和 6,后手(MIN)会选较小的 5,于是先手手里至少握住了保底 5 分。接着看中支:第一片叶子刚翻开是 3,后手既然专挑更小的数,中支最终得分绝不可能超过 3(哪怕旁边没翻开的叶子是 100,后手也只会选 3 不会选 100!)。既然最多给 3 分,比手头的保底 5 分差,旁边的 7 当场剪掉免检!右支翻开 4 同理剪掉 9。单独打开图片
根上的 5 与“把六片叶子都读完再取最小、最大”的结果相同。改变的是读了几片。次序差,剪掉的就少。高德纳和摩尔在 1975 年分析了每次都先看对当前一方最有利的那一支:有效分支因子大约是原来的平方根。这是理想次序下的节省,不是每棵树都自动少看这么多。
还有一层限制。若叶子是下到固定深度后的估分,剪枝交回的是这些估分的结论。估分错了,根上也会错。坎贝尔、霍恩和许在描述深蓝时写的是带选择延伸的 α-β 搜索;相关报告里,它每步查看的局面大约是两百亿到四百亿。相对 \(10^{120}\),这仍是树的一小角。
AlphaZero 走的是另一条路。西尔弗等人在 2018 年的论文里写明,它不用 α-β,而用神经网络引导的蒙特卡洛树搜索,网络由自我对弈训练。它也没有把整棵树存下来。少看的方式变了,值仍然不是靠背表得到的。
回到 6 颗糖。唯一的胜着是拿 2,留下 4。这一手本身只是把门打开。门后面的策略是:对方拿 1 你拿 3,对方拿 2 你拿 2,对方拿 3 你拿 1,直到 0。人们说的“神之一手”,若用这套定义,就是进入这样一个局面的那一步:从那里开始,无论对方怎么应,都还有一整套应对把它守住。
大棋盘上被叫做神之一手的棋,通常是另一回事。它在很深的计算里保持了好的估分,或者避开了一个当时没看见的坏变化。除非每一条防御都走到了真正的终局失败,它还不是 50 颗糖那种已经证完的必胜。开局的值可以已经确定,屋里的人仍然看不见那张表。人和机器比的,是在表上看不见的时候,还能不能少看一些、少看错一些。
参考资料与图解说明
配图与生成脚本 python tools/visuals.py build game-value 一并保存在仓库中。单堆 0 到 50、两堆 0 到 8、三堆 0 到 8 的完整倒推,井字棋全状态搜索,\(3\times 3\) 与 \(2\times 3\) 有毒巧克力及边长 2 到 4 的正方形镜像验证,\(5\times 5\) 六贯棋连通校验,以及 α-β 剪枝读叶顺序,均由该脚本自动断言核对(脚本用于保证图例数值无误,不替代正文中的一般性证明)。
- 启发来源:漫士《游戏背后的数学,如何在游戏中必胜?》。支持本文的问题线索:从终局倒推、两堆模仿、有毒巧克力和“开局已有定论”的讲法。文中的数值、历史界限和五子棋的证明类型,不把视频当作出处。
- 尼姆游戏:Bouton, Nim, a game with a complete mathematical theory,Annals of Mathematics,2nd series,第 3 卷(1901–1902),第 35–39 页。支持规则、二进制列和为偶数的安全组合、9/5/12 这个例子,以及“安全局面走不出安全局面、不安全局面总能走回安全局面”。
- 国际象棋的两个大数与倒推为何不实用:Shannon, Programming a Computer for Playing Chess,Philosophical Magazine 第 41 卷(1950),第 256–275 页。支持从终局倒推在原则上可以判定胜负和,五十步规则使对局结束,\(10^{120}\) 条变化,约 \(10^{43}\) 的局面粗算,以及每微秒一条仍要超过 \(10^{90}\) 年。正文另给了不舍入时的 \(30^{80}\) 和那个阶乘式的计算结果。
- 策梅洛、柯尼希、卡尔马各自证明到哪里:Schwalbe 与 Walker,Zermelo and the Early History of Game Theory。支持 1913 年论文允许无限对局、主要问题是获胜步数的上限、原文没有使用后来的逆向归纳,以及柯尼希 1927、卡尔马 1928/29 的分工。策梅洛原文为 Über eine Anwendung der Mengenlehre auf die Theorie des Schachspiels,第五届国际数学家大会论文集,剑桥大学出版社,1913,第 501–504 页。
- 有毒巧克力:Zeilberger 对盖尔证明的公开讲解,其中引用 Gale,A curious Nim-type game,American Mathematical Monthly 第 81 卷(1974),第 876–879 页。支持矩形上先手必胜的存在性证明,以及证明不指出第一口。正文的 \(3\times 3\)、\(2\times 3\) 和正方形镜像由脚本另算。
- 六贯棋不能和棋,以及先手胜却没有着法表:麻省理工学院 SP.268 讲义 Hex。支持策略窃取、多一子无害、不能和棋才把“后手不能胜”推进成“先手必胜”,以及 \(11\times 11\) 没有列全的策略。讲义将不能和棋与布劳威尔不动点定理的等价归于 Gale,The game of Hex and the Brouwer fixed-point theorem,American Mathematical Monthly 第 86 卷(1979),第 818–827 页。
- 15×15 五子棋:Allis,Searching for solutions in games and artificial intelligence,林堡大学博士论文,1994。支持 free-style(长连算赢)与 standard(恰好五连)的区分、多一子在 free-style 中无害、两种规则都被纳入解题,以及围棋 \(10^{360}\)(分支因子 250、约 150 手)和国际象棋 \(10^{123}\)(分支因子 35、约 80 手)这两份估计。执先必胜的程序结论,同时参看 Allis、van den Herik 与 Huntjens,Go-Moku solved by new search techniques,AAAI 技术报告 FS-93-02,1993。
- 围棋合法局面的精确个数:Tromp,Number of legal Go positions,2016 年 1 月 20 日公布的 \(L(19,19)\)。支持 171 位精确值、约 \(2.081681994\times 10^{170}\),以及这是局面数而不是对局条数。计数方法见 Tromp 与 Farnebäck,Combinatorics of Go。
- α-β 在理想次序下的分支因子:Knuth 与 Moore,An analysis of alpha-beta pruning,Artificial Intelligence 第 6 卷(1975),第 293–326 页。支持理想着法次序下,有效分支因子大约是原分支因子的平方根。正文的六片叶子是单独构造的例子。
- 深蓝与 AlphaZero 的搜索不同:Campbell、Hoane 与 Hsu,Search control methods in Deep Blue。支持深蓝使用带选择延伸的 α-β,并且每步大约查看两百亿到四百亿个局面。系统总述见 Campbell、Hoane 与 Hsu,Deep Blue,Artificial Intelligence 第 134 卷(2002),第 57–83 页。Silver 等,Mastering chess and shogi by self-play,预印本;期刊版为 Science 第 362 卷(2018),第 1140–1144 页。支持 AlphaZero 使用蒙特卡洛树搜索,而不是 α-β。
- 原子数目的数量级:用普朗克 2015 年参数估计可观测宇宙原子数的计算。参数来自 Planck Collaboration,Planck 2015 results. XIII.,Astronomy & Astrophysics 第 594 卷,A13(2016),arXiv:1502.01589。支持大约 \(5\times 10^{79}\) 这一换算;正文只用它做数量级对照。