Contexte
L'agent apprend à jouer à Snake sans aucune instruction humaine : il explore, se plante, et améliore progressivement sa stratégie par renforcement. Après une nuit d'entraînement minimum, le meilleur agent a atteint 160 pommes mangées.
Comment l'IA décide
À chaque instant, l'agent ne planifie pas : il calcule une probabilité pour chacun de ses trois mouvements possibles (tout droit, gauche, droite) et choisit le plus prometteur. L'état du jeu est résumé en 11 valeurs binaires : présence d'un danger immédiat dans chaque direction, direction actuelle du serpent, position relative de la nourriture.
Ce choix de 11 valeurs est le fruit d'un compromis : à 3 valeurs, l'agent stagnait autour de 5 pommes. À 11, il dispose d'assez de contexte pour naviguer efficacement sans surcharger le calcul local.
Défis
Boucles infinies : Sans contrainte, l'agent pouvait tourner en rond indéfiniment. Résolu par une pénalité croissante s'il ne mange pas dans un délai imparti — au-delà, il meurt.
Overfitting : Des pénalités supplémentaires ont été ajoutées sur les actions inutiles pour forcer une généralisation correcte.
Architecture
- Environnement : Moteur de jeu Pygame gérant l'état, les collisions et les récompenses.
- Agent : Mémoire d'expériences passées (experience replay) pour stabiliser l'apprentissage.
- Réseau :
Linear_QNetsous PyTorch — réseau linéaire simple, entraîné par rétropropagation à chaque tour.