# 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