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

4.9 Capstone:围棋对弈 App 与全课收口

终点到了——这一次是真的终点。我们把围棋也做成可玩的 pygame App,用本课自研的 naive MCTS 引擎;然后把它接进那组 ANIMA「下棋技能」,给整门四章的课画上句号。

一、pygame 围棋人机对弈

界面还是 1.8 那套骨架,第四次复用——这次画成 19×19、点击落子、支持虚手 / 提子 / 打劫 / 终局数子。对手就是本课 4.3 自研的 naive MCTS。界面把引擎的 info() 显式化:实时显示这一手跑了多少次模拟、胜率多少,让“AI 在想什么”看得见。

从井字棋到围棋,四套界面几乎是同一份代码——这正是从 1.2 起死磕“统一接口”的终极回报:棋盘形状和引擎换了,界面、擂台、可视化全都跨棋种复用。

二、诚实的棋力:一张“为什么需要 AlphaGo”的活教材

实话实说:自研的 naive MCTS 能下完全合法的围棋、会提子围空、正确数子,但棋力只到入门级。而这恰恰是最好的教学——你会亲手体会到:

  • 4.1 那堵墙是真的:纯 CPU 每步几千次模拟,对 361 个点杯水车薪;
  • 4.5 的神经网络不是炫技,是刚需:没有策略网络剪枝、价值网络判断,MCTS 在 19×19 就是上不去。

想要一个能碾压你的对手?按 4.8 挂上 KataGo 即可——接口是统一的,换的只是背后那颗大脑。

三、四引擎归一:ANIMA 的下棋技能集

四章下来,井字棋、五子棋、国象、围棋四个引擎都实现了同一套 GameEngine 接口。对上层的 ANIMA 认知框架来说,它们是四个长得一模一样、可一视同仁调用的“下棋技能”:

SKILLS = {
    "tictactoe": TicTacToeEngine(),
    "gomoku":    GomokuEngine(),     # 启发式 / AlphaZero / 混合
    "chess":     StockfishEngine(),  # 或自研 α-β + NNUE
    "go":        KataGoEngine(),      # 或自研 naive MCTS
}

# ANIMA 不关心是哪种棋、背后是搜索/MCTS/神经网络,统一这样问:
def anima_play(skill, state):
    info = SKILLS[skill].info()   # 谁占优?最佳着法?胜率/目数?
    return SKILLS[skill].best_move()

四、全课总结:你走过的版图

四章一气走完,回头看这条由“游戏复杂度递增”铺成的主线,你已经把下棋 AI 的整个版图亲手走了一遍:

  • 井字棋:小到能搜到底,学透 Minimax、α-β、评估/排序、MCTS、AlphaZero,立下统一接口;
  • 五子棋:搜不到底,逼出候选生成、棋型评估、威胁搜索/VCF、置换表、混合引擎;
  • 国象:异质棋子 + 未解,迁移搜索框架,补上静态搜索、NNUE、残局库,学会把 Stockfish 当工具;
  • 围棋连评估都写不出,逼出 MCTS,再逼出 AlphaGo 的策略+价值网络——攀上全课最高峰。

而那条反复出现的暗线,你已四次相逢:“神经网络的判断 + 经典搜索的精确”,是当今棋类 AI 最强的范式——它在五子棋叫混合引擎、国象叫 NNUE、围棋叫 AlphaGo,殊途同归。贯穿始终的开放 info() 接口,则让这些引擎不止会下棋,更能把判断讲清楚,成为 ANIMA 认知框架手中真正可用、可解释的工具——这正是 Soma(身体)之外,Anima(认知)最需要的东西。

四章到此结束,但你的引擎之路才刚开始。下一步,就是把这些代码真正写出来、训起来、下起来——从井字棋的几十行,到围棋的一整套 MCTS,一行一行把它们变成会下棋、能讲棋的真东西。祝你玩得开心。🎉