实采轨迹批量合成

把有限的实采轨迹扩增为大批量合成数据,并量化合成数据与真实数据的分布差异。

1. 工具参数

1.1 import_trajectory

参数 类型 默认值 说明
file_path string 必填 轨迹文件
format string 自动推断 csv / fcd / json
column_map_json string {} 自定义列名映射
preview int 5 预览条数

1.2 synthesize_trajectory_dataset

参数 类型 默认值 说明
seed_path string 必填 种子轨迹文件
n int 100 合成数量
seed int None 随机种子
n_ops int 2 每条轨迹叠加的算子数
strength string mild 增强强度 mild / medium / strong
max_per_seed int None 每个种子的最大衍生数
out_dir string llm/output/synthetic 输出目录
format string csv 输出格式

1.3 compare_trajectory_distribution

参数 类型 默认值 说明
real_path string 必填 真实轨迹
synthetic_dir string 必填 合成数据目录
format string 自动 文件格式

1.4 export_sumo_demand

参数 类型 默认值 说明
trajectory_path string 必填 轨迹文件
out_path string llm/output/sumo_demand.rou.xml 输出路径
depart_interval float 0.5 起始时刻相同时的错峰间隔(秒)

2. 支持的格式

格式 扩展名 典型来源
CSV .csv NGSIM、HighD 等数据集
FCD .xml SUMO 的浮车数据输出
JSON .json 自建采集工具

列名映射

不同数据集列名不一致时,用 column_map_json 指定:

{"time": "Global_Time", "x": "Local_X", "y": "Local_Y", "v": "v_Vel"}

3. 5 类增强算子

算子 作用 强度影响
加噪 位置/速度叠加高斯噪声 噪声标准差
时间缩放 整体加速或减速 缩放系数范围
平移 起点位置与航向偏移 平移幅度
法向偏移 沿车道法向横向偏移 偏移量
速度变形 速度曲线重新塑形 变形幅度
强度 适用场景
mild 保守扩增,分布几乎不变
medium 一般扩增
strong 压力测试,分布明显偏离

4. 对话示例

导入 _traj_samples 里的轨迹数据
基于这些轨迹合成 100 条数据
对比合成数据和真实数据的分布
把轨迹导出成 SUMO 的需求文件

5. 代码示例

5.1 导入并查看

from trajectory_io import load_trajectories

seeds = load_trajectories("data/ngsim_sample.csv")
print(len(seeds), "条轨迹")
print(seeds[0].frames[:3])

5.2 批量合成

from synthesis_batch import synthesize

result = synthesize(seeds, n=100, seed=42, n_ops=2, strength="mild")
print(result["generated"], result["skipped"])
# 100 0

5.3 分布对比

from distribution_check import compare

report = compare("data/ngsim_sample.csv", "output/synthetic")
print(report["speed"]["ks"], report["duration"]["ks"])

6. 单位换算

NGSIM 格式的量纲与 SI 不一致,导入时自动处理:

列 原始单位 换算
Local_X / Local_Y 英尺 ×0.3048 → 米
v_Vel ft/s ×0.3048 → m/s
Global_Time 毫秒 ÷1000 → 秒

导入后会校验"报告速度 vs 位置差分",偏差超过 50% 会告警。 早期版本只换算速度不换算位置,导致 lane_offset 重算时放大到 44 m/s。

7. 时间归一化

如果每条轨迹各自归零,100 辆车会全部在 t=0 出发。现在的做法是 全局最小时间归一化,保留车与车之间的时间差:

种子轨迹起始时刻:0.00 s / 0.50 s / 1.20 s

8. 输出结构

output/synthetic/
├── track_0000.csv
├── track_0001.csv
├── ...
├── manifest.json     # 每条轨迹的来源种子与算子链
└── summary.json      # 汇总统计

manifest.json 记录可追溯信息:

{
  "track": "track_0007.csv",
  "seed_track": "ngsim_0002",
  "seed_value": 42,
  "ops": ["noise", "time_scale"]
}

9. 实测

项目 结果
轨迹导入 CSV / FCD / JSON 三种格式全部通过
批量合成 100 条 0.17 s(595 条/秒),100/100 成功
复现性 同 seed 结果完全一致
分布对比 速度 KS 距离 0.029