-
Notifications
You must be signed in to change notification settings - Fork 0
Diagnostics Simulation
shinyashen edited this page Sep 17, 2026
·
3 revisions
English | 中文
--simulate 把重放出的计划送进一个逐操作复刻 AE2UEL 合成 CPU(CraftingCPUCluster)语义的离线集群,在真实下单之前回答:"这个计划在一台真 CPU 上会正常交付,还是卡死?"
| 判定 | 含义 |
|---|---|
COMPLETE |
该计划在真实 CPU 上会正常交付全部请求量 |
STALL S1 |
emitable 残留:交付后(或永远)有"等着白拿"的条目无人回填,CPU 永久忙碌 |
STALL S2 |
饥饿:某个样板的输入在 CPU 库存断供,且没有在途回流能补上(附逐输入 blocked 明细) |
STALL S4 |
空转:没有可执行任务、没有在途返回,交付却未完成 |
另有 START 期检查 S3(提取缺口):计划要求预提取的物料在快照库存中不存在。
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"——版本间差异本身是证据。
模拟器状态机只有四字段: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 不是模拟器的问题,是计划真的跑不完。
相关链接