8 Automated Lane Change Decision Making using Dee(1).pdf
    关键词:深度强化学习(DRL)、IDM、MOBIL
    一、 论文总体思路
    本文构建以1000m路段为单位的仿真环境,实验车辆输入深度强化学习(以DQL为基础)到的网络进行正常行驶过程中的变道决策,其余环境中的车辆使用经典的rule-based MOBIL进行换道决策。并通过与MOBIL算法相对比,验证实验车辆经过深度强化学习后做出决策的安全性与准确率。经过验证,在次数足够多的实验中,MOBIL下做出的决策会出现一定数量的事故,但深度强化学习可以在噪声环境下保持相当高的决策正确率。
    论文中除去决策相关的介绍,还有部分基于IDM的运动控制模型,通过控制车辆方向盘转角以及加速度实现变道决策。
    二、 结构梳理与计算解释
    1. Automated Lane Change Decision Making - 图1
    三、 知识体系搭建

    1. DRL、DQL(深度q学习)

    参考自:
    https://blog.csdn.net/wlm_py/article/details/101301986
    https://blog.csdn.net/weixin_30632089/article/details/97937974?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0.no_search_link&spm=1001.2101.3001.4242.1
    简单来说,深度强化学习就是深度学习与强化学习的结合。在Q学习中,agent由初始状态转移到目标状态的过程称为“Episode”,即“场景”。Q函数可以表示为以下的迭代形式进行Q矩阵的更新:
    image.png
    Q矩阵(st,at)位置元素的值等于回报函数R的相应值加上折扣因子γ乘以转换到下一个状态后最大的Q值。上述的Q学习算法可以看出,当划分的状态有限时,每一场景开始时随机选择的初始状态s在算法的指导下探索环境,最终一定可以到达目标状态s*,回报函数R(s,a)是有界的,并且动作的选择能够使每个状态映射到动作对的访问是无限频率,则整个学习过程就能够训练出来。将t状态的奖励延长到下个状态甚至下下个状态。
    image.png
    在给定迭代次数中,不断更新Q矩阵的同时,还需验证Q矩阵是否收敛,因为Q学习并不依赖于模型,所以足够迭代次数收敛过后,并不存在过拟合的情形。而折扣因子则是需要调节的参数。
    如何训练收敛Q矩阵?
    步骤1.初始化仓库环境和算法参数(最大训练周期数,每一场景即为一个周期,折扣因子γ范围(0,1),即时回报函数R设定会夸张一些和评估矩阵Q)。参数γ的范围为0到1(0 <= γ< 1)。 如果γ接近零,agent将倾向于只考虑立即得到奖励值。 如果γ更接近1,那么agent将会考虑更多的权重,愿意延迟得到奖励。
    步骤2.随机选择一个初始状态s,若s=s*,则结束此场景,重新选择初始状态。
    步骤3.在当前状态s的所有可能动作中随机选择一个动作a,选择每一动作的概率相等。
    步骤4.当前状态s选取动作a后到达状态s’。
    步骤5.使用公式对Q矩阵进行更新。
    步骤6.设置下一状态为当前状态,s=s’。若s未达到目标状态,则转步骤3。
    步骤7.如果算法未达到最大训练周期数,转步骤2进入下一场景。否则结束训练,此时得到训练完毕的收敛Q矩阵。(一般来说,最大训练周期数即为Episodes,设定的最大训练周期数>收敛所需最小训练周期数)

    在参考教学网站中,以该祖传例简单理解了Q学习矩阵的训练过程:qq.py
    image.png
    简化为:
    image.png
    背景是如图的五个空间,空间5面积最大/或称其为室外,设定为最佳状态(state),在随机初始空间的条件下,依据最新的奖励矩阵(初始R[state, action]将进入5号空间设为奖励动作(action),其它可达性动作设为0,剩下的不通之门设为-1)确定其运动状态,直至到达室外(理想状态)。
    足够训练次数后,得到:
    image.png
    之后的决策判断即可根据该收敛矩阵直接进行数字上的判断。

    1. IDM(Intelligent Driver Model)

    参考自:
    https://blog.csdn.net/weixin_43332626/article/details/119917427
    https://blog.csdn.net/allenhsu6/article/details/116458793
    https://www.bilibili.com/video/BV137411E7oC?p=4
    该模型将道路上行驶的每一个车辆都视为一个可以移动的节点,可以结合车辆队列研究下不同的研究方向实时获取需要的车辆速度、加速度、位置等状态信息。作为一种经典的车辆跟驰模型,IDM 模型被广泛应用在车辆队列的研究中。车辆在道路上行驶的过程中不仅受到道路拓扑结构和车辆本身动力学特性的制约,还需要根据前方车辆加速或制动等行驶状态及时作出调整,IDM 模型参数设置可以全面且准确地描述前方车辆的位置和速度等状态对跟驰车辆的影响,大大简化车辆队列的研究。 其实就是两个公式,中文:纵向加速度模型。
    image.png

    1. MOBIL(Minimizing Overall Braking Induced by Lane change)

    参考自:
    https://blog.csdn.net/allenhsu6/article/details/116458793
    https://www.docin.com/p-763053947.html
    安全情况:不会超车:
    image.png
    激励方案:
    image.png

    四、 源码剖析

    1. 整体构架

    1. Automated Lane Change Decision Making - 图10

    1. 细节
    • 环境安装:使用清华源

      1. pip install -r requirements.txt -i [https://pypi.tuna.tsinghua.edu.cn/simple](https://pypi.tuna.tsinghua.edu.cn/simple)
    • tensorflow无GPU

    • Python 3.8(或更高)下:

      SyntaxWarning: “is” with a literal. Did you mean “==”?

    解决方法:将对应语句中is/is not用== 和 != 代替
    原因:
    从 python 3.8 开始,使用 is 和 is not 运算符时,会抛出 SyntaxWarning 语句警告信息

    • Adam importError

      ImportError: cannot import name ‘Adam‘ from ‘keras.optimizers‘

    解决方法:将from keras.optimizers import Adam改为:from keras.optimizers import adam_v2
    原因:keras 库更新后包导入方式改变,Adam 导入已更改。
    调用:adam_v2.Adam
    原文链接:https://blog.csdn.net/gsgs1234/article/details/119247739

    • ImportError: DLL load failed while importing _arpack: 找不到指定的程序 的一种解决方法以及默认镜像安装报错

      1. dll文件,重装scipyPillow
    • step() takes 2 positional arguments but 3 were given

    • 各类库

      ① pygame
      pygame是跨平台Python模块,专门为电子游戏设计,包含图像、声音等;简单的说它是别人已经编写好的程序,并放在了一个类似库里,专门给别人使用的。
      a. 图像的翻转、旋转、放缩
        pygame.transform模块内置许多实现对图像、旋转、放缩的函数; ``` 创建一个游戏窗口,宽和高设置为640×480 import sys # 导入sys模块 import pygame # 导入pygame模块

    pygame.init() size=width,height=640,480 screen=pygame.display.set_mode(size)

    1. b.

    import sys import pygame

    pygame.init() # 初始化pygame size=width,height=700,600 #设置大小 screen=pygame.display.set_mode(size)# 显示窗口

    color=(0,0,0) # 设置填充颜色 charlotte=pygame.image.load(“1.jpg”) # 记载图片 charlotterect=charlotte.get_rect() # 获取矩形区域

    while True: for event in pygame.event.get(): if event.type == pygame.KEYDOWN: sys.exit() screen.fill(color) # 填充颜色 screen.blit(charlotte,charlotterect) # 将图片画到窗口上 pygame.display.flip() # 更新全部显示 pygame.quit() ``` 原文链接:https://blog.csdn.net/uowemee/article/details/94441453

    ② gym
    Gym是一个用于测试和比较强化学习算法的工具包,它不依赖强化学习算法结构,并且可以使用很多方法对它进行调用,像Tensorflow、Theano。Gym库收集、解决了很多环境的测试过程中的问题,能够很好地使得强化学习算法得到很好的工作。并且含有游戏界面,能够帮助你去写更适用的算法。
    ③ tensorflow
    ④ keras