81 lines
3.3 KiB
Markdown
81 lines
3.3 KiB
Markdown
# 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
|