官术网_书友最值得收藏!

3.2.2 Gym的經典控制環境

Gym內部有很多強化學習環境,同時在網絡上也可以找到人們為了特定強化學習任務編寫的很多環境。在這些強化學習環境中,用得比較多的一個強化學習環境是所謂的經典控制(Classic Control)環境。這些環境代表一系列的二維空間中的簡單強化學習控制任務,由于環境的簡單性,可以很容易被用于測試強化學習算法。

下面用最簡單的車桿模型(CartPole)來演示一下如何使用這個經典控制環境。車桿模型的一個例子如圖3.5所示。在圖中可以觀察到有一個黑色的滑塊(代表一輛小車),這個滑塊上有一個長桿,長桿的一個端點固定在車上,另外一個端點則能自由移動。在整個強化學習環境中,小車能夠在一個平面上左右自由移動(每一步只能選擇向左或者向右移動),而長桿的一端由于固定在車上會隨著小車的移動而移動。另外,長桿的另一端會因為重力的緣故而下落。整個智能體的強化學習目標是盡可能讓長桿保持向上,如果維持在這個狀態(長桿與垂直方向的夾角在15°以內),長桿會一直獲取+1的獎勵。當長桿和垂直方向的夾角超出一定的角度(即前面所述的15°),或者當小車的位置和中心位置相距在2.4個單位以外的時候,整個強化學習環境將會轉入終止狀態。

綜上所述,作為強化學習的智能體,應該每次做出向左或者向右移動一步的決策,從而保持長桿和垂直方向夾角小于前述角度,并且跟中心的距離不超過前述的限制。

圖3.5 車桿模型控制環境示意圖

OpenAI Gym可以通過類似于3.2.1節中介紹的函數接口來模擬車桿模型的控制環境。代碼3.4演示了如何使用這些函數接口。

代碼3.4 車桿模型控制環境演示代碼。

在代碼3.4中,首先根據名字'CartPole-v0'創建了一個控制環境。OpenAI Gym框架里的每個強化學習環境都有自己的名字,讀者可以從官方的文檔獲取強化學習環境的名字,并且根據名字調用make函數來創建強化學習環境。有了具體的強化學習環境后,可以根據在代碼3.3中說明的強化學習環境的使用方法,使用20個片段(Episode)的采樣,在每次片段采樣開始的時候,首先需要調用reset方法來重置強化學習環境,獲取初始的觀測狀態obs。對于車桿模型來說,強化學習環境的觀測狀態是一個Python數組,其中的四個值分別代表小車的位置、小車的速度、長桿的速度和長桿的角速度。在實際的算法中,可以使用這四個值作為深度強化學習算法的輸入,也可以直接用render方法輸出的圖像(見文件ex_3_3.py中獲取車桿模型當前圖像的示例)來作為深度強化學習算法的輸入,算法的輸出可以是當前狀態的價值(價值網絡),或者當前狀態對應的動作(策略網絡)。

接下來通過一個循環獲取單次采樣的軌跡(Trajectory),這里限制每一次采樣的決策最多100步,多于這個步數則重新開始一個新的片段進行采樣。在每一步開始之前,需要一個動作action來決定下一步的走向。可以簡單地使用action_space變量的sample方法來獲取一個隨機的動作,也可以由前面所述的價值網絡和策略網絡,根據當前的強化學習環境狀態來獲取下一步動作。

然后使用隨機采樣的方法從動作空間中采樣一個動作(對于車桿控制模型,這個值應該是0或者1,分別代表讓小車向左或者向右移動)。另外,在訓練過程中還需要的一個變量是決策的每一步得到的獎勵,這里用reward變量來獲取對應的獎勵,done變量則如前面所述代表強化學習環境是否處于終止狀態。最后的info變量用于調試,在車桿模型控制環境中為空字典。

車桿模型是一個典型的離散動作空間的控制模型,在OpenAI Gym中還有一些連續動作空間的控制環境,比如單擺環境,可以使用名字'Pendulum-v0'來創建這個環境。讀者可以在文件ex_3_4.py中找到對應的代碼。這個強化學習環境和車桿模型控制環境的區別在于,當我們使用action_space.sample方法的時候,采樣的動作是一個連續的介于-2.0到+2.0之間的一個數(具體代表的是作用在這個單擺上的力矩),對應的觀測狀態是角度的正弦值、余弦值和對應的角速度(角度相對于時間的變化率,類比于車桿模型中的速度)。另外,強化學習的獎勵也發生了改變,從源代碼可以看出,強化學習的目標是讓單擺擺得盡可能高,同時對應的角速度的平方和力矩的平方盡可能小。我們會在后續的算法環節中看到對于連續的動作空間,經典的基于離散的價值網絡的方法如DQN等因為對于連續的動作空間不再適用,需要使用策略網絡或者其他算法(如DPG)來解決問題。

主站蜘蛛池模板: 奇台县| 钦州市| 昂仁县| 扬中市| 晋州市| 峨边| 韩城市| 南部县| 蒙山县| 赫章县| 修水县| 台东市| 昌宁县| 依兰县| 洛隆县| 威宁| 寿光市| 云和县| 宁南县| 友谊县| 新郑市| 兰考县| 福泉市| 延寿县| 益阳市| 西城区| 铁力市| 余江县| 曲阜市| 定边县| 新闻| 湖州市| 偃师市| 广平县| 阜新| 富宁县| 伊通| 宕昌县| 堆龙德庆县| 枞阳县| 杨浦区|