Jour 22: Comment créer un AI Game Bot en utilisant OpenAI Gym and Universe

Regardons les choses en face, l'IA est partout. Une bataille face-à-face se déroule entre Elon Musk et Mark Zuckerberg sur l'avenir de l'IA. Il y en a qui le diabolisent. Et certains dont les vues utopiques affirment que l'IA pourrait presque être semblable à Dieu pour aider l'humanité. Quel que soit le côté de votre point de vue, l'IA est là pour rester.

«Avec l'intelligence artificielle, nous invoquons le démon.» - Elon Musk «Craindre une montée de robots tueurs, c'est comme s'inquiéter de la surpopulation sur Mars.» - Andrew Ng

Si vous êtes impatient de plonger et de bricoler avec l'IA, les jeux sont un excellent point de départ. Ils ont été le banc d'essai incontournable pour l'IA. Mais avant de vous lancer, voici un peu d'histoire sur la façon dont la programmation de jeux a évolué au fil du temps.

L'histoire de la programmation de jeux

Les programmeurs de jeux utilisaient des décisions heuristiques de type if-then-else pour faire des suppositions éclairées. Nous l'avons vu dans les premiers jeux vidéo d'arcade tels que Pong et PacMan. Cette tendance a été la norme pendant très longtemps. Mais les développeurs de jeux ne peuvent prédire qu'un nombre limité de scénarios et de cas extrêmes pour que votre bot ne tourne pas en rond!

Les développeurs de jeux ont ensuite tenté d'imiter la façon dont les humains joueraient à un jeu et ont modélisé l'intelligence humaine dans un robot de jeu.

L'équipe de DeepMind a fait cela en généralisant et en modélisant l'intelligence pour résoudre tout jeu Atari qui lui était lancé. Le robot de jeu utilisait des réseaux de neurones d'apprentissage en profondeur qui n'auraient aucune connaissance spécifique au jeu. Ils ont battu le jeu en fonction des pixels qu'ils ont vus à l'écran et de leur connaissance des commandes du jeu. Cependant, certaines parties de DeepMind ne sont toujours pas open-source car Google l'utilise pour battre la concurrence.

La démocratisation de l'IA

Pour éviter de concentrer l'incroyable puissance de l'IA entre les mains de quelques-uns, Elon Musk a fondé OpenAI. Il cherche à démocratiser l'IA en la rendant accessible à tous. Aujourd'hui, nous allons explorer OpenAI Gym et l'Univers récemment sorti, qui est construit au-dessus de Gym.

OpenAI Gym fournit une interface simple pour interagir avec et gérer tout environnement dynamique arbitraire. OpenAI Universe est une plateforme qui vous permet de créer un bot et de le tester.

Il existe des milliers d'environnements. Ils vont des jeux Atari classiques, Minecraft et Grand Theft Auto, aux simulations de plis protéiques qui peuvent guérir le cancer. Vous pouvez créer un bot et l'exécuter dans n'importe quel environnement en utilisant seulement quelques lignes de code Python. C'est trop génial pour ne pas essayer!

Projet (1 heure)

Nous allons construire un AI Game Bot qui utilise la technique de «Reinforcement Learning». J'expliquerai cela plus tard. Il jouera et battra de manière autonome le jeu Atari Neon Race Car (vous pouvez sélectionner le jeu de votre choix). Nous allons construire ce robot de jeu en utilisant les bibliothèques Gym et Universe d'OpenAI.

Étape 1: installation

Assurez-vous que Python est installé ou installez-le à l'aide de Homebrew. Vous pouvez télécharger un IDE Python dédié comme PyCharm ou iPython notebook. J'aime garder les choses simples et utiliser Sublime. Enfin, installez Gym, Universe et les autres bibliothèques requises à l'aide de pip.

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

Tout dans Universe (les environnements) s'exécute en tant que conteneurs dans Docker. Si vous ne l'avez pas déjà, installez et exécutez Docker à partir d'ici.

Étape 2: codez le robot de jeu

Le Game Bot est codé en Python, nous commençons donc par importer les deux seules dépendances nécessaires: Gym et Universe.

import gymimport universe

Pour ce Game Bot, utilisons mon jeu d'enfance préféré, Neon Race Cars, comme environnement de test. Vous pouvez trouver une liste complète des autres environnements / jeux que vous pouvez choisir ici.

Universe vous permet d'exécuter autant d'environnements que vous le souhaitez en parallèle. Mais pour ce projet, nous n'en utiliserons qu'un.

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

Apprentissage par renforcement

Nous ajoutons maintenant la logique du bot de jeu qui utilise la technique d'apprentissage par renforcement. Cette technique observe l'état précédent du jeu et sa récompense (comme les pixels vus à l'écran ou le score du jeu). Il propose ensuite une action à effectuer sur l'environnement.

Le but est d'améliorer sa prochaine observation (dans notre cas - maximiser le score du jeu). Cette action est choisie et effectuée par un agent (Game Bot) dans le but de maximiser le score. Il est ensuite appliqué sur l'environnement. L'environnement enregistre l'état résultant et la récompense selon que l'action a été bénéfique ou non (a-t-elle gagné la partie?).

Nous pouvons maintenant récupérer la liste des observations pour chaque environnement initialisé à l'aide de la méthode env.reset ().

observation_n = env.reset()

L'observation ici est un objet spécifique à l'environnement. Il représente ce qui a été observé, comme les données brutes de pixels à l'écran ou l'état / le score du jeu.

L'étape suivante consiste à créer un agent de jeu en utilisant une boucle infinie, qui effectue en continu une action basée sur l'observation. Dans notre bot, définissons une action unique consistant à appuyer à plusieurs reprises sur la flèche vers le haut (Silly bot! N'hésitez pas à le faire évoluer vers un robot complexe…). L'action ici est définie par le type d'événement (KeyEvent), la touche de contrôle (flèche vers le haut) et en la définissant sur true pour toutes les observations que l'agent voit.

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

Nous utilisons ensuite la env.step()méthode pour utiliser l'action pour avancer d'un pas de temps. Il s'agit d'une mise en œuvre très basique de l'apprentissage renforcé.

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

La méthode step renvoie ici quatre variables:

  1. observation_n: Observations de l'environnement
  2. reward_n: Si votre action a été bénéfique ou non: + 1 / -1
  3. done_n: Indique si le jeu est terminé ou non: Oui / Non
  4. info: Informations supplémentaires telles que les performances et la latence à des fins de débogage

Vous pouvez exécuter cette action simultanément pour tous les environnements dans lesquels vous entraînez votre bot. Utilisez la méthode env.render () pour démarrer le bot.

env.render()

Vous avez maintenant le Game Bot prêt à rivaliser avec l'environnement. Le code complet de ce bot de base ainsi qu'une version avancée sont disponibles dans mon dépôt Github ici.

Étape 3: Exécutez le Game Bot

Maintenant, pour la partie amusante: assurez-vous que Docker est en cours d'exécution et exécutez le bot. Voyez-le en action en battant d'autres voitures ou en ne le faisant pas. S'il échoue, continuez à peaufiner votre bot pour le faire battre l'intelligence!

python gamebot.py

Continuez à bricoler avec l'IA et vous pourrez éventuellement débloquer le mode Dieu! # 100DaysOfCode

Si cela vous a plu, applaudissez ? S o d'autres peuvent le voir aussi! Suivez-moi sur Twitter @H ariniLabs ou M edium pour obtenir les dernières mises à jour sur d'autres histoires ou tout simplement pour dire bonjour :)

PS: Inscrivez-vous à ma newsletter ici pour être le premier à recevoir du nouveau contenu et il est rempli d'une dose d'inspiration du monde de # WomenInTech et oui les hommes peuvent aussi s'inscrire !