jqe 给翻子打分和精确方法一样准,代价只有十分之一

每一次翻子都是一场引擎必须估价的赌博。暗子一动就会翻开,所以引擎走暗子时并不知道自己走的是什么。它会对这个暗子可能是的每一种棋子各走一次这步棋,给每种结果打分,再按每种棋子还有多少下落不明加权平均。我们看过的揭棋引擎都是这样做的。

常用的捷径会让翻子看起来比实际更安全。为了节省时间,搜索一旦知道某步棋不如目前最好的一步,就会停止计算,交回一个界限,也就是“最多这么多,或者更差”,而不是真实的分数。用来比较着法没有问题,放进平均里就错了:一个会被将死的棋子,可能以“不超过 +7”的形式返回,然后被当成 +7 计算。我们的皮卡鱼电脑有这个缺陷,我们检查过的那个 AB-JChess 版本也有。翻子错误那篇文章展示了它让我们的电脑走出了哪些棋。

精确的修正方法早在 1983 年就有了,但它很慢。Bruce Ballard 的 Star1 在搜索每一步带随机性的着法时,都设定能让每种结果如实返回的界限,所以平均值是对的。jqe 的报告在 jqe 实战走过的 72 次翻子上,测量了这两种方法,以及 jqe 自己的方法:

方法高估幅度搜索局面数
常用的捷径0.0211 倍
Star1,精确(Ballard,1983)0.00911.5 倍
jqe 的方法0.0091.15 倍
每种方法对 jqe 的 72 次翻子高估了多少(以期望得分计,0.01 即一百分中的一分),以及需要多少搜索量。数据来自 jqe 的报告。

jqe 只多花 15% 的工作量,就达到了 Star1 的准确度。对走动的暗子可能是的每一种棋子,它都少搜 6 个半回合的深度,并且不做截断,所以每种棋子返回的都是真实分数;同时它还会对可能性最大的那种棋子做完整深度的搜索。

我们修复皮卡鱼电脑时只修了它正在选择的那一步,因为在每次翻子都取精确平均会让它弱大约 150 Elo。jqe 这个更省力的版本用在所有地方,反而有提升。

比 AB-JChess 小 90 倍的神经网络

jqe 用一个 1.5 MB 的神经网络评估局面,比 AB-JChess 0.2d 使用的网络(2026 年 10 月 10 日版;AB-JChess 之后的版本可能会更换)小大约 90 倍。jqe 的网络只用它自己的对局训练,共 8200 万个局面,而 AB-JChess 的第一个网络用了大约十亿个局面。小网络运行起来很快:同样的时间里,jqe 看的局面大约是 AB-JChess 0.2b(0.2d 的上一个版本)的 30 倍。它的输入还会统计每一枚仍然盖着的暗子,所以它能看出一次翻子可能翻出什么。

jqe 对局面的判断比 AB-JChess 更准

两个引擎每走一步都会报出一个分数,我们用为各引擎分别拟合的曲线把它换算成胜率。有 142 盘棋,jqe 给自己 75% 或更高,而 AB-JChess 在前一步或后一步只给 jqe 60% 或更低。这些棋 jqe 赢了 116 盘。反过来的情况出现在 33 盘棋中,AB-JChess 赢了其中 23 盘。

下面前两盘棋里,AB-JChess 的一个暗子翻出来是车,而且正好落在 jqe 能吃掉它的位置。第三盘里,两个引擎对谁占优看法不一。

第 46 盘:jqe 第 8 回合吃掉车

jqe 执黑。第 8 回合,AB-JChess 的一个暗子吃掉 jqe 的一个子,翻出来是车,jqe 的一个暗子随即把它吃回。AB-JChess 直到第 18 回合都认为局势接近;jqe 第 35 回合将死对方。

第 239 盘:炮将军,赢得一车

jqe 执红。第 5 回合,AB-JChess 把一个暗子往前走,翻出来是车。jqe 的炮离开边线,到中路将军,同时让出这条直线,给它身后的暗子打开通路;黑方怎么应将都保不住这个车。AB-JChess 到第 16 回合才第一次给 jqe 75%;jqe 第 39 回合将死对方。

第 152 盘:AB-JChess 错过杀棋,丢了一车

jqe 执黑,而且处于下风:从第 19 回合起,两个引擎都给 AB-JChess 86% 或更高。第 22 回合 AB-JChess 有一套连杀,第一步是车吃兵;让 AB-JChess 自己搜得更久,它也能找到。实战中它却用另一个车吃士将军,jqe 的将吃掉了这个车。AB-JChess 报告这步棋是胜势,但这个分数是它的搜索在 4 秒用完时还没验证完的。同一步棋给它 15 秒,它的评分约为红方多四个兵,远不及它放弃的杀棋。这次比赛中两个引擎每步都正好 4 秒,搜索没把握时也不加时,第 152 盘说明了这样做可能付出的代价。

jqe 一吃掉车就给自己 81%,再走一步就是 99%。第 23 回合之后 AB-JChess 仍给自己 95%,第 24 回合才跌到 9%。jqe 第 36 回合将死对方。

jqe 也不总是对的。第 40 盘,jqe 在自己的最后一步给自己 67%,而 AB-JChess 只给它 2%,下一步就将死了它。

它排在哪里

jqe 排在揭棋电脑列表的最上面,比 AB-JChess 高一级,皮卡鱼的各个级别排在它们下面。它对 AB-JChess 0.2d 的领先,比当初对较旧的 0.2b 要小,因为新版本更强:0.2d 对旧版的胜幅约为 54 Elo。

对手用时局数结果Elo区间
AB-JChess 0.2d每步 4 秒300171-15-114+67+31 到 +104
AB-JChess 0.2b每步 4 秒10071-4-25+173+101 到 +262
AB-JChess 0.2b每步 15 秒5033-4-13+147+58 到 +261
AB-JChess 0.2b60 秒 + 0.6 秒1,000701-24-275+158+136 到 +181
我们的皮卡鱼电脑60 秒 + 0.6 秒1,000761-20-219+211+187 到 +236
jqe 的战绩:胜-和-负。区间为 95% 置信区间。最后两行来自 jqe 自己的报告,用的是其作者的裁判程序;其中的皮卡鱼对手是我们 9 月 21 日的皮卡鱼电脑,当时还没有修复翻子错误。

每一行都是一场独立的比赛,暗子布局和设置各不相同,所以这些差距不能相加。我们的比赛在我们自己的裁判程序上进行,它的规则和 jqe 的不完全一样:任何三次重复局面都判和,任何连续 60 回合无吃子也判和;而按 jqe 自己的规则,长将的一方判负,连续 40 回合无吃子判和。对 0.2d 的 300 盘里,有 15 盘以重复局面结束,还有一盘超过了 40 回合无吃子,最后 jqe 赢下。裁判程序还会把被暗吃的棋子向双方引擎公开,而在本站只有吃子方才知道它是什么。两个引擎看到的信息相同,所以谁也没有因此占便宜。

致谢

jqe 以 MIT 许可证开源,地址是 github.com/devinokeefe/jieqi,其中包括它的神经网络、比赛记录,以及能重算报告中每一个数字的工具。恭喜 Devin O'Keefe,也感谢他允许我们在这里使用它。同样感谢 Huorongrong 和 Laoxu,他们的 AB-JChess 是 jqe 必须超越的标杆。

挑战 jqe查看所有级别