国际象棋残局库:把残局穷举出来之后,棋理被改写了哪些
残局库用逆向分析把少量棋子的所有局面算到底,七子全库已建成,最长强制杀达549步,一些公认的和棋被证明可胜。
什么是残局库
残局库(endgame tablebase)是一份预先算好的数据库:它穷举棋盘上某几种棋子的所有合法摆法,并且同时考虑白先行与黑先行,对每一个局面给出在双方完美弈法下的最终结果——白胜、黑胜或和棋——以及达成该结果所需的步数。
由于从被覆盖的局面走出的每一步,都会落到另一个同样被覆盖的局面,残局库实际上是一个「神谕」:只要局面进入它的覆盖范围,它给出的永远是最优着法。
怎么算出来的:从将杀倒着往回推
残局库不是正向穷举所有对局,而是用逆向分析(retrograde analysis)。它从终局状态出发——被将杀的局面、逼和的局面——然后一步步往回推,给所有能走到这些状态的局面赋值,直到覆盖全部目标局面。
这种生成方式决定了几个特点:一是它假设双方都走出最优,二是它通常假设王车易位已不可能(因为大部分残局早就过了易位窗口),三是它记录的不只是胜负,还有到将杀的步数(DTM)、到下一次吃子或兵前进的步数(DTZ)等指标。
规模的增长有多吓人
棋子数每加一个,存储需求不是线性上升:
- 全部五子残局的 Nalimov 库约需 7.05 GB;
- 全部六子残局约需 1.2 TB,大约在 2005 年前后完成;
- 七子残局估计需要 50 至 200 TB。莫斯科国立大学团队用 Lomonosov 超级计算机完成了七子全库,2012 年起陆续发布;
- Ronald de Man 的 Syzygy 库在 2013 年给出六子版本,2018 年补齐七子,用更高效的压缩把体量降到约 18.4 TB。
八子残局仍在推进中,目前只有部分子类,完整的公开版本尚未出现。
被改写的棋理
残局库带来的冲击不是「计算机算得快」,而是人类几百年积累的残局结论被批量修正。
一些长期被认为必和的局面,被证明在完美弈法下可以取胜;反过来,一些被认为能赢的局面被证明只能和。更极端的是步数:七子残局中最长的强制杀达到 549 步(局面为王后兵对王车象马,白方需要先把兵升变为马,再展开一长串调动);八子残局中已知的最长强制杀为 584 步。
这样的局面,任何人类都无法在棋盘上走出来,任何不挂残局库的引擎也算不准。
一个由此引出的规则争议
这里出现了规则层面的尴尬:国际象棋有 50 步规则——连续 50 回合没有吃子、没有兵的前进,任一方可宣告和棋。
残局库揭示出一批局面:它们必胜,但把优势兑现成将杀需要几百步不吃子、不动兵。按 50 步规则,这些局面在实战中是和棋;按棋理,它们是赢棋。
历史上国际象棋联合会曾为车象对车等特定残局延长过步数限制,后来又把这些例外取消,回到统一的 50 步。多数残局库本身并不考虑 50 步规则,因此会给出「66 步强制杀」这类在规则下实际是和棋的结论——使用库的程序需要自己处理这个差异,而在实战中它通常会选择最快取胜的走法,即使那会在理论上触碰 50 步限制。
今天怎么用
- 引擎:Stockfish 自 2016 年起支持 Syzygy 残局库查询,局面棋子数降到七子以内时可直接读取完美解;
- 在线查询:Lichess、ChessOK 等平台提供在线残局库查询,输入局面即可看到结果与最优着法;
- 排局创作:排局作者用残局库验证作品的唯一解与是否成立,过去需要人工反复推敲的工作现在可以机器校验;
- 日常学习:对普通棋手来说,最有价值的是纠正「这个残局一定是和棋」这类直觉。很多错误直觉正是残局库大规模修正的对象。
残局库的意义在于,它把国际象棋的一部分从「经验的学科」变成了「已解的学科」。剩下那部分——棋子更多、结构更复杂的中局——仍然是人类的领地,但边界已经比几十年前清晰得多。