WUZIQI — Gomoku
好看,本身就是理由
← 返回博客

引擎 · 评估

引擎怎么判断局面好坏:从数棋型到学棋型

引擎仍靠搜索展开变化,但决定“哪边更好”的是评估函数。读完你会了解手写棋型计数的局限、训练型评估为什么必须和搜索配合,以及它怎样改变你看引擎建议的方式。

水墨棋盘习作:引擎为叶节点打分之前,先要看清那些尚未成形、却彼此牵连的棋形。
水墨棋盘习作:引擎为叶节点打分之前,先要看清那些尚未成形、却彼此牵连的棋形。

黑棋在棋盘中腹落下一子,白棋眼前没有必须堵住的四连,却看见两条逐渐靠近的斜线。引擎把一个远离交叉点的防守点排在前面;只看眼前的棋型,你可能想知道它究竟看见了什么。

搜索停下时,谁来给局面打分

引擎会沿着候选着法向前搜索,尝试双方的应对。以alpha-beta 搜索为例,它会剪去一些已无须继续检查的分支,但仍不可能在每个分支都走到终局。

搜索在某个局面停下时,评估函数要给这个叶节点一个分数,供上层比较走法。比如黑棋的一条斜线尚未构成直接威胁,评分仍可能认为白棋此后更难兼顾两侧;搜索据此决定要不要继续追这条变化。

这个分数是对当前局面的估计,胜负还要看接下来的着法。叶节点停得越早,评估越需要辨认那些尚未成形、却会影响后续选择的联系。

手写棋型表能看见什么

传统做法会识别活三、冲四等形状,再按预设权重合计。这样写很清楚:一处冲四通常比一处还要准备才能进攻的棋型紧急,引擎可以据此先检查防守着法。

以 15×15 自由规则下轮到白棋行棋的局面为例:黑棋左上方的斜向棋形与右侧的横向棋形都朝空着的天元延伸,白棋落在天元就能同时挡住两边。若手写表分别给两处棋形加分,却默认每处都要单独防守,就会重复计算防守代价,抬高黑棋的估值。手写表还受限于编写者预先列出的形状。搜索能发现部分遗漏,却得先把相关分支展开;如果评估较早排除了关键候选,算力未必会花在那条线上。

棋盘上左上方斜向棋形与右侧横向棋形都朝中央同一个空交叉点延伸,画面没有文字。
水墨棋盘上的两处安静棋形沿不同方向指向同一个空交叉点;白棋落在这里可同时应对。

从手写规则走向训练型评估

NNUE是“可高效更新的神经网络”的缩写。据关于将棋引擎 YaneuraOu 与 NNUE 起源的公开资料,它由 Yu Nasu 在 2018 年发明,最先用于将棋引擎 YaneuraOu;名称也借用了日本传说中“鵺”的读音。它让训练得到的判断能在落子后较快更新,适合放进反复评估局面的搜索过程。

一个有用的参照来自国际象棋。据Stockfish NNUE 的公开引擎记录,到 2020 年 8 月,其搜索速度约降了一半,棋力却比使用传统评估时至少高 80 Elo,随后进入官方引擎。这说明更慢的搜索有时仍能从更好的叶节点判断中获益。

评估换了方法,搜索仍要验证变化

学到的判断,仍须逐手检验

训练型评估可以从大量局面中学习棋形的组合关系,但它给出的仍是估计。白棋若有一步必须应对的冲四,黑棋看似宽裕的位置优势就可能迅速失效;引擎还得把这条强制变化走出来。

搜索方法也各有分工。PVS会先完整搜索首选着法,再用很窄的窗口检验其余着法,必要时回头重算;蒙特卡洛树搜索则把更多模拟分配给值得追的分支;遇到VCT一类连续威胁,有的引擎另用证明数搜索检查是否存在必然的进攻路线。

因此,同一手棋可以先凭评估进入候选,再因具体应对被否定。看到引擎改主意时,值得先找双方哪一步改变了威胁关系,而不要只比较前后两个分数。

水墨棋盘习作:中央棋子交出错落的方向,边缘留白,画面没有文字或标注。
中央的棋子交出错落的方向,边缘留白提醒着变化还没有走完。

2026 年赛场上的不同搭配

据Gomocup 2026 官方赛事页面的引擎更新说明,参赛引擎展示了几种搭配:Figrid 用 alpha-beta 搜索配合 NNUE 评估,还用威胁缓存和延续历史安排着法顺序;Chloris 的自制 NNUE 约用 300 万个 Standard-15 局面训练,搜索之外另设强制着法检查和紧急防守层。

同一Gomocup 2026 官方赛事页面记载,TKGomoku 保留手写棋型评估,同时使用轻量 NNUE、策略文件和开局库;DDQK-Conquer 也采用了类似 NNUE 的算法。页面还写到,Starpoint 以蒙特卡洛树搜索配合 transformer 评估,并在内部用证明数搜索处理 VCT。训练型判断进入了多种架构,具体用法并不相同。

赛果也不宜直接归给某一种评估。据Gomocup 2026 官方赛事页面的赛果,RAPFI 在 2026 年保住 20×20 自由规则冠军,又赢得 15×15 自由规则与快棋;新参赛的 KATAGOMO 在两个自由规则组别均列第二,其中 15×15 组只差 9 Elo。评估、搜索和时间分配一起决定一台引擎怎样下棋。

读懂一个出乎意料的推荐

引擎把安静的一手排在直接成三之前,可能看重它同时限制了两条后续路线。手写棋型表在落子当下看不到明确的高分形状,训练型评估却可能给这种局面关系更高的权重;是否站得住,还要看搜索找到的应对。

读分数时要记住它的条件:规则、搜索深度、用时和评估方式都会影响结果。同一局面换一个引擎,数值刻度和着法排序可能不同;先看推荐着法之后双方怎样走,再看分差是否稳定。

可以这样练:选一手引擎推荐、自己却想跳过的棋,先写下它在防守哪条线。沿引擎给出的变化各走几步,再回到原局面,检查自己的判断漏掉了哪一个交叉点。

让分数回到棋盘

复盘时,可以先找必须回应的威胁,再观察引擎怎样处理较远的联系。若一手棋暂时没有造出冲四,却让对方下一回合只能守一侧,就记录那条限制是从哪一步开始出现的。

评估函数改变了引擎挑选和衡量局面的方式,搜索继续负责检验具体变化。把两者分开看,遇到陌生的推荐着法时,你就能问得更细:它看中了什么,又算到了哪里?

先核对强制变化,再读局面分数

读完了?打开 WUZIQI 试一局。