Intelligence artificielle pour Orogue

Développement d'une intelligence artificielle basée sur les systèmes multi-agents pour un rogue-like.



Description du projet


Orogue est un rogue-like old-school en console développé en OCaml par notre chercheur/enseignant Eric ALATA. Le jeu ne possédait initialement aucune règle et conditions de victoires. Les ennemis et le joueurs étaient seulement capable de bouger chacun leur tour. De plus, la carte était générée procéduralement grâce à du Perlin Noise. L'objectif du projet était de créer des conditions de victoires en fonction de nos envies et de créer des agents communiquants qui affronteront le joueur.


Contenu :
Le projet a été développé à 4 en 8 semaines dans le cadre des projets tuteurés de l'INSA en 4ème année. Le projet final contient les éléments suivants:
  • But du jeu : Se débarasser de tous les ennemis
  • Des agents capable de s'échanger des messages
  • Des agents avec ne machine à état finis pour chasser le joueur ou partir à sa recherche
  • Un échange de connaissance entre les agents concernant le joueur et la carte à explorer
  • Un interface graphique entre le jeu et notre système Java
  • Un interface de communication entre le jeu et notre système Java



Description de mon travail

D'un point de vue technique, le projet a été developpé en Java, avec une étude du code du jeu (en OCaml).

Pour ma part, j'ai travaillé sur le système multi-agent.

Déplacement des agents:
Les agents se déplaçant de façon aléatoire, nous avons implémenté un A* pour pouvoir orienter les agents vers des objectifs. Malgré le grand nombre d'agents, nous n'avons pas opté pour un Dijkstra car la carte est découverte au fur et à mesure de l'exploration (à chaque tour) rendant son utilisation inutile.

Machine à états:
En fonction de leur environnement, les agents basculeront entre différents états dans le but de trouver le joueur et l’éliminer. Les états possibles sont la recherche quand le joueur est hors de vue, la chasse quand il est visible mais à distance et l'attaque quand on est au contact du joueur.

Carte du monde et carte de probabilité:
Les agents utlisent la carte du maître pour se déplacer dans le jeu. Ils échangent des informations avec lui pour la mettre à jour en fonction de leur exploration. Cependant chaque agent possède une carte de probabilité de présence du joueur (analogie : heatmap). Cette dernière est mise à jour à chaque tour d'un agent pour orienté sa recherche lorsque le joueur n'est pas repéré.

Communication des agents:
Les agents utlisent des fils de messages pour communiquer en passant par le maître qui s'occupe de la distribution. Les agents peuvent s'échanger la position du joueur et les cartes de probabilité de présence du joueur. Deux agents communiquent seulement s'ils sont proches l'un de l'autre.