背景
ScheSuper 的人机对战默认走 C 引擎(Alpha-Beta,depth 5 / 2s)。玩家反馈一个体验硬伤:AI 在对方融合棋子明摆着威胁自己子力时直接无视,下一步就丢子——对人类来说蠢得刺眼。
这篇记录的不是修复操作,而是排查过程中的几个关键判断,以及最后那个比"调参成功"更有价值的阴性结果。
关键判断 1:先建可量化基准,再动手修
拿到"AI 会无视威胁"这种模糊反馈,第一反应容易是直接去改评估函数。这次先做了两件事:
- 代码考古:发现 Python 版引擎里有专门的融合威胁评估函数且真的被调用,移植到 C 版时函数翻译了但调用丢了——成了死代码。这说明作者当初明确意识到过这个问题。
- 从 34 局真实人机对局自动挖掘失误基准:条件是"对方融合子的威胁在走子前就存在 + 走子方没解除 + 对方下一步兑现",挖出 30 个候选局面。此后所有修复效果都用这 30 个局面的解除率说话。
没有这个基准,后面的一切结论都会变成"感觉好了一点"。
关键判断 2:修复无效时,先定性再加码
按教科书思路实现了静态威胁惩罚项(走子方的子被敌方融合子攻击时罚分,补 quiescence stand-pat 看不到传入威胁的盲区)。结果:30 个真实失误上解除率 4/30 → 4/30,零净效果。
这时候的岔路口:调大惩罚参数继续试,还是停下来问为什么。选择了做多配置交叉实验定性:
| 配置 | 解除率 |
|---|---|
| balanced(线上默认) | 4/30 |
| balanced + 威胁项 | 4/30 |
| strength(融合加成小的预设) | 6/30 |
| strength + 威胁项 | 8/30 |
| balanced 融合加成全部减半 + 威胁项 | 9/30 |
同一个威胁项在 strength 下有效、在 balanced 下无效;对 balanced 最有效的是把融合加成砍半。结论定性翻转:问题不是"缺威胁感知",是价值体系失准——balanced 里"拥有车的融合能力"静态加 297 分,超过一个马的全部身价。引擎会理性地送真子去优化融合分。
它看见了威胁,它只是不在乎。 这句是整次排查最核心的认知:搜索没有 bug,评估的"价值观"坏了。
附带发现一个更隐蔽的价值观悖论:融合帅出九宫会触发"对方进宫即胜"的必败规则,而评估函数对带融合的帅出宫给的是 +55 奖励(暴露惩罚只罚不带融合的帅)——评估在鼓励一个必败模式。
关键判断 3:修蠢错 vs 头对头强度,是产品决策不是技术决策
减半配置修失误最好,但配对自对弈显示它对旧配置得分率约 43.75%——存在真实的 Pareto 权衡。最终拍板逻辑:玩家的不满来自"AI 犯蠢"而非"AI 不够强",人机体验优先。这个取舍没有技术上的正确答案,所以停下来让用户选,而不是替他选。
阴性结果:320 次 NSGA-II 调参,输给了过拟合
自然的追问是"参数空间里有没有两全的点"。用 Optuna NSGA-II 做双目标(对旧配置的自对弈得分率 × 失误解除数),4 进程并行 320 trial。调参期 Pareto 前沿看起来很美(0.45/9、0.625/7 的候选点)。
独立复验(全新开局种子 + 生产口径)后优势全部消失:最好的候选对现行配置只有 32.5% 得分率,解除率也没超过手工减半版。
根因:每个 trial 用 10 个固定开局前缀、20 局快棋估强度,320 个 trial 的预算足够把参数优化到"恰好赢下这 10 个开局"。
当优化器的评测集是固定、廉价、可反复查询的,优化器最终优化的是评测集本身,不是你要的能力。
修法明确(每 trial 从大开局池随机抽样 + 加大对局数),但当次的诚实结论是:没找到超越手工修复的配置。手工减半 + 威胁项保住了位置。
方法论教训(可迁移)
- 确定性引擎的自对弈评测纪律:无开局多样性时,20 局 = 2 条对局各重复 10 遍,零信息量。必须随机开局前缀 + 同开局换色配对(抵消开局不平衡)。这个坑第一次跑 A/B 就踩了,幸好执行的 agent 自己发现了"20 局全是重复"并停下来报告而不是交差。
- 独立复验(换种子、换口径)必须是调参流程的强制环节。调参期指标和复验指标哪怕只差一个时间预算(d5/1s vs d5/2s),数字都可能有明显出入;换开局种子更是直接戳穿过拟合。
- 压力下的意外收获:4 进程并行把机器压高后,暴露了搜索在时间预算内连 depth 1 都没完成时返回非法空着法(move=0)且无兜底的生产 bug——顺手修了。想复现偶发 bug,把系统压满有时比刻意构造更快。
- 阴性结果值得正式记录:它划出了当前方法论的能力边界,证伪了"随便调调就能两全",并把下一次的改进方向(评测集随机化)钉死了。
产出
- 完整技术复盘文章在项目仓库
docs/FUSION_CHESS_TECH_ARTICLE.md - 可复用工具链:失误挖掘 / 多配置评测 / 配对自对弈 / 调参三命令脚本,全在项目
engine/下 - 遗留:4 个对所有评估调参免疫的顽固失误案例(搜索层问题)、帅出宫必败规则的评估感知,下轮再攻