策略與狀態價值函式

使用 Python 的 Gymnasium 進行強化學習

Fouad Trad

Machine Learning Engineer

策略(Policies)

  • RL 目標 → 設計有效策略
  • 在每個狀態選擇動作以最大化總回饋

顯示大型路線圖的圖片。

使用 Python 的 Gymnasium 進行強化學習

格子世界範例

  • 代理人要拿到鑽石並避開山脈
  • 共九個狀態
  • 決定性移動

action_numbers_green.png

顯示 9 格網格環境,其中 2 格為山脈、1 格為鑽石的圖片。

使用 Python 的 Gymnasium 進行強化學習

格子世界範例-獎勵

  • 依狀態給定:
    • 鑽石:+10

顯示從相鄰格移動到鑽石可得到 +10 獎勵的圖片。

使用 Python 的 Gymnasium 進行強化學習

格子世界範例-獎勵

  • 依狀態給定:
    • 鑽石:+10
    • 山脈:-2

顯示導向山脈的動作會得到 -2 獎勵的圖片。

使用 Python 的 Gymnasium 進行強化學習

格子世界範例-獎勵

  • 依狀態給定:
    • 鑽石:+10
    • 山脈:-2
    • 其他狀態:-1

顯示其他任何移動得到 -1 獎勵的圖片。

使用 Python 的 Gymnasium 進行強化學習

格子世界範例:策略

# 0: left, 1: down, 2: right, 3: up
policy = {
    0:1, 1:2, 2:1, 
    3:1, 4:3, 5:1,
    6:2, 7:3
}

state, info = env.reset() terminated = False while not terminated: action = policy[state] state, reward, terminated, _, _ = env.step(action)

以箭頭表示各狀態間移動的策略圖片。

使用 Python 的 Gymnasium 進行強化學習

狀態價值函式

  • 估計狀態的價值
  • 從某狀態出發、遵循策略的期望回報

顯示狀態價值函式為從狀態 s 出發、依策略的折扣回報公式的圖片。

使用 Python 的 Gymnasium 進行強化學習

格子世界範例:狀態價值

以箭頭表示各狀態間移動的策略圖片。

  • 九個狀態 → 九個狀態價值
  • 折扣因子:$\gamma = 1$
使用 Python 的 Gymnasium 進行強化學習

目標狀態的價值

代理人在目標狀態的圖片。

  • 從目標狀態開始,代理人不移動
  • $V(goal \, state) = 0$

顯示目標狀態的價值為 0 的圖片

使用 Python 的 Gymnasium 進行強化學習

狀態 5 的價值

代理人在狀態 5 的圖片。

  • 從 5 出發,代理人移動到目標
  • $V(5) = 10$

顯示狀態 5 的價值為 10 的圖片

使用 Python 的 Gymnasium 進行強化學習

狀態 2 的價值

代理人在狀態 2 的圖片。

  • 從 2 出發的獎勵:$-1, 10$
  • $ V(2) = (1 \times -1) + (1 \times 10) = 9$

顯示狀態 2 的價值為 9 的圖片。

使用 Python 的 Gymnasium 進行強化學習

全部狀態價值

顯示此環境 9 個狀態的所有狀態價值的圖片。

使用 Python 的 Gymnasium 進行強化學習

Bellman 方程式

  • 遞迴公式
  • 用來計算狀態價值

顯示 Bellman 方程式:當前狀態即時獎勵加上下一狀態折扣價值的圖片。

使用 Python 的 Gymnasium 進行強化學習

計算狀態價值

def compute_state_value(state):

if state == terminal_state: return 0
action = policy[state]
_, next_state, reward, _ = env.unwrapped.P[state][action][0]
return reward + gamma * compute_state_value(next_state)

顯示 Bellman 方程式:當前狀態即時獎勵加上下一狀態折扣價值的圖片。

使用 Python 的 Gymnasium 進行強化學習

計算狀態價值

terminal_state = 8
gamma = 1

V = {state: compute_state_value(state) for state in range(num_states)}
print(V)
{0: 1, 1: 8, 2: 9, 
 3: 2, 4: 7, 5: 10, 
 6: 3, 7: 5, 8: 0}

顯示此環境 9 個狀態的所有狀態價值的圖片。

使用 Python 的 Gymnasium 進行強化學習

改變策略

# 0: left, 1: down, 2: right, 3: up
policy_two = {
    0:2, 1:2, 2:1,
    3:2, 4:2, 5:1,
    6:2, 7:2
}

V_2 = {state: compute_state_value(state) for state in range(num_states)} print(V_2)

以箭頭表示各狀態間移動的策略圖片。

使用 Python 的 Gymnasium 進行強化學習

比較策略

策略 1 的狀態價值

{0: 1, 1: 8, 2: 9, 
 3: 2, 4: 7, 5: 10, 
 6: 3, 7: 5, 8: 0}

顯示策略 1 的狀態價值圖片。

策略 2 的狀態價值

{0: 7, 1: 8, 2: 9, 
 3: 7, 4: 9, 5: 10, 
 6: 8, 7: 10, 8: 0}

顯示策略 2 的狀態價值圖片。

使用 Python 的 Gymnasium 進行強化學習

一起來練習吧!

使用 Python 的 Gymnasium 進行強化學習

Preparing Video For Download...