3、SUMO核心概念:网络、路线、车辆、交通需求、仿真步长、配置文件

好,咱们正式开始接触SUMO的六个核心概念。这六个东西,说白了就是SUMO世界的“六块基石”。你搞懂了它们,后面的路就好走了。我当年刚学SUMO时,就是被这六个概念绕晕过,后来捋清楚了,才发现其实没那么复杂。

3.1 网络(Network)—— 你的“虚拟道路”

网络是什么?就是车辆跑的那张“地图”。它包含了路口、车道、红绿灯、限速、连接关系等等。你可以把它想象成一张高德地图的“骨架版”。

SUMO的网络文件通常以 .net.xml 结尾。你可以用 netedit 图形化工具画出来,也可以用 netconvert 从OpenStreetMap、MATSim等其他格式转换过来。

核心要点:网络是静态的。它不会在仿真过程中自己变。你建好什么样,跑起来就是什么样。

我个人习惯,拿到一个项目后,第一件事就是打开网络文件,看看车道数、限速、连接关系对不对。有一次我在项目中,明明设置了限速60km/h,结果跑出来的车流速度只有20。查了半天,发现是网络里有个隐藏的减速带元素没删干净。嗯,这种坑踩过一次就记住了。

3.2 路线(Route)—— 车辆怎么走

路线,就是车辆从起点到终点经过的一系列道路(边)的集合。在SUMO里,路线用 <route> 标签定义,里面是一串 edge ID。

<routes>
    <route id="route1" edges="edge1 edge2 edge3 edge4"/>
</routes>

你想想看,如果没有路线,车辆就像没导航的司机,只能在原地打转。SUMO里,每辆车必须绑定一条路线,否则它不会动。

小技巧:如果你不想手动写路线,可以用 duarouter 或 flowrouter 工具自动生成。它们会根据你的交通需求(OD矩阵)和网络拓扑,自动计算出合理的路径。

3.3 车辆(Vehicle)—— 仿真的“主角”

车辆是仿真中真正跑起来的实体。每辆车都有自己的属性:长度、最大速度、加速度、减速度、车头时距、颜色……甚至驾驶员的心理素质(比如“激进型”还是“保守型”)。

定义一辆车很简单:

<vehicle id="veh1" route="route1" depart="0">
    <vType id="car" maxSpeed="50" length="4.5"/>
</vehicle>

这里 depart="0" 表示它在仿真开始的第0秒出发。你可以设置不同的出发时间,模拟车流逐渐涌入的过程。

我曾经做过一个项目,需要模拟公交车和私家车的混行。公交车长12米,私家车4.5米,加速性能也完全不同。如果不区分车辆类型,仿真结果根本不准。所以,车辆类型(vType) 是SUMO里一个非常重要的概念,后面我们会专门讲。

3.4 交通需求(Demand)—— 车从哪里来,到哪里去

交通需求,说白了就是“有多少车、什么时候来、走哪条路”。它和路线、车辆是紧密绑定的。你可以用三种方式定义需求:

  1. 单辆车定义: 手动写每辆车的出发时间、路线、类型。适合小规模测试。
  2. 流量定义(Flow): 定义一段时间内,每小时的车辆数。适合大规模仿真。
  3. OD矩阵: 定义起点区域到终点区域的车辆数,然后由工具自动分配路径。

举个例子,如果你要模拟早高峰,可以用流量定义:

<flow id="flow1" route="route1" begin="0" end="3600" vehsPerHour="1200"/>

这表示在0到3600秒(1小时)内,每小时有1200辆车从route1通过。嗯,这里要注意,vehsPerHour 是平均流量,实际发车时间会随机抖动,更接近真实情况。

避坑指南:我曾经犯过一个错误——流量设得太大,网络根本容纳不下,结果车辆堵在入口处出不来,仿真直接卡死。后来我学会了先跑一个小规模测试,看看网络容量是否够用。

3.5 仿真步长(Step)—— 时间怎么“走”

仿真步长,就是SUMO每次计算的时间间隔。默认是1秒,但你可以改成0.1秒甚至更小。

步长越小,仿真越精细,但计算量也越大。为什么?因为每0.1秒,SUMO就要重新计算所有车辆的位置、速度、跟车行为、换道决策……

我个人建议:

  • 宏观仿真(看流量、密度): 步长1秒就够了。
  • 微观仿真(看跟车、换道细节): 步长0.1秒或0.2秒。
  • 特殊场景(如紧急制动、碰撞测试): 步长0.01秒。

你想想看,如果步长太大,车辆可能“瞬移”——上一秒还在路口,下一秒已经穿过去了。这显然不合理。所以,步长选择是个权衡:精度 vs 速度。

3.6 配置文件(SumoConfig)—— 一切的总指挥

配置文件,就是SUMO的“启动菜单”。它告诉SUMO:网络文件在哪?路线文件在哪?仿真时长是多少?输出什么数据?

配置文件以 .sumocfg 结尾,内容大致如下:

<configuration>
    <input>
        <net-file value="mynet.net.xml"/>
        <route-files value="myroutes.rou.xml"/>
    </input>
    <time>
        <begin value="0"/>
        <end value="3600"/>
    </time>
    <output>
        <fcd-output value="output.xml"/>
    </output>
</configuration>

你只需要运行 sumo -c myconfig.sumocfg,SUMO就会自动加载所有文件,开始仿真。

核心要点:配置文件是项目的“入口”。我建议每个项目都单独建一个配置文件,方便复用和分享。别把所有东西都写在一个文件里,那样后期维护会想哭。

知识体系总览

下面这张图,帮你把六个核心概念串起来。你可以看到它们之间的关系:

SUMO六大核心概念关系图 网络 (Network) 路线 (Route) 车辆 (Vehicle) 交通需求 (Demand) 仿真步长 (Step) 配置文件 (Config) 提供道路拓扑 提供行驶环境 绑定路径 定义属性 输入 控制精度 核心输入

从这张图你可以看到:网络是基础,路线和车辆是核心实体,交通需求把它们组织起来,仿真步长控制时间精度,而配置文件把这一切整合在一起。六个概念缺一不可。

我的建议:刚开始学的时候,别急着跑大仿真。先拿一个小网络,手动定义几辆车,跑一遍看看效果。这样你对每个概念的理解会更扎实。我当年就是这么过来的。

好了,这六个核心概念就讲到这里。它们就像SUMO世界的“六脉神剑”,你掌握了它们,后面的内容学起来会轻松很多。

可可精品资料库