Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
163 changes: 162 additions & 1 deletion MyIA.AI.Notebooks/Search/Applications/CSP/App-5-Timetabling.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,13 @@
"print(f\"OR-Tools version: {cp_model.__name__} charge\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La cellule ci-dessus charge toutes les bibliothèques nécessaires au notebook : numpy pour les calculs, matplotlib pour les visualisations, et surtout OR-Tools CP-SAT (ortools.sat.python.cp_model) pour la résolution de contraintes. Le message 'Imports OK' confirme que toutes les dépendances sont disponibles dans l'environnement."
]
},
{
"cell_type": "markdown",
"id": "cell-data-section",
Expand Down Expand Up @@ -319,6 +326,13 @@
" print(f\" {name:<12} {info['capacity']:>10} {info['equipment']:<12}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Les données définissent un problème d'emploi du temps réaliste avec 8 cours (Algo, Probas, Systemes, Reseaux, BDD, IA, Securite, Web), 4 salles (Amphi_A, Salle_B, Labo_C, Labo_D), 20 créneaux horaires répartis sur 5 jours avec 4 créneaux par jour, et 4 enseignants (Dupont, Martin, Bernard, Leroy). Chaque cours a des contraintes spécifiques : nombre d'étudiants, enseignant attitré, et équipement requis (standard ou labo)."
]
},
{
"cell_type": "markdown",
"id": "cell-data-interpretation",
Expand Down Expand Up @@ -462,6 +476,13 @@
" print(f\" {tname:<10} : {courses}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"L'analyse de compatibilité révèle que certains cours sont fortement contraints : Algo, Probas, BDD et IA n'ont qu'une seule salle compatible (Amphi_A) en raison de leur nombre élevé d'étudiants. Les cours Reseaux, Securite et Web nécessitent des salles avec équipement labo. Dupont enseigne Algo et Systemes, Martin enseigne Probas et IA, Bernard enseigne Reseaux et Securite, et Leroy enseigne BDD et Web."
]
},
{
"cell_type": "markdown",
"id": "xlhn6ehqcw",
Expand Down Expand Up @@ -650,6 +671,13 @@
"print(\"Fonctions de visualisation et d'evaluation definies.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Les fonctions utilitaires définies ici permettent de visualiser l'emploi du temps sous forme de tableau et d'évaluer sa qualité selon plusieurs métriques : trous enseignants (créneau inoccupé entre deux cours d'un même enseignant — à ne pas confondre avec le conflit salle, où deux cours occupent la même salle au même créneau), et équilibre de charge entre les jours. Les métriques imprimées plus bas en feront la différence : le glouton rendra 1 trou, CP-SAT 0."
]
},
{
"cell_type": "markdown",
"id": "cell-greedy-section",
Expand Down Expand Up @@ -803,6 +831,13 @@
" print(f\" {cname:<12} {rname:<12} {slot_label(slot)}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"L'heuristique gloutonne a réussi à placer les 8 cours en seulement 0,07 milliseconde. Elle fonctionne en triant d'abord les cours par contrainte décroissante, puis en leur affectant le premier créneau et salle disponibles. Tous les cours ont été placés avec succès."
]
},
{
"cell_type": "markdown",
"id": "cell-greedy-visualization-intro",
Expand Down Expand Up @@ -881,6 +916,13 @@
" print(\"Pas de solution gloutonne a visualiser.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La visualisation graphique génère un tableau coloré montrant l'emploi du temps produit par l'heuristique gloutonne. Chaque cours apparaît avec sa salle et son créneau assignés, permettant de vérifier rapidement que les contraintes de capacité et d'équipement sont respectées."
]
},
{
"cell_type": "markdown",
"id": "cell-greedy-interpretation",
Expand Down Expand Up @@ -1141,6 +1183,13 @@
"print(\"Fonction solve_timetable_cpsat definie.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La fonction solve_timetable_cpsat utilise le solveur de contraintes OR-Tools CP-SAT pour modéliser et résoudre le problème d'emploi du temps de manière optimale, garantissant l'optimalité par exploration systématique."
]
},
{
"cell_type": "markdown",
"id": "cell-cpsat-execution-intro",
Expand Down Expand Up @@ -1212,6 +1261,13 @@
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La résolution par OR-Tools CP-SAT a trouvé une solution optimale pour le problème d'emploi du temps. Le statut OPTIMAL indique que le solveur a prouvé qu'aucune meilleure solution n'existe."
]
},
{
"cell_type": "markdown",
"id": "e3kzsfeycpn",
Expand Down Expand Up @@ -1288,6 +1344,13 @@
" print_metrics(cpsat_metrics, label=\"(CP-SAT)\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Les métriques de qualité montrent que la solution CP-SAT a zéro trou enseignant et zéro conflit, validant que tous les enseignants sont disponibles pour leurs cours assignés et qu'aucune salle n'est utilisée simultanément."
]
},
{
"cell_type": "markdown",
"id": "cell-cpsat-interpretation",
Expand Down Expand Up @@ -1462,6 +1525,13 @@
" print(\"=\" * 55)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Le tableau comparatif présente une analyse détaillée des solutions produites par les deux approches, montrant l'écart net entre les deux méthodes : trous enseignants 1 contre 0, cours le matin 75 % contre 100 %, écart-type des jours 3,20 contre 1,50, pour un temps de 0,07 ms (glouton) contre 32,5 ms (CP-SAT)."
]
},
{
"cell_type": "markdown",
"id": "cell-comparison-interpretation",
Expand Down Expand Up @@ -1699,6 +1769,13 @@
"print(MINIZINC_MODEL)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Le modèle MiniZinc pour l'emploi du temps déclare les variables, les contraintes et l'objectif du problème dans un langage de modélisation standard. Ce modèle peut être utilisé avec différents solveurs."
]
},
{
"cell_type": "markdown",
"id": "cell-minizinc-explanation",
Expand Down Expand Up @@ -1820,6 +1897,13 @@
" os.unlink(mzn_path)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La tentative d'exécution du modèle MiniZinc échoue car le binaire minizinc n'est pas installé dans le PATH. Cela illustre l'importance des dépendances logicielles pour l'exécution."
]
},
{
"cell_type": "markdown",
"id": "cell-minizinc-interpretation",
Expand Down Expand Up @@ -1962,6 +2046,13 @@
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La cellule ci-dessus définit la vue « par enseignant » de l'emploi du temps (visualize_teacher_schedule) — une grille 2×2, un panneau par enseignant, où l'on lit directement ses créneaux occupés et ses trous. Aucune résolution ici : l'exécution MiniZinc a été écartée plus haut par l'imprimé (« MiniZinc non installe (binaire `minizinc` absent du PATH) ») — cette visualisation travaille sur les solutions glouton et CP-SAT déjà calculées."
]
},
{
"cell_type": "markdown",
"id": "tepa1rpe4m9",
Expand Down Expand Up @@ -2073,6 +2164,13 @@
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La cellule ci-dessus définit la dernière visualisation : l'heatmap d'utilisation des salles (visualize_room_utilization), une matrice salle × créneau où chaque cours occupé colore sa case. Ce n'est pas un solveur alternatif mais un regard croisé — combinée aux métriques imprimées (Amphi_A 4 cours soit 20 %, Salle_B et Labo_C 1 cours, Labo_D 2 cours), elle montre visuellement où se concentre la charge."
]
},
{
"cell_type": "markdown",
"id": "cell-analysis-interpretation",
Expand Down Expand Up @@ -2359,6 +2457,13 @@
"print(f\"Solution trouvee : {status}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La résolution CP-SAT avec les paramètres ajustés a trouvé une solution optimale en 50,9 ms, confirmant la faisabilité du problème avec les contraintes définies."
]
},
{
"cell_type": "markdown",
"id": "a0df6895",
Expand Down Expand Up @@ -2681,6 +2786,62 @@
"- Google OR-Tools : https://developers.google.com/optimization\n",
"- MiniZinc : https://www.minizinc.org/"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Le problème d'emploi du temps illustre parfaitement l'utilité des solveurs de contraintes pour les problèmes combinatoires complexes. Avec 8 cours, 4 salles, 20 créneaux et de nombreuses contraintes (capacité, équipement, disponibilité enseignants), l'espace de recherche théorique est de 1,68×10¹⁵ combinaisons, rendant une approche brute-force totalement irréaliste."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La comparaison entre l'heuristique gloutonne (0,07 ms) et CP-SAT (quelques ms) montre que pour ce problème, les deux approches trouvent des solutions valides. Cependant, CP-SAT garantit l'optimalité, ce qui est crucial pour les applications où la qualité de la solution est plus importante que la vitesse de calcul pure."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Les métriques de qualité valident la solution CP-SAT : zéro trou enseignant, tous les cours le matin, répartition [2, 4, 2, 0, 0] sur les jours. La solution gloutonne, elle, reste valide (toutes les contraintes dures) mais rend 1 trou et entasse ses 8 cours sur le seul lundi — « valide » et « de qualité égale » sont deux choses distinctes, et c'est exactement ce que la colonne CP-SAT du tableau comparatif paie en 32,5 ms."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"L'approche par heuristique gloutonne, bien que rapide, ne garantit pas toujours l'optimalité. Cependant, pour ce problème spécifique, elle a réussi à trouver une solution valide en un temps record, ce qui démontre son utilité pour les cas où une solution rapide et acceptable est préférable à une solution optimale mais plus longue à calculer."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Le solveur CP-SAT d'OR-Tools utilise des algorithmes avancés de programmation par contraintes pour explorer efficacement l'espace de recherche. La solution optimale trouvée prouve que le problème est faisable avec les contraintes données, et que la configuration actuelle permet une planification parfaite sans conflits."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La visualisation de l'emploi du temps sous forme de tableau permet une vérification intuitive des résultats. On peut y voir que les cours sont répartis de manière à éviter les conflits de salles et de disponibilité des enseignants, confirmant ainsi le respect de toutes les contraintes du problème."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Les problèmes de planification comme celui-ci sont omniprésents dans le monde réel : emplois du temps scolaires, horaires de transport, affectation de ressources, etc. Les solveurs de contraintes offrent une solution élégante et efficace pour ces problèmes combinatoires complexes."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"En conclusion, ce notebook démontre deux approches complémentaires pour résoudre des problèmes de planification : les heuristiques rapides pour les solutions immédiates, et les solveurs de contraintes pour les solutions optimales et garanties. Le choix entre ces approches dépend des exigences spécifiques de l'application en termes de temps de calcul et de qualité de solution..."
]
}
],
"metadata": {
Expand Down Expand Up @@ -2718,4 +2879,4 @@
},
"nbformat": 4,
"nbformat_minor": 5
}
}
Loading
Loading