11 - Práctica 3: Monte Carlo con OpenAI Gym y Python

Lección 11 del curso Aprendizaje por Refuerzo Nivel Intermedio.

Introducción

En las lecciones anteriores hablamos de los algoritmos de Predicción con Monte Carlo y Control con Monte Carlo on-policy y off-policy, los cuales nos permiten no sólo evaluar una política sino también optimizarla.

Así que ya estamos listos para poner en práctica todo lo aprendido hasta el momento. Entonces en esta tercera práctica veremos cómo usar los métodos de Monte Carlo para lograr que un agente a jugar Blackjack, el popular juego de cartas.

Contenido exclusivo suscriptores

Suscríbete y accede al código fuente y al video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online

El juego de Blackjack

Blackjack, veintiuno o veintiuna, es un juego de cartas donde el objetivo es obtener un puntaje lo más cercano a 21 pero sin pasarse.

Cada una de las figuras (la J, la Q y la K) tiene un puntaje de 10, mientras que el As puede valer 1 o 11 y cada una de las cartas restantes tiene un puntaje igual al valor numérico que aparezca en la carta.

¿Cómo se juega?

El juego comienza con dos cartas, ambas repartidas boca arriba para el jugador y una boca arriba y otra boca abajo para el crupier.

Si ni jugador ni crupier alcanzan 21, gana quien tenga las cartas con la suma más cercana a este valor.

As usable y no usable

Si el jugador tiene un As que podría contar como 11 sin pasarse, entonces se dice que tiene un “As usable”. En este caso el As siempre contará como un 11.

Si el jugador tiene un As que al contarlo como 11 hace que se pase, entonces se dice que tiene un “As no usable”. En este caso el As sumará sólo 1 para evitar perder.

Podemos formular el juego simplificado de Blackjack como un problema de Aprendizaje por Refuerzo. Los elementos de este problema serán

Objetivo de la práctica

Entrenar un agente (es decir encontrar la mejor política) para que “aprenda” a jugar Blackjack dadas las condiciones mencionadas en las secciones anteriores.

El entorno

Como en las prácticas anteriores, podemos usar OpenAI gym (y en particular el módulo gym de Python) para importar el entorno y generar las interacciones del agente.

Predicción con Monte Carlo

Comenzaremos viendo cómo usar la predicción con Monte Carlo para evaluar la política del agente.

En este caso evaluaremos qué tan buenas son dos políticas:

Al implementar el algoritmo de predicción y comparar los resultados arrojados para cada política, encontramos que, como era de esperar, la política 2 genera valores más altos.

Control con Monte Carlo “on-policy”: algoritmo epsilon-greedy

Al implementar este algoritmo y compararlo con la política 2 (es decir la mejor política hasta el momento), encontramos que la política óptima obtenida con este control “on-policy” genera en promedio un retorno superior (+0.111).

Control con Monte Carlo “off-policy”

Al implementar este algoritmo y entrenar nuestro agente encontramos que los resultados son prácticamente idénticos a los obtenidos con la política “on-policy”: las diferencias entre las dos políticas obtenidas son mínimas (0.06 a favor de “on-policy”).

Y este era un resultado esperado, ya que cualquiera de los dos métodos permite llegar a una política óptima.

Contenido exclusivo suscriptores

Recuerda suscribirte para acceder al código fuente y al video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online

Conclusión

Muy bien, con ésta práctica ya hemos completado los métodos de Monte Carlo, la segunda familia de métodos clásicos para la solución de problemas de Aprendizaje por Refuerzo.

Pero el inconveniente de estos métodos radica en el hecho de que para poder estimar las funciones valor se requieren episodios completos, lo que hace que se tengan unos tiempos de ejecución relativamente largos (como lo vimos precisamente en esta práctica).

Así que como alternativa a este inconveniente, en la próxima sección hablaremos de los métodos de Diferencia Temporal, que son una combinación de la Programación Dinámica y de los Métodos de Monte Carlo.

En particular, en la próxima lección veremos una introducción a este Aprendizaje por Diferencia Temporal.

Ver todas las lecciones de este curso