Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Projeto] Treinando um agente para atravessar em segurança o frozen lake usando Q-learning

#instalando as bibliotecas
!pip install gymnasium numpy

#importando as bibliotecas
import gymnasium as gym
import numpy as np
import random
import matplotlib.pyplot as plt

# Inicializar o ambiente FrozenLake-v1
# is_slippery=False para um ambiente determinístico (mais fácil de aprender inicialmente)
env = gym.make('FrozenLake-v1', is_slippery=False, render_mode='ansi')

# Obter o número de estados e ações
num_states = env.observation_space.n
num_actions = env.action_space.n

print(f"Ambiente FrozenLake-v1 inicializado.")
print(f"Número de estados: {num_states}")
print(f"Número de ações: {num_actions}")

# Visualizar o ambiente (opcional, requer render_mode='human' ou 'rgb_array')
# Para visualização em texto, podemos imprimir o estado inicial
initial_observation, info = env.reset()
print("\nEstado inicial do ambiente:")
print(env.render())

# 2. Definir os hiperparâmetros do agente
alpha = 0.1  # Taxa de aprendizado (learning rate)
gamma = 0.99  # Fator de desconto (discount factor)
epsilon = 1.0  # Taxa de exploração inicial (exploration rate)
epsilon_decay_rate = 0.001 # Taxa de decaimento de epsilon
min_epsilon = 0.01 # Epsilon mínimo

# Número de episódios para treinamento
num_episodes = 20000

# 2.1. Inicializar a Q-table com zeros
q_table = np.zeros((num_states, num_actions))

print(f"Q-table inicializada com dimensões: {q_table.shape}")
print(f"Taxa de aprendizado (alpha): {alpha}")
print(f"Fator de desconto (gamma): {gamma}")
print(f"Taxa de exploração inicial (epsilon): {epsilon}")
print(f"Taxa de decaimento de epsilon: {epsilon_decay_rate}")
print(f"Número de episódios de treinamento: {num_episodes}")
1 resposta

Olá, Paulo! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou o FrozenLake-v1 para treinamento de agente com Python, utilizou muito bem a Q-table para estruturar o aprendizado e ainda compreendeu a importância dos hiperparâmetros para controlar exploração e aprendizado.

Continue trazendo suas implementações, pois elas ajudam bastante outros estudantes a entenderem conceitos de Reinforcement Learning.

Uma dica interessante para o futuro é monitorar a evolução da taxa de exploração (epsilon) ao longo dos episódios. Assim:

epsilons = []
for episode in range(num_episodes):
    epsilons.append(epsilon)
    epsilon = max(min_epsilon, epsilon * (1 - epsilon_decay_rate))

plt.plot(epsilons)
plt.title("Decaimento de Epsilon ao longo dos episódios")
plt.xlabel("Episódios")
plt.ylabel("Epsilon")
plt.show()

Isso faz a visualização da redução da exploração, mostrando como o agente passa a explorar menos e a aproveitar mais o conhecimento adquirido.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Testar diferentes taxas de aprendizado: valores muito altos podem gerar instabilidade.
  • Avaliar desempenho com média móvel: suavizar recompensas para observar tendências.
  • Comparar ambientes determinísticos e estocásticos: entender como a aleatoriedade afeta o aprendizado.
Conteúdos relacionados

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Ah, uma pergunta: Você acredita que é mais eficiente treinar agentes em ambientes determinísticos para consolidar conceitos ou já iniciar em ambientes estocásticos para maior realismo?

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!