11 - Práctica 3: Monte Carlo con OpenAI Gym y Python
Lección 11 del curso Aprendizaje por Refuerzo Nivel Intermedio.
Tabla de contenido
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.
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
- El agente será el jugador que toma las decisiones
- El entorno será todo lo demás (el crupier, las cartas del crupier y las cartas del propio jugador)
- Las acciones: “pedir” o “plantarse”
- Los estados: cada estado tendrá información de la suma actual del agente, la carta descubierta del crupier (porque dependiendo de este valor el agente podrá suponer si el crupier tiene la posibilidad o no de hacer veintiuna) y si el agente posee o no un “As usable”.
- Las recompensas: +1 si el agente gana, -1 si pierde y 0 si empata con el crupier
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:
- Política 1: totalmente aleatoria
- Política 2: el jugador se planta siempre que la suma de sus cartas sea mayor a 18
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.
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.