用Q-Learning算法實現(xiàn)無人車智能代理程序

優(yōu)達學城的第四個項目,通過Q-Learning算法來實現(xiàn)一個簡單的無人車代駕程序距淫。
先來一張訓練過程的動圖。


訓練過程.gif

需求分析

一個無人車需要滿足的最基本需求就是安全性和可靠性。安全性用來保證用戶安全晤斩,可靠性用來保證在限定時間內(nèi)將用戶送達目的地焕檬。安全性可靠性劃分為A+、A澳泵、B实愚、C、D、F六個等級

  • 安全性
    安全性具體表現(xiàn)為遵守交通規(guī)則爆侣,避免交通事故萍程。
    假設(shè)有一個簡化的世界,路口的交通燈是老式交通燈兔仰,不帶左右轉(zhuǎn)向指示燈茫负。

    簡易世界

    紅線代表紅燈的路段。

    僅考慮紅綠燈就夠了嗎乎赴?忍法??

    NOi藕稹6鲂颉!

    根據(jù)一般的交通規(guī)則我們可以知道羹蚣,紅燈時停止直行和左轉(zhuǎn)原探,但是可以右轉(zhuǎn);綠燈時可以任意方向行駛顽素。
    在該規(guī)則下咽弦,最可能引發(fā)安全隱患的情況有以下三種:

    • 綠燈時,想左轉(zhuǎn)胁出,但是交叉方向有直行的車型型。(見圖1)
    • 紅燈時,想右轉(zhuǎn)全蝶,但是左側(cè)有直行車輛闹蒜。(見圖2)
    • 綠燈時,想直行抑淫,但是右側(cè)有右轉(zhuǎn)車輛绷落。(見圖3)


      引發(fā)安全隱患的情況

    因此確保安全性需要同時考慮紅綠燈、交叉方向車輛丈冬、左側(cè)車輛嘱函、右側(cè)車輛的意圖方向。

  • 可靠性
    可靠性指按時到達目的地埂蕊。由于路況的不確定往弓,我們不能確定哪條路那種方式是最短時間消耗,比如遇到堵車蓄氧,即使目的地就在前方函似,可能繞個道也比等待耗時短,所以這種情況下喉童,我們只要時刻知道目的地的方位就行撇寞。

Q-Learning算法

我是通過查閱一個簡明的Q-learning教程和知乎上Flappy Bird學習Q-Learning理解的Q-Learning算法。
下圖是我畫的一個漫畫。

圖片發(fā)自簡書App

分數(shù)部分(獎勵)

用通俗易懂的語言來講(可能表述不嚴謹)Q-Learning算法蔑担,比如無人駕駛車牌废,初始階段,小車不知道自己會遇到什么樣的狀態(tài)(路況)啤握,也不知道該采取什么樣的策略(前行鸟缕?左轉(zhuǎn)?右轉(zhuǎn)排抬?什么也不做懂从?),每訓練一次可能遇到一種狀態(tài)蹲蒲,就把它記錄下來番甩,比如這一次采取了前行的辦法,則世界根據(jù)這個動作給它一個打分届搁,下一次又遇到了相同狀態(tài)缘薛,采取了左轉(zhuǎn)策略,則世界根據(jù)這個動作再給它一個打分……經(jīng)過數(shù)次訓練卡睦,小車可能知道了這種狀態(tài)下自己的所有行動對應(yīng)的分數(shù)掩宜,在下一次遇到該狀態(tài)的時候,則采取分數(shù)最高的行動作為本次策略么翰,結(jié)束了嗎?沒有辽旋,采取了分數(shù)最高行動之后浩嫌,世界根據(jù)這個動作又要給小車一個打分,就意味著要刷新這一次分數(shù)补胚,如何刷新呢码耐?放棄原來的分數(shù)重新打分嗎?不溶其,我們希望綜合原來的分數(shù)和本次的分數(shù)來打分骚腥,也就是Q-Learning公式中的學習率alpha


Q-Learning公式

公式中,t代表訓練輪次瓶逃,s代表狀態(tài)束铭,a代表動作,r(a)代表所采取的動作a的獎勵(分數(shù))厢绝,alpha代表學習率契沫,gamma代表折扣因子,gamma后面的max代表下一個狀態(tài)中分數(shù)最高的動作的分數(shù)昔汉,不難發(fā)現(xiàn)懈万,與簡明教程中房間不同,在無人車中,并不知道下一個狀態(tài)最高的動作是什么会通,因為路況是不確定的口予,所以令gamma=0,則公式便成了


簡化后的公式

從公式可以看出涕侈,學習率alpha越大沪停,Q值更新依據(jù)過去經(jīng)驗越少,alpha越小驾凶,Q值更新依據(jù)過去經(jīng)驗越大牙甫。
至此,分數(shù)部分完畢调违。

動作選擇部分

除了分數(shù)部分窟哺,還有一個重要部分,動作選擇技肩。每次該如何確定策略且轨?引入一個探索因子epsilon。小車的動作選擇來源于以往經(jīng)驗和一丟丟“冒險”虚婿,就像我們學習新東西需要嘗試一樣旋奢,探索因子越大,小車越愛冒險然痊,依據(jù)以往經(jīng)驗越少至朗,探索因子越小,小車越拘束 剧浸,依據(jù)以往經(jīng)驗越多锹引。
不難想到,合適的探索因子是需要變化唆香,比如一開始嫌变,小車什么都不知道,沒有經(jīng)驗可循躬它,因此探索因子應(yīng)該大一些腾啥,越往后,探索因子可適當減小冯吓,偶爾根據(jù)以往經(jīng)驗決定動作倘待,偶爾冒險決定動作。
具體在程序中的使用就是:探索因子為0-1桑谍,產(chǎn)生一個0-1的隨機數(shù)延柠,如果隨機數(shù)小于等于探索因子,則冒險锣披,大于贞间,則根據(jù)以往經(jīng)驗贿条,這樣小車的每個動作就有一定概率是冒險,一定概率是以往經(jīng)驗增热。
至此整以,動作選擇部分完畢。

具體實現(xiàn)

代碼太多且涉及優(yōu)達學城的版權(quán)峻仇,因此不貼了公黑,核心邏輯根據(jù)上下文的探討完全可以自己編碼實現(xiàn),重要的是原理的理解摄咆。

狀態(tài)空間

根據(jù)需求分析凡蚜,需要考慮的狀態(tài)有目的地方向、紅綠燈吭从、交叉方向車輛朝蜘、左側(cè)車輛、右側(cè)車輛涩金,分別用waypoint谱醇、light、oncoming步做、left副渴、right表示,waypoint有4種可能:forward全度、left煮剧、right、None将鸵,None代表到達目的地轿秧,算一種狀態(tài),但不占狀態(tài)空間咨堤,因為到了目的地就不用判斷l(xiāng)ight之類了,所以waypoint有3種狀態(tài)漩符,light有紅和綠兩種狀態(tài)一喘,oncoming、left嗜暴、right有forward凸克、left、right闷沥、None四種狀態(tài)萎战,則共有3x2x4x4x4=384種狀態(tài),所以狀態(tài)空間的大小是384舆逃。

訓練輪次

根據(jù)我的代碼蚂维,每一輪有20次選擇戳粒,最極端的情況是20這20次學的同一種狀態(tài)的同一個動作,因此384種狀態(tài)虫啥,每種4個動作蔚约,想學完所有狀態(tài),則需要384x4=1536輪訓練涂籽。

探索因子的衰減函數(shù)

探索因子的可選衰減函數(shù)有:

衰減函數(shù)

a代表任意一個常數(shù)苹祟,t代表訓練輪次。
參數(shù)可以隨意選擇评雌,但是原則是需要讓探索因子在一定輪次內(nèi)合理衰減到某個設(shè)定值(即epsilon的tolerance),假設(shè)使用第一個衰減函數(shù)公式树枫,a=0.999,經(jīng)過1536輪訓練后景东,epsilon=0.215074991847砂轻,所以tolerance設(shè)置為0.21,這樣無人車就可以在合理訓練輪次內(nèi)合理地衰減到tolerance耐薯。

alpha的選擇

alpha參數(shù)需要自己調(diào)參舔清,一般取0.5左右的值。

實現(xiàn)效果

隨機動作選擇

隨機動作選擇

可以看出曲初,安全性和可靠性不管趨勢還是結(jié)果都完全隨機体谒,很差。

用Q-Learning進行1500+輪訓練

1500+輪訓練

可以看出臼婆,事故越來越少抒痒,每個動作的評分也越來越高,可靠性也逐漸提高颁褂,且逐漸收斂故响。最終安全性和可靠性都較高。

用Q-Learning進行1500+輪訓練后的狀態(tài)文件截圖

1536輪訓練后的狀態(tài)文件截圖

經(jīng)過1500+次訓練后颁独,學習到了382種狀態(tài)彩届,還有2種沒學到,可能需要更多輪訓練誓酒,也可能不需要樟蠕,人工智能算法都達不到絕對穩(wěn)定。

折扣因子gamma去哪了

智能車在行駛過程中只知道目的地的大方向靠柑,不知道距離目的地的距離寨辩,因此下一個狀態(tài)是不知道的,且起點和終點也不固定歼冰,因此用gamma是沒有意義的靡狞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市隔嫡,隨后出現(xiàn)的幾起案子甸怕,更是在濱河造成了極大的恐慌甘穿,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蕾各,死亡現(xiàn)場離奇詭異扒磁,居然都是意外死亡,警方通過查閱死者的電腦和手機式曲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門妨托,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吝羞,你說我怎么就攤上這事兰伤。” “怎么了钧排?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵敦腔,是天一觀的道長。 經(jīng)常有香客問我恨溜,道長符衔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任糟袁,我火速辦了婚禮判族,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘项戴。我一直安慰自己形帮,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布周叮。 她就那樣靜靜地躺著辩撑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仿耽。 梳的紋絲不亂的頭發(fā)上合冀,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音项贺,去河邊找鬼水慨。 笑死,一個胖子當著我的面吹牛敬扛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播朝抖,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼啥箭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了治宣?” 一聲冷哼從身側(cè)響起急侥,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤砌滞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后坏怪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贝润,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年铝宵,在試婚紗的時候發(fā)現(xiàn)自己被綠了打掘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡鹏秋,死狀恐怖尊蚁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侣夷,我是刑警寧澤横朋,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站百拓,受9級特大地震影響琴锭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜衙传,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一决帖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧粪牲,春花似錦古瓤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至亭引,卻和暖如春绎速,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背焙蚓。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工纹冤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人购公。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓萌京,卻偏偏與公主長得像,于是被迫代替她去往敵國和親宏浩。 傳聞我的和親對象是個殘疾皇子知残,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容