1. 程式人生 > >Gym小記(二)

Gym小記(二)

淺析Gym中的env

        近期在Gym上做有關強化學習的實驗,用的是OpenAI Gym環境,但是我對於其中的state、observation、action存在疑問,到底這些量都包含什麼呢?

        然後我就去官網的Forum上去找,雖然有人存在相同的疑問,卻沒有人給出回答,所以只能自己去看Github上的環境程式碼了。現在將對Pendulum-v0進行簡要分析,後面用到其他環境時將同樣會分享出來。


        上面這就是Github上的Pendulum的實現程式碼。

        首先,明確目標,我們想要知道Pendulum環境中的state、observation、action分別是什麼。我們現在帶著問題對程式碼進行分析,先來看看_get_obs()函式:

def _get_obs(self):
        theta, thetadot = self.state
        return np.array([np.cos(theta), np.sin(theta), thetadot])
        顯然,stata是Pendulum的角度和角速度,記為th和thdot,至於具體哪個角度我們將在後面進行分析。

        此外,同樣可以看出observation包括了cos(th)、sin(th)、thdot三個量。

        上面這二者的定義很符合我們在強化學習中學到的知識,state是最原始的環境內部的表示,observation則是state的函式。比如說,我們所看見的東西並不一定就是它們在世界中的真實狀態,而是經過我們的大腦加工過的資訊。

        緊接著,我們找到了如下語句:

self.action_space = spaces.Box(low=-self.max_torque, high=self.max_torque, shape=(1,))
        這是action的定義,對於Pendulum問題來說,action space只有一個維度,就是電機的控制力矩,且有最大值和最小值的限制。

        到此為止,我們最初的三個疑問便解決了。那獎勵呢?獎勵是怎麼計算的?

        我們找到如下程式碼:

costs = angle_normalize(th)**2 + .1*thdot**2 + .001*(u**2)
        這是代價,而最後_step()函式返回的是:
return self._get_obs(), -costs, False, {}
        也即reward=-costs,所以我們對costs進行分析就可以了。上面return中的done值得注意,一直傳的都是False,所以這個問題沒有所謂的解決一說。

        costs包含三項,一是angle_normalize(th)**2,二是.1*thdot**2,三是.001*(u**2)。第一項我們後面分析;第二項表示對於角速度的懲罰,畢竟如果我們在到達目標位置(豎直)之後,如果還有較大的速度的話,就越過去了;第三項是對於輸入力矩的懲罰,我們所使用的力矩越大,懲罰越大,畢竟力矩×角速度=功率,還是小點的好。

        最後,我們對angle_normalize(th)**2進行分析,顯然,這是對於當前倒立擺與目標位置的角度差的懲罰,那到底th表示哪個角度呢?

        對於angle_normalize()函式分析如下:

def angle_normalize(x):
        return (((x+np.pi) % (2*np.pi)) - np.pi)
        我們先對(x+pi)%(2*pi)-pi進行分析,帶入幾個角度,比如x=pi/4,return=pi/4;x=3*pi/4,return=3*pi/4;x=5*pi/4,return=-3*pi/4。這樣我們就可以繪圖如下:


        這就是我們的th,至此,我們的分析就告一段落啦~

        對了,我們可以通過下面的程式碼對於observation、action的維度進行驗證:

print env.observation_space
print env.action_space
        輸出如下:

       

        嗯,和我們上面的分析一致,OK。

        再囉嗦一下,裡面對於torque、th和thdot都是有限制的:

self.max_speed=8
self.max_torque=2.
high = np.array([1., 1., self.max_speed])
self.action_space = spaces.Box(low=-self.max_torque, high=self.max_torque, shape=(1,))
self.observation_space = spaces.Box(low=-high, high=high)

        cos和sin都是大於-1小於1,thdot大於-8小於8,torque大於-2小於2,至於單位我們就不用考慮咯。

        對了,我們通常使智慧體進行學習時,通常會設定episode的數量以及每一個episode中step的數量,值得注意的是,在gym中,絕大多數環境預設的max_episode_steps=200,也就是說對於一些環境的step函式永遠不會返回一個True的done而言,最多也就跑200個step:


        當然,對於這裡的Pendulum也是一樣,在200個step之後,就會將done設為True,雖然class PendulumEnv中沒有將done設為True:


        關於Pendulum我們就分析到這裡了,下一個環境再見~

相關推薦

Gym小記

淺析Gym中的env         近期在Gym上做有關強化學習的實驗,用的是OpenAI Gym環境,但是我對於其中的state、observation、action存在疑問,到底這些量都包含什麼呢?         然後我就去官網的Forum上去找,雖然有人存在相同的

利用tensorflow實現簡單的卷積神經網路——遷移學習小記

一、什麼是神經網路(CNN)     卷積神經網路(Convolutional Neural Network,簡稱CNN),是一種前饋神經網路,人工神經元可以影響周圍單元,可以進行大型影象處理。卷積神經網路包括卷積層和池化層。卷積神經網路是受到生物思考方式的啟發的MLPs(多

Android學習小記UI (開發工具:Android Studio)

                                                                   UI一、  Android中常用控制元件的使用方法1.    TextViewTextView常用指定程式碼如下所示:1、android:te

Gym小記

Gym wrappers(補)         本文我們介紹如何用Gym wrappers對我們的環境進行包裝,從而將訓練過程中的資料以及視訊儲存下來,我們僅僅介紹簡單的使用,複雜的使用我暫時還用不到......         直接上程式碼: import gym fr

Gym小記

試用gym wrappers         gym wrappers用於將環境進行打包,我們可以使用這個模組來記錄自己的演算法在環境中的表現,並拍攝自己演算法學習的視訊,示例如下: import gym from gym import wrappers env=gym.

Gym小記

Gym Box2D         Gym為我們提供了各種各樣的環境,其中對我最有用的是MuJoCo,但是這個要收費......         所以,我就只能去用Box2D環境了,畢竟免費~現在對Gym Box2D環境進行一些簡單的說明。         首先,我們來了解

ORM常用字段小記

mst 創建 () 字段類型 path com 小數 有用 primary 常用字段類型: AutoField:字段自增,多用於ID主鍵字段,每個表中只能有一個AutoField字段類型。 id = models.AutoField(primary_key=True

mybatis強化Parameters和Result

pan har java onf 關系 throws efault type throw 本文通過一個簡單例子簡單記錄下參數的映射。轉載註明出處:http://www.cnblogs.com/wdfwolf3/p/6804243.html,謝謝。文件目錄如下, 1.配置文

Python 接口測試

expect type version not found 指定 刷新 created 進行 拷貝 三:http狀態碼含義(來源於w3school): 狀態碼: 1xx: 信息 消息: 描述: 100 Continue 服務器僅接收到部分請求,但是一旦

Struts2框架 Web.xml, Struts.xml, Action.Java 基本配置

str web.xml images ava img ima blog XML ges Struts2框架(二) Web.xml, Struts.xml, Action.Java 基本配置

利用css3的animation實現點點點loading動畫效果

設置 str ack rdp 提交 ssi frame spin color box-shadow實現的打點效果 簡介 box-shadow理論上可以生成任意的圖形效果,當然也就可以實現點點點的loading效果了。 實現原理 html代碼,首先需要寫如下html代

學習《第一行代碼》使用實機測試所遇問題

make 代碼 出現 onf msu field menus action java代碼 實機使用酷派大神F1,添加menu後,右上角不出現菜單,此時在java代碼中加入以下方法在onCreate中運行 private void makeActionOverflowMenu

python的列表

數字0 linux play 字符串 pytho head 生成 index color 1、遍歷整個列表 #for 循環 # >>> name_list[‘faker‘, ‘dopa‘, ‘gogoing‘, ‘uzi‘] >>>

JAVA學習第十九課java程序的異常處理

num 函數 錯誤 style col 編譯失敗 return [] java 異常處理的捕捉形式: 這是能夠對異常進行針對性處理的方式 六、try、catch的理解 詳細格式: try { //須要被檢測異常的代碼 } catch(異常類 變量)//改變量用

遠程協助開發總結

控制 amp 為什麽不能 username 開發 col dsc exce nec 遠程協助開發的過程中繼續總結 針對開發總結一的問題,改正了一些地方 1.圖像和命令采用兩個套接字,為什麽不能采用一個套接字?遠程協助是快頻的通信,圖像需要不間斷的從受控端發送到控制端,發送接

Java內存模型——重排序

序列 依賴性 種類 如果 禁止 加載 runtime 屬於 style 一、重排序   重排序是指為了提高程序的執行效率,編譯器和處理器常常會對語句的執行順序或者指令的執行順序進行重排。 編譯器優化的重排序:編譯器在不改變單線程程序語義的前提下,可以重新安排語句的執行順序

java.util包詳解——Connection接口

操作 相同 元素 叠代 cat roo soft true nbsp Connection接口介紹   Connection接口是java集合的root接口,沒有實現類,只有子接口和實現子接口的各種容器。主要用來表示java集合這一大的抽象概念。   Connection接

沖刺階段

什麽 開始 bsp 初步 感覺 困難 用戶登陸 問題 代碼 昨天做了什麽: 制作關於老師用戶登陸的網站界面,初步制定了功能。 今天要做什麽: 開始寫界面的代碼,設計界面和功能的初步代碼。 遇到什麽困難: 對於界面設計問題不大,主要是

mysql進階之細談索引、分頁與慢日誌

連表 組合索引 rar 偏移量 最小值 num glob 要求 for 索引 1、數據庫索引   數據庫索引是一種數據結構,可以以額外的寫入和存儲空間為代價來提高數據庫表上的數據檢索操作的速度,以維護索引數據結構。索引用於快速定位數據,而無需在每次訪問數據庫表時搜索數據

一篇文章快速了解 量子計算機 精心整理

難題 表示 學技術 公司 如何實現 lan 文章 區分 核心 好了,下面轉入量子計算機的總結: 有趣的量子理論 量子論的一些基本論點顯得並不“玄乎”,但它的推論顯得很“玄”。我們假設一個“量子”距離也就是最小距離的兩個端點A和B。按照量子論,物體從A不經過A和B中的