Skip to content

Ambientes não determinísticos

O ambiente Frozen Lake é um ambiente não determinístico onde um agente deve encontrar um caminho do lugar onde ele está para outro lugar passando por buracos. Se ele chegar no objetivo sem cair no buraco então ele termina a tarefa e tem 1 ponto de reward. Se ele cair em um dos buracos então ele termina a tarefa com 0 pontos de reward. Cada ação que não leva para um estado terminal tem reward igual a 0.

Neste ambiente o agente consegue executar 4 ações: ir para cima, ir para baixo, ir para esquerda e ir para direita. Como o chão é de gelo, não necessariamente a ação de ir para baixo vai levar o agente para baixo, por exemplo. Isto acontece com todas as quatro ações. Por isso que este ambiente é não determinístico.

Trabalhe com o arquivo FrozenLake_introduction.py

  1. Este arquivo está disponível aqui.

  2. Leia a documentação do código fonte disponível em https://gymnasium.farama.org/environments/toy_text/frozen_lake/

  3. Veja o que está codificado no arquivo FrozenLake_introduction.py e execute o mesmo.

  4. Quantos estados e quantas ações o ambiente FrozenLake-v1 tem?

  5. O que aconteceu com a execução das ações? O resultado foi o esperado? Descreva o que aconteceu.

Trabalhe com o arquivo FrozenLakeQLearning.py

  • Este arquivo também está aqui.

  • Abra em um editor de texto e descomente as linhas 12 e 13 e comente a linha 14. O código deve ficar como abaixo:

# only execute the following lines if you want to create a new q-table
qlearn = QLearning(env, alpha=0.9, gamma=0.95, epsilon=0.8, epsilon_min=0.0001, epsilon_dec=0.9999, episodes=500000)
q_table = qlearn.train('data/q-table-frozen-lake.csv','results/actions_frozen_lake')
#q_table = loadtxt('data/q-table-frozen-lake.csv', delimiter=',')
  • Execute o arquivo FrozenLakeQLearning.py com o comando:
python FrozenLakeQLearning.py
  • Agora faça o algoritmo FrozenLakeQLearning.py ler a Q-table a partir do arquivo gerado anteriormente e veja qual é o comportamento. Execute diversas vezes. Ele consegue chegar ao objetivo sempre? Ele consegue chegar ao objetivo na maioria das vezes?

  • E se executarmos 100 vezes? Quantas vezes o agente consegue atingir o objetivo?

  • Como podemos melhorar o desempenho deste agente? Teste diferentes configurações de hiperparâmetros. Qual é o comportamento visto no gráfico de episódios versus rewards?

E o algoritmo Sarsa?

  • Será que o algoritmo Sarsa tem um desempenho melhor para problemas não-determinísticos?

  • Aqui tem um arquivo chamado FrozenLakeSarsa.py que você pode utilizar para responder esta pergunta.

Outro mapa

Existem dois mapas pré-configurados em https://gymnasium.farama.org/environments/toy_text/frozen_lake/. O mapa 4x4 e um mapa 8x8. E se mudarmos o mapa para 8x8?

import gymnasium as gym
env = gym.make("FrozenLake-v1", map_name="8x8", is_slippery=True).env
  • O que muda? O problema se torna mais complexo? É necessário mudar algum dos hiperparâmetros? Qual é o melhor algoritmo? Sarsa ou Q-Learning?