用Q-Learning算法实现无人车智能代理程序

优达学城的第四个项目,通过Q-Learning算法来实现一个简单的无人车代驾程序。
先来一张训练过程的动图。


训练过程.gif

需求分析

一个无人车需要满足的最基本需求就是安全性和可靠性。安全性用来保证用户安全,可靠性用来保证在限定时间内将用户送达目的地。安全性可靠性划分为A+、A、B、C、D、F六个等级

  • 安全性
    安全性具体表现为遵守交通规则,避免交通事故。
    假设有一个简化的世界,路口的交通灯是老式交通灯,不带左右转向指示灯。

    简易世界

    红线代表红灯的路段。

    仅考虑红绿灯就够了吗???

    NO!!!

    根据一般的交通规则我们可以知道,红灯时停止直行和左转,但是可以右转;绿灯时可以任意方向行驶。
    在该规则下,最可能引发安全隐患的情况有以下三种:

    • 绿灯时,想左转,但是交叉方向有直行的车。(见图1)
    • 红灯时,想右转,但是左侧有直行车辆。(见图2)
    • 绿灯时,想直行,但是右侧有右转车辆。(见图3)


      引发安全隐患的情况

    因此确保安全性需要同时考虑红绿灯、交叉方向车辆、左侧车辆、右侧车辆的意图方向。

  • 可靠性
    可靠性指按时到达目的地。由于路况的不确定,我们不能确定哪条路那种方式是最短时间消耗,比如遇到堵车,即使目的地就在前方,可能绕个道也比等待耗时短,所以这种情况下,我们只要时刻知道目的地的方位就行。

Q-Learning算法

我是通过查阅一个简明的Q-learning教程和知乎上Flappy Bird学习Q-Learning理解的Q-Learning算法。
下图是我画的一个漫画。

图片发自简书App

分数部分(奖励)

用通俗易懂的语言来讲(可能表述不严谨)Q-Learning算法,比如无人驾驶车,初始阶段,小车不知道自己会遇到什么样的状态(路况),也不知道该采取什么样的策略(前行?左转?右转?什么也不做?),每训练一次可能遇到一种状态,就把它记录下来,比如这一次采取了前行的办法,则世界根据这个动作给它一个打分,下一次又遇到了相同状态,采取了左转策略,则世界根据这个动作再给它一个打分……经过数次训练,小车可能知道了这种状态下自己的所有行动对应的分数,在下一次遇到该状态的时候,则采取分数最高的行动作为本次策略,结束了吗?没有,采取了分数最高行动之后,世界根据这个动作又要给小车一个打分,就意味着要刷新这一次分数,如何刷新呢?放弃原来的分数重新打分吗?不,我们希望综合原来的分数和本次的分数来打分,也就是Q-Learning公式中的学习率alpha


Q-Learning公式

公式中,t代表训练轮次,s代表状态,a代表动作,r(a)代表所采取的动作a的奖励(分数),alpha代表学习率,gamma代表折扣因子,gamma后面的max代表下一个状态中分数最高的动作的分数,不难发现,与简明教程中房间不同,在无人车中,并不知道下一个状态最高的动作是什么,因为路况是不确定的,所以令gamma=0,则公式便成了


简化后的公式

从公式可以看出,学习率alpha越大,Q值更新依据过去经验越少,alpha越小,Q值更新依据过去经验越大。
至此,分数部分完毕。

动作选择部分

除了分数部分,还有一个重要部分,动作选择。每次该如何确定策略?引入一个探索因子epsilon。小车的动作选择来源于以往经验和一丢丢“冒险”,就像我们学习新东西需要尝试一样,探索因子越大,小车越爱冒险,依据以往经验越少,探索因子越小,小车越拘束 ,依据以往经验越多。
不难想到,合适的探索因子是需要变化,比如一开始,小车什么都不知道,没有经验可循,因此探索因子应该大一些,越往后,探索因子可适当减小,偶尔根据以往经验决定动作,偶尔冒险决定动作。
具体在程序中的使用就是:探索因子为0-1,产生一个0-1的随机数,如果随机数小于等于探索因子,则冒险,大于,则根据以往经验,这样小车的每个动作就有一定概率是冒险,一定概率是以往经验。
至此,动作选择部分完毕。

具体实现

代码太多且涉及优达学城的版权,因此不贴了,核心逻辑根据上下文的探讨完全可以自己编码实现,重要的是原理的理解。

状态空间

根据需求分析,需要考虑的状态有目的地方向、红绿灯、交叉方向车辆、左侧车辆、右侧车辆,分别用waypoint、light、oncoming、left、right表示,waypoint有4种可能:forward、left、right、None,None代表到达目的地,算一种状态,但不占状态空间,因为到了目的地就不用判断light之类了,所以waypoint有3种状态,light有红和绿两种状态,oncoming、left、right有forward、left、right、None四种状态,则共有3x2x4x4x4=384种状态,所以状态空间的大小是384。

训练轮次

根据我的代码,每一轮有20次选择,最极端的情况是20这20次学的同一种状态的同一个动作,因此384种状态,每种4个动作,想学完所有状态,则需要384x4=1536轮训练。

探索因子的衰减函数

探索因子的可选衰减函数有:

衰减函数

a代表任意一个常数,t代表训练轮次。
参数可以随意选择,但是原则是需要让探索因子在一定轮次内合理衰减到某个设定值(即epsilon的tolerance),假设使用第一个衰减函数公式,a=0.999,经过1536轮训练后,epsilon=0.215074991847,所以tolerance设置为0.21,这样无人车就可以在合理训练轮次内合理地衰减到tolerance。

alpha的选择

alpha参数需要自己调参,一般取0.5左右的值。

实现效果

随机动作选择

随机动作选择

可以看出,安全性和可靠性不管趋势还是结果都完全随机,很差。

用Q-Learning进行1500+轮训练

1500+轮训练

可以看出,事故越来越少,每个动作的评分也越来越高,可靠性也逐渐提高,且逐渐收敛。最终安全性和可靠性都较高。

用Q-Learning进行1500+轮训练后的状态文件截图

1536轮训练后的状态文件截图

经过1500+次训练后,学习到了382种状态,还有2种没学到,可能需要更多轮训练,也可能不需要,人工智能算法都达不到绝对稳定。

折扣因子gamma去哪了

智能车在行驶过程中只知道目的地的大方向,不知道距离目的地的距离,因此下一个状态是不知道的,且起点和终点也不固定,因此用gamma是没有意义的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容