摘要
Fair 规则 AI 给攻击打分时,用的是公开规则算出的“部分平均伤害”,它不知道对手的隐藏加成。但在一局对战中,自己的攻击实际打出多少伤害是公开可见的。本实验想用这些已经发生的公开伤害,按“实际 / 预估”的比例温和地修正后续同类攻击的估计,看能否改变 Fair 的选择。冻结的准入门槛是:在 16 个旧来源上至少出现 6 次首次改选、覆盖至少 3 个来源。结果收到 32 条可用反馈,但它们分在 32 个不同的组里、每组只有 1 条,而校准规定至少 2 条才启用,所以校准从未生效,317 个决策全部与 Fair 同选同分。准入失败,24 局开发和 36 局保留都没有开始。
要回答的问题
不读取隐藏构筑、随机数或私有伤害分支,只用本场已发生的公开主击伤害,能否保守修正 Fair 的伤害估计并改变合法选择?
方法
- 分组:反馈按“本场 / 观察侧 / 攻击者及其状态代次 / 目标及其代次 / 近战或远程”分组。有效攻防、幸运士气或可见状态变化会让相关组失效。
- 可用反馈:只学自己实际执行的普通攻击中唯一的首次主击,排除前置反击、未知或过小的估计、需要先移动的近战攻击、可见身份/状态变化、死亡、复活、伤害被剩余生命截断等。
- 校准公式:每条比例 r = clip(实际伤害 / 预估均值, 0.5, 1.5);组内保留最近 6 条。少于 2 条时倍率为 1;否则倍率 m = clip((4 + Σr) / (4 + n), 0.8, 1.2),即相当于先放 4 条“比例为 1”的先验再平均,并限制在 ±20% 内。只用于实验策略的普通攻击评分。
- 回放:从 0227 旧训练的 Fair 对 Fair 轨迹逐步恢复状态,比较实验策略与 Fair 的选择;某一方首次改选就停止该方。每个来源取前 12 个多目标决策槽(两方合计最多 192)。
设置
16 个旧来源(1000000–1000015),600 秒预算,单进程 CPU,禁止任何推进战斗的调用。实际恢复 333 次旧状态(16 个初态 + 317 个后续帧),不是 333 局新对局。
结果
| 指标 | 结果 | 判定 |
|---|---|---|
| 来源 / 预定多目标槽 | 16 / 192 | 全部完成 |
| 比较的前缀决策 | 317(第 1 回合 275,第 2 回合 42) | 含 125 个非槽前缀 |
| 实际执行的普通攻击 | 160 | 不等于可用标签 |
| 接受的反馈 / 来源 / 组 | 32 / 12 / 32 | 每组只有 1 条 |
| 达到 2 条的组 | 0 | 倍率从未启用 |
| 可绑定的候选预测 | 337,同组既往样本均为 0 | — |
| 首次改选 / 信号来源 | 0 / 0 | 未达 6 次 / 3 来源 |
| 无倍率时与 Fair 一致 | 317/317 | 软件一致 |
| 新局 / 优化器更新 | 0 / 0 | 场内反馈更新 32 次 |
| 正式运行耗时 | 24.059635300 秒 | ≤ 600 秒 |
317 份本方动作反馈分类:非普通攻击 157、需要先接近的攻击 103、接受 32、可见上下文变化 7、未知或过小均值 15、死亡/身份缺失 3。
失败与负结果
- 准入失败:直接原因是所有组都只有 1 条反馈、校准没有启用,不是评分钩子拒绝接入。
- 正式运行后,一个汇总脚本因找不到模块而失败;补上项目路径后只读已保存记录重跑,不重跑准入。
局限
- 前 12 个多目标槽主要落在第 1 回合;精细分组、状态变化、目标切换和短窗口都可能造成稀疏,但没有做干预验证,不能单独归咎于某一项。
- 不能说明第 3 回合以后没有重复反馈。
- 首次改选为 0,所以“改选后停止”这一分支没有真实触发验证。
结论与下一步
本次冻结方案关闭,不是历史反馈算法普遍失败,也不是棋力负分。下一步改为跨对局校准:用多局旧训练数据拟合一个四参数的伤害修正模型(实验 0058)。
Comments