昨天介紹了gym中的一些方法,今天就來看看這些方法構建出的環境吧!gym中的環境,怎麼說呢,真的是五花八門阿,也是拜這些環境所賜,許多強化學習的演算法被拿來使用,也產生出了許多演算法。我第一眼看到這些環境就像中了無量空處一樣。那這些環境該如何拿來測試呢,下面就讓我來向各位介紹吧。
以下有蠻多環境都很適合初學者去跑跑看,如果你是自己建立強化學習的模型就可以用看看以下環境來測試模型,但因為這30天我打算用現成的模組來負責強化學習的部分,所以就給各位參考看看了。gym預設環境真的非常多,官方文檔也有所有環境的預覽。可以點開這個網址,看看左下角中environment有很多分類。
可以看到環境種類真的非常多,通常Classic Control中的環境比較常拿來給強化學習初學者的環境作使用。
今天我想以模擬太空梭降落的環境來當範例,這個環境也是兩天前介紹gym中在官方文檔首頁看到的,今天就要來看看如何呼叫跟測試這個環境啦。
文檔中有明確的說Action Space為Discrete(4)
。基本上此文檔寫得很詳細,如何使用環境以及環境的動作、觀察空間都講得很清楚,各位可以在官方文檔找找看自己喜歡的環境去研究看看。
另外如果想了解Discrete(4)
分別代表甚麼的話,文檔有說明這四個離散空間分別代表甚麼都不動、發動左邊引擎、發動中間引擎、發動右邊引擎。
此環境的觀察空間為一個長度為8的陣列,內容包括太空梭的x、y座標,x、y方向的速度,太空梭的角度以及角速度,最後是用來表示他的兩隻腳是否藉觸到地面的二元數。
獎勵方式計算簡單來說為移動到旗子中間並停下來的獎勵約為100~140分。但如果太空梭離開這個地方,它就會失去此獎勵分數。如果太空梭墜毀,它會 -100 分。如果有停下來會再+100 分。另外每條與地面接觸到的腳+10分。啟動中間引擎是每次-0.3分。啟動左右引擎是每次-0.03分 。達到200分以上時任務就算完成。
初始狀態為太空梭從視窗頂部中心開始,向其質心施加一個隨機的初始力。
知道了環境的基本設定之後我們就可以先以完全隨機的方式先送action進去看看。
import gym
env = gym.make("LunarLander-v2" )
env.reset()
action=gym.spaces.Discrete(4)
for i in range(1000):
obs,reward,done,info = env.step(action.sample())
if done:
env.reset()
env.render()
我們首先跑跑看這個code,在跑這個程式之前,我們要先pip install pygame
、pip install Box2D
跟pip install pyglet
,這兩個是這個env.render()
會使用到的模組,即讓我們看的到太空梭墜毀,阿不是啦哈哈,看到太空梭降落。這個部分可能會有一些error,每個人環境設定不一樣,所以可以直接把錯誤訊息貼到瀏覽器看看有沒有遇過相同錯誤的人,以及他們的解決辦法。
在強化學習中這絕對是經典中的經典。通常有使用過gym的人都不會不知道這個環境。看到官方文檔的說明,這環境是一個只控制下圖黑色部分往左或者往右,然後要使上方木棒保持平衡的環境。
這個環境的動作空間為Discrete(2)
,就是控制黑色台車往左或者往右。
觀察空間為長度4的陣列,代表位置、速度、木棒腳渡根木棒角速度。
獎勵是當木棒有保持直立的話就不斷+1分,直到達成任務。
起始狀態為會為所有觀測值都分配一個統一的-0.05~0.05的隨機值。
如果木棒角度≥正負12度的話就算失敗,行動次數>500次跟台車跑到視窗外也會reset環境。
介紹完環境後,一樣我們也可以來試玩看看。
import gym
env = gym.make('CartPole-v1')
env.reset()
action=gym.spaces.Discrete(2)
for i in range(1000):
obs,reward,done,info = env.step(action.sample())
if done:
env.reset()
env.render()
不過好像很容易就失敗了,不過這是尚未啟蒙的狀態,之後會好好訓練它的…
今天向各位介紹了常用的環境,不過gym模組內環境真的很多,多到說不完。如果是剛踏入這個領域的可以去玩玩看Classic Control中的環境,網路上應該也有很多介紹這些環境的,這些環境在視覺化通常都仰賴使用pygame來進行(因為是2D的)。不過我們的專案會在3D空間中進行模擬,所以我們會使用到的模組為pybullet,這是一個帶有物理引擎的模擬器,可以模擬機器人在環境中的動作等。具體就留給明天介紹吧!
https://www.gymlibrary.dev/environments/box2d/lunar_lander/
https://www.gymlibrary.dev/environments/classic_control/cart_pole/