chinatown_1 / docs /RULES-ALIGNMENT.md
Torther's picture
Core research: deterministic simulator, evolutionary strategy, genetic algorithm
cdf3b47 unverified
|
Raw
History Blame Contribute Delete
3.77 kB

模拟器规则保真度核对记录

模拟器(ahsim/engine.py)的目标:与正式世界(doc.arenahero.io,gameplay rules v0.14) 逐条对齐,保证进化结果可迁移。本文记录核对过程与结论。

核对方式:用户抓取官方全部 9 页规则 + reference/numbers + api/resolution-results

  • changelog,逐条对照代码(最近一次为 2026-08-06,Python SDK 0.2.9)。

已核对无误的核心规则

数值(reference/numbers)

  • Core 5HP / 5 盾 / 持标 10 盾
  • 三兵种:Worker HP2/视野3/造价5、Vanguard HP4/视野4/造价10(近战1)、Ranger HP2/视野5/造价12
  • Ranger 八方向 1-3 格,(3,3) 算 3 格
  • 前 20 个单位保持基础价;第 21 个起每五人口区间按 1.3 倍动态涨价,精确分数最终一次 round-half-up
  • 容量 max(10, pop×5);资源配额 max(2, floor(128/(8+ring)))
  • 出生 20-30 曼哈顿;格容量 2;无维护费和人口保护机制

机制

  • 战斗快照后同时结算;致命伤不可治疗
  • 新兵出生当 Tick 不可被打
  • 单位不挡射线,只有障碍挡(v0.7 穿透射击)
  • 最低 HP + UUID 选靶(v0.13)
  • 生产价格使用同 Tick 自毁和战斗死亡后的实际存活人口(v0.14)
  • Core 无条件自毁在战斗后(v0.12)
  • Core 自毁移除所有单位、掉落 Worker cargo/Beacon,并同 Tick 尝试重生
  • 摧毁 Core 掠夺归最高伤害者,赢家 Core 须存活(v0.9)
  • 同点采集最低 UUID 独占;cargo 堆同 Tick 独占
  • Beacon 动作在采集之前(当 Tick 即享加成)
  • 视野用 supercover 线,穿角两格都算
  • 移动依赖图:换位/链式/环处理符合 MOVE_SWAP_BLOCKED / MOVE_DEPENDENCY_FAILED 语义
  • 战斗后恢复 HP(v0.10);Ranger 按格射击(v0.13)
  • SDK 0.2.9 已删除 population_tier / upkeep_next_tick,Ranger SHOOT 保留 expected_cell

曾修复的规则偏差(按优先级)

  1. Beacon 坐标被隐藏 → 官方"坐标永远公开,只有 status/carrier_id 受视野限制"
    • 影响最大:坐标隐藏导致 Beacon 战术在进化中从未被争夺
  2. Beacon 掉落当 Tick 可拾取 → 官方"掉落当 Tick 不可再被捡起"(防接力)
  3. 丢失 Beacon 盾值未钳制 → 官方"丢标后盾钳制回 5"
  4. 缺 CORE_RESOURCE_OVERFLOW_DESTROYED → 人口下降容量超限,超出资源立即销毁
  5. RESOURCE 地形未赋值 → 迁移中的 Core 不可入资源格(terrain_kind 返回 RESOURCE)
  6. 缺 CANCEL_MOVE → Core 动作表有,CORE_MOVE_CANCELLED 事件
  7. cargo 堆同 Tick 可被多个 Worker 取 → 同源竞争最低 UUID 独占
  8. 评估信号:Core 摧毁未计 units_lost → 舰队移除时计入损失(fitness 惩罚真实生效)
  9. v0.14 仍按 Ranger 固定价格决定是否生产 → 按实际兵种和实时人口计算,买不起时降级
  10. Core 自毁留下幽灵单位且无法重生 → 清空舰队并进入同 Tick 重生流程
  11. 参考策略仍构造 SDK 0.2.8 状态 → 删除旧字段并传入真实可见地形与 Core 移动状态

已知近似(有意为之,非错误)

  • 世界 256×256 有界(官方 signed int64 无界)→ 4-8 玩家挤中央,交战密度高于真实 (高密度进化 8 人已部分补偿;迁移到真实世界 aggression 偏激进)
  • 世界生成用自建确定性 PRNG(官方 HMAC 种子私有),地形形态不同但自洽

确定性要求(进化公平性)

  1. 字符串 key 的 dict/set 迭代必须 sorted(PYTHONHASHSEED 随机化导致非确定)
  2. Game.__init__ 必须重置 ahsim.entities._NEXT_ID(全局 uid 计数器跨运行漂移)
  3. 修复后验证:同种子两次运行结果逐位一致(含随机 hash seed)