摘要
公开信息 AI 在做决定时会向 Simulator 发“公开查询”:比如某次攻击对各目标能造成多少伤害、范围法术能打到谁。性能分析找到两处重复成本,修掉后速度提升明显,且所有决策、诊断和逐动作报告与优化前完全相同。但事先定的预算是:完整决策 p95 ≤ 100 毫秒、查询小计 p95 ≤ 20 毫秒。压力输入下优化后分别是 214.794 和 113.155 毫秒,两项都没有通过。优化有效不等于预算达标。
要回答的问题
能否在不改变任何输出的前提下,把公开查询压进实时预算?
方法
两处重复成本:
- 逐目标说明伤害时,每个目标都重新扫描全场判断“射手是否被贴身”。现在在一次只读说明里复用这个检查结果(仍逐个目标检查),下一次调用重新计算。
- 每个试算情景、每一波都深拷贝完整观察。现在只复制会被修改的部分(兵团顶层、嵌套状态、场地记录),英雄和显示资料等不修改的部分共享;动态属性刷新会写状态参数,所以状态仍深拷贝。输入、兄弟情景和输出彼此隔离,没有跨行动的持久缓存。
不改公共接口、报告字段、错误或未知值语义,不改 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 秒),失败清单与之前完全相同,没有新增也没有消除。
局限
共享机器的负载会变化,这些样本不是普遍耗时上界,也不是单一因素的受控加速比。行为一致不等于商业规则正确,也不晋升默认策略。
结论与下一步
本次提速保留,但预算门槛判为未通过。后续继续减少完整菜单里重复的规则说明与查找成本,并分析“等待”的机会成本。
Comments