摘要

结论先行:一条“近战打得到就打”的英雄无敌三式规则(H3),在从未用过的 320 个来源上对默认公平 AI v59 的平均来源差为 +0.141,95% 区间 [0.081, 0.200],通过了事先冻结的留出门槛,已作为 Arena 的可选 AI 交付;默认 AI 仍是 v59。

问题是:只读公开信息的规则型 AI 能否被简单规则稳定改进?我们先诊断 v59 在 36 道战术题上的 12 道错题,再用题库、40 来源排位、随机扰动噪声底和 600 来源足量排位依次检验候选。第一条修补路线 v60a(按攻击落点估计反击暴露)在题库上 +2 题,却在 600 来源排位中显著变差(−0.0925 [−0.134, −0.050])。威胁圈推进规则 T 在设计批次的 600 来源上通过(+0.103),到新来源上只剩 +0.025 [−0.041, 0.088],未通过;H3 在两批来源上都通过。

局限同样明确:H3 的棋力结论是在 Core452 规则下得到的;对手只有 v59、T 和随机扰动;镜像开局并非真实竞技场选兵分布。读取特权信息的研究搜索 quick 对 H3 和 v59 都大幅领先(约 −0.67),信息消融显示这一优势不来自对手法术书,但尚未排除装备效果与精确伤害预览。

1. 问题:为什么要独立验证一条“显而易见”的规则?

结论先行:AI 在战术题上答对更多、或在一批对局里赢得更多,都可能只是选择偏差或噪声;这条研究线的主要收获,是一套能把这两种假象和真实改进分开的评测流程。

背景是这样的。2026-10-14,默认公开策略是公平 AI v59(PublicTacticalBattlePolicy):它只读当前公开观察与合法菜单,对每个动作打分后选最高分。用户提出按英雄无敌三 AI 的几条朴素准则重新设计规则型 AI:近战打得到就打、打不到就等;远程直接射;选目标时考虑反击威慑,优先打反击小、血少的单位;总目标是我方少掉血、对方多掉血。用户还提出一个推进上的权衡:冲得快会挨一刀,冲得慢不挨刀但迟早要挨,而且对方射手每轮都在射。

这些准则听起来都对,但“听起来对”和“整场更强”之间隔着三道坎:

  1. 局部收益不等于整场收益。 一回合视野的题库会奖励“这一下不吃反击”,完整对局里放弃接敌的长期代价可能更大。
  2. 小样本排位分辨不出小改进。 40 个来源的镜像排位,同一随机扰动换一个种子,结论就能从“变差 6 个来源”变成“改善 10 个来源”。
  3. 看过结果再挑候选会高估优势。 在同一批来源上设计并比较多个候选,被挑中的那一个的估计值天然偏高。

本文按时间顺序报告这条研究线的全部实验(0063–0074,均在 game_ai/experiments/ 下登记),包括失败、崩溃、取消和未通过的尝试。模拟器内的胜负不是商业游戏实战胜率;本文所有“更强”都指在给定规则版本、给定对手和给定来源分布下的模拟器对局结果。

2. 方法:诊断、候选与评测流程

结论先行:每个候选都只读公开观察与公开菜单,与 v59 的输入相同;评测流程最终定型为“题库冒烟 → 足量排位(含随机对照)→ 新来源留出 → 跨对手描述”,每一步的门槛都在运行前写入实验页。

2.1 错题诊断(0063)

v59 在精确战术题库 v1 的 36 道开发题上答对 24 道。12 道错题里它全部选了攻击,其中 10 道最优是“不打”(等待、移动或跳过),2 道打错目标。它自己的逐动作评分里,正确答案排第 1 的占 67%、前 3 的占 89%:候选多半在菜单里,问题出在估值。

只读包装 v59 的评估分项(每个钩子调用原方法并原样返回,36 题的选择与分数与原版逐项相等)后,12 道错题被归为四类,全部只依赖公开信息:

代号 估值缺陷 证据
A 反击暴露按攻击前的位置判定 需先移动再近战的 7 道题,反击惩罚全是 0,引擎实际反击 36–114
B 反击损失 = 目标数量 × 平均伤害 × 0.45,不含攻防差 有反击的 11 道题全部低估,低 1.1–3.3 倍
C 不攻击的动作没有机会价值 等待固定 0.1、跳过 0,移动只看接近距离
D 选目标只看本次扣血 不计削弱下一个行动的敌人

只改反击项的反事实重排(纯分析,不是策略)给出两个结果:只修 A 改对 2 道、不回归(26/36);A 加上“用引擎实际反击作损失”的上界改对 5 道,却推翻 3 道原本答对的攻击题(仍是 26/36)。后者说明只把攻击一侧的反击代价算准、而不算“不攻击时对方打过来”的代价,是单边修正。按事前 go 线(12 道中至少 8 道可归因于公开估值缺陷),诊断达到 go;但只有 5 道由反事实证实,另 7 道是分项归因。

2.2 第一条修补路线:v60a 与 v60(0064)

  • v60a(只修 A):对攻击动作评分时,把攻击者位置换成公开攻击序列给出的攻击落点,其余不变。
  • v60(A+B+C):在 v60a 上改用公开攻击序列的反击估计,并给每个动作加同一个“下次行动前的公开威胁”项。

2.3 威胁圈推进 T 与英雄无敌三式 H3(0068)

T 是 v59 加一个只作用于己方近战部队移动价值的威胁圈项;攻击、法术、等待和远程部队都沿用 v59。每个候选落点估两笔账,单位与 v59 相同(损失生命 × 生命价值):

exposure(格子) = 对每个“在我方下次行动前行动”的敌方近战堆 E:
                   若 E 的速度(+1,带触及 +2) 够得到该格:
                     + min(我方总生命, 0.45 × E 的压力) × 我方生命价值
                     − min(E 总生命, 0.45 × 我方压力) × E 的生命价值      # 我方反击
delay(格子)    = 额外回合数 × min(我方总生命, 敌方射手火力 × 0.45 / 我方存活堆数) × 我方生命价值
cost(格子)     = exposure + delay
movement       = cost(当前位置) − cost(落点) + 0.01 × 缩短的格数

0.45 沿用 v59 的反击损失比例,T 没有新增可调参数。它是近似:只按六角距离、忽略障碍与阻挡;一个敌方堆即使能在我方再次行动前行动两次,也只计一次;这些数都不是校准过的概率。

H3 在 T 上再加一条英雄无敌三式规则:当前单位的菜单里只要有普通攻击,移动、等待、防御、跳过就排在所有攻击之后;目标仍按 v59 的“伤害价值 − 反击损失”挑选。法术、单位技能和英雄行动的评分不变;没有攻击可选时,由 T 的威胁圈决定走位。

2.4 评测流程

flowchart TD
  P["Tactical puzzles<br/>(smoke test only)"] --> L["Powered mirror ladder<br/>600 sources vs v59"]
  N["Noise control N(sigma=0.002)<br/>same sources"] --> L
  L -->|"lower bound above 0<br/>and above noise"| H["Holdout ladder<br/>320 new sources"]
  H -->|"pass"| D["Arena optional profile<br/>(default stays v59)"]
  H --> X["Cross-opponent checks<br/>(descriptive)"]

图 1:最终定型的评测流程。题库只查明显错误;排位门槛同时要求优于 v59 与优于同改选率的随机扰动;交付前必须在未用过的来源上复现。

来源差是本文的主指标:每个来源(一个种子生成的镜像开局)候选执两方各打一局,对手执另一方;来源差 = 候选两局得分之和 − 1,胜 1 分、负与双输 0 分。取值在 −1 到 +1 之间。区间是对来源做 10000 次自助重抽(种子 0)的 95% 百分位区间。两局换边能抵消镜像开局的执子方偏差:0067 中 v60a 执红得 404.0 分、执蓝只得 140.5 分。

3. 实验设置

结论先行:所有排位都是镜像开局、20 个完整回合上限、未决双输,每局保存并逐局重放校验终局哈希;规则版本按实验分别记录,不跨版本合并结果。

项目 设置
开局 mirror_initial_state(seed, 20) 镜像开局:双方构筑相同
比赛规则 20 个完整回合未决双输;敌方全灭但己方只剩临时生物也双输;第 20 回合前同时全灭双输
对手 默认为 v59;跨对手检查另用 H3、T、随机扰动、研究搜索 quick
随机对照 0066 冻结的 N(k=1, σ=0.002):v59 分数加 σ × 部队压力 × u,u 由(k,决策序号,动作编号)的 SHA-256 确定,不读局面内容
来源(种子) 66000–66039(0064/0066),67000–67599(0067),68000–68599(0068),70000–70319(0070/0071 主检验),70400–70495(0070 跨对手),70600–70695(0072/0073),70700–70763(0074),区间互不重叠
运行方式 devtools/game_friendly_run.py --cores 8 限核,3–5 个工作进程
失败处理 Simulator 报错即停该组并保留记录;失败尝试不覆盖、不拼入重跑;不按结果调参重跑

规则版本:0063 用 Core449/Core450 双版本比对;0064–0067 在 battle-core.v450、arena-battle-inputs.v4 下;0068 第 1 次在 v451+v5;第 3 次以及 0070/0071 在修复后的 battle-core.v452;0072–0074 在 battle-core.v453。

4. 结果

结论先行:在全部有完整结果的排位中,只有 H3 在设计批次和新来源留出中都通过;v60a 足量排位显著变差,T 未能在新来源上复现,两个公开规则 AI 对研究搜索都大幅落后。

4.1 总表

实验 规则版本 比较 来源数 来源差 [95%] 好/差来源 判定
0064 v450 v60a 对 v59 40 −0.0375 [−0.225, +0.150] 7/9 未过门槛(≥ 0)
0066 v450 随机扰动 8 次对 v59 40 × 8 均值 +0.052,范围 [−0.0375, +0.175] — 噪声底
0067 v450 v60a 对 v59 600 −0.0925 [−0.134, −0.050] 58/116 更差
0068 第 3 次 v452 T 对 v59 600 +0.1033 [0.055, 0.1533] 148/86 通过
0068 第 3 次 v452 H3 对 v59 600 +0.155 [0.105, 0.2033] 164/71 通过
0068 第 3 次 v452 随机扰动对 v59 600 −0.035 [−0.0733, 0.0033] 62/83 负对照
0068 第 3 次 v452 T − 随机(配对) 600 +0.1383 [0.0767, 0.2] — 门槛之一
0068 第 3 次 v452 H3 − 随机(配对) 600 +0.19 [0.1283, 0.25] — 门槛之一
0068 第 3 次 v452 H3 − T(配对,描述) 600 +0.0517 [−0.0017, 0.1033] 113/85 不显著
0070 v452 T 对 v59(新来源) 320 +0.025 [−0.0406, 0.0875] 59/51 未通过
0070 v452 T 对 H3(描述) 96 −0.1354 [−0.2396, −0.0312] 8/21 —
0070 v452 T 对随机扰动(描述) 96 +0.1354 [0.0104, 0.2604] 26/13 —
0071 v452 H3 对 v59(新来源) 320 +0.1406 [0.0813, 0.2] 75/30 通过
0071 v452 H3 − T(同 320 来源,探索性) 320 +0.1156 [0.0469, 0.1844] 66/36 下界大于 0
0072 v453 H3 对 quick 96 −0.667 [−0.7917, −0.5312] 9/73 H3 不如研究搜索
0072 v453 H3 对 T 96 +0.104 [0.0, 0.2083] 19/9 描述
0073 v453 v59 对 quick 96 −0.6771 [−0.7917, −0.5521] 6/71 描述
0073 v453 H3 − v59(都对 quick,配对) 96 +0.0104 [−0.0729, 0.1042] 8/8 无差别
0074 v453 quick(原版)对 H3 64 +0.7656 [0.6406, 0.875] 51/2 描述
0074 v453 quick(遮蔽对手法术书)对 H3 64 +0.7656 [0.6406, 0.875] 51/2 逐局相同

来源:game_ai/experiments/0064-counter-aware-public-valuation/README.md、0066-ladder-noise-floor/README.md、0067-powered-ladder-v60a/README.md、0068-heroes3-style-rule-ai/README.md(第 3 次判定表,local_data/game_ai/0068-heroes3-style-rule-ai/attempt-3/report.json)、0070-threat-zone-independent-validation/README.md、0071-heroes3-holdout-supplement/README.md、0072-heroes3-cross-opponent/README.md、0073-v59-versus-quick-search/README.md、0074-quick-information-ablation/README.md(均在 game_ai/experiments/ 下)。

4.2 v60a:题库变好,排位变差(0064、0065、0067)

v60a 通过了开发题门槛:26/36,v59 原对的 24 道全部保持,三道回归哨兵(p0048、p0071、p0078)全对。v60 开发题 32/36,但把 p0071、p0078 两道本该攻击的题改成了移动,回归 2 道超过上限 1 道,按协议关闭、不调参。按事前选择规则,最终候选为 v60a。

68 道留出题只为 v60a 打开一次:v60a 48/68(Wilson 95% 0.589–0.801),v59 44/68(0.528–0.750);v60a 独对 6 道、v59 独对 2 道,精确符号检验双侧 p≈0.29,不显著,但满足“不低于 v59”。

40 来源镜像排位第 1 次因原型故障中止:v60a 把攻击者位置换成落点后,v59 的援护反击校验要求援护来源与攻击者当前位置相邻,于是报错。修复只在该校验时恢复原位置,修复前后 36 道开发题与 68 道留出题的选择逐题相同。第 2 次 80 局全部完成:来源差 −0.0375,未过“≥ 0”的门槛,0064 关闭。

0065 只读重演这 80 局,检验“这类决策在完整对局里很少出现”的假设。结果相反:80 局中 64 局 v60a 与 v59 在同一公开局面下选择不同,3499 步决策中 435 步不同(12.4%);首次分歧有 47 局发生在第 1 回合,64 次首次分歧中评分变化最大的攻击全部是“需要先移动、目标有反击”的近战攻击,也就是 A 项本身。v60a 在完整对局里频繁改选,方向是放弃先移动再接敌的攻击。

0067 在 600 个新来源上回答“这是不是 40 来源的噪声”:v60a 来源差 −0.0925 [−0.134, −0.050],改善 58、变差 116,区间上界小于 0,判为更差。同组随机对照在第 450 个来源因 Simulator 错误中止(混乱打击把无限反击减成 0,后续状态替换又重置回无限),按协议不用部分来源下结论;由于 v60a 已判为更差,这一项不影响结论。该错误随后以 Core451 修复。

4.3 排位的噪声底与检测力(0066)

40 来源排位分辨不出 v60a 与同改选率的随机扰动。校准时 σ=0.002 已是网格中最接近 v60a 改选率的值(8 局校准改选 17.6%);只扰动部队压力的 0.2%,就有约 18% 的决策改选,说明 v59 的候选动作常常几乎并列。主运行 8 个种子(k=1..8)各跑一遍 80 局,改选率 12.2%–14.5%,来源差范围 [−0.0375, +0.175],均值 +0.052,标准差 0.086;v60a 的 −0.0375 与其中最低的两次并列。

由此估得每来源来源差标准差约 0.494。按正态近似、单侧 α=0.05、80% 把握,检出 +0.05 约需 604 个来源(约 1200 局),40 来源只能检出约 +0.19 以上的差异。这个数字决定了此后所有排位都改用约 600 来源,并必须带同改选率的随机对照。

4.4 T 与 H3:三次尝试(0068)

0068 的冻结协议在运行前写定:600 个新来源(68000–68599),T、H3、随机扰动三组各 1200 局对 v59;通过条件是候选区间下界大于 0,且候选减随机组的配对差下界也大于 0;决策 p95 不超过 v59 的 2 倍。三次尝试如下:

尝试 规则版本 经过 结果的地位
第 1 次 v451+v5 T 组 1200 局完成:+0.103 [0.055, 0.153];H3 组第 579 局后引擎报错中止;随机组被用户叫停于 978/1200 局 T 为中间报告;H3 未完成;随机组部分计分仅作参考
第 2 次 v452(审阅前) 存 141 局后由 simulator1 取消:Core452 独立审阅发现 v452 自身问题,修复会改变事件内容,使这些对局无法用新代码回放 无结果,141 局保留
第 3 次 v452(审阅修复后) 三组各 1200 局全部完成并逐局重放校验 正式判定

第 1 次 H3 组的崩溃发生在种子 68261:升级审判官的迅捷忏悔也打到自己,范围驱散移除了自身的阿琳娜颂歌(单只最大生命 108→90),指挥治疗在驱散之后,而账本只在最后核对时处理这种刷新。修复只放行原本会报错的状态,规则版本不变,现场转为回归夹具。第 1 次随机组的部分计分(488 个两局齐全的来源)给出 T − 随机 +0.1393 [0.0717, 0.2111],只作方向参考。

第 3 次的 T 组与第 1 次 T 组逐局比较:1200 局的双方得分与最后回合全部相同,说明 Core452 对处决计杀与回执字段的修改在这些对局里没有改变胜负或长度。正式判定见总表:T 与 H3 都通过,随机组为负(−0.035),双输分别为 T 44 局、H3 24 局、随机组 37 局;决策 p95 为 T 0.066 秒、H3 0.071 秒、v59 约 0.065–0.070 秒。

题库冒烟没有提供区分信息:T 与 H3 在 36 道开发题上都答对 24 道,选择与 v59 完全相同(题库以攻击题为主)。

4.5 新来源留出:T 未复现,H3 复现(0070、0071)

0070 的协议在 2026-10-15 03:40、看到 0068 第 3 次结果之前冻结,只保留“第 3 次通过才启动”的条件;0071 在看到 0070 任何结果之前冻结。两者使用同一批 320 个新来源(70000–70319),都对 v59。

  • T:+0.025 [−0.0406, 0.0875],好/差 59/51,T 胜 328、v59 胜 278、双输 34。下界不大于 0,未通过,T 不交付;不追加来源、不调参重跑。
  • H3:+0.1406 [0.0813, 0.2],好/差 75/30,双输 27,决策 p95 H3 0.0690 秒、v59 0.0695 秒。通过。
  • H3 − T(同 320 来源,T 取 0070 主检验对局):+0.1156 [0.0469, 0.1844],66 好、36 差。0071 事先写明了宣称“H3 优于 T”的条件(该区间下界大于 0),条件成立,但这是看过 0068 结果后挑出的比较,属于探索性结论。

0070 的功效估计(以 0068 第 1 次 T 的每来源标准差约 0.61 粗估)是:320 来源时 95% 区间半宽约 ±0.067;真实优势 +0.10 时检出概率约 83%,+0.08 约 65%,+0.05 约 31%。因此 T“未通过”不等于“T 没有任何优势”。

4.6 H3 实际做了什么决策(0071 事后描述)

H3 的威胁圈只覆盖很少的决策。0071 中 H3 方 640 局共 29,261 个决策:

动作类别 占比
攻击 62.6%
施法 18.0%
单位技能 7.4%
移动 5.4%(1,592)
地块法术 2.2%
等待 1.5%
英雄攻击 1.3%
其它 1.6%

作为对比,T 在 0070 中移动占 15.9%(5,041/31,798)。H3 的 27 局双输中,14 局打满 20 回合未分胜负,13 局在第 4–12 回合结束(只剩临时生物或同时全灭)。这些描述不影响判定。

4.7 跨对手与研究搜索(0072、0073、0074)

H3 只证明了对 v59 更强。0072 在 96 个新来源(70600–70695,Core453)上让 H3 对两个不同对手各打 192 局:

  • 对研究搜索 quick:−0.667 [−0.7917, −0.5312],H3 胜 32、quick 胜 156,双输 4;决策 p95 H3 0.053 秒、quick 0.858 秒。区间上界小于 0,按事先判读记为“H3 不如研究搜索”。
  • 对 T:+0.104 [0.0, 0.2083],与 0071 的 H3 − T 方向一致。

0073 在同一批来源上让 v59 对 quick:−0.6771 [−0.7917, −0.5521]。同来源配对 H3 − v59(都对 quick)为 +0.0104 [−0.0729, 0.1042],8 好 8 差。两个公开规则 AI 对搜索同样大幅落后,H3 并不比 v59 更怕搜索;H3 相对 v59 的优势只在两者直接对战时体现。

quick 是 ActivationBundleSearchBattlePolicy(depth=1, beam=6, quiescence=0, chance_samples=1),读取私有状态,包括对手构筑。0074 做信息消融:原版 quick(QP)与遮蔽对手法术书的 quick(QM,对手法术书换成本局已看到对手施放过的法术)各对 H3 打 128 局。

  • 第 1 次:两组都在首次遇到同一引擎错误时中止,保存 158 局,不拼入重跑。研究搜索试探大天使的“吞噬圣杯”时,锚点格周围两个敌人身上都有同一光织者施加的“内在光辉”(回合 5 与回合 4),复制到施法者身上后是同一状态编号,按单位顺序先复制回合 5 再复制回合 4,被同来源延长检查判为时间倒流;合法菜单给出的动作执行时报错。规则 AI 从不选这条路径,2240 局已存对局中没有一局用过该技能。修复为同一编号的多份快照按施加回合从早到晚复制;旧行为在这种情况下必报错,不影响任何存档,不升规则版本。
  • 第 2 次:QP 与 QM 都是 +0.7656 [0.6406, 0.875],113 胜 15 负,64 个来源两局得分全部相同,QP − QM = 0;QM 有 7000 次决策实际被遮蔽。决策 p95 分别为 1.078 秒和 1.012 秒;128 局里各有 26 次和 19 次决策超过 4 秒(排位不截止,网页上的 4 秒限时会让这些步退回较浅结果)。

4.8 交付

H3 已作为 Arena 可选 AI 交付(提交 0f4337978)。T 与 H3 原样移入 game_ai/src/olden_era_ai/strategy/threat_zone_battle.py,策略编号与行为不变,实验代码改为重导出;Arena 新增档位 h3,显示为“公开信息 · 英雄无敌三式 H3”,默认仍为 v59。实时 AI 对公开规则档位不再先跑 quick。两局 0071 对局用正式档位重打逐字节相同;game_ai 7172 项、Arena 2854 项测试通过。这些是软件测试,证明交付没有改变行为,不证明真实游戏中的棋力。用户正在运行的 51123 服务需下次重启才有新选项,本次未重启。

5. 讨论

结论先行:已确定的是三件事——题库收益不能代替对局评测,40 来源排位检测力不足,在设计批次上通过的候选需要新来源复现;至于 H3 为什么有效、quick 为什么强,目前都只有未验证的解释。

已确定

  • 题库与对局方向可以相反。 v60a 开发题 +2 无回归、留出题 48 对 44,600 来源排位却显著更差(−0.0925)。0065 显示 v60a 的改选集中在第 1 回合放弃“先移动再吃反击”的攻击。题库对这类决策的取样与对局中的实际分布不同。
  • 40 来源排位分辨不出 ±0.05 级别的改进。 同改选率的随机扰动在同一 40 来源上给出 −0.0375 到 +0.175。
  • 设计批次的估计会偏高。 T 在 0068 设计批次 +0.103,在冻结后的新来源上 +0.025。
  • H3 在两批互不重叠的来源上都优于 v59(Core452:+0.155、+0.141),且在设计批次中优于同改选率随机扰动。
  • quick 对 H3 的优势不靠对手法术书。 遮蔽后 64 个来源逐局相同。这与 quick 的结构一致:depth=1 只展开自己这一次行动,不模拟对手回应,对手法术书几乎用不上。

未验证的解释

  • H3 的收益可能主要来自“打得到就打”,而不是威胁圈。 H3 只有 5.4% 的决策是移动,T 有 15.9%;而只加威胁圈的 T 在新来源上没有复现。这与 v60a 的失败方向一致:放弃接敌在完整对局里似乎更吃亏。但本研究没有做“只有打得到就打、没有威胁圈”的消融,不能据此归因。
  • T 的设计批次优势可能来自选择偏差与抽样波动。 0070 区间 [−0.041, 0.088] 仍允许 0 到约 +0.09 的真实优势;+0.05 的优势在 320 来源上只有约 31% 检出概率。
  • 0066 随机扰动均值为正(+0.052),可能因为镜像对局里打破 v59 自我对称对扰动方有利,也可能只是 8 个样本的偶然波动(标准误约 0.03,粗略区间约 [−0.019, +0.123] 包含 0);8 次用的又是同一批 40 个来源。0068 第 3 次的随机组在 600 个新来源上为 −0.035(Core452,与 0066 的 Core450 不可合并),也没有显示扰动方有利。
  • quick 的优势来自搜索还是信息,目前只排除了对手法术书一项。quick 仍使用已写入可执行状态的装备与技能效果,以及精确的引擎伤害预览;镜像开局下“双方构筑相同”是生成器知道的事实,策略不能合法假设,但搜索可能间接受益。

6. 局限与有效性威胁

结论先行:H3 的结论成立范围很窄——Core452 规则、镜像开局、对 v59,且主要证据只有两批来源;任何把它推广到真实竞技场或真实玩家的说法都没有依据。

  1. 选择偏差。 T 与 H3 都是看过 0068 设计后提出的候选,0068 的估计不能单独作为证据。0070、0071 的协议分别在看到相关结果之前冻结,用来缓解这一点;但 0071 的 H3 − T 比较是事后挑出的,只能算探索性。0070 与 0071 共用同一批 320 个来源,两个结论不是相互独立的样本。
  2. 规则版本。 0064–0067 在 Core450,0068 第 1 次在 Core451,H3 的通过结论(0068 第 3 次、0071)在 Core452,跨对手检查与信息消融(0072–0074)在 Core453。Core453 只改了农民死亡原地转化时预留格子;用 Core453 代码重演 208 局 v452 对局(0070 的 128 局与 0071 的 80 局)和 48 局 v451 对局,事件与终局哈希逐字节一致,但 H3 对 v59 的排位没有在 Core453 下重新评测。不同版本的结果不合并。
  3. 镜像开局。 双方构筑相同,红方明显占优(0067 中 v60a 执红 404.0 分、执蓝 140.5 分),换边设计能抵消执子方偏差,但镜像开局不代表真实竞技场选兵分布,也让“对手构筑与自己相同”成为搜索可能间接利用的结构。
  4. 特权信息。 quick、strong、deep 研究档读取私有状态;0072–0074 中 H3、v59 与 quick 的比较不是同信息对比。0074 的遮蔽版也只是研究诊断,不是认证的公开搜索。
  5. 对手范围。 主门槛只对 v59;对 T、随机扰动、quick 的检查各只有 96 或 64 个来源,且是描述性的。H3 对其它风格的公开信息对手是否也占优,未测。
  6. 样本量与功效。 600 来源约能检出 +0.05;320 来源对 +0.05 只有约 31% 功效。所有“通过”都只说明在这些来源上下界大于 0,不说明效应大小被精确估计。
  7. 计分口径。 双输两侧各计 0 分;超时与异常记为未知。多次实验因 Simulator 错误中止,按协议保留且不拼入;这些错误都已修复,但修复只放行原本会报错的状态,因此不改变已完成对局,却意味着报错前的对局分布里没有这些罕见局面。
  8. 软件测试与真实游戏。 逐局重放校验与 game_ai、Arena 测试只证明模拟器内结果可复现、交付未改变行为,不证明与商业游戏规则一致,也不是对真实玩家的胜率。

7. 结论与后续工作

结论先行:H3 是目前只读公开信息的规则型 AI 中,唯一在冻结协议下通过新来源留出验证的候选,已作为 Arena 可选档位交付;默认 AI 仍为 v59,是否改默认需要用户决定。

这条研究线留下的不仅是 H3,还有一套评测规则:候选先用题库查明显错误,再必须通过约 600 来源的排位并优于同改选率随机扰动,最后在未用过的来源上复现;协议、来源与门槛都在看到结果前写入实验页,失败、崩溃与取消照实保留。

后续方向(均需另立编号、另行冻结协议,尚未开始):

  1. 公开搜索。 在严格公开输入下重现 quick 的评估:公开观察、自己的构筑、公开伤害预览,不读对手隐藏装备与技能效果;先量化它与 quick 的差距,才能判断 quick 的优势有多少来自搜索本身。
  2. 搜索蒸馏。 把搜索的评估蒸馏成策略或价值模型(GPT r16 建议的 P2),以降低每步约 1 秒、部分超过 4 秒的决策成本;AlphaZero 式自对弈暂缓。
  3. H3 消融与试玩。 区分“打得到就打”与威胁圈各自的贡献;H3 在 Core453 下对 v59 的复测;用户试玩反馈。
  4. 学习型 AI。 模仿 T 的动作排序模型(0229、0232)测试集移动 Top-1 分别为 0.137 和 0.214,都未达到 0.25 的门槛,已暂停;若恢复,以 H3 为教师并与规则 AI 结果分开报告。

8. 复现方式

结论先行:每个实验都有单独的运行器,run 生成并保存对局、report 计分并输出区间;完整排位需数十分钟,应通过限核脚本运行。

实验 代码 输出
0063 game_ai/benchmarks/code/fair_v59_root_audit.py local_data/game_ai/0063-fair-v59-root-decision-audit/
0064 game_ai/benchmarks/code/counter_aware_policy.py、run_counter_aware_0064.py local_data/game_ai/0064-counter-aware-public-valuation/
0065 game_ai/benchmarks/code/ladder_divergence_0065.py local_data/game_ai/0065-v60a-ladder-divergence-audit/
0066 game_ai/benchmarks/code/ladder_noise_0066.py local_data/game_ai/0066-ladder-noise-floor/
0067 game_ai/benchmarks/code/powered_ladder_0067.py local_data/game_ai/0067-powered-ladder-v60a/
0068 game_ai/benchmarks/code/powered_ladder_0068.py、ladder_0068_partial_noise.py local_data/game_ai/0068-heroes3-style-rule-ai/attempt-1..3/
0070 game_ai/benchmarks/code/validation_0070.py local_data/game_ai/0070-threat-zone-independent-validation/run-1/
0071 game_ai/benchmarks/code/validation_0071.py local_data/game_ai/0071-heroes3-holdout-supplement/run-1/
0072/0073 game_ai/benchmarks/code/cross_opponent_0072.py local_data/game_ai/0072-heroes3-cross-opponent/run-1/、0073-v59-versus-quick-search/run-1/
0074 game_ai/benchmarks/code/info_ablation_0074.py、masked_quick_0074.py local_data/game_ai/0074-quick-information-ablation/run-2/

策略实现:game_ai/src/olden_era_ai/strategy/threat_zone_battle.py(ThreatZonePolicy、Heroes3Policy)。命令示例(输出目录 OUT 自选;规则版本取决于运行时的代码,复现特定版本需检出对应提交):

python devtools/game_friendly_run.py --cores 8 -- python -m game_ai.benchmarks.code.powered_ladder_0068 run OUT H3 --workers 3
python -m game_ai.benchmarks.code.powered_ladder_0068 report OUT

python devtools/game_friendly_run.py --cores 8 -- python -m game_ai.benchmarks.code.validation_0071 run OUT --workers 3
python -m game_ai.benchmarks.code.validation_0071 report OUT --t-run OUT_0070

python devtools/game_friendly_run.py --cores 8 -- python -m game_ai.benchmarks.code.cross_opponent_0072 run OUT quick --workers 4 --candidate h3
python devtools/game_friendly_run.py --cores 8 -- python -m game_ai.benchmarks.code.info_ablation_0074 run OUT QM --workers 5

核心测试与运行使用 local_data/devtools/environments/core/Scripts/python.exe。

返回 s00 总览;公开行动查询与此前的 AI 研究见 s40。

9. 更新记录

  • 2026-10-15:新建本文。覆盖 0063–0074 的规则型 AI 研究线(0069 结构化动作特征与 0229–0232 学习型 AI 只在后续工作中简述):v59 错题诊断,v60a 题库通过而 600 来源排位变差,排位噪声底与检测力,T 与 H3 的三次 0068 尝试,T 留出未通过、H3 留出通过并交付为 Arena 可选档位,跨对手与研究搜索信息消融。默认 AI 仍为 v59;H3 的棋力结论在 Core452 下得到,Core453 下未重新评测。