Los avances recientes en el campo del aprendizaje por refuerzo han sido sustentados en entornos virtuales de aprendizaje como los videojuegos, donde nuevos algoritmos e ideas pueden ser probado rápidamente de manera segura y reproducible. En este sentido, Google ha presentado un nuevo entorno de investigación basado en el fútbol, un nuevo sistema de aprendizaje reforzado donde los agentes pueden entrenar y simular un partido de fútbol en un sistema 3D. El entorno resultante es desafiante, fácil para usar, personalizar y, además, está disponible bajo licencia de software libre.
Aparte de todo ello, Google nos ha proporcionado un formato capaz de crear experimentos multijugador y multiagente, es decir, capaz de realizar competiciones como https://www.kaggle.com/c/google-football/overview, una liga de IA dónde puedes ganar hasta 6000$ con tu algoritmo !!!!!Dicho esto, en este artículo os vamos a enseñar como instalar este entorno, poder ejecutarlo, experimentar con él y jugar un partido contra vuestra propia IA.
La instalación de este juego solamente puede realizarse en sistemas Linux o Mac siguiendo los siguientes comandos:
sudo apt-get install git cmake build-essential libgl1-mesa-dev libsdl2-dev \ libsdl2-image-dev libsdl2-ttf-dev libsdl2-gfx-dev libboost-all-dev \ libdirectfb-dev libst-dev mesa-utils xvfb x11vnc libsdl-sge-dev python3-pip
Para realizar esta instalación, es necesario tener instalado brew, un programa de instalación va explicando paso a paso el proceso, qué es lo que va a hacer y se toma una pausa para confirmar antes de empezar con cada uno de los pasos.
Una vez instalado, se deben ejecutar los siguientes comandos:
brew install git python3 cmake sdl2 sdl2_image sdl2_ttf sdl2_gfx boost boost-python3
Para instalar pygame, además, será necesario los siguientes paquetes:
brew install sdl sdl_image sdl_mixer sdl_ttf portmidi
Posteriormente, ya se puede utilizar la librería con nuestro proyecto con el siguiente comando:
pip3 install gfootballPor último, y como test, podemos realizar una partida contra la IA base del juego:
python3 -m gfootball.play_game --action_set=full
Ya está. Os aparecerá una imagen como la siguiente:
Guía de comandos:
El resultado será parecido al que podéis encontrar en el siguiente video: https://youtu.be/YKv3WTZcV28
En este apartado nos centraremos en el código necesario para implementar la IA. Dentro del proyecto https://github.com/al118345/OpenAi_Examples existe una carpeta llamada code encontraremos un paquete llamado gfootball todos los proyectos dedicados a este proyecto ( https://github.com/al118345/OpenAi_Examples/tree/master/code/gfootball
En una primera aproximación, se ha querido experimentar un poco con la representación de los jugadores, la pelota, su posición en el campo y qué valores representan cada uno de ellos.
Para llevar a cabo este objetivo, hemos utilizado el entorno "GFootball-11_vs_11_kaggle-SMM-v0" donde se utiliza el contenedor SMMWrapper para devolver cuadros que muestran las posiciones del equipo, la posición de la pelota y la posición actual del jugador activo.
Estas tramas pueden ser utilizadas por una red neuronal convolucional, pero primero requieren un procesamiento que podría consistir en:
Sin entrar mucho más en este apartado, podemos ver en la siguiente imagen un ejemplo de esta representación. En la parte superior se representa ambos equipos y en la inferior la pelota y la posición del jugador activo en cada jugada.
El código utilizado lo podéis encontrar en la siguiente url https://github.com/al118345/OpenAi_Examples/blob/master/code/gfootball/__init__.py
Ahora bien, ¿qué pasa si quieres visualizar un agente?. Para ello he implementado la subcarpeta ejemplo_test_agente_envideo ( link ) que está compuesta por los siguientes ficheros:
from kaggle_environments import make env = make("football", configuration={"save_video": True, "scenario_name": "11_vs_11_kaggle","logdir": "." , "render": True, "running_in_notebook": False}) output = env.run(["submission.py","template.py"])[-1] print('Left player: reward = %s, status = %s, info = %s' % (output[0]['reward'], output[0]['status'], output[0]['info'])) print('Right player: reward = %s, status = %s, info = %s' % (output[1]['reward'], output[1]['status'], output[1]['info'])) env.render(mode="human", width=800, height=600)
Este ejemplo tiene como elemento importante la configuración del entorno. Mediante el configuración "save_video": True y "logdir": "." podemos generar una carpeta con un fichero .webm dónde se almacena de forma visual el comportamiento del agente.
Por último, la línea output = env.run(["submission.py","template.py"])[-1] sirve para informar al juego de qué agente estará en la partida. En la parte izquierda el agente inteligente y en la derecha el random en mi caso.
El resultado de esta implementación lo podéis consultar en la url https://youtu.be/YKv3WTZcV28 y para más información esta disponible Documentación kaglle sobre la librería kaggle_environments