Se presenta el siguiente desarollo:
Si usas Google Colab, ejecuta una sola vez:
!pip install gymnasium
import numpy as np
import gymnasium as gym
1. Configurar el entorno
env = gym.make("FrozenLake-v1", is_slippery=True)
2. Definir los hiperparámetros
alpha = 0.8
gamma = 0.95
epsilon = 1.0
epsilon_decay = 0.9995
epsilon_min = 0.01
num_episodes = 20000
Inicializar la Q-Table
q_table = np.zeros((env.observation_space.n, env.action_space.n))
3. Entrenamiento con Q-Learning
for episode in range(num_episodes):
state, _ = env.reset()
done = False
while not done:
if np.random.random() < epsilon:
action = env.action_space.sample()
else:
action = np.argmax(q_table[state])
next_state, reward, terminated, truncated, _ = env.step(action)
done = terminated or truncated
q_table[state, action] += alpha * (
reward + gamma * np.max(q_table[next_state]) - q_table[state, action]
)
state = next_state
epsilon = max(epsilon_min, epsilon * epsilon_decay)
4. Evaluación
successes = 0
test_episodes = 1000
for _ in range(test_episodes):
state, _ = env.reset()
done = False
while not done:
action = np.argmax(q_table[state])
state, reward, terminated, truncated, _ = env.step(action)
done = terminated or truncated
if done and reward == 1:
successes += 1
print(f"Éxitos: {successes} de {test_episodes}")
print(f"Tasa de éxito: {successes/test_episodes*100:.2f}%")
Explicación
**1. Configuración: ** Se crea el entorno FrozenLake-v1 con gymnasium, donde el agente debe llegar a la meta evitando los agujeros.
**2. Hiperparámetros: ** Se inicializa la Q-Table con ceros y se definen:
alpha = 0.8: velocidad de aprendizaje.
gamma = 0.95: importancia de recompensas futuras.
epsilon = 1.0: exploración inicial.
epsilon_decay = 0.9995: reduce la exploración gradualmente.
epsilon_min = 0.01: mantiene una exploración mínima.
num_episodes = 20000: episodios de entrenamiento.
3. Entrenamiento: El agente utiliza la estrategia epsilon-greedy, actualiza la Q-Table mediante la ecuación de Q-Learning y reduce epsilon después de cada episodio.
**4. Evaluación: **Se ejecutan 1000 episodios sin exploración, eligiendo siempre la mejor acción aprendida y contabilizando los éxitos.
5. Experimentación: Se pueden modificar alpha, gamma, epsilon y num_episodes para observar cómo cambia el rendimiento. Un mayor número de episodios o un gamma más alto suelen mejorar el aprendizaje, mientras que ajustar epsilon controla el equilibrio entre exploración y explotación.