摘要

公开信息 AI 在做决定时会向 Simulator 发“公开查询”:比如某次攻击对各目标能造成多少伤害、范围法术能打到谁。性能分析找到两处重复成本,修掉后速度提升明显,且所有决策、诊断和逐动作报告与优化前完全相同。但事先定的预算是:完整决策 p95 ≤ 100 毫秒、查询小计 p95 ≤ 20 毫秒。压力输入下优化后分别是 214.794 和 113.155 毫秒,两项都没有通过。优化有效不等于预算达标。

要回答的问题

能否在不改变任何输出的前提下,把公开查询压进实时预算?

方法

两处重复成本:

  1. 逐目标说明伤害时,每个目标都重新扫描全场判断“射手是否被贴身”。现在在一次只读说明里复用这个检查结果(仍逐个目标检查),下一次调用重新计算。
  2. 每个试算情景、每一波都深拷贝完整观察。现在只复制会被修改的部分(兵团顶层、嵌套状态、场地记录),英雄和显示资料等不修改的部分共享;动态属性刷新会写状态参数,所以状态仍深拷贝。输入、兄弟情景和输出彼此隔离,没有跨行动的持久缓存。

不改公共接口、报告字段、错误或未知值语义,不改 AI 版本、权重、完整菜单、64 次查询上限和预算本身。

设置

每个场景 10 次预热、100 次计时(毫秒),在本任务的重型回归之前串行测量。

场景 优化前 p95 优化后均值 优化后 p95 优化后 p99
五队混编:完整决策 17.659 9.202 9.667 10.316
五队混编:查询小计 6.530 2.116 2.455 2.561
70 敌队压力:完整决策 1003.595 200.614 214.794 220.999
70 敌队压力:查询小计 333.407 98.639 113.155 118.570

五队混编(菜单 141 项、5 个攻击、5 次查询)通过预算。压力输入共 71 队兵,菜单 138 项、70 个攻击,查询打满 64 次,剩 6 项回退到普通评分;它超出合法竞技场选兵的规模,是专门测查询上限的。默认策略在同一压力输入上的 p95 也有 120.774 毫秒。

结果:行为核对

  • 优化前后,普通与压力输入下默认和候选策略的完整决策、诊断、逐动作报告四份结果全部相同(只排除计时)。
  • 既有相关 322 项通过;新增 11 项对比优化/未优化路径,覆盖未知输入、死亡后的动态刷新、兄弟分支和输入输出隔离;Integration 全量 1234 通过。
  • 按原 16 配置 64 局协议重跑,64 份完整对局记录全部相同,共 1740 次行动/事件(63 局自然终局、1 局达到基线回合上限)。这是行为回归,不是新的棋力样本。

失败与负结果

压力输入下完整决策和查询小计的 p95 都未达到门槛,基准脚本因此返回失败。Simulator/Game AI/Arena 三模块全量 20273 通过、68 失败、2 跳过(1113.72 秒),失败清单与之前完全相同,没有新增也没有消除。

局限

共享机器的负载会变化,这些样本不是普遍耗时上界,也不是单一因素的受控加速比。行为一致不等于商业规则正确,也不晋升默认策略。

结论与下一步

本次提速保留,但预算门槛判为未通过。后续继续减少完整菜单里重复的规则说明与查找成本,并分析“等待”的机会成本。