iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0

Day9 當強化學習遇上gymnasium

前言

在前幾篇的文章中,介紹了強化學習(Reinforcement Learning, RL)的基本概念和原理,也有介紹了Q-Learning。強化學習是一種機器學習方法,透過代理人與環境的互動,學習如何在不同情況下採取最佳行動以最大化累積獎勵。這種方法已被廣泛應用於遊戲、機器人控制和自動駕駛等領域。

在了解了強化學習的基礎之後,我們預計在接下來的幾天打造一個簡單的強化學習,我們會利用一個強大且易於使用的工具 —— Gymnasium

所以這次我會介紹 Gymnasium 的功能和使用方法,並透過實例程式碼展示如何建立和操作一個強化學習環境。在未來的文章中,我們將進一步探討如何結合 Gymnasium 與 Q-learning,實現一個簡單但功能強大的強化學習代理人。

什麼是Gymnasium?? 健身房??

Gymnasium 是 OpenAI 開發的 Gym 庫的維護分支,它提供了豐富的強化學習環境,讓研究人員和開發者能夠輕鬆地測試和比較各種強化學習算法。

更詳細的資訊可以訪問他們的網站參考 Gymnasium

還記得前幾天的圖片嗎,在gymnasium與環境互動的關係圖就像是這樣
image

Gymnasium中的hello world

pip install gymnasium
import gymnasium as gym

# 創建 FrozenLake-v1 環境,並設置顯示模式為 "human"
env = gym.make("FrozenLake-v1", render_mode="human")

# 重置環境,並設定隨機種子
observation, info = env.reset(seed=42)

# 執行 1000 步的模擬
for _ in range(1000):
   # 這裡是插入你策略的地方,目前使用隨機動作
   action = env.action_space.sample()
   
   # 進行一步的模擬
   observation, reward, terminated, truncated, info = env.step(action)

   # 如果遊戲結束或截斷,重置環境
   if terminated or truncated:
      observation, info = env.reset()

# 關閉環境
env.close()
  1. 匯入模組:首先匯入 Gymnasium 模組。
  2. 建立環境:使用 gym.make 創建一個名為 "FrozenLake-v1" 的環境,並將 render_mode 設為 "human" 以便觀察環境的變化,下面介紹幾個常見的模式,並可以根據需求選擇合適的渲染模式,可以更好地理解和調試強化學習代理。
    • human
      • 此模式用於即時渲染環境,通常會彈出一個視窗顯示環境的圖形界面。這種模式適合用於在訓練過程中觀察代理的行為。
    • rgb_array
      • 返回一個包含環境當前狀態的 RGB 圖像數組。這種模式適合用於需要以非即時方式處理或保存環境圖像的情況。
    • ansi
      • 返回環境狀態的文字表示,通常用於像文字冒險遊戲或棋盤遊戲等環境。這種模式適合在命令行中運行,並需要文本輸出的情況。
      • 如果以當前的FrozenLake來舉例的話他會返回image
  3. 重置環境:使用 env.reset 重置環境,並設置隨機種子為 42 以確保結果可重現。
  4. 主迴圈:使用 for 迴圈執行 1000 步:
    • 使用 env.action_space.sample() 隨機選擇一個動作。

    • 使用 env.step(action) 進行一步模擬,返回新的觀察值、獎勵、是否終止、是否截斷及其他資訊。

    • 如果環境終止(terminated)或截斷(truncated),則重置環境。

  5. 關閉環境:最後,使用 env.close() 關閉環境以釋放資源。

將整個程式運行起來可以看到可愛的人在上面奔跑的畫面
image

FrozenLake介紹

FrozenLake 是一個經典的強化學習環境,通常用於測試和比較各種強化學習算法。這個環境模擬了一個冰凍的湖面,其中代理(Agent)需要從起點(Start)移動到目標(Goal),同時避免掉入洞穴(Holes)中。

  • 環境描述
    • 狀態空間:FrozenLake 是一個 4x4 或 8x8 的格子世界,每個格子代表一個狀態。每個格子用以下符號表示:
      • S: 起始格子
      • F: 冰凍格子,可以安全通行
      • H: 洞穴格子,踩到會掉下去,遊戲結束
      • G: 目標格子,遊戲的目標是到達這裡
    • 動作空間:代理可以向四個方向移動:上(Up)、下(Down)、左(Left)和右(Right)。
    • 獎勵:代理到達目標格子時會獲得 +1 的獎勵,掉入洞穴或走到其他格子則沒有獎勵(即獎勵為 0)。
  • 動作數值表示
    • 在 FrozenLake 環境中,動作的數值表示如下:

    • 0:向左移動(Left)

    • 1:向下移動(Down)

    • 2:向右移動(Right)

    • 3:向上移動(Up)

  • 在上面程式碼提供的env.step(action)模擬輸出可以看到
    • 將資料輸出可以看到下面這些資訊
    • Observation: 0
    • Reward: 0.0
    • Terminated: False
    • Truncated: False
    • Info: {'prob': 0.3333333333333333}

結語

今天的介紹就先簡單到這裡,明天開始就會開始將前面所學的與今天的模擬串在一起囉!!! 希望大家可以跟著我一起實作,一起學習!!


上一篇
[Day8] 探討強化學習的秘密 - 策略與價值
系列文
深度學習的學習之旅:從理論到實作9
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言