L'algorithme neuroévolutionnaire apprend à jouer à Mario

SethBling est connu pour sa chaîne sur laquelle il publie divers conseils et inventions pour le monde Minecraft. Il apparaît souvent d'autres contenus. Par exemple, Mario figure sur la liste des intérêts du vlogger. C'est SethBling qui a d'abord dépassé Super Mario World sur la console en utilisant un bug avec la mémoire d'édition en déplaçant des éléments dans le jeu. Ses dernières vidéos et streams ont toujours le même jeu. Mais ce n'est pas une personne qui joue, mais un algorithme neuroévolutionnaire, que SethBling a lui-même écrit.



L'implémentation s'appelle MarI / O. Une représentation graphique du réseau neuronal est réalisée en haut de l'écran. Sur la gauche est montré comment l'algorithme voit le niveau - il comprend l'environnement et la position du joueur. Les carrés blancs sont des blocs sur lesquels le joueur peut se tenir, les noirs sont des objets en mouvement. À droite se trouvent des boutons sur lesquels un réseau de neurones peut cliquer. Les connexions neuronales sont situées au milieu, seule une partie d'entre elles est utilisée à un moment donné.

La structure est complexe, mais SethBling n'a pas créé de réseau neuronal. Cela a été fait par sa mise en œuvre de l'algorithme neuroévolutionnaire. Le programme a tenté d'effectuer des actions, puis leur efficacité a été évaluée par la distance parcourue. La formation a pris une journée. La génération zéro était très stupide, certains individus se sont tout simplement arrêtés. Si le joueur restait trop longtemps, la simulation se terminait. Certains ont appris à avancer, ignorant la présence d'obstacles et d'ennemis. Cela a conduit à une réunion avec des ennemis et des balles, mais il y a eu au moins quelques progrès. L'un des individus de génération zéro. La ligne verte est une connexion positive. Si un bloc y pénètre, la même couleur sera transmise à la sortie. Ce neurone oblige le joueur à avancer tandis qu'il y a une plateforme devant lui. La ligne rouge est négative et la sortie est l'opposé de la couleur obtenue.





Après avoir rencontré plusieurs ennemis au dessus de sa tête, le joueur saute plusieurs fois et se retrouve sur une plateforme qui se termine dans une falaise. Puisqu'il n'y a plus de bloc au bon endroit, cet individu s'arrête ici. Les individus plus complexes et peut-être plus performants ont plus de neurones, mais le principe de fonctionnement reste le même.

Pour faire apprendre le réseau neuronal, la sélection est appliquée. La performance de chaque individu est estimée par la distance parcourue et la vitesse. Seuls les individus les plus efficaces sont croisés dans la génération suivante, puis des mutations se produisent. Le processus est répété autant de fois que nécessaire. Il a fallu 35 générations pour terminer un niveau. L'individu le plus parfait a reçu une valeur de forme physique de l'ordre de 4000.



SethBling n'a pas élaboré un principe de fonctionnement à partir de zéro. Lors de sa création, il a utilisé les travaux scientifiques déjà existants sur NEAT (NeuroEvolution of Augmenting Topologies), la neuroévolution des topologies en croissance. Il décrit également comment les générations peuvent être divisées en espèces, ce que tous les algorithmes génétiques n'essaient pas de faire. MarI / O a été écrit en Lua à l'aide de l'émulateur BizHawk . SethBling ne s'est pas arrêté là. Il a forcé l'algorithme à passer par d'autres plateformes, diffusant le processus d'apprentissage dans son compte Twitch. Parmi les jeux figurait le classique Super Mario Brothers. MarI / O a réussi à passer le premier niveau, mais a déjà calé au deuxième. Même malgré l'échec, l'algorithme a accidentellement découvert un petit bug qui pourrait potentiellement être utile aux speedraners.







Certaines personnes se sont collées sur l'un des murs du niveau Donut Plains 4 dans Super Mario World. Il a fallu un certain temps pour comprendre que vous devez vous heurter au mur, vous n'avez pas besoin de sauter dessus. La génération suivante était déjà capable de courir contre le mur, mais sur l'obstacle suivant, les individus se sont arrêtés - ils ont oublié comment sauter devant l'obstacle. Après quelques générations, l'algorithme a réalisé où appuyer sur le bouton à gauche et où sauter. MarI / O n'a jamais pu terminer ce niveau. L'un des tuyaux est trop haut pour sauter. Utilisez plutôt la plate-forme de l'un des Hammer Brothers. SethBling a interrompu le processus d'apprentissage, croyant que l'algorithme n'apprendrait jamais cela.







Dans la troisième vidéo, MarI / O joue Super Mario Kart en mode Contre-la-montre sans ennemis. Winterbunny a aidé à modifier le script pour fonctionner dans ce jeu. Bien que Super Mario Kart soit différent des jeux de plateforme, le processus d'apprentissage est le même. Au début, l'algorithme est stupide et ne peut rien faire. Les individus essaient seulement de cliquer sur certains boutons. Mais même dans la génération zéro, il y avait des individus qui ont appris à bien rouler.



Déjà à la septième génération, un individu a été trouvé qui a fait 5 tours en 2,5 minutes. Ce chiffre est mauvais, le record du monde est d'environ une minute. Un individu se heurtait constamment à des obstacles et parfois enveloppait des cercles. Un individu de la neuvième génération a montré un bon résultat de 1,5 minute, elle a même essayé de rester sur la route sans se rendre sur le banc de touche.

Pastebin MarI / O code source
Une autre chaîne Twitch où MarI / O apprend à jouer à divers jeux

Source: https://habr.com/ru/post/fr381315/


All Articles