Appearance
总体架构(面向需求)
三层结构
- 仿真底座层:UNET / UnetStack / UnetSim(Java/Agent-based)
- 调度与一致性层:Python(Orchestrator + Scheduler + Barrier/Clock)
- 观测与可视化层:Python(FastAPI + WebSocket + Dashboard,MVP 用 Streamlit)
组件关系(逻辑视图)
+---------------------+ +----------------------------------+
| UNET/UnetSim | <----> | UnetAdapter (Gateway/LogOnly) |
| (multiple nodes) | +----------------------------------+
+---------------------+ |
v
+-----------------------------------------+
| Orchestrator (run/step/barrier) |
| - 启动/停止 UNET |
| - step loop (ΔT, K) |
| - 记录 schedule_decisions |
+-----------------------------------------+
|
v
+-----------------------------------------+
| Metrics/Storage |
| - traces.csv / metrics.csv / report.md |
+-----------------------------------------+
|
+-----------------+-----------------+
v v
+------------------+ +----------------------+
| FastAPI REST/WS | | Dashboard (Streamlit) |
+------------------+ +----------------------+两条集成路径(必须保留)
- Path-1(优先):Python 通过 fjage gateway 连接 UNET,订阅通知、下发发送/控制指令。
- Path-2(兜底):无法直接控制时,通过日志解析采集指标(控制简化为启动/停止/跑到结束)。
关键要求:UNET 相关操作必须封装为 UnetAdapter,主流程不写死 agent 名称/消息类名。
可复现与一致性设计
- seed 固定:影响随机流量、策略选择、(可选)仿真参数随机扰动
- 逻辑时间步进:step_id = 0..K-1,每步窗口 [t_start, t_end)
- barrier:每步收敛“当步事件/统计”后才进入下一步
- 落盘:每次 run 输出
runs/<run_id>/,保存场景/策略/版本/trace/metrics/report