智能交通(8)——腾讯开悟智能交通信号灯调度赛道

本文档用于记录参加腾讯开悟智能信号灯调度赛道的模型优化过程。官方提供了dqn和target_dqn算法,模型的优化在官方提供的代码基础上进行。最终排名是在榜单16,没能进入最后的决赛。

一.赛题介绍

赛题简介:在本地赛题中,参赛团队需要在平台提供的仿真交通场景下,通过算法模型驱动交通信号灯,以在各种交通状况(高峰期、雨天等)下都能最大程度地服务车辆,使其在模拟环境中获得综合最大得分。

赛题目标:参赛团队需要在指定的时间内,本地训练并提交一个模型,并在最终考核中控制交通信号灯在场景中获得尽可能多的得分。

得分规则:参赛团队提交模型后,根据以下指标进行综合得分计算:

平均车辆排队长度:位于交叉口内进口车道上处于等待状态的平均车辆数量。

平均车辆延误:位于交叉口内进口车道上所有车辆的平均延误时间。

平均车速:位于交叉口内进口车道上所有车辆的平均速度。

排名规则:在参赛团队提交的模型评估得分后,根据得分进行排名。排名前12的团队进入专家评审环节。综合参考模型得分及专家评审成绩,形成总成绩,最后按照总成绩从高到低进行最终排名。(具体评审细则待公布)

二.特征处理

三个函数分别用于特征处理,动作处理和样本处理。官方进行了部分的特征处理,在原始的observation_process函数中获取到了车辆的位置和速度。

在原函数的处理之下,加入了加速度和等待时间。

车辆信息:

 除了车辆信息以外,尝试加入了车道信息和交叉口的信息。

车道信息:

交叉口信息:

最后的状态向量:

但是最终提交的版本中还是只用加入了车辆信息,其他的特征信息尝试加入以后效果反而变差了(也有可能是我代码设计的问题)。车辆信息主要是在原始的基础上加入了加速度和车辆等待时间.

三.奖励函数

  奖励函数分为相位奖励和持续时间奖励,相位奖励即为切换信号灯所带来的奖励,持续时间奖励指的是该信号灯持续所带来的奖励,原始的奖励函数采用了平均等待时间作为奖励,持续时间的奖励等于相位奖励,本赛题的评估指标有平均等待时间,平均排队长度,平均车辆延误。于是尝试多奖励组合,即平均等待时间,平均排队长度,平均车辆延误的加权和,公式为:W1 * 平均等待时间 + W2 * 平均排队长度 + W3 * 平均车辆延误,但经过测试,效果提升不大,有论文指出,可以用平均排队长度代替平均排队长度,它们呈线性相关,所以可能提升不大。

参考2019的论文,PressLight的压力计算方式,采用压力,平均等待时间,平均排队长度,平均车辆延误的加权和,公式为:W1 * 平均等待时间 + W2 * 平均排队长度 + W3 * 平均车辆延误 + W4 * 压力值,效果稍微好了一些,但是由于超参数过多,很难进行调参,只能凭感觉进行调参。

在此的基础上,进行了奖励的归一化。同时采取动态调整权重。

四.策略优化

dqn算法已经比较成熟,尝试在dqn的基础上使用变种dqn,尝试了Double dqn,Dueling DQN,同时也尝试了A2C算法.目前效果比较好的是Dueling DQN。

先介绍一下传统的dqn算法。

传统的dqn算法其实就是用神经网络来代替q-learing中的q表,举一个简单的列子,超级玛丽大家都玩过,其动作选择其实也比较简单,上下左右,所谓的q表就是记录选择每个动作以后的得分,假设选择上可以吃到宝箱,得3分,选择左和右不得分,选择下就死亡,扣100分,那么q表中上的评分则是最高的,下最低,选择的动作即为q值最高的动作。而如果使用 DQN,神经网络将学习一个函数,该函数可以根据当前游戏屏幕的像素值预测每个动作的预期奖励。这样,代理可以根据网络的输出来选择动作,而不需要显式地存储一个巨大的 Q 表。

Dueling DQN

Dueling DQN是DQN的一种变种算法,它在传统Vanilla DQN的基础上只进行了微小的改动,却大幅提升了DQN的表现能力。具体来说就是Dueling DQN并未直接来估计Q值函数,而是通过估计V状态价值函数和A优势函数来间接获得Q值函数。

在标准DQN中,Q值函数表示的是在给定状态下执行某个动作的总价值。然而,在很多状态下,动作之间的价值差异很小,导致难以区分动作的优劣。Dueling DQN 引入了一种新的网络架构,旨在更有效地学习状态的价值函数与动作的优势函数。

Dueling DQN 使用一个特殊的网络结构,将 Q 值函数分解为两个部分

1状态值函数 V(s):表示在状态 s下的预期总回报,而不考虑具体的动作。

2. 优势函数 A(s,a):表示在状态 s下选择动作 a 相对于其他动作的优势。

网络的最后一层不再直接输出 Q 值,而是先计算状态值函数和优势函数,然后通过以下公式组合成 Q 值:

V(s) 是状态值函数,表示在状态 s下的价值。A(s,a) 是优势函数,表示在状态 s下动作 a相对于其他动作的相对优势。通过减去优势函数的平均值,消除由于相对优势引起的偏差。这个架构的优点在于,即使在一些情况下不同动作的价值相差不大,网络仍然可以通过状态值函数学到重要的信息,从而更好地评估和选择动作。

Double DQN

Double DQN(Double Deep Q-Network)是一种改进版的DQN算法,用于解决传统DQN算法中过度估计Q值的问题。在DQN中,目标Q值是通过选择当前网络中预测的最大Q值来计算的,而这可能导致某些动作的价值被高估。Double DQN引入了双网络结构来缓解这个问题。具体来说,它使用当前Q网络来选择动作,但使用目标Q网络来评估该动作的Q值,从而更准确地计算目标Q值,减少了过估计的偏差。

软更新:

软更新(Soft Update)是一种更新目标网络的方式,区别于硬更新(Hard Update)。在硬更新中,目标网络会每隔固定的时间完全替换为当前Q网络。而在软更新中,目标网络是逐步更新的,使用指数移动平均的方法:

θ′=τθ+(1−τ)θ ′其中,θ ′是目标网络的参数,θ是当前网络的参数,τ是一个很小的系数(如0.001),表示每次只更新目标网络的一小部分权重。这样可以使目标网络的更新更加平滑,减少训练中的不稳定性。

多DQN决策:

多模型决策机制,旨在通过集成多个DQN模型(model, model2, model3)的输出,进行更加稳健的决策。这种策略通过引入多个模型,可以降低单个模型预测不准确时的风险,并通过融合机制提高决策的可靠性。

通过集成多个模型,系统能够在多个模型之间进行权衡,使得最终决策更具有鲁棒性。相比于单一模型,多个模型的集成可以有效减小预测中的偏差和方差,尤其是在面对不确定性或复杂任务时更为有效。

三种DQN模型被同时用于同一个任务,它们的作用是在给定输入特征(feature)的情况下,预测下一步的动作(action),即交通信号的相位(phase)和持续时间(duration)。

多模型的独立决策

代码首先通过三个独立的DQN模型进行推理,每个模型根据输入特征(feature)给出一个动作预测。动作被分解成两个部分:

Phase(相位):交通信号灯的相位,可以理解为当前路口哪个方向的车流应该被放行。

Duration(持续时间):该相位保持的时间,即信号灯持续亮灯的时间。

多模型结果的融合策略

多模型决策的关键在于如何有效地融合多个模型的输出。代码采用了以下融合策略:

(1) 相位的决策:

对于每个观测数据,三个模型各自输出一个相位。

系统会在三个模型中找到出现次数最多的相位(即投票机制)。多数投票可以减少单个模型预测出错带来的影响。

如果三个模型的相位完全不同,则会随机选择一个相位。这种情况相对较少,但在模型间预测差异较大时能保证系统继续运行。

(2) 持续时间的决策:

当多个模型的相位一致时,系统计算这些相位对应的持续时间的平均值,以平衡各个模型的预测结果。

如果相位不同(比如在三个模型都预测出不同的相位时),则使用随机选中的相位对应的持续时间。

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

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

相关文章

RK3568平台开发系列讲解(IIO篇)IIO缓冲区

🚀返回专栏总目录 文章目录 一、IIO缓冲区的sysfs接口二、IIO缓冲区设置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢IIO缓冲区提供连续的数据捕获,一次可以同时读取多个数据通道。可通过dev/iio:device字符设备节点从用户空间访问缓冲区。在触发器处理程序中,用…

mybatis用pagehelper 然后用CountJSqlParser45,发现自己手写的mapper查询效率很慢

如题 效率慢疑惑 效率慢 分页查询,发现效率很慢,然后发现是比较复杂的sql,CountJSqlParser45它不会帮忙优化掉,就是select多少字段它count的时候也还是这么多字段 框架里的用法是这样的 所以去看了CountJSqlParser45里面的代码,发现如果有group之类的,它就不帮忙把count优化…

k8s,dameonset

Docker容器里应用的日志,默认会保存在宿主机的/var/lib/docker/containers/{{.容器ID}}/{{.容器ID}}-json.log文件里 nodeAffinity toleration DaemonSet可以继续版本回退, kubectl rollout status命令看到这个“滚动更新”的过程,可以查看…

macmini安装ubuntu网卡驱动BCM4360

安装成功效果如下 成功连接wifi 成功分配到IP 执行命令如下 1. sudo apt update 2. sudo apt install broadcom-sta-dkms 3. 重启电脑

OSCP - Proving Grounds - Fanatastic

主要知识点 CVE-2021-43798漏洞利用 具体步骤 执行nmap 扫描,22/3000/9090端口开放,应该是ssh,grafana 和Prometheus Nmap scan report for 192.168.52.181 Host is up (0.00081s latency). Not shown: 65532 closed tcp ports (reset) PORT STA…

24/12/5 算法笔记<强化学习> doubleDQN,duelingDQN

我们前面了解了DQN网络的一些知识,然而DQN还有一些改进的方法,比如doubleDQN和duelingDQN,我们先来将一下doubleDQN和DQN. 先来对比一下 单一网络 vs. 双重网络 DQN:是一个深度神经网络来估计每个动作的Q值 DDQN:使用两个独立的深度神经网络&#xf…

时长输入框、用时输入框

时长输入框、用时输入框 行内组件&#xff0c;用于设定 【时 分 秒】 时长&#xff0c;转存结果为 【毫秒】 <template><div class"time-inputs"><div classtime-input-div v-ifinput><input classtime-input type"number" v-mod…

java反射的基础应用

一、堆内存中的情况 &#xff08;一&#xff09;对象创建与变化 源对象&#xff08;UserBo&#xff09;和目标对象&#xff08;User&#xff09; 在执行UserBo sourceObj new UserBo(username, password);和User targetObj new User();时&#xff0c;分别在堆内存中创建了U…

Unity3D常见的设计模式(五)

系列文章目录 unity知识点 文章目录 系列文章目录&#x1f449;前言&#x1f449;一、桥接模式&#xff08;Bridge&#xff09;&#x1f449;二、适配器模式&#xff08;Adapter&#xff09;&#x1f449;三、 外观模式&#xff08;Facade&#xff09;&#x1f449;四、原型模…

车机端同步outlook日历

最近在开发一个车机上的日历助手&#xff0c;其中一个需求就是要实现手机端日历和车机端日历数据的同步。然而这种需求似乎没办法实现&#xff0c;毕竟手机日历是手机厂商自己带的系统应用&#xff0c;根本不能和车机端实现数据同步的。 那么只能去其他公共的平台寻求一些机会&…

群控系统服务端开发模式-应用开发-邮件工厂结构封装

首先在系统根目录下extend文件夹下创建邮件工厂文件夹并更名叫Mail。 一、邮件发送父类 在Mail目录下创建邮件发送父类并更名为MailSenderInterface.php&#xff0c;代码如下 <?php /*** 邮件发送父类* User: 龙哥三年风水* Date: 2024/12/5* Time: 14:22*/ namespace Ma…

React性能优化

三个可以优化的地方 避免过度多次渲染 组件会在以下情况下重新渲染 注意&#xff1a;例如组件组合的形式&#xff0c;<Test><Counter></Counter></Test>,即使Test发生了重新渲染&#xff0c;Counter也不会重新渲染。另外使用React这样的库或框架时&a…

操作系统学习

问题&#xff1a; 因为想用傲梅来给系统盘扩容&#xff0c;导致无法进入操作系统&#xff0c;报错如下&#xff1a; 无法加载应用程序或操作系统&#xff0c;原因是所需文件丢失或包含错误. 文件:Windowslsystem32lwinload.efi错误代码: 0xc000007b 你需要使用恢复工具。如果…

Web应用程序文件包含-Server2233-解析

B-6 Web应用程序文件包含 任务环境说明:服务器场景名称:Server2233

计算机的错误计算(一百七十五)

摘要 就计算机的错误计算&#xff08;一百七十三&#xff09;与&#xff08;一百七十四&#xff09;中案例&#xff0c;讨论其另外一种形式&#xff1a; 的错误计算问题。 例1. 已知 计算 直接贴图吧&#xff1a; 这样&#xff0c;MATLAB的输出中有4位错误数字&#xff0…

F-K变换法

f-k变换实质上是一种二维傅里叶变换。 在时间域上,对一道地震信号做傅里叶变换,可以得到在时间上不同频度(称为频率)的 波动组分的振幅和相位信息。同样地,在空间上,我们也可以对多道地震信号做类似傅里叶变 换的数值变换,得到在空间上不同频度(称为波数)的波动组分的振幅…

webstorm关闭了弹窗 Confirm Exit 恢复回来

webstorm关闭了 Confirm Exit WebStorm 关闭了“Confirm Exit”功能&#xff0c;意味着当用户尝试关闭IDE时&#xff0c;不会显示确认对话框&#xff0c;直接退出程序。 如果你想要恢复这个功能&#xff0c;可以按照以下步骤操作&#xff1a; 打开WebStorm。 进入设置界面&a…

集成学习之-stacking

一、引言 对于单模型来说&#xff0c;模型的抗干扰能力低&#xff0c;且难以拟合复杂的数据。 所以可以集成多个模型的优缺点&#xff0c;提高泛化能力。 集成学习一般有三种&#xff1a;boosting是利用多个弱学习器串行&#xff0c;逐个纠错&#xff0c;构造强学习器。 baggin…

Linux-使用 tslib 库

上一章我们学习了如何编写触摸屏应用程序&#xff0c;包括单点触摸和多点触摸&#xff0c;主要是对读取到的 struct input_event 类型数据进行剖析&#xff0c;得到各个触摸点的坐标。本章向大家介绍 tslib 库&#xff0c;这是 Linux 系统下&#xff0c;专门为触摸屏开发的应用…

SHELL----正则表达式

一、文本搜索工具——grep grep -参数 条件 文件名 其中参数有以下&#xff1a; -i 忽略大小写 -c 统计匹配的行数 -v 取反&#xff0c;不显示匹配的行 -w 匹配单词 -E 等价于 egrep &#xff0c;即启用扩展正则表达式 -n 显示行号 -rl 将指定目录内的文件打…