Q-learning

Reinforcement Learning with Gymnasium in Python

Fouad Trad

Machine Learning Engineer

Úvod do Q-learningu

  • Zkratka pro quality learning
  • Technika bez modelu
  • Učí se optimální Q-tabulku interakcí

Diagram znázorňující kroky Q-learningu: inicializace Q-tabulky, výběr akce, přijetí odměny z prostředí a aktualizace tabulky. Agent opakuje tento cyklus až do konvergence po určitém počtu epizod.

Reinforcement Learning with Gymnasium in Python

Q-learning vs. SARSA

SARSA

Obrázek zobrazující matematický vzorec aktualizačního pravidla SARSA.

  • Aktualizuje na základě provedené akce
  • Algoritmus on-policy
Q-learning

Obrázek zobrazující matematický vzorec aktualizačního pravidla Q-learningu.

  • Aktualizuje nezávisle na provedené akci
  • Algoritmus off-policy
Reinforcement Learning with Gymnasium in Python

Implementace Q-learningu

env = gym.make("FrozenLake", is_slippery=True)

num_episodes = 1000 alpha = 0.1 gamma = 1
num_states, num_actions = env.observation_space.n, env.action_space.n Q = np.zeros((num_states, num_actions))
reward_per_random_episode = []
Reinforcement Learning with Gymnasium in Python

Implementace Q-learningu

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

while not terminated:
# Random action selection action = env.action_space.sample()
# Take action and observe new state and reward new_state, reward, terminated, truncated, info = env.step(action)
# Update Q-table update_q_table(state, action, new_state)
episode_reward += reward state = new_state
reward_per_random_episode.append(episode_reward)
Reinforcement Learning with Gymnasium in Python

Aktualizace Q-learningu

Obrázek zobrazující matematický vzorec aktualizačního pravidla Q-learningu.

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

old_value = Q[state, action]
next_max = max(Q[new_state])
Q[state, action] = (1 - alpha) * old_value + alpha * (reward + gamma * next_max)
Reinforcement Learning with Gymnasium in Python

Použití politiky

reward_per_learned_episode = []
policy = get_policy()

for episode in range(num_episodes): state, info = env.reset() terminated = False episode_reward = 0 while not terminated: # Select the best action based on learned Q-table action = policy[state] # Take action and observe new state new_state, reward, terminated, truncated, info = env.step(action) state = new_state
episode_reward += reward
reward_per_learned_episode.append(episode_reward)
Reinforcement Learning with Gymnasium in Python

Vyhodnocení Q-learningu

import numpy as np
import matplotlib.pyplot as plt

avg_random_reward = np.mean(reward_per_random_episode) avg_learned_reward = np.mean(reward_per_learned_episode)
plt.bar(['Random Policy', 'Learned Policy'], [avg_random_reward, avg_learned_reward], color=['blue', 'green']) plt.title('Average Reward per Episode') plt.ylabel('Average Reward') plt.show()

Sloupcový graf ukazující, že naučená politika dosahuje výrazně vyšší odměny (přibližně 0,26) než náhodná politika (přibližně 0,01).

Reinforcement Learning with Gymnasium in Python

Pojďme si procvičit!

Reinforcement Learning with Gymnasium in Python

Preparing Video For Download...