Repository navigation
3.2.0 — 看得准
照 docs/REVIEW-v3.1.md 做,只动对弈本身。
你的两个决定:
- 评估权重改用自对弈拟合值;
- 极限每手 5 → 2.5 秒。
不动的:界面、规则、存储格式、复盘与练习;入门 / 普通 / 困难每手的时间。
一句话:普通、困难看局面看得更准,明显更强;极限等待减半,棋力不变,仍明显强于困难。
评估权重:从自对弈里拟合
引擎给每个空点按「各方向的棋型」与「组合型」打分。这两张表一共约 20 个数,从 v1.65 起一直是手定的。这一版改为从对局里学:
- 困难档自对弈 1100 局(开局随机 3–6 子,每手 80ms);
- 取 18195 个平静局面(没有五、没有活四或双四、轮到的一方没有四三。战术局面交给搜索,不进样本);
- 用局面的分数预测这一局最后谁赢,逐个调整权重,使预测误差最小(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,这一版无需升级。