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

(Fundamentos de IA: investigando algoritmos e abordagens de machine learning) Mão na massa: identificando objetos com MobileNetV2

# ==========================================================
# Ambiente: FrozenLake-v1
# ==========================================================

# -----------------------------
# Importação das bibliotecas
# -----------------------------
import numpy as np
import gymnasium as gym

# -----------------------------
# Criação do ambiente
# -----------------------------
# O objetivo é fazer o agente sair do ponto inicial
# e chegar ao destino sem cair nos buracos.
ambiente = gym.make("FrozenLake-v1", is_slippery=True)

# -----------------------------
# Configuração dos hiperparâmetros
# -----------------------------
taxa_aprendizado = 0.75      # Alpha
fator_desconto = 0.95        # Gamma

exploracao = 1.0             # Epsilon inicial
exploracao_minima = 0.02
decaimento = 0.9995

episodios = 18000

# -----------------------------
# Criação da Q-Table
# -----------------------------
# Cada linha representa um estado.
# Cada coluna representa uma ação possível.
q_table = np.zeros(
    (ambiente.observation_space.n,
     ambiente.action_space.n)
)

# ==========================================================
# Treinamento
# ==========================================================

for episodio in range(episodios):

    estado, _ = ambiente.reset()
    terminou = False

    while not terminou:

        # Estratégia epsilon-greedy
        if np.random.random() < exploracao:
            acao = ambiente.action_space.sample()
        else:
            acao = np.argmax(q_table[estado])

        # Executa a ação escolhida
        novo_estado, recompensa, terminou, truncado, _ = ambiente.step(acao)

        # Melhor valor futuro encontrado
        melhor_valor = np.max(q_table[novo_estado])

        # Atualização da Q-Table
        q_table[estado, acao] = q_table[estado, acao] + taxa_aprendizado * (
            recompensa +
            fator_desconto * melhor_valor -
            q_table[estado, acao]
        )

        # Atualiza o estado atual
        estado = novo_estado

    # Redução gradual da exploração
    exploracao = max(exploracao_minima, exploracao * decaimento)

# ==========================================================
# Avaliação do agente
# ==========================================================

testes = 1000
vitorias = 0

for _ in range(testes):

    estado, _ = ambiente.reset()
    terminou = False

    while not terminou:

        # Durante o teste o agente utiliza apenas
        # a melhor ação aprendida.
        acao = np.argmax(q_table[estado])

        estado, recompensa, terminou, truncado, _ = ambiente.step(acao)

    if recompensa == 1:
        vitorias += 1

# ==========================================================
# Resultado Final
# ==========================================================

print("=" * 50)
print("Treinamento concluído!")
print("=" * 50)
print(f"Episódios de treinamento : {episodios}")
print(f"Episódios de teste       : {testes}")
print(f"Sucessos obtidos         : {vitorias}")
print(f"Taxa de sucesso          : {(vitorias/testes)*100:.2f}%")
print("=" * 50)

Atendendo a 5º etapa do desafio, registramos alguns testes dos experimentos com hiperparâmetros:

Teste 1 • Alpha: 0.75 • Gamma: 0.95 • Epsilon Inicial: 1.00 • Resultado esperado: Bom equilíbrio entre aprendizado e exploração.

Teste 2 • Alpha: 0.90 • Gamma: 0.99 • Epsilon Inicial: 1.00 • Resultado esperado: Aprende mais rápido, mas pode oscilar mais.

Teste 3 • Alpha: 0.50 • Gamma: 0.90 • Epsilon Inicial: 0.80 • Resultado esperado: Aprendizado mais lento, porém mais estável.
1 resposta

Olá, Eduardo! Como vai?

Parabéns pela realização das atividades!

Vi que você apresentou um exemplo completo de Q-Learning aplicado ao ambiente FrozenLake, detalhou os ajustes de hiperparâmetros e registrou diferentes cenários de teste para avaliar o impacto no aprendizado. Esse conjunto mostra domínio técnico, organização e atenção prática, pontos fundamentais para compreender como agentes de reforço evoluem em ambientes estocásticos.

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

  • Comparar métricas: analisar não apenas a taxa de sucesso, mas também o tempo médio para alcançar o objetivo.
  • Visualizar políticas: mapear graficamente as ações aprendidas em cada estado para interpretar melhor a estratégia do agente.
  • Experimentar variações: testar ambientes com diferentes níveis de dificuldade ou versões não escorregadias para observar mudanças.

Ah uma pergunta: O que você considera mais interessante nesse processo, perceber como pequenas mudanças nos hiperparâmetros alteram o desempenho ou observar a evolução da política aprendida pelo agente ao longo dos episódios?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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