-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathenv_exploration.py
79 lines (68 loc) · 2.83 KB
/
env_exploration.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
"""
Script que implementa la exploración del entorno LunarLander-v2.
"""
import gym
from gym.envs.box2d.lunar_lander import demo_heuristic_lander
from matplotlib import pyplot as plt
from playing import play_games
from utils import save_random_agent_gif, render_random_agent_episode
env = gym.make('LunarLander-v2', render_mode='human')
# Revisamos los wrappers el entorno:
print(env)
# Imprimimos la documentación del entorno base:
print(env.unwrapped.__doc__)
# Analizamos el entorno:
print(f"El valor del umbral de recompensa definido en el entorno es {env.spec.reward_threshold}.")
print(f"El número máximo de pasos por episodio es {env.spec.max_episode_steps}.")
print(f"Rango de las recompensas: {env.reward_range}")
# Acciones:
print(f"El espacio de acciones contiene {env.action_space.n} posibles acciones.")
# Información del espacio de acciones en la documentación del entorno:
"""
There are four discrete actions available:
do nothing, fire left orientation engine, fire main engine, fire right orientation engine."""
# Observaciones:
print(f"Las dimensiones del espacio de observaciones son {env.observation_space.shape}.")
# Información del espacio de observaciones en la documentación del entorno:
"""
The state is an 8-dimensional vector: the coordinates of the lander in x & y, its linear velocities in x & y, its angle,
its angular velocity, and two booleans that represent whether each leg is in contact with the ground or not.
"""
print(f"El mínimo de los valores de espacio de observaciones es {list(env.observation_space.low)}")
print(f"El máximo de los valores de espacio de observaciones es {list(env.observation_space.high)}")
# Visualizamos el entorno
RANDOM_SEED = 666
# Agente aleatorio vs. heurístico
n_random_exploration_episodes = 3
for episode in range(n_random_exploration_episodes):
demo_env = gym.make('LunarLander-v2', render_mode='human')
demo_env.reset(seed=RANDOM_SEED + episode)
demo_env.action_space.seed(RANDOM_SEED + episode)
render_random_agent_episode(demo_env)
demo_env.reset(seed=RANDOM_SEED + episode)
demo_heuristic_lander(demo_env, render=True)
# Cerramos la visualización:
if episode == n_random_exploration_episodes:
demo_env.close()
# Y guardamos una ejecución aleatoria:
rgb_env = gym.make('LunarLander-v2', render_mode='rgb_array')
# 12, 16, 20, 25, 29 are interesting games
rgb_env.reset(seed=RANDOM_SEED)
rgb_env.action_space.seed(RANDOM_SEED)
save_random_agent_gif(
env=rgb_env
)
# Y recompensa media y media de pasos de un agente aleatorio:
tr, ts = play_games(
environment=rgb_env,
policy=lambda observation: rgb_env.action_space.sample(),
n_games=100
)
# Histograma de recompensas:
plt.hist(tr)
plt.title("Histogram of reward per episode")
plt.show()
# Histograma de pasos por episodio:
plt.hist(ts)
plt.title("Histogram of steps per episode")
plt.show()