昨天介紹了強化學習,我們發現強化學習需要一個環境(environment)才能運作,那我們要去哪裡創造環境呢,欸剛好有一個開源的模組Open AI Gym,而Open AI Gym是甚麼呢?那這邊就不賣關子,直接介紹吧。Open AI Gym是由Open AI開發的開源函式庫,是一個可以提供多種預設環境來讓使用者練習跑RL的模組。也可以根據需求來自己創造環境。強化學習昨天有不專業的介紹過了。今天就來介紹強化學習的核心,也就是環境,我的流程是會先寫出大致的環境,然後直接使用演算法訓練,再慢慢去做調整~因為我也才剛踏入這個領域,所以環境建立上可能會出現蠻多bug要慢慢調整的orz。模組當中有許多處理環境用的方法等,讓我們可以專注在調整演算法等其他事情上,或者專注調整自定義環境的細節。
模組的安裝非常簡單,只需要使用pip install gym
就好了喔,接著import gym
就可以使用了,非常淺顯易懂。
這個網頁為gym的官方首頁,進入後可以看到一艘太空船正在著陸(如上圖),不過樣子有點慘,不但無法準確登錄到著陸點,著陸時也常常墜毀,但這就是強化學習的過程,從慘不忍睹成長羽化到得心應手,首頁底下也有一段code(這段程式碼還不夠完整,直接跑會有error):
import gym
env = gym.make("LunarLander-v2")
observation, info = env.reset(seed=42, return_info=True)
for _ in range(1000):
env.render()
action = policy(observation) # User-defined policy function
observation, reward, done, info = env.step(action)
if done:
observation, info = env.reset(return_info=True)
env.close()
我們可以看到環境建立需要使用gym.make
然後裡面的參數是環境的編號,其他環境的編號可以至官網查看,未來也會教如何將自己的環境註冊到gym上面。
接下來就是要呼叫環境的reset方法,他可以將環境初始化並且回傳當前的狀態,之後進入迴圈,迴圈主要內容就是用render方法來渲染環境,並且透過強化學習演算法來生成action,那個policy(observation)
事實上指的就是將狀態餵給神經網路並且得到action,不過policy是要自己另外定義的,並非gym內建的方法,演算法會交給stable baselines3來建立。得到action後就要去執行這次的action了,我們會使用step方法來與環境進行交互,接下來會得到本次行動的狀態、reward,然後done是判斷是否因為任務成功或者失敗而要執行初始化環境的布林值,可看到有一個判斷式是當任務成功或失敗後需要再次呼叫reset方法來初始化環境。最後info是本次行動的一些記錄,資料型態為dict,可以把一些回傳值整合成dict的樣式回傳,不過我看了很多人編寫環境似乎都沒什麼使用他,大多都直接print出來。不過這點倒是沒有強制規定,各有優劣。
說了那麼多,到底要如何開發環境呢?事實上環境種類多元,最簡單的是直接在python互動式窗上透過文字來進行交互等,我也使用過tkinter製作圖形使用者介面來訓練打磚塊遊戲等(當然pygame也可以),不過如果要訓練機器人的話,那當然是帶有物理引擎的虛擬環境為首選啦,所以在這邊我使用pybullet去建立虛擬環境,關於pybullet我們就留到明天介紹吧,同時也會稍微深入地講解gym的一些設定。
今天也是稍微介紹了Open AI gym的一些內容,不知道各位有沒有對這個開源函式庫有更多的認識呢?明天會介紹gym在設定環境,動作空間(action space)與觀察空間(observation space)的一些方法,這些方法雖然簡單但不可或缺。這兩天都是文字介紹,看起來有點空蕩蕩的(太容易詞窮但又不想寫太多廢話)。那麼明天見!