本文档用于记录参加腾讯开悟智能信号灯调度赛道的模型优化过程。官方提供了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) 持续时间的决策:
当多个模型的相位一致时,系统计算这些相位对应的持续时间的平均值,以平衡各个模型的预测结果。
如果相位不同(比如在三个模型都预测出不同的相位时),则使用随机选中的相位对应的持续时间。