Aprendizaje por Refuerzo

Descubre cómo las máquinas aprenden a tomar decisiones a través de la prueba y el error, buscando siempre la máxima recompensa.

Agente

(Pasa el cursor)

Agente

Es quien aprende y toma decisiones. Piensa en él como el jugador o el robot que explora el mundo.

Entorno

(Pasa el cursor)

Entorno

Es el "mundo" con el que el agente interactúa. Contiene los estados, las reglas y los desafíos.

Recompensa

(Pasa el cursor)

Recompensa

Una señal (positiva o negativa) que el entorno le da al agente. Es el feedback que le indica si una acción fue buena o mala.

Política

(Pasa el cursor)

Política

La estrategia o "cerebro" del agente. Es un mapa que le dice cuál es la mejor acción a tomar en cada estado.

Visualizando el Valor y la Política

Proceso de Aprendizaje

Paso 1: Calcular Valores

Descubre qué tan "valiosa" es cada casilla en función de su cercanía a la recompensa (⭐) o al peligro (🔥).

Paso 2: Encontrar la Política

Una vez conocidos los valores, se determina la mejor ruta (política →), moviéndose siempre hacia la casilla de mayor valor.

Ejemplo de Código en Python

Este es un ejemplo simplificado de Q-Learning usando la biblioteca Gymnasium para resolver el entorno clásico "FrozenLake".

import gymnasium as gym
import numpy as np

# 1. Crear el entorno
# 'FrozenLake-v1' es un mundo de rejilla donde el agente debe ir del inicio (S) a la meta (G)
# sin caer en los agujeros (H). `is_slippery=False` lo hace determinista.
env = gym.make('FrozenLake-v1', is_slippery=False)

# 2. Inicializar la Q-Table con ceros
# Una tabla para almacenar los "valores" de cada par (estado, acción).
# Filas: número de estados (casillas). Columnas: número de acciones (izquierda, abajo, derecha, arriba).
q_table = np.zeros([env.observation_space.n, env.action_space.n])

# 3. Definir los hiperparámetros
alpha = 0.1      # Tasa de aprendizaje: qué tanto actualizamos los valores Q.
gamma = 0.9      # Factor de descuento: importancia de las recompensas futuras.
epsilon = 1.0    # Tasa de exploración: probabilidad de tomar una acción aleatoria.
num_episodes = 10000 # Número de veces que el agente jugará el juego para aprender.

# 4. Bucle de entrenamiento
for i in range(num_episodes):
    # Reiniciar el entorno para un nuevo episodio
    state, info = env.reset()
    done = False
    
    while not done:
        # Decidir si explorar o explotar
        if np.random.uniform(0, 1) < epsilon:
            action = env.action_space.sample() # Explorar: tomar acción aleatoria.
        else:
            action = np.argmax(q_table[state]) # Explotar: tomar la mejor acción conocida.

        # Realizar la acción y observar el resultado
        next_state, reward, terminated, truncated, info = env.step(action)
        done = terminated or truncated

        # 5. Actualizar la Q-Table usando la ecuación de Bellman
        # Esta es la fórmula del aprendizaje.
        old_value = q_table[state, action]
        next_max = np.max(q_table[next_state])
        
        # El nuevo valor Q es una mezcla del valor antiguo y el valor aprendido.
        new_value = old_value + alpha * (reward + gamma * next_max - old_value)
        q_table[state, action] = new_value
        
        state = next_state

print("¡Entrenamiento finalizado!")
print("\nQ-Table resultante:")
print(q_table)

env.close()