Skip to content

Uynaity/SUMO

Repository files navigation

SUMO 十字路口实验搭建报告(可复现记录)

实验目的

  • 目标:构建一个带固定配时信号控制的四进口十字路口 SUMO 仿真环境,并生成24小时的时变交通需求,用于后续实验(如信号配时对通行效率/排队的影响、不同需求水平下的拥堵演化等)。
  • 核心输出:车辆行程统计(tripinfo.xml)、排队统计(queue.xml)、全局汇总(summary.xml)、入口检测器流量统计(detector_*.xml)。

工程结构与文件职责(以当前工作区为准)

  • 网络/几何与控制

    • intersection.nod.xml:节点定义(中心节点C为信号控制;四端点N/S/E/W为边界)。
    • intersection.edg.xml:道路边定义(每个方向 3 车道;速度上限 13.89 m/s)。
    • intersection.con.xml:车道连接关系(约定:0=右转,1=直行,2=左转)。
    • intersection.tll.xml:信号控制逻辑(tlLogic id="C",固定配时)。
    • intersection.net.xml:由 netconvert 生成的综合网络文件(仿真实际读取;包含 lane 几何、internal edge、tlLogiclinkIndex 映射等)。
  • 需求/车辆

    • generate_routes.py:生成 intersection.rou.xml(24小时、分时变流量、泊松到达)。
    • intersection.rou.xml:路由与车辆出发事件(由脚本生成;仿真读取)。
  • 仿真配置与附加设备

    • intersection.sumocfg:SUMO 配置入口(指定 net/rou/add、输出、时间参数、seed 等)。
    • intersection.add.xml:附加设备(入口感应线圈检测器 E1)。
  • 脚本

    • build_network.bat:生成 intersection.net.xml + 调用 generate_routes.py 生成 intersection.rou.xml + 快速验证。
    • run_simulation.bat:交互式选择命令行/GUI运行。
    • run_gui.bat:快速 GUI 启动。

仿真全局设定(intersection.sumocfg

  • 仿真时间begin=0end=86400(24小时),step-length=1(1秒步长)。
  • 随机种子seed=42(确保可复现)。
  • 传送机制time-to-teleport=-1(禁用 teleport;拥堵会真实积累,但可能导致长时间阻塞)。
  • 输出
    • output/summary.xml:每秒汇总(系统级:loaded/inserted/running/meanSpeed/meanWaitingTime/...)。
    • output/tripinfo.xml:每车行程统计(depart/arrival/duration/waitingTime/timeLoss/...)。
    • output/queue.xml:排队导出(按 timestep 记录车道队列)。

路网拓扑与几何假设(nod/edg/con/net.xml

节点

  • 中心交叉口C(0,0),类型:traffic_light
  • 边界节点N(0,300)S(0,-300)E(300,0)W(-300,0)

道路边与车道

  • 四个进口:N2CS2CE2CW2C(均 numLanes=3)。
  • 四个出口:C2NC2SC2EC2W(均 numLanes=3)。
  • 速度上限:13.89 m/s(约 50 km/h)。
  • intersection.net.xml 中可见进口/出口边长度约 286.4 m(几何由 netconvert 内部计算得到)。

车道功能约定(非常重要)

intersection.con.xml 的注释明确约定:

  • fromLane=0:右转
  • fromLane=1:直行
  • fromLane=2:左转

并在四个方向都按此规则连接到相应出口(例如 W2C:0→C2S,1→C2E,2→C2N)。

信号控制(intersection.tll.xmlintersection.net.xml

linkIndex / state 字符串位置映射(以 intersection.net.xml 为准)

tlLogicstate 字符串长度为 12,对应 12 个受控连接(linkIndex=0..11):

linkIndex 来向边 fromLane 转向 说明(与 state 位置一致)
0 N2C 0 右转 N右
1 N2C 1 直行 N直
2 N2C 2 左转 N左
3 E2C 0 右转 E右
4 E2C 1 直行 E直
5 E2C 2 左转 E左
6 S2C 0 右转 S右
7 S2C 1 直行 S直
8 S2C 2 左转 S左
9 W2C 0 右转 W右
10 W2C 1 直行 W直
11 W2C 2 左转 W左

相位结构(固定配时,程序名 NEMA_fixed

一个周期由 4 组“绿+黄+全红”组成(其中黄灯 3 秒,全红 2 秒):

  1. 南北左转保护:10s 绿 + 3s 黄 + 2s 全红
  2. 南北直行+右转:25s 绿 + 3s 黄 + 2s 全红
  3. 东西左转保护:10s 绿 + 3s 黄 + 2s 全红
  4. 东西直行+右转:25s 绿 + 3s 黄 + 2s 全红

周期总时长:((10+3+2) + (25+3+2) + (10+3+2) + (25+3+2) = 90) 秒。

交通需求生成(generate_routes.pyintersection.rou.xml

随机性与可复现性

  • 随机种子RANDOM_SEED = 42,并 np.random.seed(42)
  • 只要代码与输入参数不变,每次生成的 intersection.rou.xml 在统计意义与序列上都可复现。

关键变量(脚本内真实生效值)

  • 仿真时长SIMULATION_DURATION = 86400 秒(24小时)
  • 需求更新步长TIME_STEP = 300 秒(每 5 分钟更新一次流量水平)
  • 转向比例(对每个进口方向的基础流量进行拆分):
    • 直行 0.60
    • 左转 0.25
    • 右转 0.15
  • 主方向增益:若路线以 NS 开头,则额外乘以 direction_factor = 1.2(南北方向更大流量)。

备注:generate_routes.py 顶部注释里的“流量分布区间”是“设计意图描述”,而实际仿真以代码里的 base_flow 与分段函数为准(当前 base_flow=300,早晚高峰叠加幅度为 600)。

分时段基础流量函数(单位:veh/h/方向)

脚本用分段规则 get_hourly_flow_rate(hour) 表示一天内变化:

  • 早高峰 7–9:以 8 点为峰值,线性形状(通过 peak_factor
  • 晚高峰 17–19:以 18 点为峰值
  • 白天 9–17base_flow + 200
  • 晚间 19–23:逐步衰减
  • 深夜/凌晨 23–7base_flow * 0.3

车辆到达过程(泊松过程)

对每个 TIME_STEP 时间窗、每条路线独立生成车辆出发时刻:

  • 将每条路线对应的目标小时流量(veh/h)按转向比例折算为该路线流量;
  • 换算为每秒到达率 (\lambda = \frac{\text{veh/h}}{3600});
  • 车辆间隔服从指数分布:np.random.exponential(1 / lambda_rate)
  • 将所有路线/时段生成的车辆汇总后按 depart 排序输出到 intersection.rou.xml

车辆类型(vType)与出发策略(intersection.rou.xml

  • vType(当前生成文件中):
    • accel=2.6
    • decel=4.5
    • sigma=0.5
    • length=5
    • maxSpeed=16.67 m/s
  • 出发车道选择departLane="best"(SUMO 自行选择“最佳”车道,允许换道策略影响入道车道)
  • 出发速度departSpeed="max"(尽可能以允许的最大速度出发)
  • 车辆总数:当前 intersection.rou.xml<vehicle ...> 39256 辆(按文件统计)。

观测与记录设计(intersection.add.xml / 输出目录)

入口感应线圈(E1 检测器)

  • 每个进口 3 条车道均布置检测器(共 12 个):
    • N2C_0/1/2S2C_0/1/2E2C_0/1/2W2C_0/1/2
  • 位置pos=250(沿车道距离起点 250m,靠近交叉口)
  • 统计周期freq=300 秒(与 TIME_STEP 一致,便于对齐需求)
  • 输出文件output/detector_*.xml(例如 output/detector_W2C.xml

常见字段示例(每 300 秒一个 interval):flowoccupancyspeednVehEntered 等。

仿真输出文件含义(简述)

  • output/summary.xml:每秒系统级指标(插入、运行、到达、平均速度/平均等待等)。
  • output/tripinfo.xml:每辆车行程级指标(行程时间、等待时间、timeLoss 等)。
  • output/queue.xml:每秒队列信息(按车道聚合;文件可能非常大)。

运行方式(Windows 批处理脚本)

  • 构建网络 + 生成需求 + 快速验证:运行 build_network.bat
    • 调用 netconvert 生成 intersection.net.xml
      netconvert --node-files=intersection.nod.xml --edge-files=intersection.edg.xml --connection-files=intersection.con.xml --tllogic-files=intersection.tll.xml --output-file=intersection.net.xml --no-turnarounds=true --offset.disable-normalization=true
    • 调用 python generate_routes.py 生成 intersection.rou.xml
    • 调用 sumo -c intersection.sumocfg ... -e 10 做短时验证
  • 运行仿真:运行 run_simulation.bat
    • 交互选择命令行或 GUI 模式
  • 直接 GUI:运行 run_gui.bat

已知假设与局限(便于解释实验结果)

  • 需求独立性假设:各路线在每个 5 分钟窗内独立泊松到达(无 platoon、无相关性)。
  • 车道分配:车辆出发采用 departLane="best",会引入换道与车道选择策略影响(对“每车道流量”会有偏差)。
  • 固定配时:信号为 static,不会根据检测器自适应调整。
  • 无行人/非机动车:当前网络与需求未定义行人或自行车流。
  • 禁用 teleport:拥堵严重时不会“清除”车辆,可能导致极端队列堆积与仿真耗时上升。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors