3.9 Capstone:国象对弈 App 与评测
到终点了。这是国象的收口,也是整门课的终章。我们把国象的人机对弈做成可玩程序、给各引擎定级,最后做一件最有意义的事——把井字棋、五子棋、国象三个棋种的引擎,统一成一组 ANIMA 可以调用的“下棋技能”,让这门课从“造引擎”真正接上“认知框架的工具”。
一、pygame 国象人机对弈
界面还是 1.8 那套骨架,第三次复用——画成 8×8、加载棋子图、点击走子。因为接口统一,对手可以一键切换:自研的 α-β+NNUE、或者直接挂 Stockfish。借助 3.6 的 info(),界面还能实时显示评分条(谁占优)和主变 PV(引擎预判接下来双方会怎么走)——和五子棋高亮威胁线一样,让“AI 在想什么”看得见。
到这里你应该深有体会了:从井字棋到国象,三套界面几乎是同一份代码。这正是从 1.2 起死磕“统一接口”的终极回报——界面、擂台、可视化全都跨棋种复用,换的只是棋盘形状和引擎。
二、多引擎对战与定级
老规矩,上 1.8 的擂台、用 2.10 的 Elo 定级。国象有个得天独厚的好处:Stockfish 可以调成各种棋力档位当标尺,把自研引擎的水平测得明明白白:
- 自研 α-β + 手工评估(3.3 + 3.4):能下得有模有样,但离顶级有差距。
- 自研 α-β + NNUE(3.5):评估换成网络后大幅跃升——印证 NNUE 的威力。
- Stockfish:天花板,世界冠军级,自研引擎能在它手下走得越久越说明功力。
这张天梯不只是排名,更是对全课技术路线的定量印证:神经网络评估 > 手工评估、搜索越深越强、融合路线最强——每一个结论,都能在 Elo 分上看见。
三、三引擎归一:交付一组 ANIMA「下棋技能」
最后,回扣贯穿全课的那条暗线。三章下来,我们让井字棋、五子棋、国象三个引擎都实现了同一套 GameEngine 接口。这意味着,对上层的 ANIMA 认知框架来说,它们是三个长得一模一样、可以一视同仁调用的“下棋技能”:
SKILLS = {
"tictactoe": TicTacToeEngine(),
"gomoku": GomokuEngine(), # 启发式 / AlphaZero / 混合,任选
"chess": StockfishEngine(), # 或自研 α-β + NNUE
}
# ANIMA 不关心是哪种棋、背后是搜索还是神经网络,统一这样问:
def anima_play(skill_name, state):
engine = SKILLS[skill_name]
info = engine.info() # 谁占优?最佳着法?有无威胁/必杀?
return engine.best_move() # 直接拿到该走的一步
这正是我们从第一章 1.2 起、用三章时间一点点铺就的目标:每个引擎都通过 info() 把自己的判断——评分、最佳着法、威胁分析、必胜线、残局结论——用人能看懂的方式开放出来。于是 ANIMA 想下棋时,不必懂任何棋类算法的内部,只要选一个技能、问一句 info(),就能既拿到该走的棋、又拿到“为什么”。这种可解释的工具化,正是 Soma(身体)之外,Anima(认知)最需要的东西。
四、全课总结:你走过的路
三章一气走下来,回头看这条由“游戏复杂度递增”驱动的主线,你已经把下棋 AI 的整个版图都亲手走了一遍:
- 第一章 · 井字棋:在小到能看清一切的沙盘里,学透了 Minimax、α-β、评估/排序、MCTS、AlphaZero,并立下统一接口。
- 第二章 · 五子棋:当棋盘大到搜不到底,逼出了候选生成、棋型评估、威胁搜索/VCF、置换表、真实 AlphaZero 训练、以及融合二者的混合引擎。
- 第三章 · 国象:面对未解 + 异质棋子,迁移了搜索框架,补上静态搜索、手工评估、NNUE、残局库,并学会把 Stockfish 当工具。
更重要的是,你看清了一条反复出现的主线:“神经网络的判断 + 经典搜索的精确”,是当今棋类 AI 最强的范式——它在五子棋叫混合引擎、在国象叫 NNUE,殊途同归。而贯穿始终的开放信息接口,则让这些引擎不止会下棋,更能把判断讲清楚,从而成为 ANIMA 认知框架手中真正可用的工具。
这门课到此结束,但你的引擎之路才刚开始。下一步,就是把这些代码真正写出来、训起来——在
anima-tools/里,从第一章的井字棋开始,一行一行把它变成会下棋、能对话的真东西。祝你玩得开心。🎉