iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0

在過去強化學習的專案裡面,如何制定一個環境與演算法的界面,是一個很重要的事情,也因為這種概念的普及,規範化後的邏輯應用,才能讓相同性質的應用能更好拓展與快速上手。Open Gym 過去就扮演這個角色,不過如今專案的維護也從原本的 gym 轉為 gymnasium,如果對過去有興趣可以參考過去文章→ Day_4 環境介紹-gym

介紹

第一步我們先來安裝套件

pip install gymnasium
pip install "gymnasium[all]"

在安裝 gymnasium[all] 的時候可能會遇到swig的問題,遇到的話就照電腦的作業系統,照著這篇,走相應的安裝指令就好。

我們來直接看 gymnasium 所提供了例子

import gymnasium as gym
env = gym.make("LunarLander-v2", render_mode="human")
observation, info = env.reset(seed=42)
for _ in range(1000):
   action = env.action_space.sample()  # this is where you would insert your policy
   observation, reward, terminated, truncated, info = env.step(action)

   if terminated or truncated:
      observation, info = env.reset()

env.close()

基本上跟過去的使用差不多,當然不太可能會大概,如果是可以也就不會延伸使用 gymnasium 這個名字了。

跟 gym 差異性主要有三個

  1. Done 改成 terminated, truncated
    前者是遊戲真正完成時候給的 done, 後者是超時,超過指定的步伐時給的 done,至於限制的步伐設置,可以用 gym.wrappers.TimeLimit 去設定。

  2. gym.get_action_meanings
    env 可以使用 get_action_meanings 方法,來獲得文字敘述,例如像可能原本 0 代表左邊, 1 代表右邊,該方法則會返回 [’left’, ‘right’] 但有些經典的遊戲沒有支援,像是 LunarLander

  3. rendor_mode

    以前是用 def render(self, mode="human") 的方法去控制,要用畫面看還是只返回rpg_array ,現在則是要在 gym的初始化設定這件事情,預設則為 render_mode=”rpg_array”

結語

初學者可能會有些空虛,覺得好像沒改什麼重大改變,我個人覺得穩定的東西,可能就沒更好的方法。換個說法應該是,的確強化學習的場景應該會需要更複雜的設定,所以 gym.wrappers 提供的方法都很強大且方便,所以最底層 base 的東西當然越簡單越好。

那筆者自己是覺得,第一點 Done 改成 terminated, truncated,蠻不錯的,雖然切出兩個變數反而有點冗贅,但我覺得已研究角度來講,究竟是完成,還是超時,這兩個差異超重要的,不過讀者可以先別管這麼多,就把它想成 done 的兩個版本就好。

參考

  1. Gymnasium
  2. 強化學習環境升級 - 從gym到Gymnasium

上一篇
Day6 Multi-agent architecture
下一篇
Day8 多智能體框架 pettingzoo
系列文
ㄟ唉廚房交響樂 多智能的煮飯秀30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言