时空笔记:CBEngine(微观交通模拟引擎)

  • CBEngine 是一个微观交通模拟引擎,可以支持城市规模的道路网络交通模拟。
  • CBEngine 能够快速模拟拥有数千个交叉路口和数十万辆车辆的道路网络交通。

以下内容基本翻译自CBEngine — CBLab 1.0.0 documentation

1 模拟演示

1.0 模拟演示结构

  • config.cfg 定义了 roadnet.txtflow.txt 的路径,并包含了一些 CBEngine 的设置。
  • roadnet.txtflow.txt 为模拟数据。
  • utils.py 包含 Dataloader 工具类,用于数据加载。
  • main.py 为运行模拟的脚本。

1.1 启动演示

在安装了 CBEngine 的环境中运行以下命令

python main.py

1.2 理解演示代码

1.2.1 定义模拟参数

roadnet_file = './data/roadnet.txt'
flow_file = './data/flow.txt'
cfg_file = './cfgs/config.cfg'
dataloader = Dataloader(roadnet_file, flow_file, cfg_file)

1.2.2 创建模拟器实例

running_step = 300                      # 模拟时长
phase_time = 30                         # 交通信号周期时长
engine = cbengine.Engine(cfg_file, 12)  # 创建模拟器实例

1.2.3 启动模拟器

  • engine.next_step() 用于模拟器迭代一个时间步长(默认为 1 秒)。
  • 在循环中,我们可以操作交通元素并观测模拟情况:
print('Simulation starts ...')
start_time = time.time()
for step in range(running_step):
    for intersection in dataloader.intersections.keys():                                            
        # 遍历每个交通信号
        
        engine.set_ttl_phase(intersection, (int(engine.get_current_time()) // phase_time) % 4 + 1)  
        # 修改交通信号相位
    engine.next_step()                                                                              
    # 模拟器前进一步
    print(" time step: {}, number of vehicles: {}".format(step, engine.get_vehicle_count()))        
# 打印当前车辆数
end_time = time.time()
print('Simulation finishes. Runtime: ', end_time - start_time)

 相位错位的解释:

2 数据格式

2.1 配置文件格式(config.cfg

# 模拟器的配置文件

# 时间参数
start_time_epoch = 0               # 模拟开始时间
max_time_epoch = 3600              # 模拟最大结束时间

# 数据路径
road_file_addr : ./data/roadnet.txt    # 路网数据文件路径
vehicle_file_addr : ./data/flow.txt    # 交通流数据文件路径

# 日志
report_log_mode : normal
report_log_addr : ./log/
report_log_rate = 10
warning_stop_time_log = 100

2.2  路网文件格式(roadnet.txt

包括以下三部分

2.2.1 交叉口数据

包括经纬度、交叉口 ID 及信号灯安装信息。

92344 // 交叉口总数
30.2795476000 120.1653304000 25926073 1 // 纬度,经度,交叉口ID,是否有信号灯

2.2.2 道路数据

包括道路长度、限速、车道数及通行方向。

每条道路有两个方向(如果只有一个则是单行道)

2105 // 道路段总数
28571560 4353988632 93.2000000000 20 3 3 1 2
//起始交叉口id 终止交叉口id 路段长度 路段限速 起->止车道数 止->起车道数
//起->止车道ID 止->起车道ID 
1 0 0 0 1 0 0 1 1 // 起->止车道的通行权限
1 0 0 0 1 0 0 1 1 // 止->起车道的通行权限
//通行权限每三个一组,所以上面的三个车道是(左、直行、直行加右转)

2.2.3 交通信号数据

描述交叉口与道路的连接性

107 // 有信号灯的交叉口总数
1317137908 724 700 611 609 
// 交叉口ID及四个方向道路段ID(北、东、南、西)

2.3 流量文件格式(flow.txt

流量文件定义了模拟中的车辆流量配置。每个流量(flow)由一个元组表示:
(start_time, end_time, vehicle_interval, route)

  • start_time: 流量开始时间。
  • end_time: 流量结束时间。
  • vehicle_interval: 每辆车之间的间隔时间(单位:秒)。
  • route: 流量的行驶路线(由道路段IDs组成,而非交叉口IDs)。

流量文件包含以下部分:

  1. 第一行:流量数量 n
  2. 后续的 3 行:每个流量的3行配置:
    • 第一行:start_time, end_time, vehicle_interval
    • 第二行:路线包含的道路段数 k。
    • 第三行:路线详细,包含 k个道路段ID。

12 // 流量数量 n = 12
0 100 5 // 流量1的开始时间、结束时间和车辆间隔
2       // 流量1的路线包含2段道路
2 3     // 流量1的道路段ID

//0~100s内 每5s一辆车,路线是2->3

3 其他的api

4 其他 

CBEngine允许用户定制以下两大模块:

  1. 驾驶模块(Driving Module): 控制车辆的驾驶行为。
  2. 路径规划模块(Routing Module): 根据交通条件动态调整车辆路线。

模块定制需用C++实现,通过覆盖 src/modules/driving.cc src/modules/routing.cc 中的默认实现来实现自定义逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/952867.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

金融项目实战 04|JMeter实现自动化脚本接口测试及持续集成

目录 一、⾃动化测试理论 二、自动化脚本 1、添加断言 1️⃣注册、登录 2️⃣认证、充值、开户、投资 2、可重复执行:清除测试数据脚本按指定顺序执行 1️⃣如何可以做到可重复执⾏? 2️⃣清除测试数据:连接数据库setup线程组 ①明确…

20250112面试鸭特训营第20天

更多特训营笔记详见个人主页【面试鸭特训营】专栏 250112 1. TCP 和 UDP 有什么区别? 特性TCPUDP连接方式面向连接(需要建立连接)无连接(无需建立连接)可靠性可靠的,提供确认、重传机制不可靠&#xff0c…

导出文件,能够导出但是文件打不开

背景: 在项目开发中,对于列表的查询,而后会有导出功能,这里导出的是一个excell表格。实现了两种,1.导出的文件,命名是前端传输过去的;2.导出的文件,命名是根据后端返回的文件名获取的…

马斯克的Grok-2 Beta APP在苹果应用商店上限了,Grok-2安装尝鲜使用教程

马斯克的Grok-2 Beta APP 已经上线苹果商城了,移动端的Grok挺好用的!无需登录即可使用! (文末有安装教程) 实测之后,Grok-2 绘画方面个人感觉比GPT-4的绘画还要强一些。而且速度还挺快,可以多次…

《机器学习》——sklearn库中CountVectorizer方法(词频矩阵)

CountVectorizer方法介绍 CountVectorizer 是 scikit-learn 库中的一个工具,它主要用于将文本数据转换为词频矩阵,而不是传统意义上的词向量转换,但可以作为词向量转换的一种基础形式。用于将文本数据转换为词频矩阵,它是文本特征…

CV 图像处理基础笔记大全(超全版哦~)!!!

一、图像的数字化表示 像素 数字图像由众多像素组成,是图像的基本构成单位。在灰度图像中,一个像素用一个数值表示其亮度,通常 8 位存储,取值范围 0 - 255,0 为纯黑,255 为纯白。例如,一幅简单的…

支持向量回归(SVR:Support Vector Regression)用于A股数据分析、预测

简单说明 支持向量回归是一种用来做预测的数学方法,属于「机器学习」的一种。 它的目标是找到一条「最合适的线」,能够大致描述数据点的趋势,并允许数据点离这条线有一定的误差(不要求所有点都完全落在这条线上)。 可以把它想象成:找到一条「宽带」或「隧道」,大部分…

ollama教程(window系统)

前言 在《本地大模型工具哪家强?对比Ollama、LocalLLM、LM Studio》一文中对比了三个常用的大模型聚合工具优缺点,本文将详细介绍在window操作系统下ollama的安装和使用。要在 Windows 上安装并使用 Ollama,需要依赖 NVIDIA 显卡&#xff0c…

Flink系统知识讲解之:容错与State状态管理

Flink系统知识之:容错与State状态管理 状态在Flink中叫作State,用来保存中间计算结果或者缓存数据。根据是否需要保存中间结果,分为无状态计算和有状态计算。对于流计算而言,事件持续不断地产生,如果每次计算都是相互…

DolphinScheduler自身容错导致的服务器持续崩溃重大问题的排查与解决

01 问题复现 在DolphinScheduler中有如下一个Shell任务: current_timestamp() { date "%Y-%m-%d %H:%M:%S" }TIMESTAMP$(current_timestamp) echo $TIMESTAMP sleep 60 在DolphinScheduler将工作流执行策略设置为并行: 定时周期调度设置…

ASP.NET Core 实现微服务 - Elastic APM

这次要给大家介绍的是Elastic APM ,一款应用程序性能监控组件。APM 监控围绕对应用、服务、容器的健康监控,对接口的调用链、性能进行监控。在我们实施微服务后,由于复杂的业务逻辑,服务之间的调用会像蜘蛛网一样复杂。有了调用链…

25/1/12 嵌入式笔记 学习esp32

了解了一下位选线和段选线的知识: 位选线: 作用:用于选择数码管的某一位,例如4位数码管的第1位,第2位) 通过控制位选线的电平(高低电平),决定当前哪一位数码管处于激活状…

IMX6U Qt 开发环境

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、交叉编译 1. 安装通用 ARM 交叉编译工具链 2. 安装 Poky 交叉编译工具链 二、编译出厂源码 1. U-boot 2. 内核和模块 3. 编译出厂 Qt GUI 综合 Demo 前言…

【Oracle专栏】2个入参,生成唯一码处理

Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 业务需要:2个参数,如 aidbankid ,两个值是联合主键,需要生成一个固定唯一码,长度有限制32位,为了…

跨界融合:人工智能与区块链如何重新定义数据安全?

引言:数据安全的挑战与现状 在信息化驱动的数字化时代,数据已成为企业和个人最重要的资产之一。然而,随着网络技术的逐步优化和数据量的爆发式增长,数据安全问题也愈变突出。 数据安全现状:– 数据泄露驱动相关事件驱…

给DevOps加点料:融入安全性的DevSecOps

从前,安全防护只是特定团队的责任,在开发的最后阶段才会介入。当开发周期长达数月、甚至数年时,这样做没什么问题;但是现在,这种做法现在已经行不通了。 采用 DevOps 可以有效推进快速频繁的开发周期(有时…

CDP中的Hive3之Hive Metastore(HMS)

CDP中的Hive3之Hive Metastore(HMS) 1、CDP中的HMS2、HMS表的存储(转换)3、HWC授权 1、CDP中的HMS CDP中的Hive Metastore(HMS)是一种服务,用于在后端RDBMS(例如MySQL或PostgreSQL&a…

【算法】判断一个链表是否为回文结构

问: 给定一个单链表的头节点head,请判断该链表是否为回文结构 例: 1 -> 2 -> 1返回true;1 -> 2 -> 2 -> 1返回true;15 -> 6 -> 15返回true 答: 笔试:初始化一个栈用来…

Python双指针

双指针 双指针:在区间操作时,利用两个下标同时遍历,进行高效操作 双指针利用区间性质可以把 O ( n 2 ) O(n^2) O(n2) 时间降低到 O ( n ) O(n) O(n) 反向扫描 反向扫描: l e f t left left 起点,不断往右走&…

VMware虚拟机安装Home Assistant智能家居平台并实现远程访问保姆级教程

目录 前言 1. 安装Home Assistant 前言 本文主要介绍如何在windows 10 上用VMware Workstation 17 Pro搭建 Home Assistant OS Host os version:Windows 10 Pro, 64-bit (Build 19045.5247) 10.0.19045 VMware version:VMware Workstation 17 Pro 1. 安装Home …