【深度学习】Traffic-light-management-system 交通灯管理系统

本文探讨了一种使用强化学习实现的交通灯管理系统,该系统通过DeepQ-Network算法来决定交通灯的切换策略,旨在减少车辆等待时间。模型训练过程中,利用SUMO(Simulation of Urban MObility)进行交通网络模拟和事件生成。通过调整车辆数量和行为,生成不同场景以训练模型。最终,通过sumo命令行工具生成随机交通流动事件,用于模型的学习和优化。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

这里主要是对这篇文章的学习
我将从头翻译代码并且进行改动以满足需求(造轮子)。其主要目的复现我学习的过程


提示:以下是本篇文章正文内容,下面案例可供参考

一、使用强化学习的交通灯管理系统

示例:这个交通灯管理系统是基于强化学习 的一个系统,使用到了torch numpy matplotlib sumo,这里面除sumo其他都是老常客了,这里给一个sumo(相扑)的介绍链接sumo
建议是搜索相关博主的介绍文

二、模型的训练思路

在这里插入图片描述
假设我们有一个如上所示的城市交通网络,其中有4个交通灯节点。
N1,N2,N3,N4。
这里不是传统的十字路口信号灯而是这样
在这里插入图片描述

在这里插入图片描述
只选通一个边,当然不能无限制的一直开绿灯所以设置了一个最小时间(30s)在这个限制下选择那一条边为绿灯,我们的目的是为了减少车辆等信号灯的时间。
so,定义等待交通灯时间=出现在信号灯的总车辆x等待时间
所以每个交通灯有着4个计时器
在这里插入图片描述
这图我看着都蒙所以我们来解析一下,要理解上图,得了解一下深度学习的一个算法 Deep Q-Network,DQN,我这里就不说理论的东西了,先说这个算法的框架,

代码如下(示例):

# 经验记忆库
class Memory(object):
    def __init__(self, batch_size, max_size):

    def store_transition(self, s, a, r, s_, done):

    def get_mini_batches(self):

class DQN(object):
    def __init__(self, sess, s_dim, a_dim, batch_size, gamma, lr, epsilon, replace_target_iter):
    # 利用 epsilon-greedy 来选取下一个行为
    def choose_action(self, s):
    # 生成模型
    def _generate_model(self):
    # 生成模型过程中建立两个神经网络
    def _build_net(self, s, scope, trainable):
    # 存储一个episode并且利用经验回放进行学习
    def store_transition_and_learn(self, s, a, r, s_, done):

    def _learn(self):

这个是最基本的框架
DQN伪代码
第【1】行,初始化回放记忆D,可容纳的数据条数为N
第【2】行,利用随机权值来初始化动作-行为值函数Q
第【3】行,令初始化用来计算TD目标的动作行为值Q
第【4】行,循环每次事件
第【5】行,初始化事件的第一个状态s1 ,预处理得到状态对应的特征输入
第【6】行,循环每个事件的每一步
第【7】行,利用概率选一个随机动作
第【8】行,若果小概率事件没发生,则用贪婪策略选择当前值函数最大的那个动作。注意,这里选最大动作时用到的值函数网络与逼近值函数所用的网络是一个网络,都对应着。注意:第【7】行和第【8】行是行动策略,即策略。
第【9】行,在仿真器中执行动作,观测回报以及图像.
第【10】行,设置,预处理第【11】行,将转换储存在回放记忆D中
第【12】行,从回放记忆D中均匀随机采样一个转换样本数据,用来表示。
第【13】行,判断是否是一个事件的终止状态,若是终止状态则TD目标为,否则利用TD目标网络计算TD目标。
第【14】行,执行一次梯度下降算法.
第【15】行,更新动作值函数逼近的网络参数
第【16】行,每隔C步更新一次TD目标网络权值即令
第【17】行,结束每次事件内循环
第【18】行,结束事件间的循环我们可以看到,在第【12】行,利用了经验回放;在【13】行利用了独立的目标网络;第【15】行,更新动作值函数逼近网络参数;第【17】行更新目标网络参数.

对于我们的模型肯定不是完全随机的,因为车不可能随机的出现在街道的任何一个随机的地方而是从一个边界随机的出现,然后从边界消失这是最简单的情况当然现实不会是这么一个情况,比如还有自行车,行人,从建筑中(停车场)出现车辆,所以我们要编辑多个事件,事件被定义成车辆以固定的方式(伪随机)通过节点的固定运动,我们会用类似的事件来训练模型

用sumo来模拟和训练

这里作者专门调用sumo的一个脚本文件来生成事件和模拟

这里啊需要画一张道路的图,但是呢我自然偷一波懒,,用sumo自带的工具获得一张,
cd到你sumo的安装目录,然后运行python osmWebWizard. py
在这里插入图片描述
在这里插入图片描述
这里可以调整车辆在场景中的数量,

环岛车流仿真


好了把创建好的图放到map目录下然后cd到map目录运行下面的的命令

python randomTrips.py -n network.net.xml -r routes.rou.xml -e 500

这里我解释一下这里面的命令后缀都有啥用,解释的不对的请指正毕竟还在学习阶段

optParser.add_option("-n", "--net-file", dest="netfile",
                         help="define the net file (mandatory)")#定义路网文件强制性的
    optParser.add_option("-a", "--additional-files", dest="additional",
                         help="define
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值