0
本文作者: 宗仁 | 2019-03-05 17:25 |
本系列文章通過(guò)通俗易懂的方式介紹強(qiáng)化學(xué)習(xí)的基本概念,雖然語(yǔ)言通俗,但是內(nèi)容依舊非常嚴(yán)謹(jǐn)性。文中用很多的公式,對(duì)數(shù)學(xué)公式頭疼的讀者可能會(huì)被嚇住,但是如果讀者一步一步follow下來(lái),就會(huì)發(fā)現(xiàn)公式的推導(dǎo)非常自然,對(duì)于透徹的理解這些基本概念非常有幫助。除了理論之外,文章還會(huì)介紹每種算法的實(shí)現(xiàn)代碼,深入解答每一行關(guān)鍵代碼。讓讀者不但理解理論和算法,同時(shí)還能知道怎么用代碼來(lái)實(shí)現(xiàn)。通過(guò)理論與實(shí)際的結(jié)合,更加深入的理解學(xué)過(guò)的概念。讀者只需要基本的Python編程知識(shí),文中每一個(gè)算法都有對(duì)應(yīng)的Jupyter Notebook代碼。(文章來(lái)源,李理的Github博客)
引言
馬爾科夫決策過(guò)程(MDP)
和環(huán)境的互動(dòng)
目標(biāo)和獎(jiǎng)勵(lì)
回報(bào)(Return)
馬爾科夫?qū)傩?/p>
馬爾科夫決策過(guò)程(Markov Decision Processes)
價(jià)值函數(shù)(Value Function)
最優(yōu)價(jià)值函數(shù)(Optimal Value Functions)
OpenAI Gym簡(jiǎn)介
運(yùn)行Environment
觀察(Observations)
Spaces
前面我們介紹了監(jiān)督學(xué)習(xí),監(jiān)督學(xué)習(xí)的特點(diǎn)是有一個(gè)“老師”來(lái)“監(jiān)督”我們,告訴我們正確的結(jié)果是什么。在我們?cè)谛〉臅r(shí)候,會(huì)有老師來(lái)教我們,本質(zhì)上監(jiān)督學(xué)習(xí)是一種知識(shí)的傳遞,但不能發(fā)現(xiàn)新的知識(shí)。對(duì)于人類整體而言,真正(甚至唯一)的知識(shí)來(lái)源是實(shí)踐——也就是強(qiáng)化學(xué)習(xí)。比如神農(nóng)嘗百草,最早人類并不知道哪些草能治病,但是通過(guò)嘗試,就能學(xué)到新的知識(shí)。學(xué)到的這些知識(shí)通過(guò)語(yǔ)言文字記錄下來(lái),一代一代的流傳下來(lái),從而人類社會(huì)作為整體能夠不斷的進(jìn)步。和監(jiān)督學(xué)習(xí)不同,沒(méi)有一個(gè)“老師”會(huì)“監(jiān)督“我們。比如下圍棋,不會(huì)有人告訴我們當(dāng)前局面最好的走法是什么,只有到游戲結(jié)束的時(shí)候我們才知道最終的勝負(fù),我們需要自己復(fù)盤(pán)(學(xué)習(xí))哪一步是好棋哪一步是臭棋。自然界也是一樣,它不會(huì)告訴我們是否應(yīng)該和別人合作,但是通過(guò)優(yōu)勝劣汰,最終”告訴”我們互相協(xié)助的社會(huì)會(huì)更有競(jìng)爭(zhēng)力。和前面的監(jiān)督非監(jiān)督學(xué)習(xí)相比有一個(gè)很大的不同點(diǎn):在強(qiáng)化學(xué)習(xí)的Agent是可以通過(guò)Action影響環(huán)境的——我們的每走一步棋都會(huì)改變局面,有可能變好也有可能變壞。
它要解決的核心問(wèn)題是給定一個(gè)狀態(tài),我們需要判斷它的價(jià)值(Value)。價(jià)值和獎(jiǎng)勵(lì)(Reward)是強(qiáng)化學(xué)習(xí)最基本的兩個(gè)概念。對(duì)于一個(gè)Agent(強(qiáng)化學(xué)習(xí)的主體)來(lái)說(shuō),Reward是立刻獲得的,內(nèi)在的甚至與生俱來(lái)的。比如處于饑餓狀態(tài)下,吃飯會(huì)有Reward。而Value是延遲的,需要計(jì)算和慎重考慮的。比如饑餓狀態(tài)下去偷東西吃可以有Reward,但是從Value(價(jià)值觀)的角度這(可能)并不是一個(gè)好的Action。為什么不好?雖然人類很監(jiān)督學(xué)習(xí),比如先賢告訴我們這是不符合道德規(guī)范的,不是好的行為。但是我們之前說(shuō)了,人類最終的知識(shí)來(lái)源是強(qiáng)化學(xué)習(xí),先賢是從哪里知道的呢?有人認(rèn)為來(lái)自上帝或者就是來(lái)自人的天性,比如“人之初性本善”,我們會(huì)在最后一章討論哲學(xué)的問(wèn)題。如果從進(jìn)化論的角度來(lái)解釋,人類其實(shí)在玩一場(chǎng)”生存”游戲,有遵循道德的人群和有不遵循的人群,大自然會(huì)通過(guò)優(yōu)勝劣汰”告訴”我們最終的結(jié)果,最終我們的先賢“學(xué)到”了(其實(shí)是被選擇了)這些道德規(guī)范,并且把這些規(guī)范通過(guò)教育(監(jiān)督學(xué)習(xí))一代代流傳下來(lái)。
馬爾科夫決策過(guò)程(Markov Decision Process)是強(qiáng)化學(xué)習(xí)最常見(jiàn)的模型。我們通過(guò)這個(gè)模型來(lái)介紹強(qiáng)化學(xué)習(xí)的一些基本概念。
和環(huán)境的互動(dòng)
強(qiáng)化學(xué)習(xí)的本質(zhì)就是通過(guò)與環(huán)境的互動(dòng)來(lái)學(xué)習(xí)怎么達(dá)成一個(gè)目標(biāo)。這個(gè)學(xué)習(xí)和做決策的主體就叫Agent。Agent交互的對(duì)象就是環(huán)境(Environment),環(huán)境可大可小,對(duì)于坐井觀天的青蛙來(lái)說(shuō),它的環(huán)境就是那口小井;而對(duì)于人類來(lái)說(shuō),整個(gè)地球甚至太陽(yáng)系都是我們研究的對(duì)象。Agent會(huì)持續(xù)的和環(huán)境交互,根據(jù)當(dāng)前的狀態(tài)選擇行為(Action),而環(huán)境會(huì)給Agent新的狀態(tài)和Reward。整個(gè)交互過(guò)程如下圖所示。
圖:強(qiáng)化學(xué)習(xí)里Agent和環(huán)境的互動(dòng)
Agent和環(huán)境的交互假設(shè)是時(shí)刻t=0,1,…。在t時(shí)刻,Agent處于某個(gè)狀態(tài)St∈S,這里SS表示所有可能狀態(tài)的集合,也就是狀態(tài)空間。它可以選擇一個(gè)行為At∈A(St),其中A(St)是狀態(tài)St時(shí)可以選擇的所有行為的集合。選擇了行為 At之后,環(huán)境會(huì)在下一個(gè)(t+1)時(shí)刻給Agent一個(gè)新的狀態(tài)St+1和Reward Rt+1∈R?R。
一個(gè)實(shí)數(shù)值的Reward是否足夠?拿人來(lái)說(shuō),是有很多方面的追求,比如同時(shí)要考慮工作和家庭。當(dāng)然最簡(jiǎn)單的方法是把兩個(gè)目標(biāo)(goal)進(jìn)行加權(quán)求和,而且這個(gè)權(quán)重似乎會(huì)變化,因此人類是否有一個(gè)單一的目標(biāo),而其他目標(biāo)都是它的一種外在表現(xiàn)?我們這里不討論這個(gè)問(wèn)題,但是對(duì)于實(shí)際的Task來(lái)說(shuō),一般是足夠了。比如下圍棋,就是勝負(fù);玩Atari游戲就是獲得最高的得分。
在每個(gè)時(shí)刻t,Agent根據(jù)當(dāng)前的狀態(tài)St會(huì)選取不同的行為 At,選擇的方法叫做策略(Policy),一般假設(shè)是它一個(gè)概率分布(確定的策略是它的特殊情況)πt(At|St),如果這個(gè)隨機(jī)過(guò)程是平穩(wěn)的(Stationary),那么我們的策略也一般與時(shí)間無(wú)關(guān)的,即πt(At|St)=π(At|St)。策略有好有壞,Agent的目標(biāo)是學(xué)習(xí)到最好的策略(是否存在也是強(qiáng)化學(xué)習(xí)的一個(gè)理論問(wèn)題,不過(guò)我們一般認(rèn)為存在,也有一些理論可以證明如果系統(tǒng)滿足一些假設(shè),最優(yōu)策略是存在的)。
目標(biāo)和獎(jiǎng)勵(lì)
每個(gè)時(shí)刻t,環(huán)境都會(huì)給Agent一個(gè)RewardRt,而Agent的目標(biāo)(Goal)是最大化最終得到的所有Reward的和。這里隱含的意思是:我們的目標(biāo)不是短期的Reward,而是長(zhǎng)期Reward的累加。在學(xué)校的時(shí)候平時(shí)努力學(xué)習(xí)最終會(huì)有回報(bào)的,如果短期來(lái)看,學(xué)習(xí)可能會(huì)饑餓會(huì)疲憊,而出去玩可能會(huì)愉快。這就是所謂的“Reward假設(shè)”:我們所說(shuō)的目標(biāo)(Goal)或者目的(Purpose)最終可以被看成最大化一個(gè)Reward信號(hào)的累加值。
就像前文說(shuō)過(guò),用一個(gè)數(shù)值來(lái)描述Agent所有的目標(biāo)(尤其是人這樣復(fù)雜的生物)似乎有些不夠,我們暫且把Agent放到一些具體的任務(wù)(Task)上來(lái)看看似乎足夠。比如我們讓一個(gè)老鼠逃離迷宮(Maze),如果它沒(méi)有找到出口我們給它-1的Reward,這樣它學(xué)習(xí)的目標(biāo)就是盡快的逃離迷宮。比如下象棋,如果獲勝,我們給它+1的Reward,如果輸棋則是-1,和棋則是0。又比如掃地機(jī)器人,如果它收集到垃圾,那么給它+1的Reward,那么它的目標(biāo)就是盡可能多的收集垃圾。
注意:我們定義的目標(biāo)是要告訴Agent我們期望它做的是什么(What),而不是告訴它怎么做(How)。比如下棋時(shí)吃掉對(duì)方的棋子是一種獲勝的策略(怎么做),我們不能給吃子Reward,否則它就可能學(xué)到的策略是為了吃子,因?yàn)槲覀冎烙械臅r(shí)候?yàn)榱双@勝必須犧牲己方的棋子。
回報(bào)(Return)
Agent的目標(biāo)是最大化長(zhǎng)期的Reward累加值,下面我們來(lái)形式化的定義這個(gè)累加值——回報(bào)。假設(shè)t時(shí)刻之后的Reward是Rt,Rt+1,…,我們期望這些Reward的和最大。由于環(huán)境(可能)是隨機(jī)的,而且Agent的策略也(可能)是隨機(jī)的,因此Agent的目標(biāo)是最大化Reward累加和的期望值。回報(bào)Gt定義如下:
Gt=Rt+1+Rt+2+Rt+3+...+RT
其中T是最后的時(shí)刻。有些任務(wù)會(huì)有一些結(jié)束的狀態(tài),從任務(wù)的初始狀態(tài)到結(jié)束狀態(tài),我們稱之為一個(gè)episode。比如下象棋,從開(kāi)始下棋到最終分出勝負(fù)(或者和棋)一局游戲結(jié)束就叫一個(gè)episode。如果我們開(kāi)始一個(gè)新的episode,比如下棋重新開(kāi)始一局,那么Agent的狀態(tài)會(huì)重置到初始化狀態(tài),而且新的一局和上一局是沒(méi)有關(guān)系的。除了episode的任務(wù)之外,還有一種任務(wù)沒(méi)有結(jié)束狀態(tài),會(huì)一直繼續(xù)下去,也就是T=∞。
由于未來(lái)的不確定性,我們一般會(huì)對(duì)未來(lái)的Reward進(jìn)行打折(Discount)。這很好理解,眼前的Reward的是確定的,拿到手再說(shuō),未來(lái)的Reward不確定因素太多,所以要打折。因此我們可以定義打折后的回報(bào)(Discounted Return)如下:
其中γ是一個(gè)參數(shù),0≤γ≤10≤γ≤1,叫做打折率(Discount Ratio)。如果γ<1γ<1并且Reward是有界的,那么無(wú)窮項(xiàng)的和是收斂的。如果γ=0,則Agent只考慮當(dāng)前t時(shí)刻的Reward,而隨著γγ趨近于1,則未來(lái)的Reward越來(lái)越重要,當(dāng)γ=1γ=1時(shí),未來(lái)的Reward和當(dāng)前的一樣重要?;貓?bào)Gt有如下的遞歸公式:
在強(qiáng)化學(xué)習(xí)里,Agent根據(jù)狀態(tài)來(lái)決定采取什么樣的行為,而狀態(tài)是來(lái)自環(huán)境的一個(gè)信號(hào)(Signal)。狀態(tài)可以來(lái)自Agent的傳感器的測(cè)量(Sensory Measurements),也可以是這些原始測(cè)量的復(fù)雜處理。可以是當(dāng)前時(shí)刻的傳感器信號(hào),也可以包含以前的信號(hào)。理想的,我們期望狀態(tài)信號(hào)能夠緊湊的壓縮過(guò)去所有的信息,它能夠保留所有相關(guān)的信息而盡量丟棄無(wú)關(guān)的信息。這通常要求狀態(tài)不僅包含當(dāng)前時(shí)刻的信號(hào),還可能包含之前的一些信息,當(dāng)然通常不需要所有過(guò)去的信息。如果一個(gè)狀態(tài)信號(hào)包含了所有相關(guān)的信息,那么就叫它具有馬爾科夫?qū)傩?Markov Property)。比如下象棋,當(dāng)前的局面(包括所有棋子的位置和誰(shuí)走下一步棋)包含了所有的信息。不管是先走車(chē)再走馬還是先走馬再走車(chē),總之它們到達(dá)了相同的局面。因此通常馬爾科夫?qū)傩酝ǔEc具體的“路徑”無(wú)關(guān)。下面我們來(lái)形式化的定義馬爾科夫?qū)傩浴?/p>
我們假設(shè)環(huán)境的動(dòng)力系統(tǒng)(dynamics)是如下的隨機(jī)過(guò)程:
也就是在過(guò)去所有的歷史信息的情況下(S0,A0,R1,…,St?1,At?1,Rt),Agent處于狀態(tài)St下采取At后環(huán)境反饋的新?tīng)顟B(tài)是s’并且rewward是r的聯(lián)合概率分布。如果系統(tǒng)滿足馬爾科夫?qū)傩裕敲此械倪^(guò)去歷史信息都?jí)嚎s在St里了,因此給定St的條件下與過(guò)去的歷史無(wú)關(guān),因此滿足馬爾科夫?qū)傩缘南到y(tǒng)的動(dòng)力系統(tǒng)可以簡(jiǎn)化為如下公式:
如果環(huán)境具有馬爾科夫?qū)傩?,那么在給定當(dāng)前狀態(tài)和行為的條件下我們可以使用上式預(yù)測(cè)下一個(gè)狀態(tài)和Reward(的概率)。通過(guò)不斷迭代的使用這個(gè)公式,我們可以(精確的)計(jì)算當(dāng)前狀態(tài)的期望回報(bào)。
圖:Atari Broke游戲
比如上圖Atari Broke游戲,玩法就是用下面的擋板把球反彈回去,然后碰掉上方的格子,每碰掉一個(gè)格子就會(huì)有加分(Reward),如果所有格子都碰掉了或者擋板沒(méi)有接到球讓它落入屏幕下方就算游戲結(jié)束。玩家的目標(biāo)就是獲得更多的得分。
如果我們分析這個(gè)游戲的環(huán)境,假如我們把當(dāng)前幀的圖像作為當(dāng)前的狀態(tài),那么它是否是馬爾科夫的呢?似乎不行,因?yàn)橐环鶊D像只有今天的信息,可能有兩個(gè)狀態(tài)圖像相同但是球速可能不同。我們可以把當(dāng)前幀和前一幀圖像作為當(dāng)前的狀態(tài),假設(shè)球是勻速直線運(yùn)動(dòng)的(在沒(méi)有碰撞的時(shí)候是這樣的),那么根據(jù)兩幀的球的位置可以計(jì)算出其速度來(lái)。這樣就可以大致認(rèn)為它是具有馬爾科夫?qū)傩缘牧恕?/p>
滿足馬爾科夫?qū)傩缘膹?qiáng)化學(xué)習(xí)叫做馬爾科夫決策過(guò)程,如果狀態(tài)空間和行為空間是有限的,那么它就叫有限馬爾科夫決策過(guò)程。一個(gè)馬爾科夫決策過(guò)程完全由環(huán)境的當(dāng)前狀態(tài)決定,我們?cè)俅沃貜?fù)一下這個(gè)重要公式:
有了上面的公式,我們可以計(jì)算關(guān)于環(huán)境的任何信息(也就是說(shuō)環(huán)境完全由這個(gè)公式確定)。比如我們可以計(jì)算某個(gè)特點(diǎn)狀態(tài)s和行為a的期望reward如下:
上面的公式直接根據(jù)期望的定義推導(dǎo)出來(lái),我們這里簡(jiǎn)單的推導(dǎo)一下,后面類似的地方就略過(guò)了。
同樣我們可以得到狀態(tài)轉(zhuǎn)移概率:
以及給定當(dāng)前s、當(dāng)前a和下一個(gè)s條件時(shí)期望的Reward:
價(jià)值函數(shù)(Value Function)
很多強(qiáng)化學(xué)習(xí)方法會(huì)涉及求狀態(tài)的價(jià)值函數(shù)(或者State-Action對(duì)的價(jià)值函數(shù))。這個(gè)函數(shù)計(jì)算Agent處于這個(gè)狀態(tài)(或者Agent處于狀態(tài)s并且采取xingw行為a)到底有多好。比如下棋的時(shí)候我們會(huì)思考如果我們處于某個(gè)局面(Position)到底是好是壞,從而采取Action引導(dǎo)局面向這個(gè)好的局面發(fā)展或者避開(kāi)不好的局面。這里的“好”指的是在這個(gè)狀態(tài)下Agent獲得回報(bào)的期望值,當(dāng)然這個(gè)期望值是與Agent的策略(Policy)緊密相關(guān)的,因此價(jià)值函數(shù)指的是在某個(gè)策略下的價(jià)值函數(shù)。
回憶一下,策略π是一個(gè)從狀態(tài)s∈S, Action a∈A(s)到概率π(a|s)的映射。我們把狀態(tài)s時(shí)策略π的價(jià)值,也就是Agent處于狀態(tài)s,并且使用策略π,它所能得到的回報(bào)的期望值,定義為vπ(s)。它的形式化定義是:
這里Eπ[?]代表Agent使用策略π來(lái)采取行為時(shí)隨機(jī)變量的期望值。如果有終止?fàn)顟B(tài),我們定義其價(jià)值函數(shù)為零。我們把函數(shù)vπ叫做策略ππ的狀態(tài)價(jià)值函數(shù)(State Value Function)。
類似的我們可以定義qπ(s,a),在狀態(tài)s下采取Action a的價(jià)值,其形式化定義為:
我們把qπ叫做策略π的行為價(jià)值函數(shù)(Action Value Function)。
值函數(shù)vπ和qπ可以從經(jīng)驗(yàn)(Experience)中估計(jì)出來(lái)。比如我們可以這樣來(lái)估計(jì):如果一個(gè)Agent使用策略π模擬很多次,通過(guò)平均可以估計(jì)出一個(gè)值來(lái),如果模擬次數(shù)趨于無(wú)窮大,那么這種方法得到的估計(jì)值v^π(s)會(huì)收斂到真正的vπ(s))。這就是蒙特卡羅(Monte Carlo)方法,這個(gè)方法也可以用于qπ(s,a)的估計(jì)。如果狀態(tài)空間非常大,我們也可以假設(shè)vπ(s)或者qπ(s,a)是參數(shù)化的函數(shù)(模型)vπ(s;w)或者qπ(s,a;w),這就是近似的方法。我們可以用深度神經(jīng)網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)vπ(s;w)或者qπ(s,a;w),這就是所謂的深度強(qiáng)化學(xué)習(xí)(Deep Reinforcement Learning)。
值函數(shù)一個(gè)非常重要的特效是它滿足某種遞歸性,這在強(qiáng)化學(xué)習(xí)和動(dòng)態(tài)規(guī)劃會(huì)經(jīng)常用到。這個(gè)遞歸公式就是貝爾曼方程(Bellman Equation),希望讀者能夠理解并推導(dǎo)下面的公式(如果有些步驟不能推導(dǎo),也至少讀懂它在說(shuō)什么并能夠“認(rèn)可”這個(gè)等式,書(shū)讀百遍其義自見(jiàn),實(shí)在不理解多抄兩遍也會(huì)有幫助)。
我們?cè)賮?lái)看一下Bellman公式,它是遞歸定義的——vπ(s)是由vπ(s′)來(lái)定義的,對(duì)于有些簡(jiǎn)單問(wèn)題,我們可以根據(jù)這個(gè)公式把vπ通過(guò)解方程解出來(lái)。
我們結(jié)合上圖來(lái)分析上面公式的。當(dāng)前狀態(tài)是s,根據(jù)策略π,我們采取行為a的概率是π(a|s),而我們?cè)跔顟B(tài)a和行為s的條件下,環(huán)境反饋r和s’的概率是p(r,s′|s,a),所有可能的(a,r,s’)組合我們都要求和,所以就得到,在每一條路徑(每一種s,r,s’的組合)下Rt+1就是r,因此可以得到
。而在給定路徑的情況下,s,r,s′s,r,s′都固定了,因此s’也是固定的了,而根據(jù)馬爾科夫?qū)傩?,Gt+1Gt+1只與t+1時(shí)刻的狀態(tài)St+1=s′St+1=s′有關(guān),因此第二項(xiàng)變成了
最優(yōu)價(jià)值函數(shù)(Optimal Value Functions)
解決強(qiáng)化學(xué)習(xí)任務(wù),粗略來(lái)說(shuō),就是找到一個(gè)策略,使得長(zhǎng)期的reward盡可能多。首先我們定義什么是一個(gè)策略π比另外一個(gè)策略π‘好(或者一樣好),記作π≥π′。形式化的定義是π≥π′??s∈S,vπ(s)≥vπ′(s)。 可以證明(這里略過(guò))存在一個(gè)(可能有多個(gè))最優(yōu)的$\pi_,它比所有其它策略都“好”。最優(yōu)策略對(duì)于的價(jià)值函數(shù)叫做最優(yōu)價(jià)值函數(shù),記作v_(s)$:
同理對(duì)于行為也有一個(gè)最優(yōu)的行為價(jià)值函數(shù):
$q_(s,a)和和v_(s)$有如下關(guān)系:
我們可以這樣解讀這個(gè)公式:s和a確定后,它會(huì)進(jìn)入St+1狀態(tài)并得到Reward Rt+1,這是過(guò)程是有概率的,因此前面有一個(gè)期望E。但是這和Agent無(wú)關(guān),和Agent有關(guān)的是在t+1時(shí)刻的行為,如果要得到最優(yōu)的q(s,a),那么它必須在t+1時(shí)刻根據(jù)最優(yōu)策略π?來(lái)計(jì)算v(St+1),因此就是v?(St+1)。
需要注意:上面公式的隨機(jī)變量只是Rt+1Rt+1,它由環(huán)境p(r,s′|s,a)確定,而v?(s)和q?(s,a)是兩個(gè)常量(給定s,a的情況下)。
OpenAI Gym是一個(gè)用來(lái)開(kāi)發(fā)和比較強(qiáng)化學(xué)習(xí)算法的工具。它對(duì)Agent的實(shí)現(xiàn)沒(méi)有任何約束,因此你可以用TensorFlow或者其它任何工具來(lái)實(shí)現(xiàn)Agent。它提供統(tǒng)一的Environment的接口,你可以用這個(gè)接口來(lái)定義一個(gè)具體的強(qiáng)化學(xué)習(xí)任務(wù),此外它也提供很多常見(jiàn)的任務(wù),比如很多Atari的游戲。
首先我們介紹一個(gè)很簡(jiǎn)單的游戲CartPole-v0,如下圖所示。
圖:CartPole-v0運(yùn)行時(shí)的截圖
這個(gè)游戲有一個(gè)小車(chē),可以對(duì)車(chē)子施加+1或者-1的力(加速度),車(chē)上有一個(gè)桿子,我們的目標(biāo)是要求車(chē)子的位置在-2.4到2.4之間,并且桿子相對(duì)于垂直的角度在-15°和15°之間。如果從物理的角度來(lái)分析,它有4個(gè)狀態(tài)變量,車(chē)子的位置,車(chē)子的速度,桿的角度,桿的角速度。而我們施加的力會(huì)改變車(chē)子的速度,從而間接改變車(chē)子的位置。我們可以用幾行代碼運(yùn)行CartPole-v0這個(gè)游戲:
代碼很簡(jiǎn)單,首先創(chuàng)建一個(gè)CartPole-v0 Environment對(duì)象env,重置(reset)使環(huán)境進(jìn)入初始狀態(tài)。接著循環(huán)1000次,每次首先把當(dāng)前的游戲狀態(tài)繪制出來(lái)(render),然后隨機(jī)的選擇一個(gè)Action env.action_space.sample(),接著調(diào)用env.step函數(shù)真正的“執(zhí)行”這個(gè)Action。
觀察就是MDP里的狀態(tài)(State),Environment的step有4個(gè)返回值:
observation 一個(gè)對(duì)象,代表觀察,不同的環(huán)境返回的對(duì)象是不同的。
reward float類型 表示Reward。
done bool類型 表示任務(wù)是否結(jié)束。對(duì)于Episode類任務(wù)會(huì)有結(jié)束狀態(tài),進(jìn)入結(jié)束狀態(tài)后再調(diào)用step是沒(méi)有意義的,必須要先調(diào)用reset
info 調(diào)試用的一些信息
我們可以用如下代碼打印出其中的一些信息:
Spaces
Environment對(duì)象里有兩個(gè)空間(Space):狀態(tài)空間(State Space)和行為空間(Action Space),它們定義了所有可能的狀態(tài)和行為。我們可以查看一些CartPole-v0的Space:
從輸出可以看出,Discrete(2)表示這個(gè)任務(wù)有兩個(gè)選的Action(分布表示向左和向右移動(dòng)),Box(4,)表示狀態(tài)由4維向量表示,物理意義分別是車(chē)子相對(duì)原點(diǎn)的位置和速度,桿相對(duì)于垂直方向的角度和角速度。我們可以用如下的代碼檢查其取值范圍:
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。