摘要
**状态估计(SE)**是项目里把截图读到的观察累积成对局状态和对手构筑推断的模块。其中一条推断来自魔力消耗:游戏日志会写“某英雄失去 N 点魔力”,再和法术的基础费用比较,差价可能透露出对方的技能或装备。
本实验发现并修正了两处错误:
- 单次施法:费用比基础价少 2 时,旧代码断言“魔法拖鞋或魔力弹性至少其一”。但用一个合法构筑(德鲁伊英雄自带减耗,没有拖鞋也没有魔力弹性)在规则模拟器里实际施法,扣蓝 4 和 7,SE 却给出了这条约束——真构筑被排除了。
- 两次施法:旧代码把第一发的加价全部当作固定 +5,用价差比例断言“奇术专家(第二次 ×1.5)”。用合法构筑实际施法得到扣蓝 11 → 16,真值是高级奇术(第二次 ×1.75),SE 却判成了专家。
修复后不再从单个价差硬推来源,而是保留已配对的扣蓝、主体和来源,把“可能的条件”作为说明展示。在真实保存的截图请求上,错误条目消失,其他结果逐项不变。
要回答的问题
- 旧的费用启发式为什么会排除真实构筑?
- 去掉它之后,扣蓝事实、施法次数、其他推断是否保持不变?App 的实际显示是否正确?
数据与来源
- 已有的合法施法反例:在项目的规则模拟器里按合法竞技场构筑施法得到的公开事件(德鲁伊减耗;高级奇术双施法)。这是模拟器结果,不是商业游戏的认证规则。
- 一份 10 月 10 日 16:57 训练录像的已保存 58 帧截图请求,固定选其中 F012 一帧:自动 SE 把 17:04:50 皮普的“审判”扣蓝 28 归为敌方(游戏资料里各等级基础价都是 30)。
- 不重跑视频或 OCR,不操作用户的 App。
方法
根因
旧函数把费用差 −2 解释为“拖鞋或魔力弹性”,把基础价的 1.5/1.75/2 倍解释为奇术,并生成“至少其一”的约束。可是能影响费用的来源远不止这些(例如德鲁伊自带减耗),没有联合其他上下文时,这不是完整的候选集合。另有一个独立的“单页费用估计器”在 57 个组合上测试正常——但它是另一个消费者,测不到这个问题。
修正
- 不再用金额启发式生成强制来源约束;费用原值、阵营归属和配对保持。
- 只通过模拟器的公开接口读各等级基础费用,作为参考写进已有的“推断说明”(标为非预测),不在 SE 里另写一套定价公式。说明里显示已读扣蓝、来源帧/行/时钟、仍需联合的条件;费用相等也不证明没有加减耗或等级已知。
- 两次施法:去掉“第一发增价是固定项”的跨次公式,保留原本“两次施法 → 奇术或双面面具”的来源候选,档位明确为“未确认”。
- 外部审阅建议补一个失败保护:读基础费用的可选查询若导入失败或部分等级查询失败,只把参考价标为未知,仍显示日志扣蓝;只捕获明确的错误类型,不吞掉所有异常。
设置
在 F012 保存请求上,修复前后各跑一次公开 SE 入口;再用 App 的严格读取入口、敌方条目和推断说明函数核对实际显示。单次调用约 1.75 秒,只跑一次,不是性能验收。
结果
| 项目 | 修复前 | 修复后 |
|---|---|---|
| 已配对敌方费用 | 审判 28,目录 30/30/30/30 | 完全保留 |
| 强制来源 | “魔法拖鞋或魔力弹性至少其一” | 不再生成 |
| App 右侧敌方条目 | “可能:魔法拖鞋 或 魔力弹性” | 只移除这条,其他条目逐项相同 |
| App 推断说明 | 无本费用的来源说明 | 费用 28 / 公开基础参考 30,各种可能条件及帧、行、时钟、原文 |
| 原始观察、施法次数/主体、排除项 | 原值 | 完全相同 |
两次施法反例:修复后旧的“奇术专家”条目消失,“两次施法”的来源候选仍在;只有推断说明和显示名改变,费用、施法、观察、排除保持。
软件验收(按节点去重):SE 104 + 88 项受影响检查 + 13 个已有保存案例回归,App 66 项,共 271 项通过,其中本轮新增 8 项。新增用例包括两种实际来源、同观察一致、未知归属、净零抵消、导入故障和部分等级查询失败。软件检查数不是实机场次。
失败与负结果
- 修复前测试:先有一次因新测试目录父文件夹不存在导致的 2 个 setup 错误;第二次 4 失败 1 通过,确认错误约束。
- 修复后首次 97 通过 4 失败:测试误把旧的简要文字函数当成新说明的渲染入口;改为检查公开结果里已有的说明,再用 App 的实际说明函数验收,没有为过测而改旧接口。
- App 验证脚本两次写错断言位置(遗漏预期变化、找错候选所在层级),核对前后结构后修正。
- 一个已有的保存案例(RC13)测试原来把 22 → 6 直接当作“专家已证明”,现改为保留两次施法事实和两类来源候选。这只说明该算法当时不足以认证档位,并不证明真实对局里的专家档位是假的。
局限
- 这是“去掉错误约束”的修复,不是接通完整的匿名费用模型,也不是新增可靠的来源推断。
- 独立的有限费用模型仍没有作为自动 SE 的来源筛选器;空候选不等于已完成推断。
- 只读保存 JSON 重放,不是录像重跑或独立准确率;安装版 App 没有更新。
- 外部审阅没有运行仓库或查看商业游戏,不构成独立实机验收。
结论与下一步
“价差 −2 就是拖鞋”这类捷径会排除真实构筑,必须在完整上下文下才能下结论。修复后,SE 保留可靠的扣蓝事实,把来源可能性作为说明交给用户。下一步只做一件事:当已知当时的法术等级、己方来源和时序足够时,复用现有的公开费用模型给出条件约束,不再用没有依据的价差比值代替。
Comments