Jeu BirdWar

Bird War - apprentissage par renforcement,
Projet de fin d'année - 1ère année de cycle ingénieur

Le projet de fin de première année s'est déroulé en deux phases : nous avions une première semaine pour nous familiariser avec le développement de jeu de type arcade avec la SDL2, puis une deuxième semaine pour proposer un jeu et implémenter une solution d'apprentissage par renforcement sur celui ci.
Avec mes camarades Julien et Lisa, nous avons proposé un jeu d'esquive : le joueur controlait l'oiseau (qui partait du coin inférieur gauche) et devait déplacer celui ci sur la clé (coin superieur droit) en se prenant le moins de missiles possibles, les mouvements possibles étant 'avant' et 'haut'.
Pour la suite, notre programme devait apprendre à jouer par lui même. L'idée était que initialement, le programme ignorait les règles du jeu. Il disposait seulement des contrôles et d'une perception restreinte de sa situation, c'est à dire qu'il connaissait à chaque instant son état parmi une liste d'états définie à l'avance par nous même. Ses choix étaient aléatoires dans un premier temps (phase d'exploration). Il recevait une punition pour chaque missile rencontré et une récompense pour chaque clé récupérée. Par rétropropagation de ces récompenses/punitions dans la suite de décisions, il cumulait une connaissance de ce qu'était un bon choix dans un état donnée (maximisation de la récompense). Plus la connaissance cumulée était complète, plus le programme pouvait s'appuyer dessus (phase d'exploitation). Après quelques milliers de parties jouées, le programme pouvait ainsi atteindre la clé sans toucher aucun missile
Nous avons obtenu la mention très bien pour ce projet.

Technologies utilisées

  • C, bibliotèque SDL2
  • Makefile, compilation automatisée

Compétences transversales

  • Travail en trinôme
  • Soutenance orale
Retour à la page principale