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

Mão na massa: identificando objetos com MobileNetV2

!pip install gymnasium pygame

import numpy as np
import gymnasium as gym
import random

env = gym.make("FrozenLake-v1", is_slippery=True, render_mode=None)

alpha = 0.8 # taxa de aprendizado
gamma = 0.95 # fator de desconto
epsilon = 1.0 # taxa de exploração inicial
epsilon_decay = 0.995
epsilon_min = 0.01
episodes = 2000 # número de episódios

q_table = np.zeros([env.observation_space.n, env.action_space.n])

for episode in range(episodes):
state, _ = env.reset()
done = False

while not done:
    # Política epsilon-greedy
    if random.uniform(0,1) < epsilon:
        action = env.action_space.sample()  # explorar
    else:
        action = np.argmax(q_table[state])  # explorar

    # Executar ação
    next_state, reward, done, truncated, info = env.step(action)

    # Atualizar Q-table
    old_value = q_table[state, action]
    next_max = np.max(q_table[next_state])

    new_value = (1 - alpha) * old_value + alpha * (reward + gamma * next_max)
    q_table[state, action] = new_value

    state = next_state

# Decaimento da exploração
if epsilon > epsilon_min:
    epsilon *= epsilon_decay

print("Treinamento concluído!")

successes = 0
test_episodes = 100

for episode in range(test_episodes):
state, _ = env.reset()
done = False

while not done:
    action = np.argmax(q_table[state])  # usar apenas exploração
    state, reward, done, truncated, info = env.step(action)
    if done and reward == 1:
        successes += 1

print(f"Taxa de sucesso: {successes}/{test_episodes} episódios")

1 resposta

Olá, Penha! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou o Q-Learning para aprendizado por reforço com Python, utilizou muito bem a política epsilon-greedy para equilibrar exploração e exploração e ainda compreendeu a importância da Q-table para armazenar os valores de ação-estado.

Uma dica interessante para o futuro é acompanhar a evolução da taxa de sucesso ao longo dos episódios para visualizar o aprendizado do agente. Assim:

success_rates = []
for episode in range(test_episodes):
    state, _ = env.reset()
    done = False
    while not done:
        action = np.argmax(q_table[state])
        state, reward, done, truncated, info = env.step(action)
        if done and reward == 1:
            successes += 1
    success_rates.append(successes / (episode+1))

print("Taxa de sucesso acumulada:", success_rates[-1])

Isso mostra como o agente melhora sua performance com o tempo.

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

  • Testar ambientes diferentes: como Taxi-v3 ou CartPole-v1 para expandir o aprendizado.
  • Visualizar o ambiente: usar render_mode="human" para acompanhar as ações do agente.
  • Ajustar hiperparâmetros: como alpha, gamma e epsilon para encontrar o equilíbrio ideal.

Ah, uma pergunta: você prefere acompanhar a evolução da taxa de sucesso para entender o aprendizado do agente ou acha mais interessante ajustar hiperparâmetros e comparar os resultados finais?

Abraço e bons estudos!

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