Q-learning

Reinforcement Learning com Gymnasium em Python

Fouad Trad

Machine Learning Engineer

Introdução ao Q-learning

  • Significa quality learning
  • Técnica sem modelo
  • Aprende a Q-table ótima por interação

Diagrama mostrando as etapas do Q-learning: inicializar a Q-table, escolher uma ação, receber a recompensa do ambiente e atualizar a tabela. O agente repete o loop até convergir após certo número de episódios.

Reinforcement Learning com Gymnasium em Python

Q-learning vs. SARSA

SARSA

Imagem mostrando a fórmula de atualização do SARSA.

  • Atualiza com base na ação tomada
  • Aprendiz on-policy
Q-learning

Imagem mostrando a fórmula de atualização do Q-learning.

  • Atualiza independente das ações tomadas
  • Aprendiz off-policy
Reinforcement Learning com Gymnasium em Python

Implementação 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 com Gymnasium em Python

Implementação de Q-learning

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 com Gymnasium em Python

Atualização do Q-learning

Imagem mostrando a fórmula de atualização do 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 com Gymnasium em Python

Usando a 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: # 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 com Gymnasium em Python

Avaliação do 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()

Imagem de um gráfico de barras mostrando que a política aprendida gera retorno bem maior (cerca de 0,26) do que a política aleatória (cerca de 0,01).

Reinforcement Learning com Gymnasium em Python

Vamos praticar!

Reinforcement Learning com Gymnasium em Python

Preparing Video For Download...