Estado del proyecto: ¡Ya no se mantiene!
Desafortunadamente, ya no puedo desarrollar más ni brindar soporte al proyecto.
Reaver es un marco modular de aprendizaje por refuerzo profundo centrado en varias tareas basadas en StarCraft II, siguiendo los pasos de DeepMind, que está impulsando lo último en este campo a través de la lente de jugar un videojuego moderno con una interfaz similar a la humana y limitaciones. Esto incluye observar características visuales similares (aunque no idénticas) a las que percibiría un jugador humano y elegir acciones entre un conjunto similar de opciones que tendría un jugador humano. Consulta el artículo StarCraft II: Un nuevo desafío para el aprendizaje reforzado para obtener más detalles.
Aunque el desarrollo se basa en la investigación, la filosofía detrás de Reaver API es similar al juego StarCraft II en sí: tiene algo que ofrecer tanto para principiantes como para expertos en el campo. Para los programadores aficionados, Reaver ofrece todas las herramientas necesarias para entrenar agentes DRL modificando sólo una parte pequeña y aislada del agente (por ejemplo, hiperparámetros). Para los investigadores veteranos, Reaver ofrece una base de código simple pero de rendimiento optimizado con una arquitectura modular: el agente, el modelo y el entorno están desacoplados y se pueden intercambiar a voluntad.
Si bien Reaver se centra en StarCraft II, también tiene soporte total para otros entornos populares, en particular Atari y MuJoCo. Los algoritmos del agente Reaver se validan con resultados de referencia; por ejemplo, el agente PPO puede coincidir con los algoritmos de optimización de políticas próximas. Consulte a continuación para obtener más detalles.
La forma más sencilla de instalar Reaver es a través del administrador de paquetes PIP
:
pip install reaver
También puedes instalar extras adicionales (por ejemplo, soporte gym
) a través de las banderas auxiliares:
pip install reaver[gym,atari,mujoco]
Si planea modificar el código base Reaver
puede conservar la funcionalidad de su módulo instalándolo desde la fuente:
$ git clone https://github.com/inoryy/reaver-pysc2
$ pip install -e reaver-pysc2/
Al instalar con -e
flag, Python
ahora buscará reaver
en la carpeta especificada, en lugar del almacenamiento site-packages
.
Consulte la página wiki para obtener instrucciones detalladas sobre cómo configurar Reaver en Windows.
Sin embargo, si es posible, considere utilizar Linux OS
, debido a consideraciones de rendimiento y estabilidad. Si desea ver a su agente actuar con todos los gráficos habilitados, puede guardar una repetición del agente en Linux y abrirla en Windows. Así se realizó la grabación de video que se detalla a continuación.
Si desea utilizar Reaver con otros entornos compatibles, también debe instalar los paquetes relevantes:
¡Puedes entrenar a un agente DRL con múltiples entornos de StarCraft II ejecutándose en paralelo con solo cuatro líneas de código!
import reaver as rvr
env = rvr . envs . SC2Env ( map_name = 'MoveToBeacon' )
agent = rvr . agents . A2C ( env . obs_spec (), env . act_spec (), rvr . models . build_fully_conv , rvr . models . SC2MultiPolicy , n_envs = 4 )
agent . run ( env )
Además, Reaver viene con herramientas de línea de comandos altamente configurables, por lo que esta tarea se puede reducir a una breve frase.
python -m reaver.run --env MoveToBeacon --agent a2c --n_envs 4 2> stderr.log
Con la línea de arriba, Reaver inicializará el procedimiento de entrenamiento con un conjunto de hiperparámetros predefinidos, optimizados específicamente para el entorno y el agente determinados. Después de un tiempo, comenzarás a ver registros con varias estadísticas útiles en la pantalla de tu terminal.
| T 118 | Fr 51200 | Ep 212 | Up 100 | RMe 0.14 | RSd 0.49 | RMa 3.00 | RMi 0.00 | Pl 0.017 | Vl 0.008 | El 0.0225 | Gr 3.493 | Fps 433 |
| T 238 | Fr 102400 | Ep 424 | Up 200 | RMe 0.92 | RSd 0.97 | RMa 4.00 | RMi 0.00 | Pl -0.196 | Vl 0.012 | El 0.0249 | Gr 1.791 | Fps 430 |
| T 359 | Fr 153600 | Ep 640 | Up 300 | RMe 1.80 | RSd 1.30 | RMa 6.00 | RMi 0.00 | Pl -0.035 | Vl 0.041 | El 0.0253 | Gr 1.832 | Fps 427 |
...
| T 1578 | Fr 665600 | Ep 2772 | Up 1300 | RMe 24.26 | RSd 3.19 | RMa 29.00 | RMi 0.00 | Pl 0.050 | Vl 1.242 | El 0.0174 | Gr 4.814 | Fps 421 |
| T 1695 | Fr 716800 | Ep 2984 | Up 1400 | RMe 24.31 | RSd 2.55 | RMa 30.00 | RMi 16.00 | Pl 0.005 | Vl 0.202 | El 0.0178 | Gr 56.385 | Fps 422 |
| T 1812 | Fr 768000 | Ep 3200 | Up 1500 | RMe 24.97 | RSd 1.89 | RMa 31.00 | RMi 21.00 | Pl -0.075 | Vl 1.385 | El 0.0176 | Gr 17.619 | Fps 423 |
Reaver debería converger rápidamente a aproximadamente 25-26 RMe
(recompensas medias de episodio), lo que coincide con los resultados de DeepMind para este entorno. El tiempo de entrenamiento específico depende de su hardware. Los registros anteriores se produjeron en una computadora portátil con CPU Intel i5-7300HQ (4 núcleos) y GPU GTX 1050; la capacitación duró alrededor de 30 minutos.
Una vez que Reaver haya terminado de entrenar, puede ver cómo se desempeña agregando los indicadores --test
y --render
al resumen.
python -m reaver.run --env MoveToBeacon --agent a2c --test --render 2> stderr.log
Hay disponible un cuaderno complementario de Google Colab para probar Reaver en línea.
Muchos algoritmos DRL modernos dependen de su ejecución en múltiples entornos al mismo tiempo y en paralelo. Como Python tiene GIL, esta característica debe implementarse mediante multiprocesamiento. La mayoría de las implementaciones de código abierto resuelven esta tarea con un enfoque basado en mensajes (por ejemplo, Python multiprocessing.Pipe
o MPI
), donde los procesos individuales se comunican enviando datos a través de IPC. Este es un enfoque válido y probablemente el único razonable para los enfoques distribuidos a gran escala en los que operan empresas como DeepMind y openAI.
Sin embargo, para un investigador o aficionado típico, un escenario mucho más común es tener acceso a un solo entorno de máquina, ya sea una computadora portátil o un nodo en un clúster HPC. Reaver está optimizado específicamente para este caso al hacer uso de la memoria compartida sin bloqueos. Este enfoque genera un aumento significativo del rendimiento de hasta 1,5 veces la velocidad de muestreo de StarCraft II (y hasta 100 veces la velocidad en el caso general), siendo bloqueado casi exclusivamente por el canal de entrada/salida de la GPU.
Los tres módulos principales de Reaver ( envs
, models
y agents
están casi completamente separados entre sí. Esto garantiza que la funcionalidad ampliada en un módulo se integre perfectamente en los demás.
Toda la configuración se maneja a través de gin-config y se puede compartir fácilmente como archivos .gin
. Esto incluye todos los hiperparámetros, argumentos ambientales y definiciones de modelos.
Al experimentar con ideas novedosas, es importante obtener comentarios rápidamente, lo que a menudo no es realista en entornos complejos como StarCraft II. Como Reaver se construyó con una arquitectura modular, las implementaciones de sus agentes en realidad no están vinculadas en absoluto a StarCraft II. Puede realizar reemplazos directos para muchos entornos de juegos populares (por ejemplo, openAI gym
) y verificar que las implementaciones funcionen con ellos primero:
python -m reaver.run --env CartPole-v0 --agent a2c 2> stderr.log
import reaver as rvr
env = rvr . envs . GymEnv ( 'CartPole-v0' )
agent = rvr . agents . A2C ( env . obs_spec (), env . act_spec ())
agent . run ( env )
Actualmente, Reaver admite los siguientes entornos:
CartPole-v0
)PongNoFrameskip-v0
)InvertedPendulum-v2
y HalfCheetah-v2
) Mapa | Asaltante (A2C) | mente profunda SC2LE | DeepMindReDRL | Experto Humano |
---|---|---|---|---|
Mover a baliza | 26,3 (1,8) [21, 31] | 26 | 27 | 28 |
RecogerFragmentos De Minerales | 102,8 (10,8) [81, 135] | 103 | 196 | 177 |
Derrota a las cucarachas | 72,5 (43,5) [21, 283] | 100 | 303 | 215 |
Buscar y derrotar a los zerglings | 22,1 (3,6) [12, 40] | 45 | 62 | 61 |
Derrota a los zerglings y banelings | 56,8 (20,8) [21, 154] | 62 | 736 | 727 |
RecolectarMineralesYGas | 2267,5 (488,8) [0, 3320] | 3.978 | 5.055 | 7.566 |
Construir Marines | -- | 3 | 123 | 133 |
Human Expert
de un jugador de nivel GrandMaster.DeepMind ReDRL
se refiere a los resultados actuales de última generación, descritos en el artículo Aprendizaje por refuerzo profundo relacional.DeepMind SC2LE
son resultados publicados en el artículo StarCraft II: A New Challenge for Reinforcement Learning.Reaver (A2C)
son resultados recopilados entrenando al agente reaver.agents.A2C
, replicando la arquitectura SC2LE
lo más fielmente posible en el hardware disponible. Los resultados se obtienen ejecutando el agente capacitado en modo --test
durante 100
episodios, calculando las recompensas totales del episodio. Se enumeran la media, la desviación estándar (entre paréntesis) y el mínimo y el máximo (entre corchetes).Mapa | Muestras | Episodios | Aprox. Tiempo (h) |
---|---|---|---|
Mover a baliza | 563.200 | 2,304 | 0,5 |
RecogerFragmentos De Minerales | 74.752.000 | 311,426 | 50 |
Derrota a las cucarachas | 172.800.000 | 1.609.211 | 150 |
Buscar y derrotar a los zerglings | 29.760.000 | 89.654 | 20 |
Derrota a los zerglings y banelings | 10.496.000 | 273,463 | 15 |
RecolectarMineralesYGas | 16.864.000 | 20.544 | 10 |
Construir Marines | - | - | - |
Samples
se refieren al número total de cadenas de observe -> step -> reward
en un entorno.Episodes
se refieren al número total de indicadores StepType.LAST
devueltos por PySC2.Approx. Time
es el tiempo de entrenamiento aproximado en una laptop
con CPU Intel i5-7300HQ
(4 núcleos) y GPU GTX 1050
. Tenga en cuenta que no dediqué mucho tiempo al ajuste de hiperparámetros, centrándome principalmente en verificar que el agente sea capaz de aprender en lugar de maximizar la eficiencia de la muestra. Por ejemplo, el primer intento ingenuo de MoveToBeacon
requirió alrededor de 4 millones de muestras; sin embargo, después de jugar un poco, pude reducirlo hasta 102 000 (reducción de ~40 veces) con el agente PPO.
Recompensas medias del episodio con std.dev completado en el medio. Haga clic para ampliar.
Una grabación de video del agente actuando en los seis minijuegos está disponible en línea en: https://youtu.be/gEyBzcPU5-w. En el vídeo de la izquierda se ve al agente actuando con pesos inicializados aleatoriamente y sin entrenamiento, mientras que en el vídeo de la derecha está entrenado para apuntar a puntuaciones.
El problema de la reproducibilidad de la investigación se ha convertido recientemente en un tema de muchos debates en la ciencia en general, y el aprendizaje por refuerzo no es una excepción. Uno de los objetivos de Reaver como proyecto científico es ayudar a facilitar la investigación reproducible. Para ello, Reaver viene con varias herramientas que simplifican el proceso:
Para liderar el camino en materia de reproducibilidad, Reaver incluye pesas previamente entrenadas y registros resumidos completos de Tensorboard para los seis minijuegos. Simplemente descargue un archivo de experimento desde la pestaña de lanzamientos y descomprímalo en el directorio results/
.
Puede usar pesos previamente entrenados agregando el indicador --experiment
al comando reaver.run
:
python reaver.run --map <map_name> --experiment <map_name>_reaver --test 2> stderr.log
Los registros de Tensorboard están disponibles si inicia tensorboard --logidr=results/summaries
.
También puedes verlos directamente en línea a través de Aughie Boards.
Reaver es una unidad Protoss muy especial y subjetivamente linda en el universo del juego StarCraft. En la versión del juego StarCraft: Brood War, Reaver era conocido por ser lento, torpe y, a menudo, casi inútil si se lo dejaba solo debido a los errores de la IA en el juego. Sin embargo, en manos de jugadores dedicados que invirtieron tiempo en dominar la unidad, Reaver se convirtió en uno de los activos más poderosos del juego, y a menudo jugó un papel clave en las partidas ganadoras de torneos.
Un predecesor de Reaver, llamado simplemente pysc2-rl-agent
, se desarrolló como parte práctica de la tesis de licenciatura en la Universidad de Tartu bajo la supervisión de Ilya Kuzovkin y Tambet Matiisen. Todavía puedes acceder a él en la rama v1.0.
Si encuentra un problema relacionado con la base del código, abra un ticket en GitHub y descríbalo con el mayor detalle posible. Si tiene preguntas más generales o simplemente busca asesoramiento, no dude en enviarme un correo electrónico.
También soy un miembro orgulloso de una comunidad en línea SC2AI activa y amigable, usamos principalmente Discord para comunicarnos. ¡Personas de todos los orígenes y niveles de experiencia son bienvenidas a unirse!
Si ha encontrado que Reaver es útil en su investigación, considere citarlo con el siguiente bibtex:
@misc{reaver,
author = {Ring, Roman},
title = {Reaver: Modular Deep Reinforcement Learning Framework},
year = {2018},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/inoryy/reaver}},
}