多智能体建模在交通中的应用2|NetLogo仿真
多主体/智能体建模(Agent-based Model) 相对于传统的交通模型的主要优势是其作为一种 非集计模型 ,可以灵活地模拟个体的行为,个体间的交互,个体与环境的交互等。
上次Lab以 MATSim 为对象,简单介绍了多主体建模的概念,MATSim的特点,以及如何配置、安装、实例仿真,但由于MATSim的开发语言是Java,入手难度相对较大,本篇文章重点介绍另外一种多主体仿真软件—— NetLogo ,其具有更简单的仿真语言,更广泛的应用场景。本文将为NetLogo仿真软件做一个入门指南,内容主要分为四部分:
- NetLogo能做什么,有哪些优势?
- NetLogo软件界面
- “Traffic 2 Lanes”案例
- “Traffic 2 Lanes”案例不足与改进
1 NetLogo特性
1.1 关于NetLogo
NetLogo是可编程建模环境,用于仿真自然现象和社会现象。软件作者是西北大学的 Uri Wilensky 教授。与其他仿真软件相比,NetLogo的优势主要体现在以下方面:
- 适合 复杂交通系统 的建模。NetLogo可以给仿真者提供成百上千的仿真主体,从而既能从微观层面探索个体出行行为,也能从宏观层面研究由个体交互衍生复杂出行模式。
- 软件 免费开源 ,且 语法 极其 简单实用 ,但仍能胜任很多仿真任务。NetLogo入门成本极低,即使没有编程经验,也能很快上手该软件。
- NetLogo软件由大量的 教程 和拓展 资料 。软件的模型库不仅包括交通领域相关的模型,也包括生物、医疗、物理、化学、数学、计算机科学、经济、生活心理等等各个方面的内容。
软件安装地址 https:// ccl.northwestern.edu/ne tlogo/6.1.1/
1.2 关于主体
NetLogo中的主体被分为四部分。
- Patches :静止的,在界面中以网格形式排列,一个格子就是一个patch,交通科研中对应道路、建筑物、交叉口等交通设施;
- Turtles :可移动,即在patches上移动,在交通研究中通常对应出行者或者车辆;
- Links :连接两个turtles;
- The observer: 即操作者,一方面观察系统演化,另一方面执行前三个主体不能执行的任务。
NetLogo语句的执行是以 主体 为对象的,且每个主体都能执行命令。
如ask turtle 28 [show [color] of turtle 30] 等价于 show [color] of turtle 30,两者都是显示turtle 30的颜色,但是前者的执行主体是turtle,后者的执行主体是the observer。
2 NetLogo软件界面
NetLogo主体界面主要包括:
- 菜单栏 :包括文件块、工具块、放缩块、Tab块、帮助块;
- 工具栏 :包括快速进行窗口选择,添加/删除button、slider、chooser等元件,控制仿真速度等等;
- 仿真窗口 :主要包括仿真显示界面(Interface)、信息界面(Info)、以及代码界面(Code);
- 命令中心 :调试代码,输出相关结果。
2.1 显示界面
显示界面如下图所示,其中黑色窗口即仿真的“世界”,空白区域可以通过命令按钮自行添加button、slider、chooser等元件,不同组件的含义如表所示。
| 组件名称 | 描述 |
| button | 执行对应命令(函数),选择once时,点击按钮一次,函数执行一次,选择forever时,点一次按钮,则重复执行,直到再次点击。 |
| slider | 全局变量,用户可以通过拖动滑块改变全局变量的值。 |
| switch | 全局布尔变量。 |
| chooser | 全局变量,用户可通过下拉选项,选择不同的值,变量可以是字符串、数字、布尔值、列表。 |
| input | 全局变量,字符穿、数字、颜色。与slider相比,该组件可以实现更加精细化的数字输入,用户也可以更改自己想输入的数据类型,关于颜色可以参考菜单栏中的Tools——Color Swatches。 |
| monitor | 显示变量值,可以是程序中存在的单一变量,也可以是通过命令得到的新变量 |
| Plot | 绘图。 |
| output | 文本滚动区域,可用于创建模型中的活动日志。一个模型一般只有一个输出区域。 |
| note | 信息文本。用户在此可以备注信息。 |
2.2 信息界面
Info界面主要为用户提供查看、编辑模型的主要信息,编辑语言为 Markdown, 简单易写。
2.3 代码界面
代码界面也较为简单,Find = Ctrl + F提供搜索功能,Check检查程序语法,Procedures下拉框可快速定位函数块,Indent automatically为自动缩进选项。
3 案例——Traffic 2 lanes
3.1 模型简介
本文以Sample Models——Social Science——Economics—— Traffic 2 Lanes 模型为例,简单讲解代码规则。本篇模型可视为 双车道车辆运行模型 ,包括 单车道运行规则 和 换道规则 ,该模型可以在一定程度上反映拥堵的产生、扩散和消散。
先看下仿真运行
模型的基本原理:
- 车辆单车道的运行规则主要包括 加速 和 减速 两个步骤;
- 车辆的换道规则可视为 心理——决策模型 ,每个turtle都被赋予耐心值,每次减速都会使得耐心值-1,直到耐心值耗尽(小于等于0)时,此时司机选择换道。
从仿真中我们可以观察到:
- 交通堵塞可以从一粒小小的“种子”开始。汽车的起始位置是随机的。如果一些车挤在一起,它们就会慢慢移动,导致后面的车也放慢速度,就形成了交通堵塞,而且堵塞传播方向和运行方向相反。
- 当模型中的汽车数量很高时,司机很快就会失去耐心,开始在车道上进进出出。这种现象被称为“ 蜿蜒 ”,在拥堵的公路上很常见。如果车辆数量足够多,几乎每一辆车最后都试图换道,交通就会慢得像爬行一样,使情况变得更糟,车辆会暂时卡在车道之间,因为他们无法换道。你觉得这像真实的生活吗?
- 观察平均速度监视器,它会计算出汽车的平均速度。速度随时间会发生什么变化?汽车的速度和有无交通堵塞有什么关系?
- 观察每条车道车辆数以及司机耐心值随时间的演化,整体呈现什么趋势?而个体(红色被观测车)又呈现什么趋势呢?
由于篇幅有限,关于该模型,以及改进模型将在下期推送介绍,敬请期待噢,关于多主体仿真以及NetLogo,小伙伴们如果有不同的见解,也欢迎留言告诉我们 ~
我们是一个有 灵魂 的团队,坚持探索,致力于分享交流学习经验。
想获取更多交通建模,论文写作,开源资料等科研信息的小伙伴就请关注
微信公众号【交通科研Lab】 (所有信息均在公众号第一时间发布)