Skip to content

Diagnostics Simulation

shinyashen edited this page Sep 17, 2026 · 3 revisions

English | 中文

CPU 模拟判定

--simulate 把重放出的计划送进一个逐操作复刻 AE2UEL 合成 CPU(CraftingCPUCluster)语义的离线集群,在真实下单之前回答:"这个计划在一台真 CPU 上会正常交付,还是卡死?"

判定

判定 含义
COMPLETE 该计划在真实 CPU 上会正常交付全部请求量
STALL S1 emitable 残留:交付后(或永远)有"等着白拿"的条目无人回填,CPU 永久忙碌
STALL S2 饥饿:某个样板的输入在 CPU 库存断供,且没有在途回流能补上(附逐输入 blocked 明细)
STALL S4 空转:没有可执行任务、没有在途返回,交付却未完成

另有 START 期检查 S3(提取缺口):计划要求预提取的物料在快照库存中不存在。

游戏外 CLI

java -cp ae2_vm_112-<版本>.jar:ae2_vm_112-<版本>-replay-shim.jar com.ae2vm.replay.ReplayMain 轨迹.json.gz [--no-diff] [--no-simulate]

Windows 下 -cp 分隔符用 ;。replay-shim jar 随每个 Release 附带,内置重放所需少数 Minecraft/AE2 表面的手写桩与 JSON 解析器——无需真实 Minecraft jar、无需任何 mod jar。

退出码 含义
0 重放计划与录制一致(且模拟无停摆)
1 计划 diff 有差异(计算层问题的直接证据)
2 运行失败(用法错误 / 轨迹损坏等)
3 模拟判定停摆

轨迹完整性自动校验:哈希链断裂或载荷被改动打印 WARNING 并以已验证前缀继续。录制与重放版本不同时会提示"differences are evidence, not verdicts"——版本间差异本身是证据。

语义复刻备查表(模拟器与 AE2UEL CraftingCPUCluster 的逐操作对照)

模拟器状态机只有四字段:tasks(每样板剩余推送数)/ inventory(CPU 本地库存)/ waitingFor(在途返回登记)/ finalOutput(交付目标)。关键操作语义:

AE2UEL 行为 模拟器行为
每个 craft 对全部 condensed inputs 做精确键全额提取(processing 无模糊、无输入分类;损伤模糊仅 craftable 分支) 同左:canCraft 精确 SIMULATE → 精确提取;craftable 才统计槽位替代
injectItems 以 waitingFor 精确匹配门控:无人等待的注入整笔拒收 同左:拒收计入 refused 计数并在判定中展示
命中 finalOutput 的返回直接交付,绝不入库存 同左:交付量只来自 finalOutput 匹配
其他在案返回进入 CPU 库存(中间物循环) 同左
推送成功先按 condensed outputs 登记 waitingFor 同左(虚拟 provider 推后一步返回)
addEmitable 预登记的"白拿"条目进 waitingFor 同左(S1 判定的数据来源)
CPU 库存是封闭本地缓存:只有 setJob 预提取的物料 + 回流物,无网络回退 同左(这是"计划可行 ≠ CPU 可完成"的根本机制)
完工/取消时库存倾回网络(storeItems) 不建模:完成后的网络交互不影响判定
操作预算(加速器)/ medium 忙碌跳过 / 电力 不建模:仅影响推进速度,不影响死锁判定
submitJob 的 availableStorage 字节容量检查 不建模:按容量无限(容量不足时真实系统本就拒单提醒)

这层复刻经过逐操作审查(对照 AE2UEL 源码)验证;它曾直接证明:凡是"根产物自喂自身调度"或"环净额不带启动库存"的计划,真实 CPU 必然停摆——模拟器报 STALL 不是模拟器的问题,是计划真的跑不完。

Clone this wiki locally