4.1 围棋:压垮 Alpha-Beta 的那座山
三章走下来,α-β 把井字棋、五子棋、国象一路拿下。现在它要撞上一堵墙——围棋。这一章先讲清楚:为什么同一套搜索范式到围棋彻底失灵,以及人类是怎么换一条路(MCTS)把它救回来的。这是全课难度曲线的最高峰。
一、两个数字:361 与 250
先感受一下围棋的体量。国象平均每步约 35 种合法着,α-β 配合好的排序,代价大致是 分支层数/2。围棋呢?
- 19×19 = 361 个落点,开局几乎每个点都能下;
- 整盘平均每步仍有 ~250 个合法着;
- 一盘棋长达 200–300 手,你还必须看得很远才有意义。
250 的指数增长,几层就把搜索树撑爆。光是分支因子这一条,α-β 在围棋上就已经举步维艰。
二、真正的拦路虎:没有便宜的评估函数
但分支大还不是最致命的。α-β 能在国象上work,靠的是一个又快又准的评估函数:随手数个子力 + 子力位置表(回看 3.4),就能八九不离十地判断谁占优,再把这个分数沿搜索树往回传。
围棋没有这种东西:
- 一个子值多少?要看它周围的死活,没有固定价值;
- 一块棋是死是活?要靠复杂的全局读棋;
- 一片空算谁的?常常下完才知道。
没有可靠的 evaluate(),α-β 就是无源之水——它能往下搜,却不知道搜到的局面好不好。这才是围棋几十年攻不下来的根本原因。
三、换范式:从“评估”到“模拟”
既然写不出评估函数,那就绕开它。蒙特卡洛树搜索(MCTS)的主意简单到近乎粗暴:
不会判断局面,那就从这里随机把棋下到终局——终局数子是明确的——看谁赢的次数多。
随机下一盘当然离谱,但下几千几万盘求平均,信号就浮现出来:好棋平均胜率高。用“模拟胜率”顶替“评估函数”,正是 1.7 那套 MCTS 的精髓,这一单元就靠它。
四、本章在全课中的位置
把四章的主线连起来看,是一条由“游戏复杂度”驱动的攀升:
- 井字棋:小到能搜到底,Minimax 通杀;
- 五子棋:搜不到底,但棋型评估好写,α-β + 启发式够用;
- 国象:异质棋子,但子力可估,α-β 迁移 + 评估升级;
- 围棋:连评估都写不出,逼出 MCTS,最终逼出神经网络。
接下来:4.2 写规则引擎,4.3 落地 naive MCTS,4.4 把它榨到纯 CPU 的极限,4.5 起请来神经网络——一路走到 AlphaGo。