Skip to content

v3.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 18 Oct 10:37
da1edc8

3.2.0 — 看得准

照 docs/REVIEW-v3.1.md 做,只动对弈本身。

你的两个决定:

  • 评估权重改用自对弈拟合值;
  • 极限每手 5 → 2.5 秒。

不动的:界面、规则、存储格式、复盘与练习;入门 / 普通 / 困难每手的时间。

一句话:普通、困难看局面看得更准,明显更强;极限等待减半,棋力不变,仍明显强于困难。


评估权重:从自对弈里拟合

引擎给每个空点按「各方向的棋型」与「组合型」打分。这两张表一共约 20 个数,从 v1.65 起一直是手定的。这一版改为从对局里学:

  1. 困难档自对弈 1100 局(开局随机 3–6 子,每手 80ms);
  2. 取 18195 个平静局面(没有五、没有活四或双四、轮到的一方没有四三。战术局面交给搜索,不进样本);
  3. 用局面的分数预测这一局最后谁赢,逐个调整权重,使预测误差最小(Texel 式),做两轮。

预测误差 0.197 → 0.173。变化最大的几项:

棋型 原值 拟合后
眠三(单方向) 48 108
冲四(单方向) 170 534
四三 1400 2004
冲四 + 二 / 三 150 628
双三 900 420

拟合的结果是:冲四比原来以为的更值钱,双三没有那么值钱。冲四与五的分值不参与拟合,保持原值。

极限:5 秒 → 2.5 秒

  • 极限 2.5 秒对极限 5 秒,22 : 24(和 2),量不出差别。
  • 极限强于困难,靠的是时间用满:困难一旦最佳手稳定就提前落子(平均每手 0.44 秒),极限每一手都算到底。5 秒里后一半的时间没有换来可测的棋力。
  • 所以把它还给等待:极限每手至多 2.5 秒,原来是 5 秒。

各档对 v3.1 的同一档

量法改了:此前用随机 4 子开局,自由规则下黑方赢七到九成,一组开局两边各执一次黑多半各赢一局,量不出强弱。这一版用 5 子开局(黑 3 子、白 2 子、轮白走),黑方胜率降到六成多。p 值为双侧。

档 对 v3.1 同档
入门 只会挡冲四的新手对它 55 / 100(v3.1:54 / 100) 不变。入门的强弱由「漏挡活三」的概率决定,「常常漏掉活三」照旧成立
普通 68 : 26(和 2;p < 0.001) 明显更强
困难 33 : 15(p = 0.01);禁手规则 31 : 17(p = 0.06) 明显更强
极限 34 : 35(5 秒时);2.5 秒对 5 秒 22 : 24 不变

极限上还试了四种办法,都没有让它更强(详见评估文档):

  • 搜得更宽:对现在的极限 39 : 32;
  • 后排的手先浅搜:10 : 14;
  • 活三连杀:16 : 30,更弱;
  • 拟合权重:34 : 35。

档与档

5 子开局,每个开局两边各执一次黑:

自由规则 禁手规则
普通 对 入门 43 : 5 —
困难 对 普通 60 : 36(p = 0.02) —
极限 对 困难 91 : 51(和 2;p = 0.001) 33 : 14(和 1;p = 0.008,随机 4 子开局)

困难变强了、极限没变,两者的差距并没有缩小:v3.1 是 44 : 26(63 %),这一版是 91 : 51(64 %)。说明里的「实测明显强于困难」仍然成立。

说明文字

  • 极限:「每手至多 5 秒」→「每手至多 2.5 秒」。

顺手修

  • 参照引擎在个别局面里一手停不下来:
    • 发现经过:test-strength 里,新的困难与旧引擎 C2 的确定性对局走到第 19 手,C2(白)一手卡了一个多小时。
    • 原因:C1 的连续冲四搜索只认「评估次数」预算,而它自己从不评估,所以只按节点数限、不限时间的调用在这里没有预算,18 层的连续冲四指数爆炸。
    • 修法:连续冲四单独计数(ctx.v1),参照引擎 C2 用它设限。C1 自己的行为一字未变(按评估次数的预算照旧)。
    • 应用本身不受影响:应用里的 C1 调用都限了时间;练习题里的连续冲四只搜 6 层。

闸门

闸门 v3.1 v3.2
test-game 极档参数:除预算与时间管理外与难档一致;极限 2.5 秒且时间用满 5000ms,失败 2500ms
test-strength 上面那个局面里,C2 按节点数限的一手在 10 秒内走完 10 分钟未走完(超时) 0.5 秒

其余闸门照旧全部通过:test-game / test-surface S1–S20 / test-cross / test-loop / test-daily / test-strength。

看了、没做的

  • 同一局面总下同一手:同一局面问两次,困难 52 / 52、普通 103 / 105 给出同一手。但照搬一盘赢过的棋重下,困难 2 / 6、普通 1 / 6 能再赢一遍:开局的对称变化与计时的细微差别会让棋局走散。不动。
  • 让极限更强:在这套引擎里,极限的搜索已经到顶,更多时间、更深或更宽的搜索都换不来棋力。要再强,需要棋型之外的评估,这不是一版能做完的事。

底层依赖

@native-sdk/core / @native-sdk/cli 最新仍是 0.11.0,这一版无需升级。