Flappy Bird AI

Un clone de Flappy Bird où une population d'oiseaux apprend à jouer par neuroévolution. Chaque génération s'améliore un peu.

StatutExpérimental
Période2019
Tech
JavaScriptTensorFlow.jsWebpack
Introduction

En 2019, je co-organisais Bomberjam, une compétition interne au travail où des équipes s'affrontaient pour construire le meilleur bot Bomberman. Avant l'événement, je voulais vraiment comprendre comment on pouvait enseigner à une IA à jouer à un jeu, pas juste utiliser une bibliothèque en espérant que ça marche.

Flappy Bird était le cas de test parfait : règles simples, retour immédiat, et une condition de succès claire. Le projet s'inspire de la série neuroévolution de Daniel Shiffman sur The Coding Train. Une population d'oiseaux joue tous en même temps. Ceux qui survivent le plus longtemps transmettent les poids de leur réseau de neurones à la génération suivante avec de petites mutations. Sur de nombreuses générations, la population passe de voler droit dans le premier tuyau à tout franchir.

Technologies

JavaScript pur avec TensorFlow.js pour la couche réseau de neurones. Chaque oiseau a son propre petit réseau qui lit l'état du jeu et décide s'il doit battre des ailes. Entre les générations, les meilleurs performers sont sélectionnés, leurs poids sont croisés et mutés, et une nouvelle population est créée. Pas de rétropropagation, pas de données d'entraînement, juste la pression de survie sur de nombreuses générations.

Ce que j'ai appris

Comment les algorithmes évolutionnaires fonctionnent en pratique, comment implémenter un réseau de neurones from scratch, et comment utiliser TensorFlow.js. Le concept central a rapidement fait sens : vous n'avez pas besoin de données d'entraînement étiquetées si vous pouvez définir une fonction de fitness. Le temps de survie est la fonction de fitness. Le reste, c'est la sélection, le croisement et la mutation.