54 lines
2.9 KiB
Markdown
54 lines
2.9 KiB
Markdown
# Projet - Mastermind & Algorithmes Génétiques
|
|
|
|
> Darwin rencontre la programmation : faire évoluer une population de combinaisons pour qu'elle converge vers la solution cachée du Mastermind - sans jamais la connaître à l'avance.
|
|
|
|
## Contexte
|
|
|
|
Le **Mastermind** est un jeu de déduction : un joueur choisit une combinaison secrète de 4 couleurs parmi 8, l'autre doit la deviner en un minimum d'essais.
|
|
|
|
Plutôt que de coder une IA par force brute, ce projet applique un **algorithme génétique** : on fait évoluer une population de combinaisons candidates en s'inspirant de la sélection naturelle (tournoi, croisement, mutation) jusqu'à trouver la solution.
|
|
|
|
Vous ne partez pas de rien : deux classes abstraites vous sont fournies, `Individual_Interface`
|
|
et `Problem_Interface`. Vous en héritez, et vous écrivez les méthodes qu'elles laissent vides.
|
|
La fiche de TP et l'activité guidée vous mènent pas à pas.
|
|
|
|
## Compétences mobilisées
|
|
|
|
| Notion | Chapitre du cours |
|
|
|--------|-------------------|
|
|
| Classes, héritage, encapsulation | POO |
|
|
| Paradigme fonctionnel (fonctions pures) | Paradigmes |
|
|
| Algorithmes d'optimisation | Algorithmique |
|
|
| Listes, compréhensions de listes | Programmation |
|
|
| Probabilités appliquées | - |
|
|
|
|
## Cahier des charges
|
|
|
|
### Fonctionnalités minimales
|
|
|
|
- [ ] Implémenter la classe `Combinaison` (individu) : création aléatoire, croisement, mutation
|
|
- [ ] Implémenter la classe `Mastermind` (problème) : évaluation du fitness, tournoi
|
|
- [ ] Implémenter la classe `AlgoGen` : génèse, sélection, croisement, mutation, solve
|
|
- [ ] Résoudre une combinaison cible en un nombre raisonnable de générations
|
|
- [ ] Afficher l'évolution du meilleur individu à chaque génération
|
|
|
|
### Extensions possibles
|
|
|
|
- [ ] Adapter le framework à un autre problème (labyrinthe, sac à dos...)
|
|
- [ ] Comparer plusieurs stratégies de sélection (tournoi vs roulette)
|
|
- [ ] Tracer la courbe de convergence (fitness max par génération)
|
|
- [ ] Implémenter un Mastermind jouable par un humain vs l'IA
|
|
|
|
## Ressources
|
|
|
|
- [Fiche de TP](https://florianmathieu.prof/hub-docs/nsi/terminale/Projets/src/src_mastermind_fiche/) - toutes les consignes, dans l'ordre
|
|
- [Activité guidée](https://florianmathieu.prof/hub-docs/nsi/terminale/Projets/src/Activit%C3%A9/) - le pas à pas complet, avec les explications
|
|
- [`individual_interface.py`](https://florianmathieu.prof/hub-docs/nsi/terminale/Projets/src/individual_interface/individual_interface.py) - classe abstraite d'un individu, à hériter
|
|
- [`problem_interface.py`](https://florianmathieu.prof/hub-docs/nsi/terminale/Projets/src/problem_interface/problem_interface.py) - classe abstraite d'un problème, à hériter
|
|
- [Algorithme génétique - Wikipedia](https://fr.wikipedia.org/wiki/Algorithme_génétique)
|
|
- [Mastermind - Wikipedia](https://fr.wikipedia.org/wiki/Mastermind)
|
|
|
|
---
|
|
|
|
Auteur : Florian Mathieu - Licence CC BY-SA
|