Soma Zero Tutorials
🔍 搜索功能尚未开启,敬请期待。

3.1 未解游戏带来的范式转变

欢迎来到第三章。前两章的棋——井字棋、五子棋——都有个共同点:已被解出,而且棋子都长一个样。国际象棋两条都反过来:它至今无解,棋子还各不相同。这一节先讲清这两点带来的范式转变;你会发现,前两章的搜索框架大多能原样搬过来,真正要补的是几样国象特有的东西。

一、国象为何“未解”:树大到没边

回顾 1.1 那张复杂度表:国际象棋的博弈树约 10123,比五子棋的 1070 还大上天文数字的距离,更别提它至今没有任何“先手必胜/必和”的标准答案被算出来。这带来一个根本转变:

井字棋我们能搜到底,五子棋我们能算清强制杀,但国际象棋——连终局的影子都摸不到。所以这一章的引擎从头到尾都在做一件事:逼近。没有标准答案可走,只能尽量把“最佳着法”估得更准。这也解释了为什么国象引擎如此倚重评估函数——既然到不了终局,对中间局面的判断就是一切。

二、异质棋子:复杂度全面升级

五子棋的子都一样,落下就不动;国象有六种棋子(王后车象马兵),各有各的走法,还能移动、吃子。这一条让方方面面都变复杂:

  • 走子规则爆炸:每种棋子走法不同,还有王车易位、吃过路兵、兵升变这些特例,光“合法走子”就比五子棋难写得多(3.2 专门处理)。
  • 子力有价值:丢一个后和丢一个兵天差地别。评估必须先会算子力(后≈9、车≈5、象马≈3、兵≈1),这是五子棋没有的维度。
  • 有阶段性:开局、中局、残局的下法和评估重点都不同(比如王在开局要躲、在残局要冲)。

一句话:五子棋的难在“算得深”,国象的难在“判得准”。前者靠搜索,后者靠评估——这正是国象引擎的重心所在。

三、本章路线图:两条主线 + 一个老朋友

面对这样的对手,本章会走三条并行的路,它们其实你都已经见过雏形:

  • 传统路线:α-β 搜索 + 手工评估。前两章的搜索框架(α-β、迭代加深、置换表、排序)几乎原样迁移(3.3),再配一个国象的手工评估(3.4)。这是经典强引擎的骨架。
  • 现代路线:NNUE。把手工评估换成一个可高速增量更新的神经网络——这正是当今最强引擎 Stockfish 的核心(3.5)。它和第二章 2.8 的“混合引擎”一个道理:神经网络评估 + 经典搜索。
  • 自对弈路线:Leela Chess Zero。把第二章的 AlphaZero 思想搬到国象(3.8)。

还有个贯穿本章的老朋友:世界最强的开源引擎 Stockfish。很多时候我们不必从零造轮子——直接把它当工具调用(3.6),这也呼应了 ANIMA 文档里“用 Stockfish 作为 skill/tool 指挥下棋”的设定。

四、小结与下一节

  • 未解:博弈树 ~10123、无标准答案,引擎只能“逼近最佳着法”,评估函数因此格外关键。
  • 异质棋子:六种棋子带来复杂走子规则、子力价值、阶段性——五子棋难在算得深,国象难在判得准。
  • 三条路线:传统(α-β+手工评估) / 现代(NNUE) / 自对弈(Lc0),外加直接用 Stockfish。

先打地基。下一节 3.2 棋盘表示与规则引擎,我们处理国象那套复杂的合法走子(含易位、过路兵、升变),并请出 python-chess 库来省力。