Q-learning

Reinforcement Learning con Gymnasium en Python

Fouad Trad

Machine Learning Engineer

Introducción a Q-learning

  • Significa «quality learning»
  • Técnica sin modelo
  • Aprende la Q-table óptima por interacción

Diagrama que muestra los pasos de Q-learning: inicializar una Q-table, elegir una acción, recibir una recompensa del entorno y actualizar la tabla. El agente repite el bucle hasta converger tras cierto número de episodios.

Reinforcement Learning con Gymnasium en Python

Q-learning vs. SARSA

SARSA

Imagen que muestra la fórmula matemática de la regla de actualización de SARSA.

  • Actualiza según la acción tomada
  • Aprendiz on-policy
Q-learning

Imagen que muestra la fórmula matemática de la regla de actualización de Q-learning.

  • Actualiza independiente de las acciones tomadas
  • Aprendiz off-policy
Reinforcement Learning con Gymnasium en Python

Implementación de Q-learning

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 con Gymnasium en Python

Implementación de Q-learning

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

while not terminated:
# Selección aleatoria de acción action = env.action_space.sample()
# Ejecuta la acción y observa nuevo estado y recompensa new_state, reward, terminated, truncated, info = env.step(action)
# Actualiza la Q-table update_q_table(state, action, new_state)
episode_reward += reward state = new_state
reward_per_random_episode.append(episode_reward)
Reinforcement Learning con Gymnasium en Python

Actualización en Q-learning

Imagen que muestra la fórmula matemática de la regla de actualización de Q-learning.

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 con Gymnasium en Python

Uso de la política

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: # Selecciona la mejor acción según la Q-table aprendida action = policy[state] # Ejecuta la acción y observa el nuevo estado new_state, reward, terminated, truncated, info = env.step(action) state = new_state
episode_reward += reward
reward_per_learned_episode.append(episode_reward)
Reinforcement Learning con Gymnasium en Python

Evaluación de Q-learning

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()

Imagen de un diagrama de barras que muestra que la política aprendida da un retorno mucho mayor (alrededor de 0,26) que la política aleatoria (alrededor de 0,01).

Reinforcement Learning con Gymnasium en Python

¡Vamos a practicar!

Reinforcement Learning con Gymnasium en Python

Preparing Video For Download...