Q-learning

Reinforcement Learning met Gymnasium in Python

Fouad Trad

Machine Learning Engineer

Introductie tot Q-learning

  • Staat voor quality learning
  • Modelvrije techniek
  • Leert optimale Q-tabel via interactie

Diagram met de stappen in Q-learning: Q-tabel initialiseren, een actie kiezen, een beloning uit de omgeving ontvangen en de tabel updaten. De agent herhaalt deze lus tot convergentie na een aantal episodes.

Reinforcement Learning met Gymnasium in Python

Q-learning vs. SARSA

SARSA

Afbeelding met de wiskundige formule van de SARSA-updateregel.

  • Update op basis van genomen actie
  • On-policy learner
Q-learning

Afbeelding met de wiskundige formule van de Q-learning-updateregel.

  • Update onafhankelijk van genomen acties
  • Off-policy learner
Reinforcement Learning met Gymnasium in Python

Q-learning-implementatie

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 met Gymnasium in Python

Q-learning-implementatie

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

while not terminated:
# Willekeurige actieselectie action = env.action_space.sample()
# Voer actie uit en observeer nieuwe staat en beloning new_state, reward, terminated, truncated, info = env.step(action)
# Update Q-tabel update_q_table(state, action, new_state)
episode_reward += reward state = new_state
reward_per_random_episode.append(episode_reward)
Reinforcement Learning met Gymnasium in Python

Q-learning-update

Afbeelding met de wiskundige formule van de Q-learning-updateregel.

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 met Gymnasium in Python

Beleid gebruiken

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: # Kies de beste actie op basis van de geleerde Q-tabel action = policy[state] # Voer de actie uit en observeer nieuwe staat new_state, reward, terminated, truncated, info = env.step(action) state = new_state
episode_reward += reward
reward_per_learned_episode.append(episode_reward)
Reinforcement Learning met Gymnasium in Python

Q-learning-evaluatie

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('Gemiddelde beloning per episode') plt.ylabel('Gemiddelde beloning') plt.show()

Afbeelding van een staafdiagram dat laat zien dat het geleerde beleid een veel hogere opbrengst geeft (rond 0,26) dan het willekeurige beleid (rond 0,01).

Reinforcement Learning met Gymnasium in Python

Laten we oefenen!

Reinforcement Learning met Gymnasium in Python

Preparing Video For Download...