Files
TermNSI/Projets/mastermind/JALONS.md

3.3 KiB

Jalons — Mastermind & Algorithmes Génétiques

Progression suggérée sur ~10 séances (septembre → février)


Phase 1 — Comprendre les algorithmes génétiques (Séances 1-2)

Objectif : Saisir l'analogie entre évolution biologique et optimisation.

  • Lire la fiche ../src/src_mastermind_fiche.md du début jusqu'à la section "Les individus"
  • Répondre aux questions : qu'est-ce qu'un individu ? une population ? le fitness ? la sélection ?
  • Schématiser à la main le cycle d'un algorithme génétique :
    Génèse → Évaluation → Sélection → Croisement → Mutation → [retour Évaluation]
    
  • Expliquer en une phrase comment cet algorithme peut résoudre le Mastermind

Phase 2 — L'individu : la classe Combinaison (Séances 3-4)

Objectif : Implémenter la brique de base.

  • Implémenter init_value(self) → génère une combinaison aléatoire de couleurs
  • Implémenter cross_with(self, other) → croisement en 1 point (renvoie 2 enfants)
  • Implémenter mutate_gene(self, gene) → remplace un gène par une autre couleur aléatoire
  • Tester chaque méthode indépendamment avant de passer à la suite

Point clé : le croisement en 1 point prend un indice aléatoire et échange les parties.


Phase 3 — Le problème : la classe Mastermind (Séances 5-6)

Objectif : Définir comment évaluer une combinaison.

  • Implémenter create_individual(self) → crée un individu aléatoire du bon type
  • Implémenter evaluate_fitness(self, individual) → compte les gènes bien placés
  • Implémenter best_individual(self, population) → renvoie le meilleur de la population
  • Implémenter tournament(self, first, second) → compare deux individus, garde le meilleur
  • Tester avec une combinaison cible connue et vérifier que le score est correct

Phase 4 — L'algorithme : la classe AlgoGen (Séances 7-8)

Objectif : Assembler toutes les briques.

  • Implémenter genesis(self) → crée la population initiale
  • Implémenter evaluate_population(self, population) → évalue tous les individus
  • Implémenter next_generation_tournament(self, population) → sélection par tournoi
  • Implémenter crossover(self, population) → croisements entre les meilleurs
  • Implémenter mutate(self, individuals) → applique les mutations
  • Implémenter solve(self, nb_generations) → boucle principale

Phase 5 — Tests, ajustement et documentation (Séances 9-10)

Objectif : Valider et optimiser.

  • Tester avec la combinaison exemple : Mastermind(["bleu", "blanc", "blanc", "rouge"])
  • Faire varier les paramètres : taille de population, probabilité de mutation, taux de croisement
  • Observer : combien de générations faut-il en moyenne pour trouver la solution ?
  • Tracer la courbe de convergence (fitness max par génération)
  • Compléter le SUIVI.md et préparer les questions pour le Grand Oral

Idées d'extension avancée

  • Nouveau problème : adapter le framework à un autre problème (labyrinthe, sac à dos, TSP...)
  • Roulette vs tournoi : implémenter une sélection par roulette et comparer les performances
  • Mastermind jouable : ajouter une interface où un humain joue contre l'IA
  • Parallélisation : tester plusieurs populations en parallèle et garder la meilleure

Auteur : Florian Mathieu — Licence CC BY NC