iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
自我挑戰組

高中生也可以!利用強化學習讓機器人動起來!系列 第 9

D9:強化學習入門!Open AI Gym介紹

  • 分享至 

  • xImage
  •  

昨天介紹了強化學習,我們發現強化學習需要一個環境(environment)才能運作,那我們要去哪裡創造環境呢,欸剛好有一個開源的模組Open AI Gym,而Open AI Gym是甚麼呢?那這邊就不賣關子,直接介紹吧。Open AI Gym是由Open AI開發的開源函式庫,是一個可以提供多種預設環境來讓使用者練習跑RL的模組。也可以根據需求來自己創造環境。強化學習昨天有不專業的介紹過了。今天就來介紹強化學習的核心,也就是環境,我的流程是會先寫出大致的環境,然後直接使用演算法訓練,再慢慢去做調整~因為我也才剛踏入這個領域,所以環境建立上可能會出現蠻多bug要慢慢調整的orz。模組當中有許多處理環境用的方法等,讓我們可以專注在調整演算法等其他事情上,或者專注調整自定義環境的細節。

模組下載

模組的安裝非常簡單,只需要使用pip install gym就好了喔,接著import gym就可以使用了,非常淺顯易懂。

基本介紹

Gym Documentation

d9-1.gif

這個網頁為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)的一些方法,這些方法雖然簡單但不可或缺。這兩天都是文字介紹,看起來有點空蕩蕩的(太容易詞窮但又不想寫太多廢話)。那麼明天見!


上一篇
D8:強化學習介紹
下一篇
D10:Open Ai Gym 基本API介紹
系列文
高中生也可以!利用強化學習讓機器人動起來!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言