feat: run deterministic full-chain history simulation

This commit is contained in:
zgw
2026-07-31 12:00:56 +08:00
parent aa71d6e67b
commit e5b988aec8
14 changed files with 1184 additions and 11 deletions

View File

@@ -46,7 +46,7 @@
1. 注入当前仿真时间已到达的真实任务,并按有效优先级重排等待队列。
2. 对空闲健康车辆和待调度任务调用现有选车规则;历史车辆号不参与约束。
3. 使用拓扑 BFS 规划“车辆当前位置→物理起点→物理终点”。无可达路线记录 `NO_ROUTE` 并失效关闭。
3. 使用拓扑 BFS 规划“车辆当前位置→物理起点→物理终点”。无可达路线记录 `NO_ROUTE` 并失效关闭;新路线与活动剩余路线存在反向共享边时,在通道入口记录 `OPPOSITE_ROUTE_CONFLICT` 并 HOLD。
4. 为每个活动车辆构造不可变 `TrafficVehicleSnapshot` 和 `TrafficSnapshot`。
5. 为下一段移动构造 `ShadowCandidate`,调用 `ShadowTrafficCoordinator.run`。
6. `GRANT` 时把段资源写入内存权威账本;`HOLD/YIELD` 时保留任务等待并记录原因。
@@ -72,7 +72,7 @@
## 8. 终止与失效关闭
- 全部任务完成或明确失败关闭后正常结束。最终状态统一归类为 `COMPLETED`、`WAITING`、`FAILED`,失败原因另列 `INPUT_REJECTED`、`UNKNOWN_MAP`、`NO_ROUTE`、`RETRY_EXHAUSTED` 等;`WAITING` 只允许出现在死锁或总时限触发后的最终快照,正常结束时必须为 0。
- 连续 500 tick 无任务完成或车辆移动时标记 `DEADLOCK_TIMEOUT` 并失败。
- 连续 500 个事件周期没有任何任务进入终态时标记 `DEADLOCK_TIMEOUT`;车辆往返移动、重复 HOLD 或重新分配不能重置该计数,以识别活锁。
- 总 tick 上限为 20,000;超过上限测试失败。
- 未知资源、地图版本错配、陈旧快照、资源超容量或重复完成通知立即使测试失败。
- 不使用历史 `finish_date` 强制完成;它只用于历史耗时对照。
@@ -83,10 +83,9 @@
- 输入记录数 240,且原始任务号、GUID、历史车辆和业务端点可回查。
- 每条输入恰有一个最终分类:`COMPLETED`、`WAITING` 或 `FAILED`;失败必须有唯一、可审计的具体原因。
- 至少 50 条真实任务完成完整的选车、规划、裁决、移动和归档链路。
- 资源超容量、同点双占、对向边同时占用、重复 WMS 业务副作用均为 0;测试会主动重复投递完成回调以证明幂等。
- 至少出现一次调度中心重新选车,证明没有固定使用历史 `agv_id`。
- 至少出现一次重新规划路线与历史路径不同,证明没有固定返回 `path_info`。
- 受控多路径场景必须证明规划器没有固定返回 `path_info`;真实负载中的路径差异数按实际结果报告,允许唯一最短路与历史参考路径相同。
- 固定故障计划至少触发一次协议失败并成功重试。
- 低优先级任务等待超过老化阈值后有效优先级提升,且在资源可达时最终获得调度机会。
- HOLD 原因必须区分资源占用、对向边、车辆不可用、低电量、PLC 失败、ACK 超时、快照/地图问题;每次 HOLD 后均能重新进入调度。
@@ -95,7 +94,7 @@
- 相同输入运行两次,逐任务终态、分配车辆、规划路径、HOLD次数和完成顺序完全一致。
- 现有 60 条人工安全场景和全部 Maven 测试继续通过。
完成率作为功能测试结果报告,不预先伪造必须 100%;如果出现 `INPUT_REJECTED` 或 `NO_ROUTE`,报告必须列出原始任务和具体原因。安全指标任一非零则整体失败。
完成率、等待数和路径差异数作为功能测试结果报告,不预设下限;如果出现 `WAITING`、`INPUT_REJECTED` 或 `NO_ROUTE`,报告必须列出原始任务和具体原因。安全指标任一非零则整体失败。
## 10. 指标口径与输出