公司起名字大全免費(fèi)取名隨州seo
AI Deep Reinforcement Learning Autonomous Driving(深度強(qiáng)化學(xué)習(xí)自動(dòng)駕駛)
- 背景介紹
- 研究背景
- 研究目的及意義
- 項(xiàng)目設(shè)計(jì)內(nèi)容
- 算法介紹
- 馬爾可夫鏈及馬爾可夫決策過(guò)程
- 強(qiáng)化學(xué)習(xí)
- 神經(jīng)網(wǎng)絡(luò)
- 仿真平臺(tái)
- OpenAI gym
- Torcs配置
- GTA5
- 參數(shù)選擇
- 行動(dòng)空間
- 獎(jiǎng)勵(lì)函數(shù)
- 環(huán)境及軟件包
- 步驟
- 可參考項(xiàng)目
- 參考
背景介紹
自動(dòng)駕駛技術(shù)的興起:自動(dòng)駕駛技術(shù)旨在將車輛的駕駛功能部分或完全交給計(jì)算機(jī)系統(tǒng),以提高道路安全性、減少交通擁堵,并提供更多的便利性。這需要車輛能夠根據(jù)環(huán)境和情境做出智能的決策,遵循交通規(guī)則并與其他車輛和行人進(jìn)行協(xié)同。
深度學(xué)習(xí)的崛起:深度學(xué)習(xí)是一種機(jī)器學(xué)習(xí)技術(shù),它使用神經(jīng)網(wǎng)絡(luò)模型來(lái)學(xué)習(xí)數(shù)據(jù)的抽象特征表示。這些模型具有多層神經(jīng)元,可以自動(dòng)從大量數(shù)據(jù)中提取特征,因此被廣泛用于圖像、語(yǔ)音、自然語(yǔ)言處理等領(lǐng)域。
強(qiáng)化學(xué)習(xí)的應(yīng)用:強(qiáng)化學(xué)習(xí)是一種讓智能體通過(guò)與環(huán)境交互來(lái)學(xué)習(xí)最優(yōu)策略的方法。在自動(dòng)駕駛中,車輛可以被視為智能體,道路和交通環(huán)境則為其環(huán)境。強(qiáng)化學(xué)習(xí)能夠使車輛從試錯(cuò)中學(xué)習(xí),逐步優(yōu)化駕駛策略。
深度強(qiáng)化學(xué)習(xí)的結(jié)合:深度強(qiáng)化學(xué)習(xí)將深度學(xué)習(xí)和強(qiáng)化學(xué)習(xí)相結(jié)合,使用深度神經(jīng)網(wǎng)絡(luò)來(lái)近似智能體的策略或值函數(shù)。這使得自動(dòng)駕駛車輛能夠從大量的傳感器數(shù)據(jù)中提取信息,并根據(jù)車輛的狀態(tài)和環(huán)境來(lái)做出決策,比如加速、減速、轉(zhuǎn)向等。
挑戰(zhàn)與機(jī)遇:盡管深度強(qiáng)化學(xué)習(xí)在自動(dòng)駕駛領(lǐng)域取得了顯著進(jìn)展,但仍然面臨著許多挑戰(zhàn)。其中包括安全性、決策的解釋性、數(shù)據(jù)效率等問(wèn)題。然而,借助深度強(qiáng)化學(xué)習(xí),自動(dòng)駕駛系統(tǒng)能夠逐漸提升其決策能力和安全性,為未來(lái)的智能交通做出貢獻(xiàn)。
鑒于自動(dòng)駕駛可能從根本上改變機(jī)動(dòng)性和交通運(yùn)輸方式,因此自動(dòng)駕駛技術(shù)已經(jīng)引起了研究界和企業(yè)的高度重視。目前,大部分方法都集中在使用帶注釋的3D幾何地圖來(lái)定義駕駛行為的形式邏輯上。然而,這種方法的擴(kuò)展性可能存在問(wèn)題,因?yàn)樗鼑?yán)重依賴于外部映射基礎(chǔ)設(shè)施,而不是主要基于對(duì)本地場(chǎng)景的理解。為了實(shí)現(xiàn)真正無(wú)處不在的自動(dòng)駕駛技術(shù),業(yè)界正在提倡驅(qū)動(dòng)機(jī)器人系統(tǒng)的處理能力和導(dǎo)航,這種導(dǎo)航方式不依賴于地圖和明確的規(guī)則,就像人類在全面理解當(dāng)前環(huán)境后,能夠簡(jiǎn)單地進(jìn)行更高層次的方向控制(例如,遵循道路路徑指令)。最近在這個(gè)領(lǐng)域的研究表明,在模擬真實(shí)道路情境中,利用GPS進(jìn)行粗定位和激光雷達(dá)對(duì)本地場(chǎng)景的理解是可行的。近年來(lái),強(qiáng)化學(xué)習(xí)(Reinforcement Learning,簡(jiǎn)稱RL)作為機(jī)器學(xué)習(xí)領(lǐng)域的重要分支,專注于解決馬爾科夫決策問(wèn)題(Markov Decision Process,簡(jiǎn)稱MDP)。這種方法使代理能夠在與環(huán)境互動(dòng)的過(guò)程中選擇行動(dòng),以最大化某種獎(jiǎng)勵(lì)函數(shù)。在模擬環(huán)境中,例如電腦游戲,以及機(jī)器人操作中的簡(jiǎn)單任務(wù),強(qiáng)化學(xué)習(xí)顯示出巨大的潛力,有望取得類似超人級(jí)別的成就,類似于游戲或國(guó)際象棋等情境中。
我們覺(jué)得強(qiáng)化學(xué)習(xí)的通用性使其成為自動(dòng)駕駛的一個(gè)有價(jià)值的框架。最為重要的是,它提供了一種糾正機(jī)制,以改進(jìn)自動(dòng)駕駛在學(xué)習(xí)后的行為表現(xiàn)。然而,強(qiáng)化學(xué)習(xí)作為一種專注于解決復(fù)雜問(wèn)題的通用智能方法,在處理時(shí)序問(wèn)題方面具有優(yōu)勢(shì)。而自動(dòng)駕駛作為典型的"工業(yè)人工智能"領(lǐng)域,涉及感知、決策和控制這三大環(huán)節(jié),必須考慮各種極端工況和場(chǎng)景。在其中,感知過(guò)程中環(huán)境要素異常復(fù)雜,而駕駛?cè)蝿?wù)則多變且靈活,很多情況并非時(shí)序問(wèn)題。因此,僅依靠強(qiáng)化學(xué)習(xí)來(lái)解決這些問(wèn)題可能相當(dāng)具有挑戰(zhàn)性。在這方面,深度學(xué)習(xí)(Deep Learning,簡(jiǎn)稱DL)扮演了重要角色,例如常見(jiàn)的YOLO及其衍生版本等。強(qiáng)調(diào)的是,對(duì)于自動(dòng)駕駛來(lái)說(shuō),僅有在決策層面,模型驅(qū)動(dòng)的強(qiáng)化學(xué)習(xí)(Model Based RL)與基于值的強(qiáng)化學(xué)習(xí)(Value Based RL)相互協(xié)同,基于規(guī)則的構(gòu)建被用來(lái)處理大多數(shù)常見(jiàn)駕駛場(chǎng)景,但需要不斷地進(jìn)行設(shè)計(jì)與更新;強(qiáng)化學(xué)習(xí)則用來(lái)解決那些規(guī)則庫(kù)無(wú)法涵蓋的極端場(chǎng)景和問(wèn)題。對(duì)于一些專注于解決方案的科技公司而言,更傾向于選擇深度強(qiáng)化學(xué)習(xí)(Deep Reinforcement Learning,簡(jiǎn)稱DRL)方法。這種方法將深度學(xué)習(xí)的感知能力與強(qiáng)化學(xué)習(xí)的決策能力相結(jié)合,使其能夠直接根據(jù)輸入信息進(jìn)行控制。這種方法更貼近人類的思維方式,也是更具成熟解決方案潛力的體現(xiàn)。
研究背景
在2015年,DeepMind團(tuán)隊(duì)提出了深度Q網(wǎng)絡(luò)(Deep Q-network,簡(jiǎn)稱DQN)。DQN以一種全新的方式進(jìn)行學(xué)習(xí),它僅使用原始游戲圖像作為輸入,摒棄了對(duì)人工特征的依賴,實(shí)現(xiàn)了端到端的學(xué)習(xí)方法。DQN在創(chuàng)新性地將深度卷積神經(jīng)網(wǎng)絡(luò)與Q-learning相融合的基礎(chǔ)上,在Atari視頻游戲中取得了與人類玩家相媲美的控制效果。通過(guò)應(yīng)用經(jīng)驗(yàn)回放技術(shù)以及引入固定目標(biāo)Q網(wǎng)絡(luò),DQN成功地解決了使用神經(jīng)網(wǎng)絡(luò)進(jìn)行非線性動(dòng)作值函數(shù)逼近時(shí)可能出現(xiàn)的不穩(wěn)定和發(fā)散問(wèn)題,極大地增強(qiáng)了強(qiáng)化學(xué)習(xí)的適用性。
經(jīng)驗(yàn)回放技術(shù)不僅提高了歷史數(shù)據(jù)的有效利用率,同時(shí)通過(guò)隨機(jī)采樣打破了數(shù)據(jù)之間的相關(guān)性。固定目標(biāo)Q網(wǎng)絡(luò)的引入進(jìn)一步穩(wěn)定了動(dòng)作值函數(shù)的訓(xùn)練過(guò)程。此外,通過(guò)截?cái)嗒?jiǎng)賞信號(hào)并對(duì)網(wǎng)絡(luò)參數(shù)進(jìn)行正則化,DQN限制了梯度的范圍,從而實(shí)現(xiàn)了更為魯棒的訓(xùn)練過(guò)程。下方展示了DQN網(wǎng)絡(luò)的結(jié)構(gòu)圖:
在2016年的Ben Lua項(xiàng)目中,演示了如何運(yùn)用深度確定性政策梯度算法(DDPG,Deep Deterministic Policy Gradient)——這是由DeepMind的Lillicrap等人在2016年提出的方法。該方法核心思想在于將卷積神經(jīng)網(wǎng)絡(luò)作為策略函數(shù)μ和Q函數(shù)的近似模型,即策略網(wǎng)絡(luò)和Q網(wǎng)絡(luò)。通過(guò)深度學(xué)習(xí)技術(shù)對(duì)這些神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練。
他們將這一方法與Keras框架結(jié)合,應(yīng)用于TORCS(The Open Racing Car Simulator,開(kāi)放賽車模擬器),這是一個(gè)富有趣味性的AI賽車游戲和研究平臺(tái)。當(dāng)時(shí),TORCS被視為出色的駕駛仿真平臺(tái),因?yàn)榻柚@個(gè)仿真環(huán)境,我們可以觀察神經(jīng)網(wǎng)絡(luò)隨著時(shí)間推移如何進(jìn)行學(xué)習(xí),并檢驗(yàn)其學(xué)習(xí)過(guò)程。通過(guò)在這一仿真環(huán)境中進(jìn)行實(shí)驗(yàn),我們可以更輕松地理解自動(dòng)駕駛中的機(jī)器學(xué)習(xí)技術(shù)。
英國(guó)自動(dòng)駕駛初創(chuàng)公司W(wǎng)ayve在2018年公布了其使用Actor-Critic強(qiáng)化學(xué)習(xí)框架快速訓(xùn)練駕駛策略的論文 。從隨機(jī)初始化的參數(shù)中,他們的模型能夠在少量使用單目圖像作為輸入的訓(xùn)練片段中學(xué)習(xí)車道跟蹤策略,采用的自動(dòng)駕駛框架,擺脫了對(duì)定義的邏輯規(guī)則、映射和直接監(jiān)督的依賴。
研究目的及意義
真正的自動(dòng)駕駛汽車(即能夠在任何要求的環(huán)境中安全駕駛)的關(guān)鍵是更加重視關(guān)于其軟件的自學(xué)能力。換句話說(shuō),自動(dòng)駕駛汽車首先是人工智能問(wèn)題,需要一個(gè)非常具體的機(jī)器學(xué)習(xí)開(kāi)發(fā)技能。而強(qiáng)化學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個(gè)重要分支,是多學(xué)科多領(lǐng)域交叉的一個(gè)產(chǎn)物,它的本質(zhì)是解決決策(decision making)問(wèn)題,即自動(dòng)進(jìn)行決策,并且可以做連續(xù)決策。通過(guò)搭建仿真環(huán)境,設(shè)計(jì)強(qiáng)化學(xué)習(xí)框架,并且無(wú)需 3D 地圖,也無(wú)需規(guī)則編程,讓汽車從零開(kāi)始在短時(shí)間內(nèi)學(xué)會(huì)在模擬真實(shí)駕駛環(huán)境中自動(dòng)駕駛。
- ? 仿真駕駛環(huán)境的個(gè)性化搭建/復(fù)雜環(huán)境對(duì)代理算法的挑戰(zhàn)研究:討論如何設(shè)置系統(tǒng),以便在現(xiàn)實(shí)世界的車輛上高效、安全地學(xué)習(xí)駕駛;
- ? 新環(huán)境中,為了快速探索全圖的策略討論研究,如數(shù)據(jù)增強(qiáng)方面:通過(guò)連續(xù)深度強(qiáng)化學(xué)習(xí)算法,僅使用車載計(jì)算,在幾個(gè)短視頻中學(xué)習(xí)駕駛一輛模擬真實(shí)世界的自動(dòng)駕駛汽車;
- ? 強(qiáng)化學(xué)習(xí)算法框架研究,根據(jù)不同環(huán)境觀測(cè)維度精確設(shè)計(jì)底層框架和損失函數(shù)以及獎(jiǎng)勵(lì)機(jī)制:算法基于model- based VS model-
free的有效性對(duì)比。
項(xiàng)目設(shè)計(jì)內(nèi)容
算法介紹
馬爾可夫鏈及馬爾可夫決策過(guò)程
馬爾可夫鏈(Markov Chain):
描述狀態(tài)轉(zhuǎn)移可以用狀態(tài)轉(zhuǎn)移矩陣:
表示agent在st這個(gè)狀態(tài)下的時(shí)候到下一個(gè)狀態(tài)的概率:
馬爾可夫獎(jiǎng)勵(lì)決策過(guò)程(Markov Decision Reward Process, MDRP):MDRP = Markov Chain + reward
與馬爾科夫鏈相比,多了一個(gè)獎(jiǎng)勵(lì)函數(shù):
到達(dá)某個(gè)狀態(tài)后,可以獲得的獎(jiǎng)勵(lì),其獎(jiǎng)勵(lì)的折扣因子, 折扣因子越大,Agent越關(guān)注未來(lái)的獎(jiǎng)勵(lì),而不僅僅只關(guān)注當(dāng)前的利益:
最終的獎(jiǎng)勵(lì)為:
強(qiáng)化學(xué)習(xí)
強(qiáng)化學(xué)習(xí)的目標(biāo)是學(xué)習(xí)到策略,使得累計(jì)回報(bào)的期望值最大,即:
為了便于求解最優(yōu)策略,引入值函數(shù)和動(dòng)作狀態(tài)值函數(shù)來(lái)評(píng)價(jià)某個(gè)狀態(tài)和動(dòng)作的優(yōu)劣。值函數(shù)的定義如下:
動(dòng)作狀態(tài)值函數(shù)定義為:
解決值函數(shù)和動(dòng)作狀態(tài)值函數(shù)的方法可以分為基于表的方法和基于值函數(shù)逼近的方法。在基于表的方法中,傳統(tǒng)的動(dòng)態(tài)規(guī)劃、蒙特卡洛和時(shí)間差分(Temporal Difference,簡(jiǎn)稱TD)算法都屬于這一類,其本質(zhì)是構(gòu)建一個(gè)Q(s,a)表格,其中行表示狀態(tài),列表示動(dòng)作,通過(guò)迭代計(jì)算不斷更新表中的值。如下圖所示,上方的三個(gè)環(huán)境維度展示了在狀態(tài)較少時(shí),使用Q表能夠容納這些維度,并且在實(shí)際決策時(shí)遍歷較小的表并不會(huì)引起明顯的時(shí)間延遲。
然而,當(dāng)環(huán)境狀態(tài)數(shù)量龐大時(shí),例如圍棋盤(pán)面狀態(tài)或機(jī)器人運(yùn)動(dòng)狀態(tài)等,狀態(tài)的數(shù)量變得無(wú)法計(jì)數(shù),這時(shí)基于表的方法就無(wú)法應(yīng)用。因此,基于值函數(shù)逼近的方法更適用于這些復(fù)雜環(huán)境。
在強(qiáng)化學(xué)習(xí)的眾多子算法中,分為兩大流派:model-based/off-policy 和 value-based/on-policy , 在我們這次的自動(dòng)駕駛項(xiàng)目中,我們需要關(guān)注的是我們的動(dòng)作是連續(xù)的還是離散問(wèn)題。
當(dāng)需要解決的問(wèn)題是連續(xù)動(dòng)作(如gym的carmountin-v0),則采取基于policy gradient的算法:DDPG,PPO,A3C等。
當(dāng)需要解決的問(wèn)題是離散動(dòng)作(CarMountinCounts-v0)時(shí),則可采取基于value的算法,如 Q-learning, DQN, A3C, PPO等。
Deep Q-Network的一大局限性是輸出/動(dòng)作是離散的,而賽車中的轉(zhuǎn)向等動(dòng)作是連續(xù)的。將DQN應(yīng)用于連續(xù)域的一個(gè)明顯方法是對(duì)動(dòng)作空間進(jìn)行簡(jiǎn)單的離散化。且容易遇到了維數(shù)的詛咒問(wèn)題。例如,如果你將方向盤(pán)離散化,從-90度到+90度,每5度,加速度從0km到300km,每5km,你的輸出組合將是36個(gè)轉(zhuǎn)向狀態(tài)乘以60個(gè)速度狀態(tài),等于2160種可能的組合。如果你想讓機(jī)器人執(zhí)行一些非常專業(yè)的操作,比如需要對(duì)動(dòng)作進(jìn)行精細(xì)控制的腦外科手術(shù),而天真的離散化將無(wú)法達(dá)到操作所需的精度,那么情況就會(huì)變得更糟。
所以,連續(xù)問(wèn)題算法DDPG是不錯(cuò)的選擇,具體哪個(gè)更適合自己搭建的仿真環(huán)境,需要經(jīng)過(guò)實(shí)驗(yàn)對(duì)比得出有效結(jié)論。
神經(jīng)網(wǎng)絡(luò)
人工神經(jīng)網(wǎng)絡(luò)的架構(gòu)大致可分為兩大類。一類是前饋和遞歸神經(jīng)網(wǎng)絡(luò)(RNN),前饋網(wǎng)絡(luò)采用單個(gè)輸入(例如游戲狀態(tài)的表示),并輸出每個(gè)可能動(dòng)作的概率值。另一類是卷積神經(jīng)網(wǎng)絡(luò)(CNN),它由可訓(xùn)練的濾波器組成,適用于處理圖像數(shù)據(jù),例如來(lái)自視頻游戲屏幕的像素。
RNN 通常應(yīng)用于時(shí)間序列數(shù)據(jù),其中網(wǎng)絡(luò)的輸出取決于先前時(shí)間步驟的激活。除了網(wǎng)絡(luò)的先前隱藏狀態(tài)與下一個(gè)輸入一起反饋給網(wǎng)絡(luò)外,RNN 的訓(xùn)練過(guò)程類似于前饋網(wǎng)絡(luò)。這就允許網(wǎng)絡(luò)通過(guò)記憶先前的激活而變得具有上下文感知,這在那種單個(gè)觀察不代表完整狀態(tài)的游戲中是非常有用的。對(duì)于視頻游戲,通常使用一堆卷積層,然后是循環(huán)層和完全連接的前饋層。
仿真平臺(tái)
OpenAI gym
gym是一個(gè)開(kāi)發(fā)和比較強(qiáng)化學(xué)習(xí)算法的工具包。它對(duì)代理的結(jié)構(gòu)沒(méi)有任何假設(shè),并且與任何數(shù)值計(jì)算庫(kù)兼容,比如TensorFlow或Theano。gym的庫(kù)是一個(gè)測(cè)試問(wèn)題的集合環(huán)境,你可以用它來(lái)解決你的強(qiáng)化學(xué)習(xí)算法。這些環(huán)境有一個(gè)共享的接口,允許編寫(xiě)通用算法。
當(dāng)python>=3.5時(shí),可直接pip install gym
其駕駛環(huán)境有:MountainCarContinuous-v0(附上環(huán)境配置教程 ),MountainCar-v0 (附python code)
Torcs配置
可以在TORCS中開(kāi)發(fā)自己的智能車,TORCS提供了幾種可用的模式,但客戶端-服務(wù)器模式僅支持兩種模型:Practice和Quick Race。其中Practice支持一輛車參加比賽,Quick Race支持多輛車參加比賽。TORCS是一個(gè)具有高度可移植性的賽車模擬器。它可作為普通的賽車游戲,同樣能做為賽車游戲和人工智能的研究平臺(tái)。它可運(yùn)行在Linux(x86,AMD64,PPC),FreeBSD,Mac OS X和Windows之上。仿真功能包含簡(jiǎn)單的損傷模型,碰撞,輪胎和車輪屬性(彈簧,減震器,剛度等),空氣動(dòng)力學(xué)(地面效應(yīng),破壞等)及更多。
GTA5
Grand Theft Auto是由Rockstar Games開(kāi)發(fā)的以犯罪為主題的世界著名游戲,其中駕駛模擬器被很多強(qiáng)化學(xué)習(xí)愛(ài)好者所使用。
參數(shù)選擇
行動(dòng)空間
有人或許會(huì)認(rèn)為駕駛本身囊括了一系列天然的動(dòng)作,如加速、剎車、信號(hào)等。然而,強(qiáng)化學(xué)習(xí)算法應(yīng)該在什么領(lǐng)域輸出呢?以節(jié)流閥為例,它可以被描述為離散的狀態(tài),要么是開(kāi)要么是關(guān),或者在某個(gè)范圍內(nèi)如[0,1]的連續(xù)度量。另一種選擇是重新參數(shù)化節(jié)流閥的速度設(shè)定點(diǎn),使其與經(jīng)典控制器中設(shè)定點(diǎn)的輸出相匹配??傮w而言,在一個(gè)簡(jiǎn)單的模擬器環(huán)境中,連續(xù)動(dòng)作盡管可能更具挑戰(zhàn)性,卻提供了更加平滑的控制方式。這種情況下,可以采用二維行動(dòng)空間,其中包括范圍在[-1, 1]內(nèi)的轉(zhuǎn)向角度以及以km/h為單位的速度設(shè)定值。
如圖為觀測(cè)空間,從應(yīng)用問(wèn)題來(lái)看,越復(fù)雜的問(wèn)題,其觀測(cè)空間維度越高。
獎(jiǎng)勵(lì)函數(shù)
獎(jiǎng)勵(lì)函數(shù)的設(shè)計(jì)可以接近監(jiān)督學(xué)習(xí)給定的車道分類系統(tǒng),獎(jiǎng)勵(lì)學(xué)習(xí)車道跟蹤可以建立在最小化預(yù)測(cè)距離車道中心,先前的研究 采用的方法。這種方法在規(guī)模上是有限的:系統(tǒng)只能與手工制作的獎(jiǎng)勵(lì)背后的人類直覺(jué)一樣好。我們不采用這種方法。相反,我們將獎(jiǎng)勵(lì)定義為前進(jìn)速度并在違反交通規(guī)則時(shí)終止一段情節(jié),因此給定狀態(tài)V(st)的值對(duì)應(yīng)于在違反交通規(guī)則前行駛的平均距離。一個(gè)可以識(shí)別的錯(cuò)誤是代理可能會(huì)選擇避免更困難的操作,例如在英國(guó)向右轉(zhuǎn)(在美國(guó)向左)。命令條件獎(jiǎng)勵(lì)可以在未來(lái)的工作中使用,以避免這種情況。
環(huán)境及軟件包
Python軟件及依賴包
Python=3.6-3.8
Opencv
Tensorflow-gpu
Keras
Numpy
OpenAI gym
步驟
- ? 根據(jù)系統(tǒng)配置python軟件和環(huán)境:推薦miniconda3 + pycharm
- ? 配置openAI gym 和深度學(xué)習(xí)(tensorflow+keras or torch)虛擬環(huán)境
- ? 駕駛平臺(tái)搭建和環(huán)境設(shè)置
- ? 強(qiáng)化學(xué)習(xí)框架設(shè)計(jì),獎(jiǎng)勵(lì)函數(shù)設(shè)計(jì)
- ? 駕駛渲染記錄數(shù)據(jù)供強(qiáng)化學(xué)習(xí)訓(xùn)練
- ? 訓(xùn)練及驗(yàn)證結(jié)論
- ? 論文寫(xiě)作
可參考項(xiàng)目
OpenAI gym: https://github.com/andywu0913/OpenAI-GYM-CarRacing-DQN
Torcs平臺(tái):https://github.com/yanpanlau/DDPG-Keras-Torcs
GTA平臺(tái):https://github.com/Sentdex/pygta5
參考
https://deepmind.com/research/publications/human-level-control-through-deep-reinforcement-learning
https://yanpanlau.github.io/2016/10/11/Torcs-Keras.html Kendall, A. , et al. “Learning to Drive in a Day.” (2018)
https://gym.openai.com/envs/MountainCar-v0
https://www.jianshu.com/p/915671bf670b?utm_campaign=shakespeare
https://gym.openai.com/envs/MountainCar-v0/
https://zhuanlan.zhihu.com/p/57648478
https://github.com/Sentdex/pygta5
基于openAI gym 的mountincar-v0的強(qiáng)化學(xué)習(xí)code入門(mén)
#!/usr/bin/python
# -*- encoding:utf-8 -*-
# @author: cy
# @time: 2021/7/8 下午3:03
# @project_name: PyCharm
# @file: car.py
'''
import gym
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers# configuration parameters for whole step
seed=42
gamma=0.99 #discount
max_steps_per_episode=10000# env
env=gym.make('MountainCar-v0')
# env=gym.make('CartPole-v0')
# env.seed(seed)
env.reset()
action = env.action_space.sample()
# print('action',action)
# action = env.action_space
# state = tf.convert_to_tensor(state)
# state = tf.expand_dims(state, 0)
for i in range (1000):# action = np.random.choice(2, p=np.squeeze(1))env.render()# action = np.random.uniform(action)abs,r,done,info=env.step(action)# print(abs)# print(done)# print(info)env.close()
'''import numpy as np
import gym
from gym import wrappersoff_policy = True # if True use off-policy q-learning update, if False, use on-policy SARSA updaten_states = 40 # Discrete value
iter_max = 100
initial_lr = 1.0 # Learning rate
min_lr = 0.003
gamma = 0.99
t_max = 10000
eps = 0.1'''
observation state :(2,)
'''
def obs_to_state(env, obs):""" Maps an observation to state """# we quantify the continous state space into discrete spaceenv_low = env.observation_space.low # !env_high = env.observation_space.high # !env_dx = (env_high - env_low) / n_states # state discretizationa = int((obs[0] - env_low[0]) / env_dx[0]) # '/'b = int((obs[1] - env_low[1]) / env_dx[1])# print('env_low:{} env_high:{} env_dx:{} obs[0]:{} obs[1]:{} a:{} b:{}'.format(env_low,env_high,env_dx,obs[0],obs[1],a,b))'''env_low:[-1.2 -0.07] env_high:[0.6 0.07] env_dx:[0.045 0.0035] obs[0]:-0.8533420682038003 obs[1]:-0.03403819682165786 a:7 b:10'''return a, bdef run_episode(env, policy=None, render=False):obs = env.reset() # reset envtotal_reward = 0step_idx = 0for _ in range(t_max): # we know it can end the game in 10000 stepif render:env.render() # fresh envif policy is None:action = env.action_space.sample() # initialize actionelse: # policy chose , the action is fixeda, b = obs_to_state(env, obs) # it comes from the number34 codeaction = policy[a][b]obs, reward, done, _ = env.step(action)total_reward += gamma ** step_idx * rewardstep_idx += 1if done:breakreturn total_rewardif __name__ == '__main__':env_name = 'MountainCar-v0' # the name of id can searchenv = gym.make(env_name) # make a envenv.seed(0) # let the resule can be samenp.random.seed(0) # let the resule can be sameif off_policy == True: # confirm the policyprint('----- using Q Learning -----')else:print('------ using SARSA Learning ---')q_table = np.zeros((n_states, n_states, 3)) # 3 action,and the dimensional of state is 3for i in range(iter_max): # the ep is 5000obs = env.reset() # reset the envtotal_reward = 0 # 0 reward## eta: learning rate is decreased at each stepeta = max(min_lr, initial_lr * (0.85 ** (i // 100)))for j in range(t_max): # the ep is 10000,after we need reset enva, b = obs_to_state(env, obs) # State value after discretizationif np.random.uniform(0, 1) < eps:action = np.random.choice(env.action_space.n) # such as 0,1,2else:action = np.argmax(q_table[a][b])obs, reward, done, _ = env.step(action)total_reward += reward# update q tablea_, b_ = obs_to_state(env, obs)if off_policy == True:# use q-learning update (off-policy learning)q_table[a][b][action] = q_table[a][b][action] + eta * (reward + gamma * np.max(q_table[a_][b_]) - q_table[a][b][action])else:# use SARSA update (on-policy learning)# epsilon-greedy policy on Q againif np.random.uniform(0, 1) < eps:action_ = np.random.choice(env.action_space.n)else:action_ = np.argmax(q_table[a_][b_])q_table[a][b][action] = q_table[a][b][action] + eta * (reward + gamma * q_table[a_][b_][action_] - q_table[a][b][action])if done:breakif i % 200 == 0: # print learning info per 200 stepsprint('Iteration #%d -- Total reward = %d.' % (i + 1, total_reward))solution_policy = np.argmax(q_table, axis=2)solution_policy_scores = [run_episode(env, solution_policy, False) for _ in range(100)]print("Average score of solution = ", np.mean(solution_policy_scores))# Animate itfor _ in range(2):run_episode(env, solution_policy, True)env.close()