馬可夫決策程序

使用 Python 的 Gymnasium 進行強化學習

Fouad Trad

Machine Learning Engineer

MDP

  • 以數學方式建模 RL 環境

顯示複雜環境(智慧城市)以及需從中擷取的組件:狀態、動作、回饋與轉移機率。

使用 Python 的 Gymnasium 進行強化學習

MDP

  • 以數學方式建模 RL 環境

圖示說明如何從複雜環境中擷取 MDP 組件(狀態、動作、回饋與轉移機率),以模型式 RL 技術解題。

使用 Python 的 Gymnasium 進行強化學習

馬可夫性質

  • 未來狀態只取決於「當前狀態」與「動作」

顯示西洋棋盤與可能移動方向的箭頭。

使用 Python 的 Gymnasium 進行強化學習

Frozen Lake 作為 MDP

  • 代理需到達目標且避免掉進洞中

Frozen Lake 環境示意圖。

使用 Python 的 Gymnasium 進行強化學習

Frozen Lake 作為 MDP-狀態

  • 代理可處於的位置

顯示代理在 Frozen Lake 環境中三個不同位置。

使用 Python 的 Gymnasium 進行強化學習

Frozen Lake 作為 MDP-終止狀態

  • 導致回合終止

顯示 Frozen Lake 環境中的終止狀態。

使用 Python 的 Gymnasium 進行強化學習

Frozen Lake 作為 MDP-動作

  • 上、下、左、右

顯示 Frozen Lake 中可執行的動作及其標籤:0-left、1-down、2-right、3-up。

使用 Python 的 Gymnasium 進行強化學習

Frozen Lake 作為 MDP-轉移

  • 動作不一定產生預期結果

顯示代理位於冰湖網格左上角並打算往右移動。

使用 Python 的 Gymnasium 進行強化學習

Frozen Lake 作為 MDP-轉移

  • 動作不一定產生預期結果

顯示代理可以向右移動。

使用 Python 的 Gymnasium 進行強化學習

Frozen Lake 作為 MDP-轉移

  • 動作不一定產生預期結果

顯示代理也可能向下移動。

使用 Python 的 Gymnasium 進行強化學習

Frozen Lake 作為 MDP-轉移

  • 動作不一定產生預期結果

顯示代理也可能停在原地。

使用 Python 的 Gymnasium 進行強化學習

Frozen Lake 作為 MDP-轉移

  • 動作不一定產生預期結果

顯示當代理決定往右移時,可能往右、往下,或停在原地,且各有機率。

  • 轉移機率:在給定狀態與動作下到達某狀態的機率
使用 Python 的 Gymnasium 進行強化學習

Frozen Lake 作為 MDP-回饋

  • 只有在目標狀態給予回饋

顯示代理位於目標狀態。

使用 Python 的 Gymnasium 進行強化學習

Gymnasium 的狀態與動作

import gymnasium as gym


env = gym.make('FrozenLake', is_slippery=True)
print(env.action_space)
print(env.observation_space)
print("Number of actions: ", env.action_space.n)
print("Number of states: ", env.observation_space.n)
Discrete(4)

Discrete(16)
Number of actions: 4
Number of states: 16
使用 Python 的 Gymnasium 進行強化學習

Gymnasium 的回饋與轉移

env.unwrapped.P:鍵為狀態-動作對的字典

print(env.unwrapped.P[state][action])
[
  (probability_1, next_state_1, reward_1, is_terminal_1), 
  (probability_2, next_state_2, reward_2, is_terminal_2), 
  etc.
]
使用 Python 的 Gymnasium 進行強化學習

Gymnasium 的回饋與轉移-範例

state = 6
action = 0

print(env.unwrapped.P[state][action])
[(0.3333333333333333, 2, 0.0, False), 
(0.3333333333333333, 5, 0.0, True), 
(0.3333333333333333, 10, 0.0, False)]

顯示動作編號:0-left、1-down、2-right、3-up。

顯示代理位於狀態 6,狀態由左上到右下逐行編號。

使用 Python 的 Gymnasium 進行強化學習

一起來練習吧!

使用 Python 的 Gymnasium 進行強化學習

Preparing Video For Download...