当前位置: 首页 > news >正文

时空笔记: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 中的默认实现来实现自定义逻辑。

相关文章:

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

CBEngine 是一个微观交通模拟引擎,可以支持城市规模的道路网络交通模拟。CBEngine 能够快速模拟拥有数千个交叉路口和数十万辆车辆的道路网络交通。 以下内容基本翻译自CBEngine — CBLab 1.0.0 documentation 1 模拟演示 1.0 模拟演示结构 config.cfg 定义了 roa…...

【LeetCode】力扣刷题热题100道(26-30题)附源码 轮转数组 乘积 矩阵 螺旋矩阵 旋转图像(C++)

目录 1.轮转数组 2.除自身以外数组的乘积 3.矩阵置零 4.螺旋矩阵 5.旋转图像 1.轮转数组 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 class Solution { public:void rotate(vector<int>& nums, int k) …...

【C++】字符串的 += 和 + 运算详解

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;1. 字符串的 和 基本用法1.1 的用法1.2 的用法 &#x1f4af;2. 示例代码的剖析与解释代码分析 &#x1f4af;3. 底层实现与性能分析3.1 的实现原理3.2 的实现原理3.…...

多模态大模型部署:结合dify

文章目录 前言minicpm-vDify测试一下总结部署过程回顾集成与测试实验结果分析展望未来 前言 上回说道&#xff0c;我们用ollama部署了一个多模态的大模型&#xff0c;也就是minicpm-v&#xff1a; 但这玩意儿感觉只能打字啊。 怎么给它发图片呢&#xff1f; minicpm-v Mini…...

Matlab Steger提取条纹中心(非极大值抑制)

文章目录 一、简介二、实现代码三、实现效果一、简介 由于在确定条纹的ROI区域之后,会计算出多个条纹中心坐标,因此这里就需要对其进行则优选择,毕竟条纹只有一条,这最简单的方式就是使用非极大值抑制,即选择每一行/列最好的条纹中心。 二、实现代码 Hessian2D.m function…...

springboot + vue+elementUI图片上传流程

1.实现背景 前端上传一张图片&#xff0c;存到后端数据库&#xff0c;并将图片回显到页面上。上传组件使用现成的elementUI的el-upload。、 2.前端页面 <el-uploadclass"upload-demo"action"http://xxxx.xxx.xxx:9090/file/upload" :show-file-list&q…...

LabVIEW 系统诊断

LabVIEW 系统诊断是指通过各种工具和方法检测、评估、分析和解决 LabVIEW 程序和硬件系统中可能存在的故障和性能问题。系统诊断不仅涵盖软件层面的调试与优化&#xff0c;还包括硬件交互、数据传输、实时性能等方面的检查和分析。一个成功的系统诊断能够显著提升LabVIEW应用程…...

韩国机场WebGIS可视化集合Google遥感影像分析

目录 前言 一、相关基础数据介绍 1、韩国的机场信息 2、空间数据准备 二、Leaflet叠加Google地图 1、叠加google地图 2、空间点的标记及展示 3、韩国机场空间分布 三、相关成果展示 1、务安国际机场 2、有同类问题的机场 四、总结 前言 12月29日8时57分左右务安国际机…...

springCloudGateWay使用总结

1、什么是网关 功能: ①身份认证、权限验证 ②服务器路由、负载均衡 ③请求限流 2、gateway搭建 2.1、创建一个空项目 2.2、引入依赖 2.3、加配置 3、断言工厂 4、过滤工厂 5、全局过滤器 6、跨域问题...

使用new Vue创建Vue 实例并使用$mount挂载到元素上(包括el选项和$mount区别)

new Vue({...}) 是创建一个新的 Vue 实例的方式。你可以通过传递一个选项对象来配置这个实例。常见的选项包括&#xff1a; •data&#xff1a;定义组件的数据属性。 •el&#xff1a;指定 Vue 实例应该挂载到哪个 DOM 元素上&#xff08;通常是一个选择器字符串&#xff0c;如…...

GTX750Ti打DP补丁

背景 咸鱼收了一个二手的GTX750Ti,用于4K60Hz显示器,HDMI接口勉强可以4K60Hz,不过色彩和帧率都不是太正常,理论上它的HDMI接口是不支持的,原本也是打算用DP接口接显示器的,但是发现接DP口之后无法通过bios的vga检测最终一直重启,在华硕B760-K的BIOS中使能CSM是可以使用…...

springmvc前端传参,后端接收

RequestMapping注解 Target({ElementType.METHOD, ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented Mapping public interface RequestMapping {String name() default "";AliasFor("path")String[] value() default {};AliasFor(&quo…...

PyTorch 张量的分块处理介绍

分块处理是将大型张量分解成较小的块&#xff0c;以便更高效地进行计算&#xff0c;减少内存占用&#xff0c;特别适用于处理超大张量的场景&#xff08;如深度学习中的大批量数据或大型模型训练&#xff09;。 PyTorch 提供了多种方法来分块张量&#xff0c;包括 chunk、spli…...

在Ubuntu中使用systemd设置后台自启动服务

引言 在Ubuntu系统中&#xff0c;systemd 是一个非常强大的系统和服务管理器。它不仅负责系统的启动和初始化&#xff0c;还可以帮助我们管理各种后台服务。通过使用 systemd&#xff0c;我们可以轻松地设置服务在系统启动时自动运行&#xff0c;并且能够方便地管理服务的启动…...

mongodb清理删除历史数据

批量清理mongodb历史数据 清理程序的原来 目前项目组上很多平台上线历史数据积压&#xff0c;导致入库查询数据缓慢&#xff0c;历史数据有些已经归档&#xff0c;进行历史数据清理删除。 之前临时写shell脚本&#xff0c;太简陋&#xff0c;重新使用Python进行改造&#xff0c…...

C++字体库开发之字体回退策略十六

回退表 { "blocks": [ "UBLOCK_BASIC_LATIN", ], "font": { "family": "Noto Sans SC", "style": [ { "name": "Thin", …...

IO进程day3

一、思维导图 二、作业1 使用C语言编写一个简易的界面&#xff0c;界面如下 1&#xff1a;标准输出流 2&#xff1a;标准错误流 3&#xff1a;文件流 要求&#xff1a;按1的时候&#xff0c;通过printf输出数据&#xff0c;按2的时候&#xff0c;通过perror输出数据&#xff0c…...

【多线程初阶篇¹】线程理解| 线程和进程的区别

目录 一、认识线程Thread 1.为啥引入线程 2.线程理解 &#x1f525; 3.面试题&#xff1a;线程和进程的区别 一、认识线程Thread 1.为啥引入线程 为了解决进程太重量的问题 解释&#xff08;为什么说线程比进程更轻量&#xff1f;/为什么说线程创建/销毁开销比进程小&#…...

wireshark排除私接小路由

1.wireshark打开&#xff0c;发现了可疑地址&#xff0c;合法的地址段DHCP是192.168.100.0段的&#xff0c;打开后查看发现可疑地址段&#xff0c;分别是&#xff0c;192.168.0.1 192.168.1.174 192.168.1.1。查找到它对应的MAC地址。 ip.src192.168.1.1 2.通过show fdb p…...

Docker 从入门到精通

文章目录 Ubuntu 安装Docker步骤前言1. 进入Docker官网&#xff0c;进入开发者页面2. 选择适合自己的安装方式3. 安装 Docker1.更新系统包&#xff0c;安装插件&#xff0c;创建秘钥及目录2.安装 Docker 软件包3.设置开机启动4.通过运行 hello-world 镜像验证安装是否成功 常见…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...