Día 22: Cómo construir un robot de juego de IA usando OpenAI Gym y Universe

Seamos realistas, la IA está en todas partes. Se está desarrollando una batalla cara a cara entre Elon Musk y Mark Zuckerberg sobre el futuro de la IA. Hay quienes lo demonizan. Y algunos cuyos puntos de vista utópicos afirman que la IA casi podría ser como Dios para ayudar a la humanidad. Cualquiera que sea el lado de sus puntos de vista, la IA está aquí para quedarse.

"Con inteligencia artificial, estamos convocando al demonio". - Elon Musk "Temer un aumento de robots asesinos es como preocuparse por la superpoblación en Marte". - Andrew Ng

Si está emocionado de sumergirse y jugar con la IA, los juegos son un excelente lugar para comenzar. Han sido el banco de pruebas de referencia para la IA. Pero antes de saltar, aquí hay un poco de historia sobre cómo la programación de juegos ha evolucionado a través del tiempo.

La historia de la programación de juegos

Los programadores de juegos solían utilizar decisiones heurísticas del tipo "si-entonces-si no" para hacer conjeturas fundamentadas. Vimos esto en los primeros videojuegos de arcade como Pong y PacMan. Esta tendencia fue la norma durante mucho tiempo. ¡Pero los desarrolladores de juegos solo pueden predecir tantos escenarios y casos extremos para que su bot no corra en círculos!

Luego, los desarrolladores de juegos intentaron imitar cómo los humanos jugarían un juego y modelaron la inteligencia humana en un robot de juego.

El equipo de DeepMind hizo esto generalizando y modelando inteligencia para resolver cualquier juego de Atari que se le presentara. El bot del juego utilizó redes neuronales de aprendizaje profundo que no tendrían conocimientos específicos del juego. Ganaron el juego basándose en los píxeles que vieron en la pantalla y su conocimiento de los controles del juego. Sin embargo, algunas partes de DeepMind todavía no son de código abierto, ya que Google las usa para vencer a la competencia.

La democratización de la IA

Para evitar concentrar el increíble poder de la IA en manos de unos pocos, Elon Musk fundó OpenAI. Busca democratizar la IA haciéndola accesible para todos. Hoy exploraremos OpenAI Gym y el Universe recientemente lanzado, que está construido sobre Gym.

OpenAI Gym proporciona una interfaz sencilla para interactuar y gestionar cualquier entorno dinámico arbitrario. OpenAI Universe es una plataforma que te permite crear un bot y probarlo.

Hay miles de entornos. Van desde juegos clásicos de Atari, Minecraft y Grand Theft Auto, hasta simulaciones de pliegues de proteínas que pueden curar el cáncer. Puede crear un bot y ejecutarlo en cualquier entorno utilizando solo unas pocas líneas de código Python. ¡Esto es demasiado impresionante para no intentarlo!

Proyecto (1 hora)

Vamos a construir un robot de juego de IA que utiliza la técnica de "aprendizaje por refuerzo". Te lo explicaré más tarde. Jugará de forma autónoma y vencerá al juego de Atari Neon Race Car (puedes seleccionar el juego que quieras). Construiremos este bot de juego usando las bibliotecas Gym y Universe de OpenAI.

Paso 1: instalación

Asegúrese de tener Python instalado o instálelo usando Homebrew. Puede descargar un IDE de Python dedicado como PyCharm o un cuaderno iPython. Me gusta mantenerlo simple y usar Sublime. Finalmente, instale Gym, Universe y otras bibliotecas requeridas usando pip.

// Install python using brewbrew install python3// Install the required OpenAI librariespip3 install gympip3 install numpy incrementalbrew install golang libjpeg-turbo pip install universe

Todo en Universe (los entornos) se ejecuta como contenedores dentro de Docker. En caso de que aún no lo tenga, instale y ejecute Docker desde aquí.

Paso 2: codifica el bot del juego

El Game Bot está codificado en Python, por lo que comenzamos importando las dos únicas dependencias necesarias: Gym y Universe.

import gymimport universe

Para este Game Bot, usemos mi juego favorito de la infancia, Neon Race Cars, como entorno de prueba. Puede encontrar una lista completa de otros entornos / juegos entre los que puede elegir aquí.

Universe te permite ejecutar tantos entornos como quieras en paralelo. Pero para este proyecto, usaremos solo uno.

env = gym.make(‘flashgames.NeonRace-v0’)env.configure(remotes=1) # creates a local docker container

Aprendizaje reforzado

Ahora agregamos la lógica del bot del juego que usa la técnica de aprendizaje por refuerzo. Esta técnica observa el estado anterior del juego y la recompensa (como los píxeles que se ven en la pantalla o la puntuación del juego). Luego se le ocurre una acción para realizar en el medio ambiente.

El objetivo es mejorar su próxima observación (en nuestro caso, maximizar la puntuación del juego). Esta acción es elegida y realizada por un agente (Game Bot) con la intención de maximizar la puntuación. Luego se aplica sobre el medio ambiente. El entorno registra el estado resultante y la recompensa en función de si la acción fue beneficiosa o no (¿ganó el juego?).

Ahora podemos recuperar la lista de observaciones para cada entorno inicializado usando el método env.reset ().

observation_n = env.reset()

La observación aquí es un objeto específico del entorno. Representa lo que se observó, como los datos de píxeles sin procesar en la pantalla o el estado / puntuación del juego.

El siguiente paso es crear un agente de juego usando un bucle infinito, que continuamente realiza alguna acción basada en la observación. En nuestro bot, definamos una sola acción de presionar repetidamente la flecha hacia arriba (¡Bot tonto! Siéntete libre de evolucionarlo a uno complejo ...). La acción aquí se define por el tipo de evento (KeyEvent), la tecla de control (Flecha arriba) y establecerla en verdadero para todas las observaciones que ve el agente.

while True:action_n = [[('KeyEvent', 'ArrowUp', True)] for ob in observation_n]

Luego usamos el env.step()método para usar la acción para avanzar un paso de tiempo. Esta es una implementación muy básica del aprendizaje reforzado.

 observation_n, reward_n, done_n, info = env.step(action_n)

El método de pasos aquí devuelve cuatro variables:

  1. observation_n: Observaciones del medio ambiente
  2. reward_n: Si su acción fue beneficiosa o no: + 1 / -1
  3. done_n: Indica si el juego ha terminado o no: Sí / No
  4. info: Información adicional como el rendimiento y la latencia para fines de depuración

Puede ejecutar esta acción simultáneamente para todos los entornos en los que está entrenando a su bot. Utilice el método env.render () para iniciar el bot.

env.render()

Ahora tienes el Game Bot listo para competir con el medio ambiente. El código completo para este bot básico, así como una versión avanzada, está disponible en mi repositorio de Github aquí.

Paso 3: Ejecuta el Game Bot

Ahora, la parte divertida: asegúrese de que Docker se esté ejecutando y ejecute el bot. Míralo en acción superando a otros coches o sin hacerlo. Si falla, ¡sigue modificando tu bot para que supere la inteligencia!

python gamebot.py

¡Sigue jugando con la IA y eventualmente podrás desbloquear el Modo Dios! # 100DaysOfCode

Si te ha gustado esto, aplaude . ¡ Otros también pueden verlo! Sígueme en Twitter @H ariniLabs o M edium para obtener las últimas actualizaciones sobre otras historias o simplemente para saludar :)

PD: Regístrese para recibir mi boletín de noticias aquí para ser el primero en obtener contenido nuevo y fresco y está lleno de una dosis de inspiración del mundo de # WomenInTech y sí, ¡los hombres también pueden registrarse!