Search - Algorithmes de Recherche et Programmation par Contraintes
← Notebooks | ↑ .. | → SymbolicAI
Tout problème d’IA, du plus simple jeu de plateau à la planification logistique industrielle, se réduit à un même défi : explorer un espace de solutions possibles pour trouver la meilleure. Cette série vous apprend à maîtriser cette exploration, depuis les algorithmes classiques (BFS, A*, Minimax) jusqu’aux techniques avancées (CSP, métaheuristiques, hybridation LLM). Le fil rouge est la réduction de l’espace de recherche : comment passer d’une exploration aveugle exponentielle à une résolution intelligemment guidée.
Le parcours couvre quatre grands piliers. Les fondements formalisent les espaces d’états et couvrent les algorithmes de recherche non informée, informée, locale, génétique, adversariale et MCTS. La programmation par contraintes (CSP) introduit un changement de paradigme : au lieu d’explorer, on réduit les domaines par propagation. Les applications (20 cas réels, chacun décliné en binôme Python ⇄ C#) illustrent chaque concept sur des problèmes adaptés de projets étudiants. Enfin, les métaheuristiques et l’hybridation relient la recherche à l’optimisation continue et aux LLMs.
À qui s’adresse cette série : étudiants en informatique (L3-M2), ingénieurs logiciel confrontés à des problèmes d’optimisation, et candidats à des entretiens techniques. Les notebooks Python ne nécessitent que Python 3.10+ avec ortools et deap. Les notebooks C# — jumeaux de parité de chaque notebook Python (marathon EPIC #4956) et la Partie 4 — métaheuristiques composables au-dessus de GeneticSharp — requièrent .NET 9.0 + dotnet-interactive. Aucun prérequis en algorithmique avancée : les concepts sont introduits depuis les espaces d’états.
Pourquoi cette série
La recherche et l’optimisation sont au coeur de l’informatique : tout problème, du plus simple jeu de plateau à la planification logistique industrielle, se réduit à explorer un espace de solutions. Cette série couvre l’intégralité du spectre algorithmique — de la recherche aveugle (BFS) à l’hybridation LLM+CSP — en construisant une compréhension progressive des compromis fondamentaux.
Cette série repose sur une double approche, délibérément juxtaposée :
- Exploration systématique (recherche classique) : BFS, DFS, A*, Minimax — des algorithmes qui garantissent de trouver une solution optimale si elle existe, mais dont le coût peut être exponentiel. C’est le domaine des espaces d’états, des heuristiques admissibles, de la complétude.
- Réduction de l’espace (programmation par contraintes) : au lieu d’explorer bêtement, on élague les domaines impossibles par propagation (AC-3, Forward Checking, CP-SAT). C’est un changement de paradigme : on ne cherche plus, on contraint. Avantage : résolution de problèmes industriels (ordonnancement, emploi du temps) en quelques millisecondes. Limite : la modélisation est un art.
Avoir les deux approches permet de comprendre quand explorer, quand contraindre, et quand les combiner — une compétence cruciale pour tout ingénieur confronté à des problèmes combinatoires.
Au-delà de la méthodologie, cette série couvre des applications réelles adaptées de projets étudiants : planification d’infirmiers (CHU), ordonnancement d’atelier (industrie), optimisation de portefeuille (finance), TSP/VRP (logistique), démineur (CSP + probabilités), Picross (couverture exacte). Chaque application est une brique construite sur les concepts précédents.
Qu’est-ce que la recherche en IA ?
| Aspect | Exploration systématique | Programmation par contraintes | Métaheuristiques |
|---|---|---|---|
| Philosophie | Énumérer méthodiquement | Réduire les domaines impossibles | S’inspirer de la nature |
| Garantie | Solution optimale (si temps) | Solution optimale (si modélisable) | Aucune garantie |
| Modélisation | Espace d’états (S, A, T, G) | Variables, domaines, contraintes | Fonction objectif, voisinage |
| Complexité | Exponentielle (mais heuristiques) | Exponentielle (mais propagation) | Polynomiale par itération |
| Quand l’utiliser | Problèmes bien définis, heuristique connue | Contraintes claires, domaine discret | Grands espaces, approximation acceptable |
Objectifs d’apprentissage
À l’issue de cette série, vous serez capable de :
- Formaliser un problème réel en espace d’états (S, s0, A, T, G) et choisir l’algorithme de recherche adapté
- Comparer recherche systématique (A*), contraintes (CSP) et métaheuristiques (GA, SA) sur un même problème
- Modéliser un problème industriel en CSP (ordonnancement, routing, emploi du temps) avec OR-Tools CP-SAT
- Évaluer les compromis garantie vs performance vs généralisation pour choisir une stratégie algorithmique
- Combiner approches complémentaires (CP+SAT, LLM+CSP, MCTS+DQN) pour des problèmes complexes
Parcours d’apprentissage
Phase 1 : Fondements de la recherche (Part 1, notebooks 1-7, ~7h)
Le parcours commence par Search-1 (StateSpace) qui formalise les problèmes sous forme (S, s0, A, T, G) et Search-2 (Uninformed) qui couvre BFS, DFS, UCS et IDDFS. Search-3 (Informed) introduit les heuristiques et A*, le cœur de la recherche guidée. Search-4 (LocalSearch) pivote vers l’optimisation locale (Hill Climbing, Simulated Annealing, Tabu Search), et Search-5 (GeneticAlgorithms) généralise avec les algorithmes évolutionnaires. Search-6 (AdversarialSearch) explore la recherche dans les jeux (Minimax, Alpha-Beta), et Search-7 (MCTS) va jusqu’à Monte Carlo Tree Search et les approches AlphaGo. À l’issue de cette phase, vous maîtrisez les trois grands paradigmes : exploration systématique, optimisation locale, et recherche dans les jeux.
Phase 2 : Programmation par contraintes (Part 2, CSP 1-6, ~6h)
La Phase 2 change de paradigme : au lieu d’explorer un espace, on le réduit. CSP-1 (Fundamentals) introduit le modèle (X, D, C) et le backtracking. CSP-2 (Consistency) couvre la propagation de contraintes (AC-3, Forward Checking, MAC). CSP-3 à CSP-6 montent en complexité : contraintes globales (AllDifferent, Cumulative), ordonnancement (Job-Shop, RCPSP), optimisation (Bin Packing, Knapsack), et hybridation (LCG, CP+SAT, CP+ML, LLM+CSP). Cette phase présuppose les bases de la Phase 1 (formalisation, backtracking = DFS) et constitue le cœur pratique de la série.
Phase 3 : Applications et frontières (Applications + notebooks avancés, ~18h)
Les 20 applications (chacune en binôme Python ⇄ C#) illustrent chaque concept sur des cas réels : planification d’infirmiers (CSP-4), ordonnancement d’atelier (CSP-4), optimisation de portefeuille (métaheuristiques), TSP et VRP (routing), démineur et Wordle (CSP + théorie de l’information), Picross (couverture exacte). Les notebooks avancés de la Part 1 (programmation linéaire Search-9, automates symboliques Search-10, métaheuristiques Search-11) et de la Part 2 (contraintes souples CSP-7, temporelles CSP-8, distribuées CSP-9) complètent le panorama. L’ensemble est enrichi par des ponts vers les autres séries : Sudoku (DLX, automates), SymbolicAI (Z3, planification), GameTheory (Minimax, MCTS), et RL (MCTS + DQN).
flowchart LR
P1["<b>Phase 1 — Fondements</b> (~7h)<br/>Search-1 … Search-7<br/><i>Trois paradigmes :</i><br/>• exploration systématique<br/> (BFS, UCS, A*)<br/>• optimisation locale<br/> (SA, Tabu, GA)<br/>• recherche dans les jeux<br/> (Minimax, MCTS)"]
P2["<b>Phase 2 — Programmation<br/>par contraintes</b> (~6h)<br/>CSP-1 … CSP-6<br/><i>Réduire l'espace<br/>plutôt que l'explorer</i><br/>backtracking → AC-3<br/>→ contraintes globales<br/>→ ordonnancement<br/>→ CP + SAT / ML / LLM"]
P3["<b>Phase 3 — Applications<br/>& frontières</b> (~18h)<br/>20 cas réels × 2 langues :<br/>TSP, VRP, RCPSP,<br/>Bin Packing, Wordle, Picross…<br/>+ notebooks avancés<br/>(LP, automates,<br/>souples, temporelles)"]
BR["<b>Séries connexes</b><br/>Sudoku (DLX)<br/>SymbolicAI (Z3)<br/>GameTheory (Minimax/MCTS)<br/>RL (MCTS + DQN)"]
P4["<b>Side-track .NET 9</b><br/>Part 4 — Métaheuristiques<br/>composables<br/>MGS-1 … MGS-19<br/><i>reconstruire & composer<br/>au-dessus de GeneticSharp</i>"]
P1 -->|"backtracking = DFS"| P2
P2 -->|"modélisation industrielle"| P3
P3 -.->|"ponts"| BR
P1 -.->|"side-track .NET"| P4
Side-track avancé : métaheuristiques composables (Part 4, C# .NET 9)
En parallèle du parcours Python, la Partie 4 — MetaGeneticSharp propose un side-track .NET 9 de 22 notebooks (MGS-1 à MGS-19 plus la trilogie MGS-7b/7c/7d de projection N-D des paysages) qui reconstruit et compose les métaheuristiques au-dessus de GeneticSharp plutôt que d’importer une boîte noire. Il prolonge Search-5 (GeneticAlgorithms) et Search-11 (Métaheuristiques) et se lit en quatre temps : MGS-1 à 7 bâtissent le moteur et la grammaire de composition (jusqu’au TSP) ; MGS-7b, MGS-8 à 14 visualisent les paysages de fitness (MGS-7b projette les benchmarks en dimension N≥5) et mesurent la robustesse aux biais des bancs CEC (décalage, rotation, synergie d’îles) ; MGS-15 à 18 referment la série sur l’analyse quantitative de paysage et la méta-stratégie (No-Free-Lunch, contrôle de paramètres) ; MGS-19 démonte le recuit simulé pour éprouver l’opérateur de Metropolis seul. Optionnel pour qui vise le cœur Python, central pour qui veut construire ses métaheuristiques en .NET.
Ce que chaque notebook apporte
Chaque notebook introduit un concept ou algorithme spécifique. Le tableau ci-dessous résume en une ligne l’apport pédagogique de chacun.
Partie 1 : Search Fondamental
| # | Notebook | Apport pédagogique |
|---|---|---|
| 1 | StateSpace | Formaliser un problème en espace d’états (S, s0, A, T, G) |
| 2 | Uninformed | BFS vs DFS : comment l’ordre d’exploration change la complexité |
| 3 | Informed | Heuristiques admissibles et A* : guider la recherche vers la solution |
| 4 | LocalSearch | Abandonner la garantie pour l’efficacité : paysages de fitness et optima locaux |
| 5 | GeneticAlgorithms | Populations, crossover, mutation : l’évolution comme métaheuristique — piège déceptif Goldberg k-trap (k=4, L=20) [#6849] : hill-climber bloqué 17/20, AG 20/20 via croisement |
| 6 | AdversarialSearch | Minimax, Alpha-Beta : chercher dans les jeux à deux joueurs |
| 7 | MCTS-And-Beyond | Monte Carlo Tree Search et la révolution AlphaGo (MCTS + DQN) |
| 8 | DancingLinks | Couverture exacte de Knuth : une structure de données transforme un algorithme |
| 9 | LinearProgramming | Programmation linéaire (PuLP) : relaxer les contraintes entières |
| 10 | SymbolicAutomata | Automates finis + Z3 : raisonner sur des alphabets infinis |
| 11 | Métaheuristiques | PSO, ABC, BRO avec MEALPy : comparer 160+ algorithmes |
Partie 2 : Programmation par Contraintes
| # | Notebook | Apport pédagogique |
|---|---|---|
| 1 | CSP Fundamentals | Modèle (X, D, C) : déclarer le problème plutôt que l’algorithme |
| 2 | CSP Consistency | AC-3, Forward Checking : réduire l’espace par propagation avant la recherche |
| 3 | CSP Advanced | Contraintes globales (AllDifferent, Cumulative, Circuit) |
| 4 | CSP Scheduling | Job-Shop, RCPSP, Nurse : l’ordonnancement industriel par contraintes |
| 5 | CSP Optimization | Bin Packing, Knapsack, Portfolio : optimiser sous contraintes |
| 6 | CSP Hybridization | LCG, CP+SAT, CP+ML, LLM+CSP : combiner les paradigmes |
| 7 | CSP Soft | Contraintes souples, Fuzzy CSP : quand toutes les contraintes ne sont pas égales |
| 8 | CSP Temporal | Allen’s Interval Algebra, STP : raisonner sur le temps |
| 9 | CSP Distributed | ABT, AWC : résoudre des CSP répartis entre agents |
#—
Applications (Applications/)
Problèmes du monde réel adaptés de projets étudiants. Chaque application est un binôme Python ⇄ C# (parité complète depuis le marathon #4956) ; les jumeaux C# suivent la convention App-Nb-...-CSharp.ipynb.
Applications Search (Applications/Search/)
| # | Notebook | Durée | Contenu | Source |
|---|---|---|---|---|
| 1 | App-14b-ConnectFour | ~50 min | Puissance 4 : 5 IA au tournoi (Random, Glouton, Minimax α-β d=4/d=6, MCTS) + framework AIMA | Projet étudiant |
| 1b | App-14c-ConnectFour-CSharp | ~45 min | Jumeau C# — Minimax + Alpha-Beta + MCTS (UCB1) + glouton + iterative deepening from-scratch, heuristique de fenêtres + tournoi round-robin, parité #4956 | Jumeau .NET |
| 2 | App-14-ConnectFour-Adversarial | ~45 min | Benchmark adversarial : Minimax, Alpha-Beta, MCTS | Projet étudiant |
| 2b | App-14-ConnectFour-Adversarial-CSharp | ~40 min | Jumeau C# — Minimax + Alpha-Beta (élagage) + MCTS (UCB1) from-scratch, benchmark nœuds + tournoi round-robin, parité #4956 | Jumeau .NET |
Applications CSP (Applications/CSP/)
| # | Notebook | Durée | Contenu | Source |
|---|---|---|---|---|
| 1 | App-1-NQueens | ~30 min | Benchmark classique CSP : backtracking, min-conflicts, OR-Tools | Classique |
| 2 | App-2-GraphColoring | ~45 min | Coloration de cartes : Greedy, DSATUR, CP-SAT, départements français | Projet étudiant |
| 3 | App-3-NurseScheduling | ~60 min | Planning infirmiers : contraintes hard/soft, OR-Tools CP-SAT | Projet étudiant |
| 4 | App-4-JobShopScheduling | ~60 min | Ordonnancement industriel : intervalles, précédences, makespan | Projet étudiant |
| 5 | App-5-Timetabling | ~50 min | Emploi du temps universitaire : MiniZinc + OR-Tools | Projet étudiant |
| 6 | App-6-Minesweeper | ~50 min | Démineur CSP : propagation, probabilités, hybride CSP+LLM | Projet étudiant |
| 7 | App-7-Wordle | ~45 min | Solveur Wordle : filtrage CSP + théorie de l’information | Projet étudiant |
| 8 | App-8-MiniZinc | ~50 min | Modélisation déclarative : syntaxe MiniZinc, contraintes globales | Nouveau |
| 9 | App-11-Picross | ~40 min | Nonogrammes : speedup 27Mx CP-SAT vs naïve | Projet étudiant |
| 10 | App-15-SportsScheduling | ~55 min | Calendrier sportif : contraintes TV, équité, déplacements | Projet étudiant |
| 11 | App-16-Crossword-CSP | ~45 min | Mots croisés : backtracking, OR-Tools, génération | Projet étudiant |
| 12 | App-19-ProceduralGeneration-WFC | ~45 min | Génération procédurale : Wave Function Collapse via CP-SAT | Projet étudiant |
| 12 (C#) | App-19-ProceduralGeneration-WFC-CSharp | ~45 min | Twin C# du 12 : WFC from-scratch (entropie de Shannon + propagation AC-3 + backtracking) (See #4956) | Marathon |
| 13 | App-20-SudokuBenchmark-Python | ~50 min | Benchmark 4 solveurs Sudoku (backtracking naïf → optimisé → contraintes) sur banc Easy/Medium/Hard : dénombrement du travail | Synthèse série |
| 13 (C#) | App-20b-SudokuBenchmark-CSharp | ~50 min | Twin C# du 13 : mêmes solveurs from-scratch en .NET, comparaison des écosystèmes | Jumeau .NET |
| 16 | App-26-CoveringArrays-Guarantee-Audit | ~55 min | Covering Arrays : oracle constraint-aware, set cover CP-SAT exact, bornes et baselines IPOG/AETG-like — distillation PrCon H4 (Valérian Pichot) | Projet étudiant (PrCon PR #58) |
Les autres jumeaux C# de la sous-série CSP (N-Queens, GraphColoring, NurseScheduling, JobShop, Timetabling, Minesweeper, Wordle, MiniZinc, Picross, SportsScheduling) suivent le même principe : ré-implémentation .NET du notebook Python de référence, solveurs from-scratch ou OR-Tools natif selon le sujet (marathon #4956).
Applications Hybrides / Métaheuristiques (Applications/Hybrid/)
| # | Notebook | Durée | Contenu | Source |
|---|---|---|---|---|
| 1 | App-9-EdgeDetection | ~40 min | Détection de bords par GA : PyGAD, filtres de convolution | Existant (refonte) |
| 2 | App-9b-EdgeDetection-CSharp | ~35 min | Side track C# : GeneticSharp pour detection de bords | Existant |
| 3 | App-10-Portfolio | ~40 min | Optimisation de portefeuille : frontière de Pareto, multi-objectif | Existant (refonte) |
| 4 | App-10b-Portfolio-CSharp | ~30 min | Side track C# : GeneticSharp pour portefeuille | Existant |
| 5 | App-13-TSP-Metaheuristics | ~50 min | TSP : SA, GA, ACO, OR-Tools routing | Classique |
| 6 | App-13b-TSP-Metaheuristics-CSharp | ~45 min | Jumeau C# — SA, GA, ACO from-scratch sur le même TSP, parité #4956 | Jumeau .NET |
| 7 | App-17-VRP-Logistics | ~60 min | Vehicle Routing : SA, GA, ACO, CP-SAT | Projet étudiant |
| 8 | App-17b-VRP-Logistics-CSharp | ~55 min | Jumeau C# — VRP métaheuristiques .NET, parité #4956 | Jumeau .NET |
| 8b | App-17b-VRP-Logistics-Python | ~45 min | Twin Python du b — VRP métaheuristiques from-scratch (numpy) + vérification OR-Tools, parité #4956 | Jumeau Python |
| 9 | App-18-HyperparameterTuning | ~40 min | Optimisation ML : Bayésienne, GA, PSO, Optuna | Nouveau |
| 10 | App-18b-HyperparameterTuning-CSharp | ~35 min | Jumeau C# — tuning GA/PSO from-scratch .NET, parité #4956 | Jumeau .NET |
| 11 | App-18b-HyperparameterTuning-Python | ~35 min | Jumeau Python from-scratch — GP+EI, GA, PSO numpy + pont Optuna, parité #4956 | Jumeau Python |
| 12 | App-22-AlgorithmSelection-Python | ~45 min | Sélection empirique d’algorithmes : 3 jeux, 13 familles conceptuelles / 14 étiquettes mesurées, non-commensurabilité + Pareto + choix sous préférences — hommage PR IS #42 (Théodore Deguest) | Projet étudiant (IS PR #42) |
Parité .NET ⇄ Python
Cette série est née Python d’abord pour son cœur pédagogique (recherche, CSP, applications), avec la Partie 4 — métaheuristiques composables comme territoire .NET natif (au-dessus de MetaGeneticSharp). Le marathon parité EPIC #4956 (juin–juillet 2026) a ensuite généralisé le binôme Python ⇄ C# à l’ensemble du cœur curriculaire : jumeaux C# des fondements (Part 1), de la programmation par contraintes (Part 2), de la recherche heuristique avancée et de 20 cas d’application. Depuis, des compagnons et audits App-21 à App-31 ont porté le dossier Applications à 57 notebooks ; le tableau distingue donc le cœur en binômes de l’inventaire actuel.
Couverture actuelle
| Sous-série | Cœur pédagogique | Langage | Correspondance dans l’autre langage |
|---|---|---|---|
| Part1-Foundations | 23 (Search-1 à Search-11, Search-2b, Search-2c, Search-03b à Search-03e, Search-09b à Search-09c, Search-11c, Search-11d, Search-12a, Search-13a) | Python (22) + C# natif (Search-2c QuikGraph) | 15 jumeaux C# (Search-1 à 11, 2b, 03b/03c/03d) + déclinaison deep-dive Search-11b (Métaheuristiques, 4 volets) |
| Discrepancy | 2 (Discrepancy-01 Beck–Fiala, Discrepancy-02 Komlós) | Python + Lean 4 (kernel lean4-wsl) |
Compagnons formels du lake discrepancy_lean |
| Part2-CSP | 9 (CSP-1 à CSP-9) | Python + .NET | 9 binômes complets — marathon achevé, voir bilan final |
| Part4-Metaheuristics | 35 (25 à la racine + 10 dans MGS-vs-mealpy/) |
C# / .NET (natif) | Prolonge Search-5 / Search-11 (Python) sous l’angle ingénierie |
| Applications | 20 cas cœur (App-1 à App-20), 57 notebooks actuels | Python + .NET | 20 binômes complets + compagnons et audits App-21 à App-31 |
| Racine | 0 | — | (aucun — voir _archive/ pour les anciens notebooks racine) |
La série a atteint la parité Python ⇄ C# complète en juillet 2026 : le marathon EPIC #4956 a livré les jumeaux des trois parties curriculaires et des 20 applications, tous mergés sur main. Seule la Partie 4 reste mono-langage — par conception, puisqu’elle démontre l’ingénierie .NET native au-dessus de GeneticSharp.
Leviers .NET utilisés par le portage
Le levier .NET retenu a dépendu de la dépendance sous-jacente de chaque notebook :
| Cible | Dépendance Python | Levier .NET retenu | Remarque |
|---|---|---|---|
| CSP-1 à CSP-9 (modélisation par contraintes) | ortools (CSP-3 à CSP-8) |
Choco-solver via IKVM (CSP-1/2/3/4/5/7) ; Google.OrTools NuGet natif (CSP-6/8) ; from-scratch Yokoo DisCSP (CSP-9) | Précédent fondateur : Sudoku-11-Choco-CSharp (Choco via IKVM) et son binôme Sudoku-11-Choco-Python |
| Search-9 Linear Programming | pulp |
Google.OrTools (NuGet natif, GLOP / PDLP) | Port direct, sans IKVM |
| Recherche d’états et jeux (Search-1 à Search-8) | aucune dépendance lourde | .NET Interactive pur, structures from-scratch | BFS/DFS/A*, Minimax/MCTS, DLX directement portés |
| Applications (App-1 à App-20) | ortools, pygad, stdlib |
Mix from-scratch / OR-Tools natif / GeneticSharp selon le sujet | 20 binômes complets |
Le portage s’est fait au fil de l’eau, une tranche par contribution — un notebook .NET exécuté de bout en bout avec ses exercices, jamais une passe monolithique. Le suivi d’ensemble est assuré par l’issue #4956.
Marathon EPIC #4956 — bilan final : parité 9/9 (2026-07-07)
La parité .NET ⇄ Python de la Partie 2 CSP a été portée par un marathon structuré autour de l’EPIC #4956 (mandat user 2026-07-03 : équilibre Choco ⇔ OR-Tools ⇔ from-scratch). Bilan final — 9 binômes C# sur 9, tous mergés sur main :
| Notebook | PR | Cycle | Solver C# | verdict SOTA | Sortie noteworthy |
|---|---|---|---|---|---|
| CSP-1-Fundamentals-CSharp | #5270 | 14 (2026-07-03) | IKVM 8.15 + Choco-solver 4.10.17 (DLL 12 MB) | SOTA-OK | Coloration de l’Australie 71 ms ; 8-Reines 102 ms |
| CSP-2-Consistency-CSharp | #5274 | 15 (2026-07-04) | IKVM 8.15 + Choco-solver 4.10.17 | SOTA-OK | AC-3 custom C# + Choco AC-3 builtin ; audit table Choco ⇔ OR-Tools |
| CSP-3-Csharp | PRs antérieurs | antérieur | IKVM 8.15 + Choco 4.10.17 | MERGED | (palette reine / équidistance, base historique) |
| CSP-4-Scheduling-CSharp | #5067 | tranche 1 cherry | IKVM 8.15 + Choco 4.10.17 (+ audit croisé OR-Tools) | SOTA-OK | Job-Shop / Nurse Scheduling en Choco IntVar / Task |
| CSP-5-Optimization-CSharp | #5018 → #5133 (rebase) | antérieur | IKVM 8.15 + Choco 4.10.17 | SOTA-OK | Bin Packing / Knapsack / cardinalité en Choco |
| CSP-6-Hybridization-CSharp | #5275 | 16 (2026-07-04) | Google.OrTools 9.15.6755 NuGet | SOTA-OK | CP + ML 50 instances (98 % faisables) ; Portfolio multi-stratégies |
| CSP-7-Csharp | PRs antérieurs | antérieur | IKVM 8.15 + Choco 4.10.17 | MERGED | (global-cardinality, symétrie, base historique) |
| CSP-8-Temporal-CSharp | #5276 | 17 (2026-07-04) | Google.OrTools 9.15.6755 | SOTA-OK | Allen 13 relations + STP Floyd-Warshall + TCSP ; CP-SAT optimal 0,0065 s |
| CSP-9-Distributed-CSharp | #5277 | 18 (2026-07-04) | Algo distribué Yokoo 1992 from-scratch (DisCSP) | SOTA-OK | AWC 62,0 msgs vs ABT 159,4 msgs à densité 0,5 (2,5× plus efficace) ; -58 % de fuite privacy |
Les 9 binômes sont tous mergés sur main (vérifié disque au 2026-07-07 : Part2-CSP/CSP-1-Csharp à CSP-9-Csharp présents et gît-trackés). Le verdict SOTA-OK est documenté dans les PRs du marathon (règle EPIC #3801 — vrai outil, pas workaround dégradé) ; les 2 PRs les plus anciennes (CSP-3, CSP-7) ont été livrées avant la formalisation de la règle et n’ont pas de verdict écrit. Équilibre solvers final : 6 Choco via IKVM (CSP-1/2/3/4/5/7), 2 OR-Tools CP-SAT natif .NET (CSP-6/8), 1 from-scratch (CSP-9, algorithme distribué Yokoo 1992).
Au-delà de la Partie 2, le même marathon a livré les jumeaux C# de la Partie 1 (Search-1 à 11, 2b), de la Partie 3 (Search-03b/03c/03d) et des 20 applications (dont App-20-SudokuBenchmark, créé directement en binôme) — la parité est complète sur tout le périmètre curriculaire de la série.
Concepts clés
| Concept | Description |
|---|---|
| Espace d’états | Formalisation (S, s0, A, T, G) d’un problème de recherche |
| BFS/DFS/A* | Algorithmes de recherche non informée et informée |
| Heuristique | Fonction h(n) estimant le coût restant (f = g + h pour A*) |
| Recherche locale | Hill Climbing, Simulated Annealing, Tabu Search |
| Recherche adversariale | Minimax, Alpha-Beta pruning, Null-window search |
| MCTS | Monte Carlo Tree Search : Sélection, Expansion, Simulation, Backpropagation |
| Métaheuristiques | PSO, ABC, SA, BRO - optimisation sans dérivées |
| CSP | Constraint Satisfaction Problem : (X, D, C) |
| Backtracking | Exploration systématique avec retour arrière |
| MRV/LCV | Heuristiques de choix de variable/valeur |
| Arc Consistency | Réduction des domaines par propagation (AC-3) |
| Algorithme Génétique | Évolution de population : sélection, crossover, mutation |
| Dancing Links (DLX) | Algorithme X avec listes doublement liées pour couverture exacte |
| Programmation Linéaire | Optimisation linéaire avec contraintes (PuLP, simplex) |
| Automates Symboliques | Prédicats Z3 pour alphabets infinis |
| OR-Tools CP-SAT | Solveur de programmation par contraintes de Google |
Ressources
Livres de référence
- AIMA - Russell & Norvig (4th ed.) - Chapitres 3-6
- Constraint Processing - Rina Dechter (2003)
- Handbook of Constraint Programming (2006)
- The CP-SAT Primer (2023) - Guide pratique OR-Tools
Bibliothèques
- Google OR-Tools - Solveur CP-SAT
- python-constraint - CSP basique
- Z3 Theorem Prover - Solveur SMT
- DEAP - Framework GA
- PyGAD - GA simplifié
- MEALPy - Métaheuristiques (160+ algorithmes)
- PuLP - Programmation linéaire
- automata-lib - Automates finis
- MiniZinc - Modélisation déclarative
- GeneticSharp - GA en C#
- MetaGeneticSharp - Couche métaheuristiques composables au-dessus de GeneticSharp (sous-module
MetaGeneticSharp/, projet enfant ravivant giacomelli/GeneticSharp#87) - OpenSpiel - Framework de jeux et RL
Projets étudiants sources
Les applications sont adaptées de projets étudiants. Les références spécifiques sont indiquées dans chaque notebook d’application.
Structure des fichiers
Search/
├── README.md # Ce fichier
├── requirements.txt # Dependances Python
├── search_helpers.py # Utilitaires partages
├── Part1-Foundations/ # Search Fondamental — jumeaux directs -Csharp Search-1..11/2b/03b..03d + Search-2c QuikGraph natif + déclinaison Métaheuristiques Search-11b en 4 volets + Search-09b/09c discrépance + Search-03e optimalité A* + Search-11c/11d sélection empirique & descente sous budget + Search-12a Composer-Regards + Search-13a Traverser-Murs-Certifies
│ ├── Search-01-StateSpace.ipynb
│ ├── Search-02-Uninformed.ipynb
│ ├── Search-02b-NetworkX.ipynb
│ ├── Search-02b-NetworkX-CSharp.ipynb # Twin C# graphes from-scratch (BFS/DFS, Dijkstra, centralités, Ford-Fulkerson) (See #4956)
│ ├── Search-02c-QuikGraph.ipynb
│ ├── Search-03-Informed.ipynb
│ ├── Search-04-LocalSearch.ipynb
│ ├── Search-05-GeneticAlgorithms.ipynb
│ ├── Search-06-AdversarialSearch.ipynb
│ ├── Search-07-MCTS-And-Beyond.ipynb
│ ├── Search-08-DancingLinks.ipynb
│ ├── Search-09-LinearProgramming.ipynb
│ ├── Search-09b-SpuriousMinima.ipynb
│ ├── Search-09c-CombinatorialDiscrepancy.ipynb
│ ├── Search-10-SymbolicAutomata.ipynb
│ ├── Search-11-Metaheuristics.ipynb
│ ├── Search-11c-Empirical-Algorithm-Selection.ipynb
│ ├── Search-11d-Descente-Sous-Budget.ipynb # Descente gloutonne sous plafond d'évaluations : loi Descent.lean (hstrict/hbarrier) exercée, hnostall réfuté (See #12204)
│ ├── Search-03b-PatternDatabases.ipynb
│ ├── Search-03c-LimitedDiscrepancySearch.ipynb
│ ├── Search-03d-WeightedAstar.ipynb
│ ├── Search-12a-Composer-Regards.ipynb # Composer des regards : play forward x coplay backward, corridor optimal f*=g+d (op 12 #12204)
│ └── Search-13a-Traverser-Murs-Certifies.ipynb # Traverser un mur : chemin minimal certifié (potentiels, 0-1 BFS, flot max/coupure min) sur pavage hexagonal (op 13 #12204)
├── Discrepancy/ # Sous-série formelle (ouverte par #17816, arbitrage Search #17802) : compagnons Lean du lake discrepancy_lean
│ ├── Discrepancy-01-BeckFiala-Lean-Python.ipynb # Beck–Fiala : pont Python vers le lake, sans Lean au runtime
│ └── Discrepancy-02-Komlos-Lean.ipynb # Compagnon formel : lake discrepancy_lean via kernel lean4-wsl (#13868)
│
├── Part2-CSP/ # Programmation par Contraintes (18 notebooks : 9 Python + 9 jumeaux C#)
│ ├── CSP-1-Fundamentals.ipynb
│ ├── CSP-2-Consistency.ipynb
│ ├── CSP-3-Advanced.ipynb
│ ├── CSP-4-Scheduling.ipynb
│ ├── CSP-5-Optimization.ipynb
│ ├── CSP-6-Hybridization.ipynb
│ ├── CSP-7-Soft.ipynb
│ ├── CSP-8-Temporal.ipynb
│ └── CSP-9-Distributed.ipynb
│
├── Applications/
│ ├── Search/ # Applications Search (4 notebooks)
│ │ ├── App-14b-ConnectFour.ipynb
│ │ ├── App-14c-ConnectFour-CSharp.ipynb
│ │ ├── App-14-ConnectFour-Adversarial.ipynb
│ │ └── App-14-ConnectFour-Adversarial-CSharp.ipynb
│ │
│ ├── CSP/ # Applications CSP (31 notebooks : sélection ci-dessous, 18 Python + 13 C#)
│ │ ├── App-1-NQueens.ipynb
│ │ ├── App-2-GraphColoring.ipynb
│ │ ├── App-3-NurseScheduling.ipynb
│ │ ├── App-4-JobShopScheduling.ipynb
│ │ ├── App-5-Timetabling.ipynb
│ │ ├── App-6-Minesweeper.ipynb
│ │ ├── App-6-Minesweeper-CSharp.ipynb
│ │ ├── App-7-Wordle.ipynb
│ │ ├── App-8-MiniZinc.ipynb
│ │ ├── App-11-Picross.ipynb
│ │ ├── App-15-SportsScheduling.ipynb
│ │ ├── App-16-Crossword-CSP.ipynb
│ │ ├── App-16-Crossword-CSP-CSharp.ipynb # Twin C# backtracking + forward-checking from-scratch (marathon #4956, Prong B)
│ │ ├── App-19-ProceduralGeneration-WFC.ipynb
│ │ ├── App-19-ProceduralGeneration-WFC-CSharp.ipynb
│ │ ├── App-20-SudokuBenchmark-Python.ipynb # Benchmark 4 solveurs Sudoku, synthèse de la série
│ │ ├── App-20b-SudokuBenchmark-CSharp.ipynb
│ │ └── (+ autres notebooks et jumeaux C# App-1b/2b/3b/4b/7b/11b/15b et App-5/8-CSharp, marathon #4956)
│ │
│ └── Hybrid/ # Métaheuristiques (22 notebooks : sélection ci-dessous, 17 Python + 5 C#)
│ ├── App-9-EdgeDetection.ipynb
│ ├── App-9b-EdgeDetection-CSharp.ipynb
│ ├── App-10-Portfolio.ipynb
│ ├── App-10b-Portfolio-CSharp.ipynb
│ ├── App-13-TSP-Metaheuristics.ipynb
│ ├── App-13b-TSP-Metaheuristics-CSharp.ipynb
│ ├── App-17-VRP-Logistics.ipynb
│ ├── App-17b-VRP-Logistics-CSharp.ipynb
│ ├── App-17b-VRP-Logistics-Python.ipynb # Twin Python du b — VRP métaheuristiques from-scratch (numpy) + vérification OR-Tools
│ ├── App-18-HyperparameterTuning.ipynb
│ ├── App-18b-HyperparameterTuning-CSharp.ipynb
│ ├── App-18b-HyperparameterTuning-Python.ipynb
│ └── App-22-AlgorithmSelection-Python.ipynb # Sélection empirique : 3 jeux, 13 familles / 14 étiquettes, Pareto + préférences (PR IS #42)
│
├── MetaGeneticSharp/ # Sous-module : metaheuristiques composables sur GeneticSharp (jsboige/MetaGeneticSharp)
├── Part4-Metaheuristics/ # Partie 4 (35 notebooks C# .NET 9 : 25 à la racine + 10 sous MGS-vs-mealpy/) ; consomme le sous-module MetaGeneticSharp
│
└── _archive/ # Notebooks racine archivés (C209 tranche 8/8 #5081) — voir _archive/README.md
├── README.md
├── CSPs_Intro.ipynb # Remplacé par Part2-CSP/CSP-1-Fundamentals.ipynb
└── Exploration_non_informée_et_informée_intro.ipynb # Remplacé par Part1-Foundations/Search-{2,3}-...
Progression recommandée
Le parcours détaillé avec prérequis et enchaînements logiques est décrit dans la section Parcours d’apprentissage ci-dessus.
FAQ / Troubleshooting
OR-Tools ne s’installe pas
OR-Tools nécessite une version Python compatible. Sur Windows : - Vérifiez votre version Python : python --version (3.10-3.12 recommandé) - Installez avec : pip install ortools (les wheels précompilés sont disponibles pour la plupart des plateformes) - Si échec : essayez conda install -c conda-forge ortools-python
MiniZinc ne trouve pas son solveur
Le notebook App-8 utilise MiniZinc qui requiert l’installation de l’IDE : - Téléchargez depuis minizinc.org - Le solveur Gecode est inclus par défaut - Vérifiez : minizinc --version dans un terminal
Les notebooks C# (.NET Interactive) ne s’exécutent pas
- Vérifiez que .NET SDK 9.0+ est installé :
dotnet --version - Installez le kernel :
dotnet tool install -g Microsoft.dotnet-interactive && dotnet interactive jupyter install - Vérifiez :
jupyter kernelspec listdoit afficher.net-csharp - Les jumeaux C# hybrides (App-9b, App-10b) utilisent GeneticSharp et SkiaSharp ; les autres notebooks C# installent leurs packages (Google.OrTools, IKVM + Choco…) via
#r nugetdans les cellules
DEAP ou PyGAD provoquent des erreurs d’import
- DEAP :
pip install deap— compatible Python 3.8+ - PyGAD :
pip install pygad— requiert numpy. Si conflit :pip install --upgrade numpy pygad - MEALPy (Search-11) :
pip install mealpy— dépendances nombreuses, préférez un env dédié
Les solveurs CP-SAT sont lents sur mon problème
- Vérifiez que vous utilisez
model.parameters.max_time_in_secondspour limiter le temps - Les contraintes globales (AllDifferent, Cumulative) sont beaucoup plus efficaces que des contraintes binaires équivalentes
- Activez la parallélisation :
solver.parameters.num_workers = 8 - Consultez le CP-SAT Primer pour les bonnes pratiques
Quel parcours choisir ?
Si vous découvrez la recherche en IA
Commencez par Search-1 (StateSpace) et Search-2 (Uninformed) pour comprendre la formalisation des problèmes et les algorithmes fondamentaux (BFS, DFS). Puis Search-3 (Informed) pour découvrir A* et les heuristiques. C’est le socle commun à toute la série.
Si vous venez de la programmation par contraintes
Commencez par CSP-1 (Fundamentals) et CSP-2 (Consistency) si vous connaissez déjà les espaces d’états. Puis montez en complexité avec CSP-3-6 et les applications industrielles (App-3 NurseScheduling, App-4 JobShop).
Si vous préparez un entretien technique
Concentrez-vous sur Search-1 à Search-3 (espaces d’états, BFS/DFS, A*), Search-6 (AdversarialSearch) (Minimax) et CSP-1-2 (backtracking, propagation). Ce sont les algorithmes les plus fréquemment demandés.
Si vous voulez résoudre un problème industriel
Allez directement aux applications qui correspondent à votre domaine : App-3/App-4 (ordonnancement), App-13/App-17 (routing/logistique), App-5 (emploi du temps), ou App-10 (optimisation portefeuille). Chaque application est autonome avec les prérequis indiqués.
Statistiques catalogue à jour (audit fichier-entier §E, 2026-09-16)
Audit disque ↔︎ CATALOG-STATUS ↔︎ prose vérifié firsthand via git ls-files MyIA.AI.Notebooks/Search | grep -E '\.ipynb$' + comptage disque par sous-dossier. Référence canonique = fichiers gît-tracked (les _output.ipynb sont des artéfacts non-trackés par .gitignore — exclus du compte ; MetaGeneticSharp/ et search_lean/ ne contiennent aucun .ipynb). La répartition de maturité (PRODUCTION/BETA) est portée par le marqueur CATALOG-STATUS en tête de fichier, régénéré quotidiennement par l’automatisation (son compte peut traîner d’un jour — le compte ci-dessous fait foi au 2026-09-16).
| Sous-série | Fichiers .ipynb gît-tracked |
Langages | Algorithmes représentatifs |
|---|---|---|---|
Part 1 — Fondements (Part1-Foundations/) |
43 (23 notebooks Python + Lean : Search-1 → Search-11, Search-2b, Search-03b/03c/03d/03e (ex-Partie 3 + optimalité A*), Search-09b, Search-09c, Search-11c, Search-11d, Search-12a (Composer-Regards, op 12 #12204), Search-13a (Traverser-Murs-Certifies, op 13 #12204) + compagnon Lean Search-09d (kernel lean4-wsl, lake discrepancy_lean) + 20 C# : jumeaux -Csharp (Search-1 à 11, 2b et 03b/03c/03d) + Search-2c QuikGraph natif + déclinaison deep-dive Search-11b Métaheuristiques en 4 volets C# natif, marathon #4956) |
Python + Lean 4 + .NET (C#) | StateSpace, BFS/DFS/UCS/IDDFS, A, Local Search (SA/Tabu), GA, Minimax/Alpha-Beta, MCTS, DLX, LP, Symbolic Automata, métaheuristiques (PSO/ABC/BRO + 160+ MEALPy), NetworkX, QuikGraph, Pattern Databases, Limited Discrepancy Search, Weighted A, minima fallacieux SDP (Burer–Monteiro), discrépance combinatoire (Beck–Fiala, Bansal–Jiang 2025) et sa formalisation Lean 4 (conjecture de Komlós), sélection empirique d’algorithme, descente gloutonne sous plafond d’évaluations (loi Descent.lean) |
Part 2 — Programmation par Contraintes (Part2-CSP/) |
18 (9 Python : CSP-1 → CSP-9 + 9 jumeaux C#, marathon #4956 achevé) | Python + .NET (C#) | CSP Fundamentals (backtracking), AC-3/FC/MAC, CSP Advanced (AllDifferent/Cumulative/Circuit), Scheduling (Job-Shop/RCPSP/Nurse), Optimization (Bin Packing/Knapsack), Hybridization (LCG/CP+SAT/CP+ML/LLM+CSP), Soft, Temporal (Allen’s Interval Algebra), Distributed (Yokoo 1992) |
Part 4 — Métaheuristiques composables (Part4-Metaheuristics/, C# .NET 9, MetaGeneticSharp) |
35 (MGS-1 → MGS-31 : cœur MGS-1..19, trilogie MGS-7b/7c/7d de projection N-D des paysages, MGS-17b sélection empirique, MGS-21 représentation vs algorithme ; le volet comparatif vs MEALPY (10 notebooks MGS-22..31) vit dans la sous-série Part4-Metaheuristics/MGS-vs-mealpy/ — duels PSO/DE/SA/WOA/EO/FBI/BBPSO/GA/ScatterSearch vs Mealpy + synthèse croisée ; tous C# .NET au-dessus de GeneticSharp vendored) |
C# / .NET | Composition, Eukaryote, Islands, Compound Metaheuristics, TSP, projection N-D des paysages, Landscape Explorer, Center Bias, Island Synergy, Axis Alignment, Landscape Debias, Island Synergy Found, Landscape Analysis (FDC), Algorithm Selection (No-Free-Lunch), Parameter Control, CEC Banc, Metropolis Reinsertion, représentation vs algorithme, campagne comparative MGS vs mealpy |
Applications (Applications/) |
57 (37 Python + 20 C# — 20 binômes Python ⇄ C# App-1 à App-20, plus compagnons statistical-validity, jumeaux Python et notebooks d’audit App-23 à App-31) | 37 Python + 20 C# | N-Queens, Graph Coloring, Nurse/Job-Shop/Timetabling Scheduling, Minesweeper, Wordle, MiniZinc, Picross (27M× speedup), Sports/Crossword/WFC CSP, SudokuBenchmark, Portfolio/TSP/VRP/Hyperparameter Tuning, Edge Detection, ConnectFour (Minimax/MCTS), Covering Arrays, Algorithm Selection |
**_archive** (_archive/) |
2 (CSPs_Intro, Exploration_non_informée_et_informée_intro, historiques pré-tranche 8/8 #5081) | Python | Notebooks historiques, remplacés par Part2-CSP/CSP-1-Fundamentals et Part1-Foundations/Search-{2,3} |
| Total | 153 (43 + 18 + 35 + 57 = 153 pédagogiques, Search-09d inclus + 2 archive = 155) | Python + Lean 4 + C# | 4 piliers + archive, voir « Structure des fichiers » pour l’arborescence complète |
Note de maturité : la validation end-to-end (Python 3.10+ stdlib + ortools + deap + networkx + mealpy + pygad ; C# = .NET 9.0 + Microsoft.dotnet-interactive) est documentée PR par PR dans l’EPIC #4956 pour les jumeaux C#, et dans les PRs po-2025:CoursIA-2 pour la série landscape-bias MGS-10 → MGS-19 (analyse comparative NFL/WOA encore en cours, cf EPIC #3975).
- Maturité : la répartition autoritative est celle du bloc
CATALOG-STATUSautomatisé en tête de fichier ; elle n’est pas dupliquée manuellement ici.
Compagnon Lean formel : la série dispose d’un lake phare search_lean (#4048) qui démontre la correction d’A* (admissibilité de l’heuristique ⟹ optimalité, P1), la consistance (P2) et les bornes (P4/P5) en Lean 4 sur des graphes à coût uniforme puis généralisées au cas pondéré. Voir la section « Pont vers les Preuves Formelles (Lean 4) — différenciant CoursIA » l. 640+ pour la cartographie inter-familles focalisée Search (10+ lakes formels du dépôt) et le Mermaid flowchart simulation ↔︎ preuve. Cette section ne duplique pas cette cartographie, elle ancre les chiffres ; la cartographie elle-même reste l. 640+.
Conformité C.1 (stubs sans raise NotImplementedError) : tous les notebooks pédagogiques s’exécutent end-to-end (cellules # Solution/# Exemple résolu démonstratives conservées, cellules # Exercice stubées via pass/return None/print("Exercice à compléter")). Convention trois exercices par notebook respectée pour la majorité des notebooks récents (cf .claude/rules/three-exercises-per-notebook.md).
Dépendances (requirements.txt) : numpy, matplotlib, ortools, z3-solver, deap, pygad, mealpy, simanneal, networkx, python-constraint, minizinc, choco-solver (Java bridge via JPype), openai (LLM+CSP), semantic-kernel, pulp (LP relaxation Part 1). C# : .NET 9.0 + Microsoft.dotnet-interactive (kernel .net-csharp enregistré via dotnet interactive jupyter install) + GeneticSharp vendored (MetaGeneticSharp/) + IKVM 8.15 (CSP-1/3/4/5/7 C# twin bridge).
Parité .NET ⇄ Python (EPIC #4956 marathon achevé) : la parité Python ⇄ C# est désormais complète sur tout le périmètre curriculaire — Part 1 (Search-1 à 11, 2b), Part 2 (CSP-1 à CSP-9, 9 binômes sur 9, tous mergés sur main, vérifié disque 2026-07-07), Part 3 (Search-03b/03c/03d) et les 20 applications. Le détail par solver (6 Choco via IKVM, 2 OR-Tools CP-SAT natif .NET, 1 from-scratch Yokoo 1992) et les verdicts SOTA-OK figurent dans le bilan final du marathon ci-dessus. Seule la Partie 4 reste mono-langage, par conception (ingénierie .NET native au-dessus de GeneticSharp).
Prérequis
Python
# Creer un environnement
python -m venv venv
# Ou: conda create -n search python=3.10
# Installer les dependances
pip install -r requirements.txtC# (.NET Interactive) - pour side tracks uniquement
# .NET 9.0 requis
dotnet --version
# Les packages NuGet sont installes dans les notebooks :
# - GeneticSharp
# - SkiaSharp (visualisation)MiniZinc (optionnel, pour App-8)
# Installer MiniZinc IDE depuis https://www.minizinc.org/
# Puis: pip install minizincActivités associées
L’activité Exploration : cannibales et missionnaires met la modélisation d’états et l’arbre d’exploration de cette série en situation de jeu d’équipe.
Conclusion / Prochaines étapes
Ce que vous avez appris
Cette série vous a fait traverser l’une des idées les plus fécondes de l’informatique : tout problème, du jeu de plateau à la planification logistique, se réduit à explorer un espace de solutions — et l’art de l’ingénieur est de réduire cette exploration d’une aveugle croissance exponentielle à une résolution intelligemment guidée. L’arc pédagogique :
- Le geste fondateur — formaliser un problème en espace d’états
(S, s₀, A, T, G)plutôt que de le traiter cas par cas. Cette abstraction est le socle commun : sans elle, pas de BFS, pas d’A*, pas de backtracking, pas de Minimax. La série part de là (Search-1) pour reconstruire tout l’édifice algorithmique sur des fondations propres. - La double approche, délibérément juxtaposée — d’un côté l’exploration systématique (BFS, DFS, A, Minimax), qui garantit* la solution optimale si on lui laisse le temps mais paie ce coût en explosion combinatoire ; de l’autre la réduction par contraintes (AC-3, Forward Checking, CP-SAT), un véritable changement de paradigme où l’on ne cherche plus mais où l’on contraint les domaines jusqu’à ce que la solution émerge. Comprendre les deux, c’est comprendre quand explorer, quand contraindre, et quand les combiner.
- L’instrument — les outils qui opérationnalisent la théorie : OR-Tools CP-SAT pour la programmation par contraintes industrielle, A* et ses heuristiques admissibles pour la recherche guidée, Minimax et MCTS pour les jeux, et toute la famille des métaheuristiques (GA, SA, PSO) pour les grands espaces où l’on troque la garantie contre l’efficacité. MiniZinc pour la modélisation déclarative, Z3 pour raisonner sur des alphabets infinis.
- La finesse — que la modélisation CSP est un art autant qu’une technique (un bon modèle se résout en millisecondes, un mauvais jamais), que les applications réelles (planification d’infirmiers au CHU, ordonnancement d’atelier, optimisation de portefeuille, TSP/VRP logistique, démineur, Picross et son speedup 27M×) sont autant de briques où chaque concept trouve sa justification, et que les frontières les plus excitantes sont les hybridations (LCG, CP+SAT, CP+ML, et surtout LLM+CSP).
La thèse est puissante et honnêtement présentée : il n’existe pas d’algorithme universel de recherche, mais un spectre de stratégies aux compromis clairement cartographiés — garantie vs performance, exploration vs réduction, optimalité vs approximation — et la compétence de l’ingénieur est de savoir choisir dans ce spectre, voire de combiner plusieurs points.
Prochaines étapes
- Approfondir l’IA symbolique : SymbolicAI (Z3/SMT, planification PDDL/HTN, logique formelle Tweety) est le prolongement naturel de la Partie 2 — les CSP y deviennent du satisfiability solving et la modélisation par contraintes se généralise en raisonnement logique. Plusieurs ponts explicites sont tracés (CSP-3 → Z3, CSP-4 → Planners, CSP-6 → LLM+CSP).
- Élargir aux jeux et à l’apprentissage par renforcement : GameTheory (Minimax, MCTS, choix social) et les notebooks RL (MCTS + DQN, AlphaGo) reprennent la recherche adversariale sous l’angle de l’apprentissage — où la valeur des positions n’est plus calculée mais apprise.
- Pratiquer sur la couverture exacte : Sudoku (DLX, automates symboliques) applique Dancing Links et les techniques de cette série à une famille de puzzles combinatoires concrets.
- Construire plutôt qu’utiliser : la Partie 4 — métaheuristiques composables (C# .NET 9, MetaGeneticSharp) prolonge Search-5/Search-11 sous l’angle de l’ingénierie — au lieu d’importer WOA ou EO, on les reconstruit depuis des primitives composables (
Match,Container, grammaire fluente) au-dessus de GeneticSharp, et l’on assemble des configurations qu’aucune bibliothèque monolithique n’offre (sous-populations spécialisées, îles migratoires). - Pour la pratique : reprenez CSP-6-Hybridization et expérimentez le pont LLM+CSP — comment un modèle de langage peut-il amorçer un solveur par contraintes, et où cette hybridation gagne-t-elle (ou perd-elle) par rapport au CP-SAT pur ?
Le fil rouge
La recherche en IA propose un changement de regard sur la résolution de problèmes : ne plus demander « quel algorithme appliquer ? » mais « comment réduire l’espace des possibilités jusqu’à ce que la solution devienne inévitable ? ». La série vous a donné le formalisme (espaces d’états, modèle (X, D, C)), les algorithmes (de BFS à MCTS, du backtracking à CP-SAT), et l’intuition des compromis pour transformer un problème combinatoire apparemment intractable en une résolution guidée, contrainte, ou hybridée — en gardant à l’esprit qu’aucune stratégie ne domine partout, et que c’est précisément ce pluralisme qui fait la richesse (et la difficulté) du domaine.
Pont vers les Preuves Formelles (Lean 4) — différenciant CoursIA
Le hub Search alignait une riche prose sur la double approche exploration systématique / réduction par contraintes, mais ne posait pas de cartographie Lean 4 inter-familles formalisée. Le search algorithmique a pourtant un lake phare : search_lean (#4048), où la correction d’A* (admissibilité de l’heuristique ⟹ optimalité), la consistance de l’heuristique (P2) et les bornes sur la complexité (P4/P5) sont démontrées en Lean 4 sur des graphes à coût uniforme puis généralisées au cas pondéré.
grep -E "cartographie|inter-familles" dans le hub Search = 0 occurrence avant cette PR. La même section livrée c.194-c.196 sur les hubs GameTheory (#5050), Probas (#5053) et ML (#5054) reçoit une table focalisée + un Mermaid flowchart ; le hub Search doit donc renvoyer la balle avec une vue locale focalisée Search/search_lean, pas un copier-coller.
| Famille | Lake phare | Théorème / brique | Branchement notebook |
|---|---|---|---|
| Search / Part 1 | search_lean (#4048) |
A* admissibilité → optimalité (P1) | Search-03-Informed (A*, heuristique admissible) |
| Search / Part 1 | search_lean |
A* consistance d’heuristique (P2) + relaxation pondérée | Search-03d-WeightedAstar (Weighted A*, Pohl 1970) |
| Search / Part 1 | search_lean |
Pattern DB additives (Korf & Felner 2002) | Search-03b-PatternDatabases |
| ML | learning_theory_lean (#5054) |
Novikoff perceptron 0 sorry #4140 | Perceptron.lean (lake, pas notebook pédagogique) |
| Probas | decision_theory_lean (#5053) |
Concentration uniforme + Hoeffding (PAC iter-2) | Infer-3-Factor-Graphs (factor graphs + PAC) |
| QC | kelly_lean (#5047) |
Kelly criterion + mean-variance bound | QC-Py-10-Risk-Portfolio-Management (Kelly sizing) |
| GameTheory | game_theory_lean/SocialChoice (lakes standalone social_choice_lean #5050 + cooperative_games_lean absorbés post-#4365, contenue dans game_theory_lean/) |
Arrow + Sen voting | GameTheory-15-CooperativeGames-Python |
| GameTheory | game_theory_lean/CooperativeGames/Shapley.lean (lake cooperative_games_lean supprimé post-#4365, contenu absorbé) |
Bondareva-Shapley 0 sorry #3954 | GameTheory-13-ImperfectInfo-CFR-Python |
| SymbolicAI | argumentation_lean (#5043 MERGED) |
Tweety Preferred extensions + Dung framework | Tweety-3-Dung-Csharp (Dung Preferred semantics) |
flowchart LR
subgraph SIM["Simulation (notebooks)"]
S3["Search-3<br/>A* + heuristique<br/>admissible"]
S14["Search-14<br/>Weighted A*<br/>Pohl 1970"]
S12["Search-12<br/>Pattern DB<br/>additives"]
S6["Search-6<br/>Minimax / Alpha-Beta"]
S7["Search-7<br/>MCTS + UCB1"]
end
subgraph LEAN["Preuves formelles (Lean 4)"]
LA["search_lean<br/>A* admissibilité<br/>P1/P2/P4/P5"]
LM["learning_theory_lean<br/>Novikoff perceptron<br/>0 sorry #4140"]
LP["decision_theory_lean<br/>PAC iter-2<br/>uniform concentration"]
LK["kelly_lean<br/>Kelly + MV bound"]
LG["game_theory_lean/SocialChoice<br/>Arrow + Sen<br/>(lakes #4365 absorbés)"]
LB["game_theory_lean/CooperativeGames<br/>Bondareva-Shapley<br/>0 sorry #3954"]
end
S3 -.->|"admissibilité ⟹<br/>optimalité"| LA
S14 -.->|"pondération W<br/>bornée par"| LA
S12 -.->|"PDB additives<br/>(Korf 2002)"| LA
S6 -.->|"valeur de position<br/>+ élagage"| LG
S7 -.->|"UCB1 + borne<br/>regret cumulé"| LP
SIM -.->|"simulation<br/>ML.NET / Python"| LEAN
LEAN -.->|"garantie<br/>formelle"| SIM
classDef lean fill:#e8f5e9,stroke:#1b5e20,color:#1b5e20
class LA,LM,LP,LK,LG,LB lean
La double culture simulation + preuve formelle est précisément ce que la cartographie AIMA 3-level du hub central P0 (#5045 MERGED) articule : « instinct algorithmique ↔︎ méta-analyse ↔︎ preuve formelle ». Le hub Search ancre le premier niveau (instinct) par ses notebooks Python/C# git-tracked (parité complète #4956, marqueur CATALOG-STATUS faisant foi — le compte exact vit dans pedagogical_count, régénéré par le cron) et le deuxième niveau (méta-analyse) par les benchmarks comparatifs (App-13 TSP, App-18 hyperparameter tuning, MGS-16 No-Free-Lunch) ; le troisième niveau (preuve formelle) arrive ici via search_lean, qui démontre ce que les simulations Search-3/Search-14 ne peuvent que suggérer empiriquement : qu’une heuristique admissible garantit l’optimalité d’A*, et qu’une heuristique consistente (P2) garantit que le premier chemin trouvé est déjà optimal (sans réouverture).
Sans cette section, le chainage vers ML (perceptron 0 sorry comme borne duale de la convergence A* sur graphes pondérés), QC (Kelly, borné inférieurement par l’arbitrage risque/rendement), GameTheory (Arrow, posant les conditions sur les procédures de vote), Probas (PAC iter-2, formalisant pourquoi un échantillon suffit) et SymbolicAI (argumentation, formalisant la sémantique preferred) restait invisible depuis Search.
Note sur les références notebooks : six références historiques de cette section ont suivi les renumérotations du dépôt (cf issue #5065) : ML-2.3-Perceptron → Perceptron.lean (lake, pas de notebook pédagogique correspondant), Infer-3-ProbabilisticReasoning → Infer-3-Factor-Graphs, QC-Py-10 → QC-Py-10-Risk-Portfolio-Management, GT-15 SocialChoice ↔︎ CooperativeGames et GT-13 CooperativeGames ↔︎ ImperfectInfo-CFR (inversions), Tweety-3-PreferredSemantics → Tweety-3-Dung-Csharp.
Liens : EPIC #4038 (Roadmap Lean) · cross-refs hubs QC (#5047) · central P0 (#5049) · GameTheory (#5050) · Probas (#5053) · ML (#5054) · SymbolicAI Lean (#5043 MERGED).
Licence
Voir la licence du repository principal.
Version 1.3.0 — Juillet 2026 — parité .NET ⇄ Python complète : Part 1/2/3 + 20 applications en binômes (EPIC #4956 marathon achevé, 2026-07-07).
Comment choisir entre A*, CSP et métaheuristiques ?