基于SUMO和强化学习的交通优化

news2025/2/25 3:02:45

本文旨在解释强化学习方法如何通过 TraCl 与 SUMO 配合使用,以及这如何有利于城市交通管理和自动驾驶车辆的路径优化。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 

1、SUMO和强化学习概述

SUMO是一款功能强大的交通仿真器,旨在处理大型负载交通网络和指定的交通需求,包括车辆路线和车辆跟随模型。 SUMO还提供了许多有用的信息,例如车辆速度、型号和位置。 SUMO的主要功能之一是交通控制接口(简称TraCI),它是一个Python API,将SUMO仿真视为服务器,允许用户从交通仿真中获取信息,或修改仿真。 TraCI 启用了一个接口,允许第三方系统(或库)与 SUMO 交通模拟集成。

强化学习(RL)作为一种机器学习技术,作为复杂系统的解决方案已经取得了非常有前景的结果。 强化学习方法能够通过与环境本身的交互来获取知识或提高性能。 强化学习的理论受到行为心理学的启发,它在环境中的策略下采取某些行动后获得奖励。 强化学习的目标是根据重复与环境交互所获得的奖励来学习最优策略。 这会持续优化策略并最终创建解决方案。

强化学习在现实世界中应用的一个很好的例子是城市交通管理。 随着城市交通网络中车辆数量的增加,设计智能交通管理系统来为车辆执行智能路由的需求很高。 然而,城市交通网络的复杂性给交通管理带来了诸多挑战,如交通系统的高速变化、道路上车辆的广泛分布等。 为了应对这些挑战,强化学习方法将很有用,因为它已经成功证明它能够处理复杂的优化问题。

2、基于强化学习的城市交通管理

正如我们在本文开头提到的,SUMO 交通仿真器可以使第三方系统实现强化学习。 在这种情况下,TraCI 将扮演 SUMO 和强化学习方法之间“转换器”的角色来建立这种交互。 TraCI 能够检索仿真中的每一条信息,包括车辆和网络。 这为强化学习代理提供了有用的功能来证明环境状态的合理性。 根据对状态的观察,我们可以相应地设置和分配奖励,并让强化学习根据奖励来优化策略。 之后,强化学习代理将通过 TraCI 为 SUMO 分配新的动作,并持续观察环境状态。

TraCI 可以使用多种编程语言进行访问,最常见的语言是 Python。 SUMO模拟器中的工具包/TraCl允许用户使用Python与SUMO交互。 这是有利的,因为 Python 已经是一种成熟的机器学习脚本语言,在实现机器学习算法的同时提供有用的库(例如 Numpy 和 Pandas)。

强化学习代理与环境之间通过 TraCI 的交互将持续进行,直到达到终止状态,或者代理满足终止条件。 本质上,强化学习技术应用马尔可夫决策过程(MDP)。 MDP被定义为五元组 <S,A,T,R,γ>,其中S是状态的集合,A是可以改变状态的动作集合,T是转移函数,即一定动作下状态改变的概率,R是奖励函数,γ被称为折扣因子,它对未来和即时奖励的重要性进行建模。

强化学习通过重复以下步骤来优化其策略:在每个时间步t,强化学习代理从状态集合S中感知状态,并根据其观察,选择一个动作并执行它,以引导环境状态转变为 下一个状态。 然后,代理收到即时奖励 R,观察新状态,并使用上面的方程(包括折扣奖励 γ)更新策略。

总之,强化学习将是复杂城市交通管理问题的理想解决方案,SUMO 模拟器提供了一个良好的界面 (TraCI),用于应用强化学习来运行模拟并学习重新规划车辆路线的最佳策略。 在下面的内容中,我将演示如何使用 TraCI 应用强化学习方法在 SUMO 中重新规划车辆路线。

为了在 SUMO 仿真器中实现强化学习,我们需要 SUMO 中马尔可夫决策过程的相应元素。 SUMO模拟器使用默认路径方法 DuaRouter为仿真中的每辆车生成路径文件。  DuaRouter基于最短路径计算执行动态用户分配(DUA)。 强化学习代理将用它学到的最优策略替换默认路由方法。

3、自动驾驶车辆的路径优化案例

这一部分我们将演示一个简单的交通仿真,该仿真使用 TraCI 在 SUMO 模拟器中应用强化学习方法,旨在演示车辆如何通过选择正确的路径来学习到达目的地以避免交通拥堵。 它还展示了车辆如何根据收到的奖励来优化其路径选择策略。

首先,我们需要准备一个包含道路信息的交通网络文件和一个包含车辆路线信息的路线文件,用于构建模拟环境。

图1:仿真用的交通路网

图1所示为由.net文件和.rou文件生成的仿真道路网络。 道路上的三个绿色小矩形是堵塞道路并造成拥堵的卡车。 左边的小三角形是仿真的车辆,其目的地位于网络的右侧。

图2:路网结构详图

图 2 与图 1 具有相同的网络设计。但是,它显示了连接每个节点的边的 ID,这也表明了车辆将采取的路径。 如果车辆从左到右节点或从上到下节点移动,我们会使用正边 ID 记录车辆采用该路径。 否则(从右到左或从下到上)我们使用负边缘 ID 记录车辆采用该路径。 例如,如果车辆从节点 A -> C -> F -> E -> B -> C 返回节点 A,则所采取的路径将被记录为['gneE0', 'gneE1', '-gneE15'、'-gneE6'、 'gneE5'、 'gneE0']

下一步,我们使用 TraCI 库控制 SUMO 仿真器,因为连接到该库可以实现强化学习方法。 在这种情况下,将使用 numpy 和 pandas 库。 numpy 库用于支持多维数组和矩阵,以及大量数学函数。 然而,pandas 库是用于数据操作和分析的。 这两个库都广泛用于机器学习。

在开始强化学习之前,我们初始化Q表。 Q表是用于路径选择策略的可更新表。 每次采取行动以优化策略时,表的值都会更新。 该表将记录环境的每个状态以及采取每个动作的概率。 本例的 Q表格式如下所示:

表3:强化学习Q表

在图 3 中,我们可以将边 ID 设置为带有其三个可用移动得分的阶段。 如果车辆进入Q表中未覆盖的新边,我们将该边ID记录为新记录并将其分配为随机移动,然后根据车辆进入的下一条边更新分数。

我们将学习次数设置为 30,这意味着我们将运行仿真 30 次。 每次仿真都会一直运行,直到左侧的车辆找到到达目的地的路或陷入拥堵。 车辆从边“gneE0”出发,目标到达边“gneE4”并尝试避开拥堵边,即“gneE2”、“gneE6”和“gneE13”。 因此,当车辆到达边缘“gneE4”时给予奖励,而当车辆进入“gneE2”、“gneE6”或“gneE13”时给予惩罚。

强化学习根据 Q表做出动作。 之后,它通过执行该操作来更新有关下一阶段收到的奖励或惩罚的 Q表。 因此,下次它会通过寻找包含更高分数的动作来表现得更“贪婪”。 在这种情况下,我们使用以下算法更新Q 表分数:

q_table.[edge_id, action] +=learning_rate * (q_target — q_predict)

其中折扣因子为 0.1,q_target 是我们在下一阶段收到的奖励或惩罚,q_predict 是特定操作的当前分数(最初为 0) )。

运行仿真 30 次后,我们可以看到车辆变得越来越聪明,学会通过避开拥堵路径来到达目的地。 图 4 显示了车辆在每次模拟中所走的总路径:

图4:车辆行驶路线记录

在图 4 中,从第 1 个episode到第 10 个episode,我们可以看到车辆是否进入拥堵路径或采取较长的路径到达目的地。 从第11个episode到第20个episode,它变得越来越聪明,但偶尔仍然会走更长的路。 从第21个episode到第30个episode,始终走最短路径到达目的地,不进入拥堵路径。

4、结束语

在本文中,我们开发了一个简单的程序,通过 TraCI 在 SUMO 模拟器中执行强化学习,并表明车辆变得更加智能,能够到达目的地并避开拥堵的路径。 这证明强化学习在SUMO中是适用的,并且效果良好。


原文链接:SUMO+RL 交通优化 - BimAnt

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

yolov8添加cbam注意力机制

(如果添加的是CBAM&#xff0c;已存在&#xff0c;忽略步骤 1 2 3) 步骤1.创建注意力机制-类 ultralytics/nn/modules/conv.py 步骤2.添加到conv.py文件的头文件里 ultralytics/nn/modules/conv.py 步骤3.添加到 init.py文件的头文件里 ultralytics/nn/modules/init.py…

云计算在数字营销中的作用是什么?

营销策略和云计算是一个为企业提供多种优势的系统。它使他们能够取得更大的成功&#xff0c;同时提高产量。这样做的原因是&#xff0c;可以从任何位置远程使用云集成工具和应用程序。基本上&#xff0c;该系统增强了存储设备和传播。同时&#xff0c;它减轻了公司 IT 网络的压…

c语言,自定义类型:联合体和枚举

联合体&#xff1a; 1.联合体类型的声明 当我们需要在程序中存储不同类型的数据&#xff0c;但又不想占用过多的内存空间时&#xff0c;联合体类型就可以派上用场。联合体类型的声明可以通过以下方式完成&#xff1a; 在C语言中&#xff0c;我们可以使用union关键字来声明联…

动态代理IP和静态代理IP有什么区别,适用场景是什么?

互联网行业的从业者经常会用到一种工具&#xff0c;那就是代理IP工具。动态代理IP和静态代理IP是两种常见的代理IP技术&#xff0c;它们在网络通信中起到了重要的作用&#xff0c;比如大数据行业的从业者会经常需要用到动态代理IP&#xff0c;跨境行业的从业者会经常用到静态代…

NowCoder | KY11 二叉树遍历

NowCoder | KY11 二叉树遍历 OJ链接 简单来说就是构建这个二叉树定义结构体通过递归方式根据输入的字符串构建二叉树。对于输入字符串中的每个字符&#xff0c;如果是 ‘#’ 表示空节点&#xff0c;否则创建一个新节点&#xff0c;并递归地构建左右子树。 #include <limit…

leetcode 255.用队列实现栈

255.用队列实现栈 不出意外大概率这几天都会更新 leetcode&#xff0c;如果没有做新的题&#xff0c;大概就会把 leetcode 之前写过的题整理&#xff08;单链表的题目居多一点&#xff09;出来写成博客 今天讲的题蛮容易出错的&#xff08;注意传参啊&#xff0c;最好把队列的…

两道题浅析PHP反序列化逃逸

两道题浅析PHP反序列化逃逸 一、介绍 反序列化逃逸的出现是因为php反序列化函数在进行反序列化操作时&#xff0c;并不会审核字符串中的内容&#xff0c;所以我们可以操纵属性值&#xff0c;使得反序列化提前结束。 反序列化逃逸题一般都是存在一个filter函数&#xff0c;这个…

Pytest接口自动化测试框架搭建模板

auto_api_test 开发环境: Pycharm 开发语言&版本: python3.7.8 测试框架: Pytest、测试报告: Allure 项目源码Git地址 项目目录结构 api – 模仿PO模式, 抽象出页面类, 页面类内包含页面所包含所有接口, 并封装成方法可供其他模块直接调用config – 配置文件目录data…

2023五岳杯量子计算挑战赛A题B题C题思路+模型+代码+论文

赛题思路&#xff1a;12月6日晚开赛后第一时间更新&#xff0c;获取见文末名片 “五岳杯”量子计算挑战赛&#xff0c;是国内专业的量子计算大赛&#xff0c;也是玻色量子首次联合移动云、南方科技大学共同发起的一场“企校联名”的国际竞赛&#xff0c;旨在深度融合“量子计算…

鸿蒙原生应用/元服务开发-新版本端云一体化模板体验反馈

一、前言 云端一体化模板是基于Serverless服务构建的一套模板&#xff0c;提供了应用生态常见场景需求的代码实现&#xff0c;开发者可将所需能力快速部署和集成到自己的应用中。 二、准备 体验最新的远端一体化模板&#xff0c;需要将云模板替换掉。为此&#xff0c;我们需要做…

解决使用Flipper无法连接到苹果模拟器,却能连接到安卓

而且这些都是显示正常 可是打开Virtual device一看ios一直在加载中 然后我打开日志看了下&#xff0c;然后各种找配置&#xff0c;项目里边配置改了又改&#xff0c;最后发现是缺少了个插件 //1、 检查 idb 和 idb_companion 是否已经安装 brew tap facebook/fb brew install …

一文彻底搞懂机器学习中的归一化与反归一化问题

1、什么是归一化和反归一化 话不多说&#xff0c;先上一段代码&#xff0c;自己体会&#xff1a; import numpy as np from sklearn.preprocessing import MinMaxScaler #导入库data np.random.randint(0,5,size5) #随机生成长度为5的数据 data np.array(data).reshape((len…

Java多线程详解(上)——2023/11/23

Process&#xff08;进程&#xff09;与Thread&#xff08;线程&#xff09; 说起进程&#xff0c;就不得不说下程序。程序是指令和数据的有序集合&#xff0c;其本身没有任何运行的含义&#xff0c;是一个静态的概念。而进程则是执行程序的一次执行过程&#xff0c;它是一个动…

完善根文件系统

一. 简介 本文完善之前创建的根文件系统。 上一篇文章通过 设置 bootargs参数&#xff0c;使开发板通过 nfs服务从 ubuntu系统加载根文件系统。文章地址如下&#xff1a; 根文件系统初步测试-CSDN博客 二. 完善根文件系统 上一篇文章通过 设置 bootargs参数&#xff0c;使…

3D Gaussian Splatting的使用

3D Gaussian Splatting的使用 1 下载与安装2 准备场景样本2.1 准备场景照片2.1.1 采集图片2.1.2 生成相机位姿 3 训练4 展示 1 下载与安装 今年SIGGRAPH最佳论文&#xff0c;学习了一下&#xff0c;果然厉害&#xff0c;具体论文原理就不说了&#xff0c;一搜都有&#xff0c;…

Kubernetes(K8s)安全认证-10

安全认证 访问控制概述 Kubernetes作为一个分布式集群的管理工具&#xff0c;保证集群的安全性是其一个重要的任务。所谓的安全性其实就是保证对Kubernetes的各种客户端进行认证和鉴权操作。 客户端 在Kubernetes集群中&#xff0c;客户端通常有两类&#xff1a; User Acco…

【算法刷题】Day13

文章目录 1658. 将 x 减到 0 的最小操作数题干&#xff1a;算法原理&#xff1a;滑动窗口代码&#xff1a; 91. 解码方法题干&#xff1a;算法原理&#xff1a;1、状态表示2、状态转移方程3、初始化4、填表顺序5、返回值6、代码&#xff1a;7、优化 1658. 将 x 减到 0 的最小操…

华为云RDS通用型(x86) vs 鲲鹏(ARM)架构的性能对比

概述 之前&#xff0c;我们对比了阿里云RDS的经济版&#xff08;ARM&#xff09;与x86版的性价比&#xff0c;这次我们来看看华为云的RDS MySQL的“通用型”(x86)与“鲲鹏通用增强型”(ARM)版本的情况如何。 这里依旧选择了用户较为常用的4c16g的规格进行测试&#xff0c;测试…

mp3的播放

1.这段vue代码会播放声音&#xff0c;但是会有audio标签 <template><div><audio id"myAudio" controls><source src"./test.mp3" type"audio/mp3" />Your browser does not support the audio tag.</audio></…

webGL开发科学模拟

开发科学模拟应用涉及到使用 WebGL 进行高性能的图形渲染&#xff0c;同时结合科学计算和模拟算法。以下是一般的技术方案&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.WebGL 框架&#xff1a; …