谜题 / 井字棋 · 一个被完全解出的游戏 / 不输的下法:威胁、防守与双威胁 待审核 4 / 6
strategy · 中心 / 角 / fork

不输的下法:威胁、防守与双威胁

不必背下整棵博弈树才能下到不败。完美防守可以压缩成一张优先级清单:从「能赢就赢」一路到「占边」,每步取清单上最靠前可执行的那条。其中最值得理解的是 fork(双威胁)——一步同时凑出两条将成之线,对手只有一步、堵不全,于是下一手必有一条连成。

1 · 双威胁 fork 的构成

图 1-1 的局面轮到 X(X 占角 0 与中心 4,O 占边 1 与角 8)。O 那手 8 并非随意:X 占住 0 与 4 时,0-4-8 已是「两子一空」,O 被迫堵在 8。此时双方都没有下一手即连的点,X 走角 6——它自己不连线,却同时威胁 0-3-6 与 2-4-6 两条线。

图 1-1 · 从造叉到连成的四步。可单步前进,观察 O 堵掉一条威胁后另一条仍在。

警示 · 造叉的前提是双方都没有直接胜点。只要一方有「两子一空」的线,清单里的取胜与拦截就先于造叉触发——此时埋双威胁只会让对手先连成。防守方的对策也只有一个:别让对手走到能造 fork 的局面。一旦双威胁已成形,当回合只能堵一条,必丢另一条。所以防叉排在造叉之后、却高于一切布局手——要么提前占住对方的 fork 点,要么先制造一个自己的威胁,逼对手回防。

2 · 八条优先级清单

从上往下找第一条能执行的规则照做。这套清单来自 Newell 与 Simon 对井字棋的经典分析。

表 2-1 · 从上往下取第一条可执行的规则。
优先级 规则 含义
1 取胜 win 自己有「两子 + 一空」的线 → 直接连成。
2 拦截 block 对方有「两子 + 一空」的线 → 抢先堵上。
3 造叉 fork 走一步同时制造两条将成之线(双威胁)。
4 防叉 block fork 对方下一步能造 fork → 占其 fork 点,或先逼出一个威胁打断它。
5 中心 center 中心格空 → 占中心(参与四条线,最强单点)。
6 对角 opposite corner 对方占了一个角 → 占它的对角。
7 空角 corner 占任意空角(角参与三条线)。
8 空边 side 以上都不适用 → 占任意空边(边只参与两条线,最弱)。

警示 · 清单保证不败,但不等价于 minimax。让清单方执 X 与执 O 各跑一遍、对手穷举所有着法,286 局无一落败;可遍历全部 4520 个可达非终局局面比对,清单选点的博弈论值劣于最优着法的有 41 处——它们全是「对手已失误、存在必胜」却被清单走成和棋的局面。典型一例:X 占角 0、O 回角 2 后,清单按规则 5 抢中心 4 只能拿到和;改走对角 8 则 O 必须堵 4,O 的 2-4-6 反过来逼 X 堵 6,X 落 6 后同时威胁 3 与 7,成叉必胜。清单是一套防守完备、进攻保守的启发式,与整棵博弈树算出的最优着法不是一回事。

建议 · 格子的强度来自它参与几条线:中心 4 条 > 角 3 条 > 边 2 条。这也解释了为何先手抢中心或角最稳妥,以及为何 fork 多由角与中心配合搭出——它们的连线更容易两两交叠成双威胁。