SUMOlympics

本教程针对不同的交通模式设置了比赛(集体 100 米冲刺)。您将学习如何在 netedit 中创建特殊车道和(非常简单的)红绿灯,使用不同的车辆类别来定义车辆类型,您将为不同类型创建流程。所有文件也可以在 <SUMO_HOME>/docs/tutorial/sumolympics 目录中找到。

本教程是 PTV Group 设计的一个 VISSIM Scenario 的重构。

创造一个节点

并通过按 e 进入边创建模式并单击编辑区域中的两个不同位置来创建一个新网络并添加一条边。更改为检查模式(按 i)并单击边缘的起点(在您第一次单击的位置)。现在在左侧检查器面板中标记为 pos 的文本字段中输入 0,0(见图)。对边的端点执行相同操作,将其位置设置为 1000,0。现在将您的网络保存在名称 sumolypics.net.xml 下(按 Ctrl+Shift-S)。

现在我们还有很长的路要走,这将是我们比赛的舞台。比赛的参与者将是公共汽车、有轨电车、自行车、客车和脚等交通工具。他们应该并排在不同的车道上行驶。因此,我们必须为每种模式添加通道。为此,请右键单击边缘并将鼠标悬停在上下文菜单中的“添加受限车道”上。这将向您展示创建专用车道的三种选择:Sidewalk、Bikelane 和 Buslane。为每种类型添加一个车道。

要创建电车,我们通过单击同一上下文菜单中的“复制车道”来添加新车道。对于那条车道,我们必须将允许的车辆类别限制为有轨电车。为此,首先取消选中工具栏中编辑模式下拉菜单右侧的“选择边缘”框(模式仍应设置为“(i)检查”)。然后单击新创建的通道和检查器面板中的“允许”按钮。这将打开一个对话框,其中包含所有可能的车辆类别的复选框。取消选中除“rail_urban”之外的所有选项,然后单击“接受”。现在编辑剩余车道的限额(目前所有车辆类别都允许)并将其保留给“乘客”类别(即乘用车)。

现在让我们分割边缘为竞争对手创建一个起点:右键单击边缘的某处,然后从上下文菜单中选择“在此处分割边缘”。然后单击创建的节点(在 SUMO 术语中,这已经是一个“连接点”)。在 pos 字段中将其 x 坐标设置为 900,将其 y 坐标设置为 0,就像您在上面创建边缘时所做的那样。实际上,我们为参赛者创建了一条 100 米的跑道,并为每种竞争模式设置了 900 米的保持区域。现在再次选中复选框“选择边缘”并将两条边缘重命名为“beg”和“end”(在检查器面板中)。保存您的网络 (Ctrl-S)。

定义竞争车辆类型

作为下一步,我们定义了竞争车辆类型。打开一个名为 sumolympics.rou.xml 的新文件并插入以下车辆类型定义:

<routes><vType id="pkw" length="5" maxSpeed="50" accel="2.6" decel="4.5" sigma="0.2" speedDev="0.2" vClass="passenger"/><vType id="bus" length="15" maxSpeed="30" accel="1.2" decel="2.5" sigma="0.1" speedDev="0.1" vClass="bus"/><vType id="tram" length="40" maxSpeed="13" accel="0.8" decel="0.5" sigma="0.1" speedDev="0.1" vClass="rail_urban"/><vType id="bike" length="1.8" width="0.8" maxSpeed="7.5" accel="0.8" decel="1.5" sigma="0.5" speedDev="0.5" vClass="bicycle"/>
</routes>

有关这些定义的详细信息,请查看车辆类型属性描述。

对于每种车辆类型,我们通过在 vType 定义下方(在 元素中!)添加以下 <flow …/> 元素来安排和定位运送 100 人的车辆:

    ...<flow id="pkw" type="pkw" from="beg" to="end" begin="0" end="0" number="66" departPos="last"/><flow id="bus" type="bus" from="beg" to="end" begin="0" end="0" number="5" departPos="last"/><flow id="tram" type="tram" from="beg" to="end" begin="0" end="0" number="2" departPos="last"/><flow id="bike" type="bike" from="beg" to="end" begin="0" end="0" number="100" departPos="last"/>...

请注意,这假设平均车辆占用率为 1.5。[1]有关流属性含义的详细信息,请参阅流定义部分。

要开始模拟,请创建一个 SUMO 配置文件(将其命名为 sumolympics.sumocfg):

<configuration><input><net-file value="sumolympics.net.xml"/><route-files value="sumolympics.rou.xml"/></input><processing><lateral-resolution value="1." /></processing>
</configuration>

在这里,我们给出处理参数横向分辨率,其值对应于以米为单位的子车道宽度,以实现骑车人利用整个车道宽度相互超车的更真实的行为(参见子车道模型和自行车模拟)。通过双击配置文件 sumolympics.sumocfg (Windows) 或从终端运行 sumo-gui -c sumolympics.sumocfg 开始模拟。将步进延迟调整为 100 ms,然后按下运行按钮 ()。

定义开始信号(红绿灯)和行人

公平完整的比赛还有两件事要做:1)所有参赛者都应该在起跑线前自由定位(骑自行车的人排成一排,尽管他们可以通过多分组来获得更好的结果密集使用整个车道宽度)2)我们希望将行人包括在比赛中。

首先我们用netedit在边“beg”和“end”的交界处创建一个红绿灯:按t进入红绿灯编辑模式。单击连接,然后单击左侧面板中的“创建 TLS”。下面,在标签阶段下,为第一阶段键入“rrrrr”(“r”表示红色)并将其持续时间设置为 100(秒)。这将为骑自行车的人提供足够的时间更密集地分组。对于第二阶段,输入“GGGGG”(是的,“G”代表绿色)并将其持续时间设置为 1000(即直到模拟运行结束)。现在再次运行模拟,看看自行车跑得比汽车快。看?我们都应该更频繁地使用我们的自行车!

如果您在消息窗口中注意到警告(例如“警告:tlLogic ‘gneJ2’ 中缺少黄色阶段,切换到阶段 0 时为 tl-index 0 编程’0’”),请不要担心。 SUMO 会定期检查 tls-phases 的基本一致性,如果您有相交的流,则缺少黄色阶段可能会导致崩溃。但是,这是一种特殊情况,显然我们不需要关心这一点。如果您想了解有关交通灯控制的更多信息,请参阅 TraCI-Tutorials TraCIpedCrossing 和 TraCI4Traffic_Lights 或交通灯的主要部分。

你觉得行人会慢还是快?让我们来看看。您已经可以猜到,这种方法对行人来说有点不同。这是因为它们不是车辆类(不再是),而是构成了一个自己的类,称为“人”。例如,目前还没有类似于车辆流的人流这样的元素(尽管它即将到来,请参阅#1515)。因此,我们将编写一个 python 脚本来生成一个路由文件 sumolympic_walking.rou.xml。 (请注意,在 <SUMO_HOME>/tools 文件夹中有一个名为 walkerFlow.py 的小脚本,如果您想做更复杂的事情,它会很有用。)

这是简单的脚本(将文件称为 makeSumolympicWalkers.py 之类的文件):

#!/usr/bin/python
#parameters
outfile = "sumolympicWalks.rou.xml"
startEdge = "beg"
endEdge = "end"
departTime = 0. #time of departure
departPos = -30. #position of departure
arrivalPos = 100. #position of arrival
numberTrips = 100 #number of persons walking
#generate XML
xml_string = "<routes>\n"
for i in range(numberTrips):xml_string += '    <person depart="%f" id="p%d" departPos="%f" >\n' % (departTime, i, departPos)xml_string += '        <walk edges="%s %s" arrivalPos="%f"/>\n' % (startEdge, endEdge, arrivalPos)xml_string += '    </person>\n'
xml_string += "</routes>\n"
with open(outfile, "w") as f:f.write(xml_string)

通过双击(或从命令行使用 python makeSumolympicWalkers.py)执行脚本。如果您的计算机上没有 python,请在执行任何其他操作之前安装它! (从这里获取)我们必须将生成的路由文件 sumolympicWalks.rou.xml 包含在配置文件 sumolympic.sumocfg 中,让模拟知道它们。只需用逗号分隔即可包含多个路由文件。因此,修改我们配置的 <route-files …/>-entry 看起来像这样(确保文件名之间没有空格!):

  ...<route-files value="sumolympics.rou.xml,sumolympicWalks.rou.xml"/>...

教程——sumolympics相关推荐

  1. 使用Docker搭建svn服务器教程

    使用Docker搭建svn服务器教程 svn简介 SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很 ...

  2. mysql修改校对集_MySQL 教程之校对集问题

    本篇文章主要给大家介绍mysql中的校对集问题,希望对需要的朋友有所帮助! 推荐参考教程:<mysql教程> 校对集问题 校对集,其实就是数据的比较方式. 校对集,共有三种,分别为:_bi ...

  3. mysql备份psb文件怎么打开_Navicat for MySQL 数据备份教程

    原标题:Navicat for MySQL 数据备份教程 一个安全和可靠的服务器与定期运行备份有密切的关系,因为错误有可能随时发生,由攻击.硬件故障.人为错误.电力中断等都会照成数据丢失.备份功能为防 ...

  4. php rabbmq教程_RabbitMQ+PHP 教程一(Hello World)

    介绍 RabbitMQ是一个消息代理器:它接受和转发消息.你可以把它当作一个邮局:当你把邮件放在信箱里时,你可以肯定邮差先生最终会把邮件送到你的收件人那里.在这个比喻中,RabbitMQ就是这里的邮箱 ...

  5. 【置顶】利用 NLP 技术做简单数据可视化分析教程(实战)

    置顶 本人决定将过去一段时间在公司以及日常生活中关于自然语言处理的相关技术积累,将在gitbook做一个简单分享,内容应该会很丰富,希望对你有所帮助,欢迎大家支持. 内容介绍如下 你是否曾经在租房时因 ...

  6. Google Colab 免费GPU服务器使用教程 挂载云端硬盘

    一.前言 二.Google Colab特征 三.开始使用 3.1在谷歌云盘上创建文件夹 3.2创建Colaboratory 3.3创建完成 四.设置GPU运行 五.运行.py文件 5.1安装必要库 5 ...

  7. 理解和实现分布式TensorFlow集群完整教程

    手把手教你搭建分布式集群,进入生产环境的TensorFlow 分布式TensorFlow简介 前一篇<分布式TensorFlow集群local server使用详解>我们介绍了分布式Ten ...

  8. 高级教程: 作出动态决策和 Bi-LSTM CRF 重点

    https://www.zhihu.com/question/35866596 条件随机场 CRF(条件随机场)与Viterbi(维特比)算法原理详解 https://blog.csdn.net/qq ...

  9. PyTorch 高级实战教程:基于 BI-LSTM CRF 实现命名实体识别和中文分词

    20210607 https://blog.csdn.net/u011828281/article/details/81171066 前言:译者实测 PyTorch 代码非常简洁易懂,只需要将中文分词 ...

  10. k8s核心组件详细介绍教程(配超详细实例演示)

    本文实验环境基于上篇文章手把手从零开始搭建k8s集群超详细教程 本文根据B站课程云原生Java架构师的第一课K8s+Docker+KubeSphere+DevOps学习总结而来 k8s核心组件介绍 1 ...

最新文章

  1. css实现左边div固定宽度,右边div自适应撑满剩下的宽度
  2. 170821-关于SpringMVC的知识点
  3. [CLR团队公告]CLR基础研究团队,邀请您的加入
  4. Python--Json数据简单解析(11.18)
  5. zend studio一些常用配置
  6. QObject::connect: Cannot queue arguments of type xxx的解决方案
  7. php 变量类型 typeof,typeof和instanceof的区别是什么
  8. 【协同任务】基于matlab人工蜂群算法多无人机作业路径规划【含Matlab源码 1235期】
  9. 数据库高级查询与性能优化1,开窗函数与子查询
  10. csdn ruby语言入门_Ruby编程语言入门指南
  11. 埃默里大学有计算机专业吗,埃默里大学计算机科学硕士排名第30(2020年TFE Times排名)...
  12. HDOJ-2154-跳舞毯
  13. 录音自动上传到服务器,怎么实现手机录音之后,将录音的音频文件上传到服务器上...
  14. C++11之decltype
  15. dnf游戏服务器不稳定,卡顿时代将终结?DNF策划针对跨区服务器卡顿回应
  16. 上班人员必读:“五险一金”详解!
  17. 程序员兼职可以从什么平台接私活?
  18. 【ACM】2022.7.31训练赛
  19. 【电子产品】联想ku0989 启用Fn键或屏蔽Fn键
  20. 骗了马云 10 亿被骂 4 年后,院士王坚留下 4 条人生启示

热门文章

  1. Spring MVC @JsonView使用详解
  2. Qualomm openwrt SDK编译
  3. MacOS系统下matplotlib中SimHei中文字体无法启动解决办法
  4. 【Web技术】771- 图片懒加载从简单到复杂
  5. 用html做网页作品,HTML5实例:用HTML5制作的网页的15个优秀案例
  6. 论文重复率太高咋办?Python来帮你解决
  7. 手把手教你用C语言实现求质数(素数),5大方法任君挑选
  8. maven安装及配置(详细版)
  9. java整人的代码_「vbs代码」vbs表白代码+整人代码,抖音vbscript表白代码 - seo实验室...
  10. python3操作shp文件