Genetic Driver

Développement d'une IA qui apprend à rouler sur un circuit.



Description du projet


Objectifs :
Lors du printemps 2018 nous avons réalisé, en équipe de 3 développeurs, une IA dans le cadre d'un petit jeu de course :
  • Apprentissage machine sans librairie
  • Jeu multijoueur en LAN sans librairie
  • Un mode d'entraînement de l'IA, un mode pour l'affronter et un mode pour affronter un ami en LAN
  • Le coeur du jeu utilise la librairie Slick2D
Le jeu se veut très arcade et n'avait pas pour but d'être techniquement poussé. L'objectif principal du projet était de découvrir le fonctionnement des réseaux de neurones et des algorithmes génétiques en les codant.


Description de mon travail

D'un point de vue technique, le jeu a été développé en Java avec des assets trouvables gratuitement en ligne.

Pour ma part, j'ai travaillé sur tous les éléments d'IA présents dans le jeu, et sur la fin de la mise en place du système réseau.

Fonctionnement des agents intelligents :
Le réseau de neurones recevra en entrée 5 données issues de raycasts pour un véhicule donné. La sortie du réseau contiendra l'information d'envoyer ou non un input virtuel pour tourner à droite ou à gauche. Le réseau de neurones contient toute la logique pour transmettre une valeur et se mettre à jour si on oublie la génétique en temps normal. Dans notre cas, on va utiliser l'algorithme génétique pour mettre à jour les réseaux de neurones de nos agents dans le but de les faire progresser. Classiquement, on procède à une sélection des meilleures voitures en fonction du temps passé sans percuter d'obstacles, on croise les individus, on procède à des mutations et on recommence.

Fonctionnement du réseau :
On utilise le protocole UDP pour tous les échanges d'informations lors d'une session de jeu pour éviter perdre de temps en réception. Lors de la phase de connexion, on envoie en broadcast un paquet pour la recherche de serveurs. Enfin, des threads d'envoi et de réception sont présents chez chaque joueur dans le but de synchroniser les positions de leurs véhicules.