你明明看见一个好点,下一手却被对方连续叫杀,整盘棋像被一根线牵走。复盘时更烦:引擎早早标出那条路线,好像它从一开始就知道哪里会塌。威胁空间搜索要解释的,正是这种读棋顺序:先看会逼迫对手回应的线,再回头比较普通好点。
先把棋盘缩小到强迫线
五子棋的难处,表面上是点太多。15 路棋盘开局后,每一步都有几十个候选点;如果每个点都平等展开,搜索树会很快失控。
但实战里,很多点并不平等。一个冲四会要求对手立刻挡;一个活三通常会逼出防守;连续的叫杀会让选择变少。这套搜索抓住这个事实:先研究那些带有强制回应的分支。
这种“机器感”有很朴素的来源:把棋盘暂时折叠,只留下“我威胁、你必须处理、我继续威胁”的骨架。普通的形势评估晚一点再做。
Allis 为什么从威胁开始
1990 年代初,Victor Allis 和同事在五子棋求解工作里系统使用这种思路,并配合证明数搜索。相关论文包括 1993 年 AAAI 的 Go-Moku Solved by New Search Techniques,以及 1994 年的 Go-Moku and Threat-Space Search。
这里的“solved”要放在当时论文讨论的规则和设定里理解。它不能被读成“所有五子棋变体都已解决”,更不能跳到禁手、Swap2、不同棋盘尺寸都一并盖章。
Allis 的关键观察很朴素:如果一方已经拥有连续威胁,另一方的很多漂亮构想都来不及实现。搜索程序应先问一句:眼前有没有一条能强迫到底的路。
先读强迫线,棋盘会安静很多。
威胁在程序里怎样被写成对象
人说“这里有活三”,程序要把它拆得更细。一个威胁通常包含三个部分:攻击方落子的点,防守方必须回应的点,以及后续还能接上的威胁。
比如黑棋形成一个活三,白棋可能有两个防点。程序会把这两个防点都列入回应集合,然后继续检查黑棋在每个回应后是否还能冲四、做四三,或转到另一侧制造双威胁。
这一步最容易误解。这套方法关心威胁之间能不能串起来,而不急着崇拜“当前最凶的一手”。单个冲四很响,后面接不上,价值会下降。
VCF 是最清楚的一条强迫线
VCF 常被翻成连续冲四胜。它的结构很干净:我冲四,你挡;我再冲四,你再挡;最后出现五连或无法同时防住的局面。
从读棋角度看,VCF 很适合机器。每一步的防守通常被限制在少数点,分支窄,结果明确。你复盘时看到引擎给出一串“唯一防”,多半就是这类线。
但实战不能只盯 VCF。很多胜法从活三、眠三、四三交换开始,前几步还没有连续冲四那么直白。强的搜索会在 VCF 之外保留更宽的威胁类型,代价是计算量变大。
评估函数负责处理没有强迫的局面
棋盘不会永远处在叫杀里。开局天元附近的厚度,中盘边线的潜力,禁手规则下黑棋双三双四的风险,都需要评估函数来判断。
现代五子棋引擎通常会把强迫线搜索和局面评估结合起来。能算清的杀棋先算;算不清或暂时无杀时,再用模式、权重、神经网络评估候选点。2025 年 Rapfi 相关的神经网络蒸馏论文,也是在这个方向上讨论效率和棋力的平衡。
所以你看到的“引擎读棋”,通常不是单一技巧。前端有 VCF、VCT 一类战术搜索,后面有更宽的点评分系统。两者配合,才会显得又快又稳。
人类能借走的部分:先问对手是否被迫
你不必把 Allis 的算法背下来。实战里最有用的借法,是把候选点分层:第一层看冲四和成五,第二层看活三和四三,第三层才看形状是否舒服。
举个局面:你在天元附近有两条斜线苗头,边上还有一个看起来很厚的补强点。先别急着补厚,数一下有没有一步活三能逼对手挡到某个位置,挡完后你能不能在另一条线冲四。
这个顺序会改变很多选择。看起来“漂亮”的厚势,如果不给对手压力,可能只是慢一拍;看起来普通的一手活三,只要能接上下一段威胁,就值得优先计算。
威胁空间搜索的边界也要记住
这种读法擅长处理强制性,却容易被规则细节和防守资源拖住。禁手五子棋里,黑棋的某些双三、双四不能下;一个看似漂亮的杀法,可能在最后一步触发禁手。
它也会漏掉安静的战略手。某些局面没有立刻叫杀,但一步补点能封住对手未来两条线,同时保留自己的反击。纯战术搜索读不到这种长期价值,需要评估来补。
把它当成一种读棋习惯会更稳:先找强迫,再看形势;先验证杀棋,再谈好点。下一局复盘时,挑一个中盘局面,沿着“威胁—防守—再威胁”手动走三层,你会更快看懂引擎为什么落在那里。
能逼回应的手,先进入计算。