做交通仿真的同行应该都清楚,Aimsun 在处理复杂路网方面有自己的独到优势。它既能做微观也能做宏观,建模粒度和真实度很高,但这些能力的前提,是路网建模这一层得先立得住。很多仿真项目最后发现问题不在算法不在数据,而是路网本身就画得不对——比如转向连接器漏了一条、车道宽度带了默认值没改、信号相位和实际路口对不上,跑出来的结果自然一塌糊涂。
今天这篇是 Aimsun 系列的第 4 篇,专门聊路网建模。我会从 Aimsun 的核心概念讲起,把从底图导入到路段创建、交叉口处理、最终校准的完整流程过一遍,还会放一些自己在项目里踩过的坑和排查思路。无论你是刚开始接触 Aimsun 的新手,还是已经做过几个项目想系统梳理一遍的老手,这篇文章都能给你一些能直接落地的东西。
1. 路网建模到底在做什么——Aimsun 里的核心概念
路网建模看着像是在画图,其实本质是在做三件事:把现实世界的几何结构抽象成仿真引擎能识别的对象,给这些对象赋予行为参数,让它们在仿真运行中产生符合交通流规律的车辆运动。Aimsun 里这层抽象做得比较规范,所以理清它的对象模型是第一步。
1.1 节点、路段、连接器的三角关系
Aimsun 的路网模型和很多传统微观仿真软件不太一样。它明确区分了三个层次:节点、路段和连接器。
节点是路网的拓扑交汇点。一个普通十字路口、一个环形交叉口、甚至一个道路断面变化的位置,都可以用节点表示。节点不只是一个点,它承载了路口的信号控制、让行规则和转向连接关系。Aimsun 的节点有个特点,它不是一个简单的“point”,而是一个带几何区域的要素,这个区域覆盖了相交路段的末端区域。
路段是承载车辆行驶的“容器”。它包含车道数、车道宽度、坡度、限速、路侧条件、公交专用道等属性。Aimsun 中的路段是有方向性的,同一条道路的两个方向要分别创建两条方向相反的路段,这与实际道路的行车方向对应。每条路段可以包含多个车道,车道的连接和转向通过车道级的连接来定义。
连接器则负责把一条路段的车道连接到另一条路段的车道,形成车辆的转向轨迹。这里有一个关键点:连接器不是简单画一条线就完了,它需要明确起始车道和到达车道。比如一个四路交叉口,北进口左转车辆需要从最左侧车道转到西出口的最左侧车道,这个关系必须在连接器里精确指定。如果连接器配置不正确,车辆就会在路口出现奇异行为,比如跨越多车道强行转向、无中生有地变道,甚至干脆卡住不动。
这三者的关系可以这样理解:节点是“骨架的关节”,路段是“骨头”,连接器是“筋腱”。关节决定了哪些骨头连在一起,筋腱决定了力量(交通流)怎么从一块骨头传到另一块骨头。缺了任何一层,运动就无从谈起。
1.2 建模粒度怎么定:宏观、中观还是微观
Aimsun 的一个强大之处在于它支持三种建模粒度:宏观、中观、微观。路网建模的第一步,不是打开软件就开始画路,而是先想清楚:这个项目需要哪种粒度?
宏观模型把交通流看作连续流体,关注流量、密度、速度之间的关系,路网只需要拓扑正确,不需要精细的车道级细节。它适合区域性的交通需求分析,比如整个城市的路网流量分配。中观模型介于宏观和微观之间,它仍然模拟单独的车辆,但车辆的跟驰行为被简化为基于通行能力的概率模型。微观模型则是最精细的,车辆按跟驰模型和换道模型逐秒运动,路网必须包含完整的车道拓扑、信号配时、让行规则。
我见过不少项目,在开始阶段没有想清楚粒度需求,建模时拉了过多的细节给宏观模型,或者在微观模型里把路网画得特别粗糙,结果要么运行效率极低,要么仿真结果完全失真。经验之谈是:如果项目最终要评估的信号配时、车道功能划分、公交优先策略这类问题,直接用微观模型;如果只是做年度交通需求预测或者路网规划方案对比,用宏观模型就够了。
还要注意一点,Aimsun 支持混合模型。也就是说,同一路网中,中心城区用微观模型,外围区域用宏观模型,两者之间通过中观过渡带衔接。混合模型的建模要求更高,因为你需要在同一个路网中定义不同粒度的子网络,并保证边界处的流量传递一致。这个做法适合大型项目,但在建模工作量上会成倍增加。
2. 实操第一步:从底图到可跑路网
明确了建模粒度后,就可以开始实际建模了。我习惯把路网建模分为四步:底图准备、路网骨架搭建、几何参数细化、拓扑关系校验。下面一个一个说。
2.1 底图准备与坐标对齐
底图的质量直接决定后续建模的效率。在 Aimsun 里,你可以导入多种格式的底图:OpenStreetMap 数据、Cadstral 地图、AutoCAD DXF/DWG、GIS 的 Shapefile,甚至可以直接用 Google Earth 截图加地理配准。
我个人最推荐的方式是导入 OSM 路网数据作为起步。Aimsun 有这个功能,可以直接从 OSM 拉取一个区域的路网。这能省掉大量画底图的时间,但有个前提:OSM 的路网数据质量参差不齐,有些偏远地区的道路几何与实际偏差很大,而且 OSM 的拓扑不一定符合 Aimsun 的节点-路段-连接器模型。所以,OSM 数据只能作为基础框架,接下来的几何修正和拓扑整理依然要做。
如果你拿到的是 CAD 图纸或 GIS 数据,就要特别注意坐标对齐。Aimsun 的坐标系基于真实地理坐标,如果你导入了带投影坐标的 Shapefile,通常可以自动对齐。但如果是 CAD 图纸,很多图纸用的是相对坐标,你需要先做一次坐标转换。
我踩过的一个坑是:图纸里有多个图层,道路中心线、道路边线、建筑轮廓、绿化带全在同一个 CAD 文件里。如果不做图层筛选直接导入,路网会变得异常混乱,节点和路段自动生成的位置会带偏。我的做法是:在 CAD 里先把道路相关图层单独导出成一个精简版 DXF,再导入 Aimsun。这会让你后面的工作省力很多。
底图对齐完成后,还需要检查比例尺是否一致。Aimsun 内置的距离测量工具可以帮你快速验证。如果你发现底图上一个道路段长度应该是 100 米,但量出来是 10000 米,那就是坐标单位不一致,需要在导入时调整几何比例。
2.2 创建路段和节点的两种思路
底图准备好之后,开始搭建路网骨架。Aimsun 有两种创建方式:手动创建和半自动生成。
手动创建就是直接用工具栏的“创建路段”工具,在底图上沿着道路中心线逐段绘制。每画一条路段,Aimsun 会在路段两端自动生成节点。这种方式适合路网规模不大、或者局部需要精细控制的区域,比如一个具体交叉口的进出口道。
半自动生成则是通过导入 GIS 或 CAD 数据,让 Aimsun 来自动识别道路中心线并生成路段和节点。这种方式适合大范围路网,但自动生成的拓扑通常有不少问题,比如本应连接的路段断开了、同一交叉口生成了多个节点、或道路方向错误。所以不管用哪种方式,人工检查和修正这一步都跑不掉。
我自己画路网时的习惯是:先画主路和次干道,把路网的大骨架搭好,再逐步添加支路和出入口。这样做的好处是,主干道的截面属性(车道数、限速)可以在画的时候顺手设置好,后面的支路只需在已有框架里补充,不至于画到最后发现方向搞混了。
画路段的时候有一个非常重要的小细节:路段的方向。Aimsun 中路段的绘制方向就是车辆行驶方向。如果你沿道路中心线从上往下画,车辆就只能从上往下开;从下往上画的车辆必须在另一条单独的路段上。很多新手画完路网后跑仿真,发现某些路段的车辆全是反向行驶,就是因为没注意方向。我的建议是,在创建路段时就打开方向箭头显示,并在每条路段命名时注明方向(如“XX路-东向西”),这样后面检查和排错会轻松很多。
2.3 车道、限速与几何参数设置
路网骨架建好后,就到了参数细化的阶段。这里有几个关键参数需要重点配置:
车道数是交通仿真里最基础也最容易出错的参数。一条路段默认只有 1 条车道,但现实中很多道路是双向 4 车道、6 车道甚至更多。Aimsun 里创建路段后,需要在属性中把车道数改为实际值,并且要区分“车道类型”——普通车道、公交专用道、HOV 车道等。不同车道类型的通行规则不同,会影响车辆的路权分配。
车道宽度同样重要,但很多人会忽略。Aimsun 默认车道宽 3.5 米,国内很多城市道路的车道其实在 3.25 到 3.75 米之间。车道宽度会影响车辆横向间距,进而影响通行能力。虽然这个影响在仿真中的表现不是特别剧烈,但如果你做的项目要精确评估通行能力,宽度还是尽量设成实测值。
限速设置直接影响车辆在路段上的期望速度。Aimsun 支持按车道设置限速,也支持按时间切换限速(比如分白天夜间)。如果你的模型要评估可变限速策略,这一步尤为关键。
还有一个容易被忽视的参数是路段的坡度。Aimsun 的跟驰模型和速度-流量关系会受到坡度影响,特别是大型车占比高的路网。如果你做的是山区或高架桥项目,坡度一定要输入真实数据。我自己就遇到过项目里因为没设坡度,仿真结果中路段通行能力比实测高出了将近 10% 的情况。
另外,Aimsun 的路段支持设置入口坡道和出口坡道的加宽段、渐变段。这类几何细节对高速路交织段、匝道衔接段的仿真影响非常大。你可以在路段的“几何”选项卡里定义断面的变化位置,让车道数在指定桩号处增加或减少。一定要记得在变化点设置长度补偿,不然仿真中车辆换道会出现非常不自然的“瞬移”现象。
3. 交叉口处理:信号控制与转向连接
很多人建路网时,路段画得挺齐整,一到交叉口就松散——转向连接不对,信号配时对不上,让行规则缺失。交叉口是交通仿真中最容易出现逻辑问题的地方,所以我对这一块特别较真。
3.1 连接器与转向路径的正确画法
Aimsun 的交叉口转向是通过连接器实现的。连接器的本质是一个从进口车道到出口车道的有向连接。
创建连接器的标准操作是:选中节点,然后点击“创建连接”工具,依次选择起始车道的边缘和到达车道的边缘。Aimsun 会自动生成一条平滑的转向路径。但对于复杂交叉口,自动生成的路径有时不够理想——转弯半径过小、轨迹切入对向车道、或经过了不该经过的区域。这种情况下,你可以手动编辑连接器的几何路径,通过调整控制点来修正转向轨迹。
这里要特别强调一个概念:转向的连通性。Aimsun 允许你为每个禁止转向的组合做屏蔽处理。比如一个十字路口,南北方向禁止左转,那么北进口的左转连接器就不要创建出来;或者创建了之后,把它标记为“禁止”。这个细节直接关系到路网行为的真实度。很多新手把禁止转向做成默认允许,结果仿真中车辆大量做实际不允许的转向,流量分配完全跑偏。
还有一点需要注意:连接器和路段的车道连接不同。路段内车辆是允许变道的,但连接器一旦建立,车辆从起始车道进入连接器后,就不允许在连接器内部变道了。所以在设置连接器时,要确保起始车道对应的是实际出口方向的车道组合。比如北进口有三个车道,左转车道在最内侧、直行在中间、右转在最外侧,那么左转连接器的起始车道就必须指定为最内侧车道,而不是整条路段。
3.2 信号灯参数配到 Aimsun 里
信号灯是交叉口建模的重头戏。Aimsun 的信号控制有两层:信号控制计划(Signal Control Plan)和信号灯组(Signal Group)。
信号灯组是一个集合概念,代表一组同步变化的信号灯,比如一个方向的一组直行灯可以归为一个信号灯组。你需要在信号灯组的属性中定义它在每个相位中的状态:红、黄、绿,或者四级方案里的红黄(出现在绿灯切换末期的黄灯阶段)。
实际项目里,我最常用的信号配时输入方式有两种:一是直接在 Aimsun 的 Signal Control Plan 编辑器里按时间序列表格逐行输入;二是从外部信号配时文件导入。第一种方式直观,适合单点交叉口;第二种适合多个交叉口联动或做干线协调。
信号时间的设置要特别注意:Aimsun 中绿灯时间和实际信号机的绿灯时间定义基本一致,但要注意全红时间和黄灯时间的定义单位。Aimsun 的时间粒度可以精确到 0.1 秒。如果你导入的配时数据是整秒,也要在信号相位里明确每个相位的起始时刻。
交叉口的控制器类型也要选对。Aimsun 支持固定信号、感应信号、自适应信号等。日常项目里最常用的是固定信号,但如果做智能交通研究,自适应信号的建模会更复杂,需要定义检测器、控制逻辑和通信延迟。新手先别急着上自适应,把固定信号的逻辑吃透了再说。
信号协调有个常见误区:不同交叉口的信号配时在 Aimsun 中默认是独立的。你想做干线绿波协调,就必须定义每个交叉口的信号控制周期起点之间的相位偏移量。在 Aimsun 里,这个偏移量是在 Signal Control Plan 中设置的“phase offset”。如果这里没设置,即便两个路口的绿灯配时完全一样,绿波效果也会因为随机信号起点不同而荡然无存。
3.3 让路权分配更贴近现实的技巧
没有信号灯的路口,靠的是让行规则。Aimsun 中通过设置节点的优先规则来模拟无信号交叉口。这里有两个功能需要分清:主路优先和让行标志。
主路优先的交叉口,支路车辆必须停车或减速让行主路车辆。Aimsun 中你需要在节点属性里设置让行方向,并指定哪条路段是“give way”。这个逻辑在后期的流量校验中影响非常大,特别是无信号交叉口的通行能力测算,几乎是全靠优先级规则在推动。
Aimsun 还支持设置停车标志(Stop Sign)。这个和 Give Way 的交互逻辑不一样——停车标志要求车辆完全停车后再启动,Give Way 则允许车辆在确认安全的情况下减速通过。在路网建模时千万不要混用这两种标志,否则车辆行为会和实际情况差别很大。
关于路权分配,还有一个高级但非常实用的工具:冲突区域(Conflict Areas)。Aimsun 允许你在连接器交叉的区域内明确哪个流向优先,而不是简单地依赖路段的优先级。这在处理右转车辆与直行行人的冲突、或者左转车辆与对向直行的冲突时非常有用。
4. 路网校准:参数背后的科学
路网建好、信号配上,能跑仿真了,但这只是开始。接下来是让仿真结果贴近现实的校准环节。这是交通仿真项目里最耗时但也最有技术含量的一步。
4.1 通行能力、饱和流率与仿真时间步长
先说通行能力。在 Aimsun 中,路段的理论通行能力并不是一个直接输入的数值,它是由车辆跟驰模型参数、期望速度、车道数等因素综合计算出来的。这和其他一些软件不太一样。所以校准通行能力,实际上是在校准模型参数。
跟驰模型中最关键的两个参数是反应时间(Reaction Time)和最小时距(Minimum Headway)。反应时间决定了车辆对前车速度变化的响应速度,最小时距决定了车辆能容忍的最小车头时距,两者共同决定了路段的饱和流率。
Aimsun 微观模型的默认反应时间是 0.8 秒。这个值在大多数场景下是合理的,但如果你仿真的是重交通流且重复出现排队消散慢的情况,可以尝试把反应时间提高到 1.0 秒左右。每改一次参数,都要重跑仿真并对比观测数据。不要指望一次就能调好,校准本身就是一个反复迭代的过程。
饱和流率的估算公式我常用的经验值是:一条 3.5 米宽的标准车道,饱和流率在每小时 1800 到 2000 辆之间。如果车道宽度只有 3.0 米,那么这个值可能会下降到 1650 左右。在 Aimsun 里调整时,可以先设定一个预期饱和流率,反推最小时距,再微调反应时间。
仿真时间步长同样值得关注。Aimsun 微观仿真的时间步长是可配置的,默认通常是 0.1 秒。步长越小,仿真精度越高,但计算消耗大幅增加。对于大路网,0.1 秒和 0.2 秒的差异在结果上通常微乎其微,但计算时间能差出将近一倍。我一般建议大路网用 0.2 秒,单点交叉口微观分析用 0.1 秒。
4.2 校准实测数据的几个关键方法
校准离不开实测数据。你需要的基础数据通常包括:分方向的车流量、行程时间、排队长度、饱和流率观测值。这些数据可以来自线圈检测器、视频检测、浮动车数据或者人工调查。
最基础的校准方法是逐路段对比流量。在 Aimsun 中跑完仿真后,你可以通过“检测器”对象统计路段的流量和占有率,然后与实测值做散点图或回归分析。理想状态下,仿真流量和实测流量的相关系数应该在 0.9 以上,误差控制在 15% 以内。
另一种常用方法是行程时间比对。你可以在路网中定义 OD 路径,记录车辆实际行程时间,然后与实测的行程时间进行对比。这个方法能够检验路网建模和信号配时是否准确,因为行程时间对路网几何和信号延误非常敏感。
排队长度校准是交叉口项目的主要验证手段。你可以在仿真输出的检测器数据中提取每个周期的最大排队长度,用 95 百分位排队长度与实测数据对比。如果实测最大排队 12 辆,而仿真结果跑到 25 辆,那多半是信号配时或让行逻辑设置有误,得逐项排查。
这里要特别提醒一点:校准不是只调模型参数。有相当一部分误差其实源自输入数据本身。比如 OD 矩阵不准确、转向比例与实际不符、或者几何参数设置有偏差。我做项目时的习惯是,先排查输入数据,再松动模型参数。如果一上来就调跟驰参数,很可能把错误的数据“校准”到错误的结果上,形成假拟合。
4.3 校准结果的判定标准
什么时候可以认为校准完成?没有一个放之四海而皆准的绝对标准,但工程上常用的一套判定方法可以参考:流量误差百分比(GEH)和回归决定系数 R²。
GEH 是交通模型校准中最常用的指标,计算公式是:
GEH = sqrt((2 × (仿真流量 - 实测流量)²) / (仿真流量 + 实测流量))
一般来说,GEH 值小于 5 的检测器数量应占到全部检测器的 85% 以上,才算通过流量校准。R² 则要求大于 0.85,才能说明仿真流量和实测流量具有较好的线性一致性。
另外还有一个是对比速度分布。你可以把仿真输出的路段平均速度和实测浮动车速度对比,误差控制在正负 10% 以内。如果速度差异超过这个范围,就需要检查限速设置、信号配时和跟驰参数。
校准完成后,一定要做稳健性验证。方法很简单:把仿真时间段适当延长,或者换一组输入流量数据,重新运行,看结果是否仍然吻合。如果一个模型只在特定流量下准确,换了流量就崩,说明模型过拟合了输入数据,这在工程上的参考价值有限。
5. 常见问题与排查技巧实录
最后分享一些我在项目中实际遇到过的问题和排查方法。这些问题看起来不大,但花在上面的时间往往比建路网本身还要多。
5.1 车辆“消失”与跳变
现象:某些车辆在仿真运行中突然从一段路消失,过一会又在另一段路出现。原因通常是路段-连接器拓扑断裂。检查方法很简单:Aimsun 的“网络检查”工具(Network Check)可以自动找出不连通的拓扑。还有一种情况是车辆在接近交叉口时因找不到有效转向路径而被从路网中移除。
解决办法:逐段检查连接器与路段的车道连接。如果某个进口方向有三个车道,但只有两个车道的转向连接器,第三个车道上的车辆到了路口就会“无路可走”,从而被系统逻辑判定为离开路网。另外,检查路段的允许车道变更设置——如果变道被禁止且前方连接的转向关系不匹配,也会出现类似问题。
5.2 路口死锁与排队溢出
现象:仿真运行一段时间后,某个交叉口的车辆全部卡住不动,像是“僵死”了。这种情况在无信号灯交叉口和高流量交叉口最常见。多数是连通性优先级设置错误导致的。比如两个方向的流向都认为对方应该让行,形成互相等死锁。另一种可能是距离较近的两个交叉口之间发生排队回溢。
被堵死的感觉就像生活中的交通锁死:四个方向的车谁都不让谁,全堵在路口中央。排查时先看冲突区域(Conflict Areas)的优先级,确认是否和实际交通规则一致。再看两个相邻交叉口之间的距离是否足够长,路段的存储容量是否设定正确。Aimsun 中路段的容量与长度和车道数有关,如果设置不当,排队尾部会向前一个交叉口延伸,造成连锁阻塞。
5.3 与实测数据对不上的排查思路
如果完成了模型校准,仿真输出和实测数据还有明显偏差,先别急着改参数。我的排查顺序一般是这样:
先检查 OD 总量。如果进网车辆总数和实测流量差的很多,问题多半出在需求数据上。再检查流向比例。假如实测南进口左转占比 15%,而你模型里的转向比例是 40%,那下游道路的流量分布全会错。流量偏差还可能与信号配时有关,检查相位顺序、绿灯时长、全红时间是否一致。
如果这些都没问题,再往几何细节上抠:车道宽度、车道数、交叉口展宽长度、公交站位置是否都在合理位置。我之前碰过一个项目,仿真结果里右转车道流量特别低,查了半天才发现是右转连接器的转向轨迹太靠内,车辆只能以极低速度通过,相当于把一条实用性车道给“废”了。
最后,如果你检查完几何和需求数据依然找不到原因,那才考虑调整模型参数。但在调之前,把每个参数改了什么都记录下来,方便对比和回溯。交通仿真模型的“玄学”问题,最后靠的其实还是数据和逻辑,不是靠猜。
我把 Aimsun 的路网建模做了这么多期,一个很深的体会是:模型做得越细,需要校的内容越多,但最终的结果可靠度也越高。路网建模这事没有捷径,就是一步一步把几何画对、把数据设对、把规则定对,剩下的事,仿真引擎才能帮得上忙。希望这篇能帮你少走点弯路。