From 651402a06fce26eb85ad172366289f94e15bcc60 Mon Sep 17 00:00:00 2001 From: zgw <13623675548@163.com> Date: Thu, 6 Aug 2026 18:59:43 +0800 Subject: [PATCH] docs(javaTest): explain conflict-aware route audit --- javaTest/README.md | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/javaTest/README.md b/javaTest/README.md index eb365fe..83b2e18 100644 --- a/javaTest/README.md +++ b/javaTest/README.md @@ -43,6 +43,25 @@ `com.ft546.wcs.demo` 是 LEGACY 演示;新增能力位于 `com.ft546.wcs.shadow`,交通区段状态不会写入 LEGACY 业务队列。 +## 有界冲突感知路径规划 + +- `GridPathPlanner` 保留原 BFS 行为作为兼容基线;历史调度仿真使用独立的有界候选规划器。 +- 候选规划先按地图坐标欧氏距离求确定性最短路,再用 Yen 算法枚举无环候选;只保留最短距离 + `110%` 以内的路线,最多输出 32 条。 +- 候选不使用加权总分,而是依次比较对向冲突、占用节点、不兼容边预约、活动路线重叠、 + 转弯、坐标距离和规范站点序列;前一项优先于全部后一项。 +- 自动选车规则保持不变。选车完成后,车辆到任务源点的接近段和源点到目标的服务段分别生成、 + 评价候选,再拼成实际执行路线。 +- 临时交通冲突不会被误判为永久无路。只有地图端点未知或静态候选集合为空才以 `NO_ROUTE` + 失效关闭;可达但暂时冲突的任务继续走预约和 HOLD 流程。 +- 同一车辆、任务、阻塞资源和交通原因连续 HOLD 三次时触发重规划。新剩余路线必须严格更优, + 且走廊预约原子替换成功后才生效;换路后至少 MOVE 一个节点才允许再次普通重规划。 +- PLC 发送失败、断线、重启、低电量和车辆故障不计入交通 HOLD 连续次数,各自按协议重试、 + 恢复或重新调度流程处理。 +- 历史 `path_info` 从不作为规划输入。只有路径全部位于权威地图且首尾等于本次解析的物理业务 + 端点时,才进入 `EXACT_MATCH/SHORTER_PHYSICAL_DISTANCE/SAME_DISTANCE_BETTER_QUALITY/ + BOUNDED_DETOUR_FEWER_CONFLICTS/WORSE_QUALITY` 公平比较;其他记录标记为端点不一致或历史路径无效。 + ## 运行测试 ```bash @@ -83,14 +102,16 @@ mvn compile exec:java \ -Dexec.args="outputs/wcs-history-driven-center-dispatch-local 100" ``` -第二个参数只允许 `10` 或 `100`。Java 原始证据包括 `summary.json`、`task-results.csv`、 -`tick-events.csv`、`invariant-results.json` 和 `manifest.sha256`,回答完成/等待/失败、 +第二个参数只允许 `10` 或 `100`。Java 原始证据包括 `summary.json`、`route-decisions.json`、 +`task-results.csv`、`tick-events.csv`、`invariant-results.json` 和 `manifest.sha256`,回答完成/等待/失败、 每车完成数、车辆和路径差异、资源安全、平均/P95/P99、HOLD/重试原因、历史耗时差异、 归档和 WMS 幂等情况。正式验收证据目录另包含由这些原始证据生成的 `readable-report.xlsx`,并纳入 `manifest.sha256`。 每个已完成任务会注入一次重复 WMS 投递,用于验证接收端幂等;报告分别记录 `wmsDuplicateDeliveryAttempts` 和 `wmsDuplicateBusinessEffects`,验收要求后者为 `0`。 任务到达时间按相邻 `create_date` 的真实间隔除以加速倍率计算,长空闲间隔不截断。 +等待和完成时间用于观察本次确定性仿真流程,不进入车辆选择或路径质量元组。历史环境中的故障、 +拥堵和 PLC 时序没有完整快照,因此仿真耗时与历史耗时的差值不能单独证明路线优劣或现场产能。 > 这是“真实历史负载驱动纯内存仿真”,不是现场 SHADOW、HIL 或 ACTIVE 验收。 > 历史表不含独立的仿真起始时刻车辆位置/状态快照,因此车辆 `1/2/3` 分别从完整地图中的 @@ -113,11 +134,16 @@ mvn compile exec:java "-Dexec.mainClass=com.ft546.wcs.shadow.history.visualizer. 复位按钮恢复完整地图。楼层下拉始终包含 1-8 楼,并标出任务路径和当前车辆所在楼层。 时间线可逐事件前进、后退或自动播放。浅灰色为完整地图,灰色虚线为车辆到起点的接近路径, -绿色为调度中心重新计算的 `plannedPath`,橙色点线为历史 `path_info` 参考,蓝色为已经通过的边; +绿色为调度中心当前 `plannedPath`,橙色点线为历史 `path_info` 参考,蓝色为已经通过的边; 共同路段同时保留绿色底线和橙色点线。右侧检查器分别统计共同边、仅新规划边、仅历史边,并 报告无法映射到权威地图的历史无效段;无效段只列为证据,不会被画成真实道路。关闭“历史参考” 只隐藏橙色证据,不影响绿色的新规划结果。 +地图图层可分别开关历史、初始规划、当前规划、MOVE 轨迹和 HOLD 点。右侧“候选与质量”按接近段/ +服务段和路径版本展示最短距离、选中距离、绕行比例、候选数量、选择原因以及完整质量元组;候选表 +直接显示 Java 返回的候选和最终选中项。成功 REROUTE 事件保存换路前后剩余路径及同一交通快照的 +质量,选择重规划记录后会在完整地图上同时叠加两条路线。页面不重新规划,也不自行推断地图邻接。 + “240 条历史任务”会重新执行全部历史负载并列出完成、等待、失败、重新选车和路径变化; “安全审计”集中显示节点双占、资源超容量、对向换边、死锁、归档完整性和 WMS 回调幂等。 导出的 JSON 是本次内存仿真的页面证据。 @@ -125,6 +151,13 @@ mvn compile exec:java "-Dexec.mainClass=com.ft546.wcs.shadow.history.visualizer. 服务严格绑定 `127.0.0.1`,只读取打包的历史与地图资源,不接收任意文件路径,不连接数据库、 真实 PLC 或 WMS。按 `Ctrl+C` 停止服务。该页面用于离线上线前检查,不能替代现场 HIL/ACTIVE 验收。 +服务运行时可在另一个终端执行真实 Chromium 验收;脚本会运行 A→B 和 240 条接口,并检查完整地图、 +图层开关、视口、候选证据、桌面/移动布局、横向溢出及控制台错误: + +```bash +python scripts/visualizer_browser_qa.py http://127.0.0.1:18084 outputs/browser-qa +``` + ## 运行控制台模拟 ```bash