第 3 课 · 攻王
前三课解决的是不输:不送子、开局不亏、看得见吃子图形。这一课是第一次讲怎么主动赢一台算得比人深的机器。
答案不在算得更深,而在它的评估函数漏掉的那一项。
1 · 一个能看见的盲区
第 10 手黑方吃掉白后之后,静态评估给白方 −7.2 个兵,而同一个局面深搜给出的是「白方三层内将杀」。这不是引擎「算错了」——静态评估本来就不搜索,它报的是它看得见的东西的总和。问题在于它看得见的东西里没有王安全。
2 · 评估函数的四项与缺项
这台引擎的静态评估只有四项:子力、位置价值表、双象加成、叠兵惩罚。
没有的东西包括:王安全(king safety,王周围的兵阵是否完整、有几条线正对着它)、机动性(每个子能走多少格)、通路兵、开放线上的车、孤兵与落后兵。
四项里唯一与王有关的是位置价值表:中局阶段它给待在 b1/g1 附近的王加二三十厘兵,鼓励易位。但那是「王站在哪一格」,不是「王现在有多危险」——兵阵被撕开、三个子正对着它,这些在它的账本上都是零。
于是有了一条可执行的推论:任何以子力换取攻势的交易,它都只记账面那一半。 一个弃了子的攻击局面,在它眼里就是「我多着一个子」;只有当将杀真的进入搜索深度(中局四到五层)之内,它才会突然改口。
注 · 这条盲区对双方同时成立。它不会因为自己的王危险而回防,也不会因为对方的王危险而进攻——它只是不知道有这回事。所以针对它的王发动的攻击,往往在它「看见」之前就已经无法挽回;而它对自己王翼的处置也经常草率,这正是攻势的来源。
3 · 什么时候可以动手
攻王不是随时能发动的。三个条件同时成立才值得投入:
- 对方的王还没有安顿好,或者它周围的兵阵已经被撕开一道口子。
- 己方指向那一侧的子,比对方在那一侧的防守子多。攻击是数子的:三个打两个才成立。
- 有一条打得开的线——直线给车与后,斜线给象与后。没有线,子再多也传不进去。
第 1 课的三条原则在攻王这一步第二次兑现:出子快意味着条件 2 更容易满足,而对方若在开局阶段浪费手数,它的王往往还留在中路。
4 · 弃子的判据
弃子(sacrifice)指主动交出子力去换取攻势或将杀。它是这一课里唯一有风险的工具,判据只有一条:
弃子之后的整条变化必须是强制的——每一步对方都只有很少的合法应手,而且每一种都被算到底。
这与第 2 课「先数强制着法」是同一件事,区别只在弃子之后的序列更长。算不到底就不要弃:赌一个「大概能攻进去」,换来的通常是少一个子的残局,而残局正是这台引擎算得最清楚的地方(见第 5 课)。
警示 · 弃子最常见的失败不是算错,而是根本没算——看到对方王翼薄弱就顺手把子送过去。判据很硬:说不出对方第一步、第二步各有哪几种应手,就不该弃。
5 · 练习
课程目录 · 0 子力安全 · 1 开局三件事 · 2 五种吃子图形 · 3 攻王 · 4 该不该兑子 · 5 四个必会残局 · 6 名字