Métodos Monte Carlo

Reinforcement Learning con Gymnasium en Python

Fouad Trad

Machine Learning Engineer

Repaso: aprendizaje con modelo

 

  • Depende de la dinámica del entorno
  • Sin interacción con el entorno

Diagramas de policy iteration y value iteration vistos en el video anterior.

Reinforcement Learning con Gymnasium en Python

Aprendizaje sin modelo

 

  • No depende de la dinámica del entorno
  • El agente interactúa con el entorno
  • Aprende la política por prueba y error
  • Más adecuado para casos reales

Imagen de un robot interactuando con un entorno de ajedrez.

Reinforcement Learning con Gymnasium en Python

Métodos Monte Carlo

  • Técnicas sin modelo
  • Estiman Q a partir de episodios

Imagen del esqueleto de un episodio: estados, acciones, recompensas y retornos.

Reinforcement Learning con Gymnasium en Python

Métodos Monte Carlo

  • Técnicas sin modelo
  • Estiman Q a partir de episodios

Imagen del segundo paso al estimar Q y cómo se ve una Q-table: filas = estados, columnas = acciones.

Reinforcement Learning con Gymnasium en Python

Métodos Monte Carlo

  • Técnicas sin modelo
  • Estiman Q a partir de episodios

Imagen que muestra el paso final para derivar la política óptima, que asigna cada estado a la acción óptima.

  • Dos métodos: first-visit, every-visit
Reinforcement Learning con Gymnasium en Python

Grid world personalizado

Imagen del grid world personalizado con 6 estados, 2 filas y 3 columnas, numerados del 0 (arriba izq.) al 5 (abajo dcha.). El agente está en 3, hay una montaña en 4 y la meta en 5.png

Reinforcement Learning con Gymnasium en Python

Recoger dos episodios

Imagen del primer episodio con estados, acciones, recompensas y retornos.

Imagen del segundo episodio con estados, acciones, recompensas y retornos.

Reinforcement Learning con Gymnasium en Python

Estimación de Q-values

Imagen con los estados, acciones, recompensas y retornos de los dos episodios.

  • Q-table: tabla de valores Q

Imagen de una Q-table vacía que debemos rellenar.

Reinforcement Learning con Gymnasium en Python

Q(4, izquierda), Q(4, arriba) y Q(1, abajo)

Imagen con los estados, acciones, recompensas y retornos de los dos episodios, destacando (4, izquierda), (4, arriba) y (1, abajo).

  • (s,a) aparece una vez -> rellena con el retorno

Q-table con los valores de (4, izquierda), (4, arriba) y (1, abajo) rellenados.

Reinforcement Learning con Gymnasium en Python

Q(4, derecha)

Imagen con los estados, acciones, recompensas y retornos de los dos episodios, destacando (4, derecha) en ambos.

  • (s,a) ocurre una vez por episodio -> promedio

Q-table con (4, derecha) rellenado con el promedio de retornos de ambos episodios.

Reinforcement Learning con Gymnasium en Python

Q(3, derecha) - Monte Carlo de primera visita

Imagen con los estados, acciones, recompensas y retornos de los dos episodios, destacando (3, derecha) solo en la primera aparición de cada episodio.

  • Promedia la primera visita a (s,a) en cada episodio

Q-table con el valor de (3, derecha) por el promedio de retornos de las filas destacadas (primeras apariciones).

Reinforcement Learning con Gymnasium en Python

Q(3, derecha) - Monte Carlo de cada visita

Imagen con los estados, acciones, recompensas y retornos de los dos episodios, destacando (3, derecha) en cada aparición.

  • Promedia cada visita a (s,a) en los episodios

Q-table con el valor de (3, derecha) por el promedio de retornos de todas las apariciones.

Reinforcement Learning con Gymnasium en Python

Generar un episodio

def generate_episode():
    episode = []
    state, info = env.reset()

terminated = False while not terminated: action = env.action_space.sample()
next_state, reward, terminated, truncated, info = env.step(action)
episode.append((state, action, reward)) state = next_state
return episode
Reinforcement Learning con Gymnasium en Python

Monte Carlo de primera visita

def first_visit_mc(num_episodes):
    Q = np.zeros((num_states, num_actions))
    returns_sum = np.zeros((num_states, num_actions))
    returns_count = np.zeros((num_states, num_actions))

for i in range(num_episodes): episode = generate_episode() visited_states_actions = set()
for j, (state, action, reward) in enumerate(episode):
if (state, action) not in visited_states:
returns_sum[state, action] += sum([x[2] for x in episode[j:]])
returns_count[state, action] += 1 visited_states_actions.add((state, action))
nonzero_counts = returns_count != 0
Q[nonzero_counts] = returns_sum[nonzero_counts] / returns_count[nonzero_counts] return Q
Reinforcement Learning con Gymnasium en Python

Monte Carlo de cada visita

def every_visit_mc(num_episodes):
    Q = np.zeros((num_states, num_actions))
    returns_sum = np.zeros((num_states, num_actions))
    returns_count = np.zeros((num_states, num_actions))    

    for i in range(num_episodes):
        episode = generate_episode()  

        for j, (state, action, reward) in enumerate(episode):

            returns_sum[state, action] += sum([x[2] for x in episode[j:]])
            returns_count[state, action] += 1


    nonzero_counts = returns_count != 0
    Q[nonzero_counts] = returns_sum[nonzero_counts] / returns_count[nonzero_counts]
    return Q
Reinforcement Learning con Gymnasium en Python

Obtener la política óptima

def get_policy():
    policy = {state: np.argmax(Q[state]) for state in range(num_states)}    
    return policy
Reinforcement Learning con Gymnasium en Python

Juntándolo todo

Q = first_visit_mc(1000)

policy_first_visit = get_policy()
print("First-visit policy: \n", policy_first_visit)
Q = every_visit_mc(1000)
policy_every_visit = get_policy()
print("Every-visit policy: \n", policy_every_visit)
First-visit policy:
{0: 2, 1: 2, 2: 1, 
 3: 2, 4: 2, 5: 0}

Every-visit policy:
{0: 2, 1: 2, 2: 1, 
 3: 2, 4: 2, 5: 0}

Imagen de la política óptima con la acción óptima en cada estado, mostrada con flechas.

Reinforcement Learning con Gymnasium en Python

¡Vamos a practicar!

Reinforcement Learning con Gymnasium en Python

Preparing Video For Download...