Files
BUT3-JEU/README.md
2025-09-11 11:37:24 +02:00

3.1 KiB
Raw Blame History

📘 README Minimax pour le jeu de Nim

🎯 Objectif

Ce TP a pour but dimplémenter lalgorithme Minimax dans le jeu de Nim (variante à 1 tas où lon peut retirer 1, 2 ou 3 objets).
On développe plusieurs versions de lalgorithme pour comprendre ses optimisations possibles.


📂 Fichiers

Le projet contient 4 fichiers Java, correspondant chacun à une variante de Minimax :

  1. MinimaxSimple.java

    • Version de base.
    • Explore toutes les possibilités jusquà la fin de la partie.
    • Pas doptimisation → explore parfois plus que nécessaire.
  2. MinimaxEarlyStop.java

    • Optimisation par arrêt anticipé .
    • Si un coup gagnant (pour Max) ou perdant (pour Min) est trouvé, la recherche sarrête immédiatement.
    • Même résultat que la version simple, mais plus rapide.
boutaric@MacBook-James TP1 % time java MinimaxSimple 
Résultat pour n=8 → -1
java MinimaxSimple  0,03s user 0,03s system 49% cpu 0,136 total
boutaric@MacBook-James TP1 % time java MinimaxStop 
Résultat  pour n=71
java MinimaxStop  0,04s user 0,02s system 93% cpu 0,062 total
  1. MinimaxProfondeur.java

    • Variante avec profondeur maximale fixée.
    • Quand la profondeur limite est atteinte, on utilise une fonction dévaluation heuristique.
    • Heuristique utilisée : une position est perdante si n % 4 == 0, sinon gagnante.
  2. MinimaxMemo.java

    • Optimisation par mémoïsation.
    • Utilise deux tableaux (memoMax et memoMin) pour stocker les résultats déjà calculés.
    • Évite les recalculs et accélère lalgorithme pour des valeurs de n plus grandes.

▶️ Exécution

Compiler et lancer chaque fichier séparément :

javac MinimaxSimple.java
java MinimaxSimple
javac MinimaxEarlyStop.java
java MinimaxEarlyStop
javac MinimaxProfondeur.java
java MinimaxProfondeur
javac MinimaxMemo.java
java MinimaxMemo

Chaque programme affiche le résultat pour une valeur donnée de n (taille initiale du tas).

  • +1 → Position gagnante pour Max (le joueur qui commence).
  • -1 → Position perdante pour Max.

📊 Exemple de résultats

Pour les premières positions de Nim (1 tas) :

n Résultat Commentaire
1 +1 Max peut tout prendre et gagne
2 +1 Max peut tout prendre et gagne
3 +1 Max peut tout prendre et gagne
4 -1 Position perdante (Min gagne)
5 +1 Max enlève 1 → reste 4 (perdant pour Min)
6 +1 Max enlève 2 → reste 4
7 +1 Max enlève 3 → reste 4
8 -1 Position perdante
... ... ...

🧠 Conclusion

  • Le Minimax simple permet de comprendre la logique de base.
  • Le Minimax stop améliore la performance sans changer le résultat.
  • La profondeur fixe + heuristique est utile si larbre est trop grand.
  • La mémoïsation accélère énormément le calcul pour des valeurs de n élevées.