Skip to content

vetuedenoir/Learn2Slither

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🐍LEARN2SLITHER

Description

Learn2Slither est une implémentation personnalisée du jeu Snake où un agent d’intelligence artificielle apprend à jouer grâce à l’apprentissage par renforcement (Reinforcement Learning). L’objectif : entraîner un serpent pour qu’il survive et atteigne la plus grande taille possible, tout en évitant les obstacles et en optimisant ses choix de déplacements.

Le projet combine :

  • Un moteur de jeu en C pour la simulation rapide et l’affichage graphique.
  • Un agent en Python qui apprend via Q-Learning.
demo_snake

Fonctionnalités principales

Environnement / Plateau

  • Plateau de N x N cellules
  • Deux pommes vertes (augmentent la taille du serpent).
  • Une pomme rouge (diminue la taille du serpent).

État / Vision

  • Le serpent ne « voit » que dans les 4 directions cardinales depuis sa tête.
  • Informations disponibles : murs (W), tête (H), corps (S), pommes vertes (G), pommes rouges (R), cases vides (0).

Actions possibles

  • UP, DOWN, LEFT, RIGHT.
  • Les décisions sont prises uniquement à partir de la vision du serpent.

Récompenses

  • Pomme verte : récompense positive.
  • Voir une pomme verte : petite recompense positive
  • Pomme rouge : récompense négative.
  • Aucune pomme : petite pénalité ou rien.
  • Game over : grosse pénalité.

⚙️ Fonctionnement et options

1️⃣ Le Board (environnement de jeu)

Le Board est la partie C qui simule le jeu Snake et gère :

  1. Initialisation
    • Création de la grille de jeu.
    • Placement initial du serpent et des pommes (vertes et rouges).
  2. Mise à jour
    • Déplace le serpent selon l’action reçue.
    • Ajoute ou retire des segments en fonction des pommes mangées.
    • Détecte les collisions (murs, corps du serpent, taille nulle).
  3. Communication avec l’agent
    • Écrit sur la sortie standard (stdout) la vision du serpent, c’est-à-dire ce qu’il peut “voir” dans les 4 directions depuis sa tête.
    • Cette vision est transmise à l’agent via un pipe.

2️⃣ L’Agent (intelligence artificielle)

L’agent est écrit en Python et utilise un algorithme de Q-Learning pour apprendre à prendre les meilleures décisions.
Voici le cycle de fonctionnement d’une session :

  1. Lecture de la vision
    L’interpréteur lit la sortie envoyée par le Board et récupère :

    • L’état du plateau autour du serpent.
    • Une éventuelle récompense liée à la dernière action.
  2. Création de l’état
    La vision est transformée en un vecteur d’état qui encode : (danger_forward, danger_left, danger_right, green_forward, green_left, green_right, green_close, red_forward, red_left, red_right)

  • Exemple : (1, 1, 0, 0, 0, 1, 0, 0, 0, 0)
    → Il y a danger devant et à gauche, pas de danger à droite, et une pomme verte à droite.
  1. Choix de l’action
    L’agent sélectionne une action (UP, DOWN, LEFT, RIGHT) :
  • Soit aléatoirement (exploration) selon un facteur epsilon qui diminue avec le temps.
  • Soit en choisissant l’action avec la plus haute valeur dans la Q-table (exploitation).
  1. Envoi de l’action
    L’action choisie est envoyée au Board via sockets.

  2. Observation du nouvel état
    Le Board exécute l’action, met à jour le plateau et renvoie :

  • La nouvelle vision → transformée en nouvel état.
  • La récompense obtenue.
  1. Mise à jour de la Q-table
    L’agent ajuste les valeurs associées à (état, action) selon la formule de Q-learning : Q(state, action) ← Q(state, action) + α * [ reward + γ * max_a' Q(next_state, a') - Q(state, action) ] où :
  • α = taux d’apprentissage (learning rate).
  • γ = facteur de discount (discount factor).
  1. Fin de session
    Si le serpent meurt (reward = DEAD), la session se termine.
    Les statistiques (nombre de coups, taille maximale) sont enregistrées.

Les statistiques montrant l'évolution du modèle

Statistique_SNAKE

Lancement avec le script Snake

Le script snake est utilisé pour lancer les deux programmes Board et Agent avec les arguments appropriés. Il simplifie le processus de lancement en combinant les arguments des deux programmes en une seule commande.

Arguments

Argument Description
nb_cells Le nombre de cellules du plateau de jeu. Doit être un entier supérieur ou égal à 8.
cell_size La taille des cellules du plateau de jeu. Doit être un entier compris entre 2 et 100.
port Le numéro de port pour la connexion entre le plateau de jeu et l'agent.
sessions Le nombre total de sessions que l'agent doit jouer ou entraîner.
board_option Option pour le programme Board. Peut être visualoff pour désactiver la visualisation ou run lancer directement l'entrainement. par default ce lance en mode step-by-step
-s, --save Le nom du fichier pour sauvegarder le modèle de l'agent.
-l, --load Le nom du fichier pour charger le modèle de l'agent.
-dontlearn Option pour désactiver l'apprentissage du modèle de l'agent.

Touches

(clavier qwerty)

  • S pour run
  • espace pour arrêter et Step_by-step
  • echap pour quitter
  • flèches pour se déplacer si vous jouez vous-même

Exemple d'utilisation

Lancer les deux programmes avec le script Snake

python3 snake.py 10 30 8080 100 run -l model_load -dontlearn

Installation

Optionnel : installation du gestionnaire d'environnement virtuel python

apt install venv

A lancer à la racine du projet

python3 setup.py; source .pvenv/bin/activate

SOLO GAME ?

Possible de jouer soi-même au jeu

./board/Board 20 30

About

Machine_learning project, train a snake with Q_learning algorithm

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published