Expected SARSA

使用 Python 的 Gymnasium 進行強化學習

Fouad Trad

Machine Learning Engineer

Expected SARSA

  • TD 方法
  • 無模型技術
  • 更新 Q-table 的方式不同於 SARSA 與 Q-learning

示意圖:Expected SARSA 的流程,包括初始化 Q-table、選擇動作、從環境獲得回饋、並更新表格。智能體持續重複直到經過若干回合後收斂。

使用 Python 的 Gymnasium 進行強化學習

Expected SARSA 更新

SARSA

顯示 SARSA 更新規則的數學公式。

Q-learning

顯示 Q-learning 更新規則的數學公式。

Expected SARSA

顯示 Expected SARSA 更新規則的數學公式。

使用 Python 的 Gymnasium 進行強化學習

下一狀態的期望值

顯示 Expected SARSA 更新規則的數學公式。

  • 考慮所有動作

顯示下一狀態期望 Q 值的數學公式。

  • 隨機選動作 → 機率相等

顯示在動作等機率隨機選擇時,下一狀態期望 Q 值的數學公式。

使用 Python 的 Gymnasium 進行強化學習

以 Frozen Lake 實作

env = gym.make('FrozenLake-v1', 
               is_slippery=False)

num_states = env.observation_space.n
num_actions = env.action_space.n
Q = np.zeros((num_states, num_actions))

gamma = 0.99 alpha = 0.1 num_episodes = 1000

Frozen Lake 環境示意圖

使用 Python 的 Gymnasium 進行強化學習

Expected SARSA 更新規則

def update_q_table(state, action, next_state, reward):

expected_q = np.mean(Q[next_state])
Q[state, action] = (1-alpha) * Q[state, action] + alpha * (reward + gamma * expected_q)

顯示 Expected SARSA 更新規則的數學公式。

使用 Python 的 Gymnasium 進行強化學習

訓練

for i in range(num_episodes):
    state, info = env.reset()    
    terminated = False  

while not terminated: action = env.action_space.sample()
next_state, reward, terminated, truncated, info = env.step(action)
update_q_table(state, action, next_state, reward) state = next_state
使用 Python 的 Gymnasium 進行強化學習

智能體的策略

policy = {state: np.argmax(Q[state]) 
          for state in range(num_states)}
print(policy)
{ 0: 1,  1: 2,  2: 1,  3: 0, 
  4: 1,  5: 0,  6: 1,  7: 0, 
  8: 2,  9: 2, 10: 1, 11: 0, 
 12: 0, 13: 2, 14: 2, 15: 0}

顯示智能體學到的策略:在每個狀態下應採取的動作。

使用 Python 的 Gymnasium 進行強化學習

一起來練習吧!

使用 Python 的 Gymnasium 進行強化學習

Preparing Video For Download...