Skip to content

Commit

Permalink
pre aula sobre ambiente nao deterministico
Browse files Browse the repository at this point in the history
  • Loading branch information
fbarth committed Oct 22, 2024
1 parent 589eaf1 commit ea3f4f3
Show file tree
Hide file tree
Showing 7 changed files with 149 additions and 18 deletions.
24 changes: 9 additions & 15 deletions docs/aulas/15_xnon_determ/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Neste ambiente o agente consegue executar 4 ações: ir para cima, ir para baixo

## Trabalhe com o arquivo `FrozenLake_introduction.py`

1. Este arquivo está disponível em [https://github.com/Insper/rl_code/tree/main/src/part_03](https://github.com/Insper/rl_code/tree/main/src/part_03).
1. Este arquivo está disponível [aqui](./src/FrozenLake_introduction.py).

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

Expand All @@ -16,9 +16,9 @@ Neste ambiente o agente consegue executar 4 ações: ir para cima, ir para baixo

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

## Trabalhe com o arquivo `FrozenLake.py`
## Trabalhe com o arquivo `FrozenLakeQLearning.py`

* Este arquivo também está em [https://github.com/Insper/rl_code/tree/main/src/part_03](https://github.com/Insper/rl_code/tree/main/src/part_03)
* Este arquivo também está [aqui](./src/FrozenLakeQLearning.py).

* 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:

Expand All @@ -29,29 +29,23 @@ q_table = qlearn.train('data/q-table-frozen-lake.csv','results/actions_frozen_la
#q_table = loadtxt('data/q-table-frozen-lake.csv', delimiter=',')
````

* Execute o arquivo `FrozenLake.py` com o comando:
* Execute o arquivo `FrozenLakeQLearning.py` com o comando:

````bash
python FrozenLake.py
python FrozenLakeQLearning.py
````

* Agora faça o algoritmo `FrozenLake.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?
* 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? Execute o comando abaixo:
* E se executarmos 100 vezes? Quantas vezes o agente consegue atingir o objetivo?

````bash
python FrozenLake100times.py
````

* 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?
* 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?

* Em [https://github.com/Insper/rl_code/tree/main/src/part_03](https://github.com/Insper/rl_code/tree/main/src/part_03) tem um arquivo chamado `FrozenLakeSarsa.py` que você pode utilizar para responder esta pergunta.
* [Aqui](./src/FrozenLakeSarsa.py) tem um arquivo chamado `FrozenLakeSarsa.py` que você pode utilizar para responder esta pergunta.

## Outro mapa

Expand Down
42 changes: 42 additions & 0 deletions docs/aulas/15_xnon_determ/src/FrozenLakeQLearning.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
from IPython.display import clear_output
import gymnasium as gym
import numpy as np
from QLearning import QLearning
from numpy import loadtxt
import warnings
warnings.simplefilter("ignore")

def print_action(action):
if action == 0:
print("LEFT")
elif action == 1:
print("DOWN")
elif action == 2:
print("RIGHT")
elif action == 3:
print("UP")

# exemplo de ambiente nao determinístico
env = gym.make('FrozenLake-v1', render_mode='ansi').env

qlearn = QLearning(env, alpha=0.1, gamma=0.99, epsilon=0.8, epsilon_min=0.01, epsilon_dec=1, episodes=20_000)
q_table = qlearn.train('data/q-table-frozen-lake-qlearning.csv','results/frozen_lake_qlearning','results/rewards_frozen_lake_qlearning.csv')
#q_table = loadtxt('data/q-table-frozen-lake-qlearning.csv', delimiter=',')

env = gym.make('FrozenLake-v1', render_mode='human').env

(state, _) = env.reset()
epochs = 0
rewards = 0
done = False

while not done:
action = np.argmax(q_table[state])
print_action(action)
state, reward, done, _, info = env.step(action)
epochs += 1
rewards += reward

print("\n")
print("Timesteps taken: {}".format(epochs))
print("Rewards: {}".format(rewards))
42 changes: 42 additions & 0 deletions docs/aulas/15_xnon_determ/src/FrozenLakeSarsa.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
from IPython.display import clear_output
import gymnasium as gym
import numpy as np
from Sarsa import Sarsa
from numpy import loadtxt
import warnings
warnings.simplefilter("ignore")

def print_action(action):
if action == 0:
print("LEFT")
elif action == 1:
print("DOWN")
elif action == 2:
print("RIGHT")
elif action == 3:
print("UP")

# exemplo de ambiente nao determinístico
env = gym.make('FrozenLake-v1', render_mode='ansi').env

# only execute the following lines if you want to create a new q-table
#qlearn = Sarsa(env, alpha=0.2, gamma=0.95, epsilon=0.8, epsilon_min=0.0001, epsilon_dec=0.9999, episodes=50000)
#q_table = qlearn.train('data/q-table-frozen-lake-sarsa.csv','results/frozen_lake_sarsa')
q_table = loadtxt('data/q-table-frozen-lake-sarsa.csv', delimiter=',')

env = gym.make('FrozenLake-v1', render_mode='human').env
(state, _) = env.reset()
epochs = 0
rewards = 0
done = False

while not done:
action = np.argmax(q_table[state])
print_action(action)
state, reward, done, _, info = env.step(action)
rewards += reward
epochs += 1

print("\n")
print("Timesteps taken: {}".format(epochs))
print("Rewards: {}".format(rewards))
51 changes: 51 additions & 0 deletions docs/aulas/15_xnon_determ/src/FrozenLake_introduction.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import gymnasium as gym
env = gym.make("FrozenLake-v1", render_mode='ansi', is_slippery=True).env

#
# is_slippery=False torna o ambiente deterministico
#

print(env.observation_space.n)
print(env.action_space.n)

# inicializando o ambiente
state = env.reset()

# imprimindo o ambiente
print(env.render())

# eh possivel fazer env.render(mode='ansi') para imprimir no terminal

print('Executando algumas acoes')

print('\n\n')

print('indo para baixo')
state, reward, done, truncated, info = env.step(1)
print(env.render())
print(reward, done)

print('indo para baixo')
state, reward, done, _, _ = env.step(1)
print(env.render())
print(reward, done)

print('indo para direita')
state, reward, done, _, info = env.step(2)
print(env.render())
print(reward, done)

print('indo para direita')
state, reward, done, _, info = env.step(2)
print(env.render())
print(reward, done)

print('indo para baixo')
state, reward, done, _, info = env.step(1)
print(env.render())
print(reward, done)

print('indo para direita')
state, reward, done, _, info = env.step(2)
print(env.render())
print(reward, done)
2 changes: 1 addition & 1 deletion docs/projetos/2024_02_intermediario/index.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Projeto intermediário 2024/2
# Projeto intermediário

## Descrição

Expand Down
2 changes: 2 additions & 0 deletions docs/projetos/2024_02_robo/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Path planning em robótica

4 changes: 2 additions & 2 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ nav:
- 'aulas/15_rl/index.md'
- 'aulas/15_rl_parte2/index.md'
- 'aulas/15_rl_sarsa/index.md'
### - 'aulas/15_xnon_determ/index.md'
- 'aulas/15_xnon_determ/index.md'
#
## - 'Avaliações atuais':
## - 'avaliacoes/2024_1_intermediaria/index.md'
Expand All @@ -58,7 +58,7 @@ nav:
- 'Projetos atuais':
- 'projetos/2024_02_intermediario/index.md'
# - 'projetos/15_rl/index.md'
### - 'projetos/16_robo/index.md'
- 'projetos/2024_02_robo/index.md'
#
#
### - 'Tópicos sobre IA':
Expand Down

0 comments on commit ea3f4f3

Please sign in to comment.