不输的下法:威胁、防守与双威胁
不必背下整棵博弈树才能下到不败。完美防守可以压缩成一张优先级清单:从「能赢就赢」一路到「占边」,每步取清单上最靠前可执行的那条。其中最值得理解的是 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 两条线。
警示 · 造叉的前提是双方都没有直接胜点。只要一方有「两子一空」的线,清单里的取胜与拦截就先于造叉触发——此时埋双威胁只会让对手先连成。防守方的对策也只有一个:别让对手走到能造 fork 的局面。一旦双威胁已成形,当回合只能堵一条,必丢另一条。所以防叉排在造叉之后、却高于一切布局手——要么提前占住对方的 fork 点,要么先制造一个自己的威胁,逼对手回防。
2 · 八条优先级清单
从上往下找第一条能执行的规则照做。这套清单来自 Newell 与 Simon 对井字棋的经典分析。
| 优先级 | 规则 | 含义 |
|---|---|---|
| 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 多由角与中心配合搭出——它们的连线更容易两两交叠成双威胁。