From 3ca367feebcc99267ea2958f29e1ff44d5efd179 Mon Sep 17 00:00:00 2001 From: jsboige Date: Mon, 5 Oct 2026 01:30:24 +0200 Subject: [PATCH 1/8] rename(#16231): git mv purs (11 notebooks) Table : issue:17802#5985577115, pilotee par rename_notebooks.py. --- .../Research-01-EdgeColoring-Tutte-Python.ipynb} | 0 .../Research-02-Factorio-Balancer-Python.ipynb} | 0 .../Research-03-MAPF-Guarantee-Audit-Python.ipynb} | 0 .../Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb} | 0 .../Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb} | 0 ...esearch-06-LearningToBranch-Generalization-Audit-Python.ipynb} | 0 .../Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb} | 0 .../Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb} | 0 .../Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb} | 0 .../Research-10-Szpiro-Pasten-2026-Python.ipynb} | 0 .../Research-11-NeuralDiving-Coloration-Python.ipynb} | 0 11 files changed, 0 insertions(+), 0 deletions(-) rename MyIA.AI.Notebooks/Search/Applications/{CSP/App-22-EdgeColoring-Tutte.ipynb => Research/Research-01-EdgeColoring-Tutte-Python.ipynb} (100%) rename MyIA.AI.Notebooks/Search/Applications/{CSP/App-23-Factorio-Balancer.ipynb => Research/Research-02-Factorio-Balancer-Python.ipynb} (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid/App-24-MAPF-Guarantee-Audit.ipynb => Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb} (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid/App-25-CombinatorialAuctions-WDP-VCG.ipynb => Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb} (100%) rename MyIA.AI.Notebooks/Search/Applications/{CSP/App-26-CoveringArrays-Guarantee-Audit.ipynb => Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb} (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid/App-28-LearningToBranch-Generalization-Audit.ipynb => Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb} (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid/App-29-SALBP-AssemblyLineBalancing-Audit.ipynb => Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb} (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid/App-30-OrbitalAssembly-Certificate-Audit.ipynb => Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb} (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid/App-31-RCPSP-Max-Feasibility-Bounds.ipynb => Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb} (100%) rename MyIA.AI.Notebooks/Search/Applications/{Search/App-32-Szpiro-Pasten-2026.ipynb => Research/Research-10-Szpiro-Pasten-2026-Python.ipynb} (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid/App-33-NeuralDiving-Coloration.ipynb => Research/Research-11-NeuralDiving-Coloration-Python.ipynb} (100%) diff --git a/MyIA.AI.Notebooks/Search/Applications/CSP/App-22-EdgeColoring-Tutte.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/CSP/App-22-EdgeColoring-Tutte.ipynb rename to MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb diff --git a/MyIA.AI.Notebooks/Search/Applications/CSP/App-23-Factorio-Balancer.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/CSP/App-23-Factorio-Balancer.ipynb rename to MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-24-MAPF-Guarantee-Audit.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/App-24-MAPF-Guarantee-Audit.ipynb rename to MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-25-CombinatorialAuctions-WDP-VCG.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/App-25-CombinatorialAuctions-WDP-VCG.ipynb rename to MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb diff --git a/MyIA.AI.Notebooks/Search/Applications/CSP/App-26-CoveringArrays-Guarantee-Audit.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/CSP/App-26-CoveringArrays-Guarantee-Audit.ipynb rename to MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-28-LearningToBranch-Generalization-Audit.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/App-28-LearningToBranch-Generalization-Audit.ipynb rename to MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-29-SALBP-AssemblyLineBalancing-Audit.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/App-29-SALBP-AssemblyLineBalancing-Audit.ipynb rename to MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-30-OrbitalAssembly-Certificate-Audit.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/App-30-OrbitalAssembly-Certificate-Audit.ipynb rename to MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-31-RCPSP-Max-Feasibility-Bounds.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/App-31-RCPSP-Max-Feasibility-Bounds.ipynb rename to MyIA.AI.Notebooks/Search/Applications/Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb diff --git a/MyIA.AI.Notebooks/Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb rename to MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-33-NeuralDiving-Coloration.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/App-33-NeuralDiving-Coloration.ipynb rename to MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb From 05a65028e91ede7071c8df3f8a444ad3e63ed19a Mon Sep 17 00:00:00 2001 From: jsboige Date: Mon, 5 Oct 2026 01:30:50 +0200 Subject: [PATCH 2/8] rename(#16231): referents reecrits par surface (26 fichiers) Cellules de code citees : jamais reecrites (re-execution C.2 due). Sorties commitees : jamais touchees. --- .../app26-covering-arrays-audit/SOURCE.md | 2 +- .../Hybrid/data/app29-salbp-audit/SOURCE.md | 2 +- .../app30-orbital-assembly-audit/SOURCE.md | 2 +- .../Hybrid/data/app31-rcpsp-max/SOURCE.md | 2 +- .../data/app31-rcpsp-max/provenance.json | 2 +- .../Search/Applications/README.md | 38 +++++++++---------- ...esearch-01-EdgeColoring-Tutte-Python.ipynb | 4 +- ...Research-02-Factorio-Balancer-Python.ipynb | 6 +-- ...earch-03-MAPF-Guarantee-Audit-Python.ipynb | 4 +- ...CombinatorialAuctions-WDP-VCG-Python.ipynb | 4 +- ...overingArrays-Guarantee-Audit-Python.ipynb | 6 +-- ...ToBranch-Generalization-Audit-Python.ipynb | 6 +-- ...P-AssemblyLineBalancing-Audit-Python.ipynb | 4 +- ...talAssembly-Certificate-Audit-Python.ipynb | 10 ++--- ...esearch-10-Szpiro-Pasten-2026-Python.ipynb | 4 +- ...ch-11-NeuralDiving-Coloration-Python.ipynb | 10 ++--- MyIA.AI.Notebooks/Search/README.md | 2 +- .../Search/search_lean/README.md | 4 +- .../Search/search_lean/Szpiro.lean | 2 +- .../Search/search_lean/Szpiro_en.lean | 2 +- .../02-monstrous-moonshine-invariant-j.ipynb | 2 +- ...Lean-27-EdgeColoring-Tutte-Companion.ipynb | 4 +- MyIA.AI.Notebooks/SymbolicAI/Lean/README.md | 2 +- _quarto.yml | 22 +++++------ docs/curriculum/ia-classique.md | 22 +++++------ docs/reference/rename-ledger.tsv | 11 ++++++ scripts/tests/baseline_nb_nav_chain.json | 12 +++--- 27 files changed, 101 insertions(+), 90 deletions(-) diff --git a/MyIA.AI.Notebooks/Search/Applications/CSP/data/app26-covering-arrays-audit/SOURCE.md b/MyIA.AI.Notebooks/Search/Applications/CSP/data/app26-covering-arrays-audit/SOURCE.md index 6949451a20..c293d69554 100644 --- a/MyIA.AI.Notebooks/Search/Applications/CSP/data/app26-covering-arrays-audit/SOURCE.md +++ b/MyIA.AI.Notebooks/Search/Applications/CSP/data/app26-covering-arrays-audit/SOURCE.md @@ -50,7 +50,7 @@ Initial full execution: ```bash python scripts/notebook_tools/notebook_tools.py execute \ - MyIA.AI.Notebooks/Search/Applications/CSP/App-26-CoveringArrays-Guarantee-Audit.ipynb \ + MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb \ --timeout 180 ``` diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/SOURCE.md b/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/SOURCE.md index b9df14bf7b..bf999fb23a 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/SOURCE.md +++ b/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/SOURCE.md @@ -26,7 +26,7 @@ Le notebook exécuté produit : Commande de reproduction depuis la racine CoursIA : ```powershell -python scripts/notebook_tools/notebook_tools.py execute MyIA.AI.Notebooks/Search/Applications/Hybrid/App-29-SALBP-AssemblyLineBalancing-Audit.ipynb --timeout 300 --verbose +python scripts/notebook_tools/notebook_tools.py execute MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb --timeout 300 --verbose ``` Environnement de la collecte : Windows 11, Python 3.13, OR-Tools CP-SAT, PuLP/CBC, pandas, NumPy et matplotlib. Les versions exactes sont enregistrées dans les métadonnées de `provenance.json` lors de l'exécution. diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/SOURCE.md b/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/SOURCE.md index 4d33aea778..66bb35ca18 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/SOURCE.md +++ b/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/SOURCE.md @@ -33,7 +33,7 @@ Le notebook exécuté produit : Commande de reproduction depuis la racine CoursIA : ```powershell -python scripts/notebook_tools/notebook_tools.py execute MyIA.AI.Notebooks/Search/Applications/Hybrid/App-30-OrbitalAssembly-Certificate-Audit.ipynb --timeout 600 --verbose +python scripts/notebook_tools/notebook_tools.py execute MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb --timeout 600 --verbose ``` Environnement de la collecte : Windows 11, Python 3.13, OR-Tools CP-SAT, pandas, NumPy et matplotlib. Les versions exactes sont enregistrées dans `provenance.json` lors de l'exécution. diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/SOURCE.md b/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/SOURCE.md index 3f4762cf10..12fa2aadb7 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/SOURCE.md +++ b/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/SOURCE.md @@ -53,7 +53,7 @@ Le notebook exécuté produit : Commande de reproduction depuis la racine CoursIA : ```powershell -python scripts/notebook_tools/notebook_tools.py execute MyIA.AI.Notebooks/Search/Applications/Hybrid/App-31-RCPSP-Max-Feasibility-Bounds.ipynb --timeout 900 --verbose +python scripts/notebook_tools/notebook_tools.py execute MyIA.AI.Notebooks/Search/Applications/Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb --timeout 900 --verbose ``` ## Instances PSPLIB : observées, non redistribuées diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/provenance.json b/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/provenance.json index 66c9cdf651..158362b8c0 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/provenance.json +++ b/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/provenance.json @@ -1,5 +1,5 @@ { - "notebook": "App-31-RCPSP-Max-Feasibility-Bounds", + "notebook": "Research-09-RCPSP-Max-Feasibility-Bounds-Python", "objet": "RCPSP/max : faisabilite, circuits de poids positif, hierarchie de bornes", "source_distillee": { "auteurs": [ diff --git a/MyIA.AI.Notebooks/Search/Applications/README.md b/MyIA.AI.Notebooks/Search/Applications/README.md index 20f9aced52..a32a5a8397 100644 --- a/MyIA.AI.Notebooks/Search/Applications/README.md +++ b/MyIA.AI.Notebooks/Search/Applications/README.md @@ -63,7 +63,7 @@ Quatre notebooks autour du Puissance 4 — deux Python et deux C# — forment un | 1b | [App-14c-ConnectFour-CSharp](Search/App-14c-ConnectFour-CSharp.ipynb) | ~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](Search/App-14-ConnectFour-Adversarial.ipynb) | ~45 min | Benchmark adversarial : Minimax, Alpha-Beta, MCTS | Projet étudiant | | 2b | [App-14-ConnectFour-Adversarial-CSharp](Search/App-14-ConnectFour-Adversarial-CSharp.ipynb) | ~40 min | **Jumeau C#** — Minimax + Alpha-Beta (élagage) + MCTS (UCB1) from-scratch, benchmark nœuds + tournoi round-robin, parité #4956 | Jumeau .NET | -| 3 | [App-32-Szpiro-Pasten-2026](Search/App-32-Szpiro-Pasten-2026.ipynb) | ~25 min | Szpiro rendu opérable : factorisations admissibles `N=DM` (parité paire de `D`), balayage de `M·φ(D)` sur N = 6…30030, proxy `log\|Δ\|/log rad(\|Δ\|)` des courbes `y²=x³+ax+b` — théorème 1.1 et corollaires 1.2/1.3 rendus calculables, 3 exercices | Distillation arXiv 2609.17390 (Pasten 2026, #16549) | +| 3 | [Research-10-Szpiro-Pasten-2026-Python](Search/Research-10-Szpiro-Pasten-2026-Python.ipynb) | ~25 min | Szpiro rendu opérable : factorisations admissibles `N=DM` (parité paire de `D`), balayage de `M·φ(D)` sur N = 6…30030, proxy `log\|Δ\|/log rad(\|Δ\|)` des courbes `y²=x³+ax+b` — théorème 1.1 et corollaires 1.2/1.3 rendus calculables, 3 exercices | Distillation arXiv 2609.17390 (Pasten 2026, #16549) | --- @@ -127,9 +127,9 @@ La génération procédurale de niveaux (App-19) encode le Wave Function Collaps | 13 | [App-20-SudokuBenchmark-Python](CSP/App-20-SudokuBenchmark-Python.html) | ~50 min | Benchmark comparatif : 4 solveurs Sudoku, un problème NP-complet | Nouveau | | 13b | [App-20b-SudokuBenchmark-CSharp](CSP/App-20b-SudokuBenchmark-CSharp.html) | ~35 min | **Jumeau C#** — backtracking naïf/MRV, AC-3, Dancing Links (Knuth) from-scratch, benchmark 3 difficultés, parité #4956 | Jumeau .NET | | 14 | [App-21-VoiceLeading](CSP/App-21-VoiceLeading.ipynb) | ~40 min | Hommage Munkres : voice leading chorale par affectation (Kuhn-Munkres via scipy) + audit/réparation du contrepoint de Fux en CP-SAT — encodage issu des projets étudiants EPITA PrCon (H1/H1_V2) | Hommage Munkres / projets étudiants EPITA | -| 15 | [App-22-EdgeColoring-Tutte](CSP/App-22-EdgeColoring-Tutte.ipynb) | ~45 min | Coloration d'arêtes cubiques : Vizing, Petersen, ponts, graphes apex et CP-SAT | Nouveau | -| 15b | [App-23-Factorio-Balancer](CSP/App-23-Factorio-Balancer.ipynb) | ~35 min | Belt balancer Factorio : MIP continu vs CP-SAT discret sur cas borné, N×N throughput-unlimited | Nouveau | -| 16 | [App-26-CoveringArrays-Guarantee-Audit](CSP/App-26-CoveringArrays-Guarantee-Audit.ipynb) | ~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) | +| 15 | [Research-01-EdgeColoring-Tutte-Python](CSP/Research-01-EdgeColoring-Tutte-Python.ipynb) | ~45 min | Coloration d'arêtes cubiques : Vizing, Petersen, ponts, graphes apex et CP-SAT | Nouveau | +| 15b | [Research-02-Factorio-Balancer-Python](CSP/Research-02-Factorio-Balancer-Python.ipynb) | ~35 min | Belt balancer Factorio : MIP continu vs CP-SAT discret sur cas borné, N×N throughput-unlimited | Nouveau | +| 16 | [Research-05-CoveringArrays-Guarantee-Audit-Python](CSP/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb) | ~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) | --- @@ -154,14 +154,14 @@ Quand l'espace est trop vaste ou l'objectif trop irrégulier pour les méthodes | 7d | [App-18c-HyperparameterTuning-Rustuna-vs-Optuna](Hybrid/App-18c-HyperparameterTuning-Rustuna-vs-Optuna.ipynb) | ~30 min | Rustuna vs Optuna : pont SOTA triple (Random numpy / Optuna TPE / Rustuna TPE) sur l'objectif k-NN CV d'App-18b, speedup mesuré deux régimes, audit d'une dépendance expérimentale (bug `best_trial` mesuré) | Nouveau | | 8 | [App-22-AlgorithmSelection-Python](Hybrid/App-22-AlgorithmSelection-Python.ipynb) | ~45 min | Sélection empirique d'algorithmes : 3 jeux (Sudoku, Puissance 4, Wordle), 13 familles conceptuelles / 14 étiquettes mesurées, non-commensurabilité des métriques + frontières de Pareto + choix sous préférences — hommage PR IS #42 (Théodore Deguest) | Projet étudiant (IS PR #42) | | 9 | [App-23-PRESENT-Differential-Cryptanalysis-SAT](Hybrid/App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb) | ~55 min | PRESENT : DDT, compression d'implicants, CNF pondérée, frontière SAT/UNSAT du meilleur trail et limites de certification — distillation PrCon F2 (Théodore Deguest) | Projet étudiant (PrCon PR #49) | -| 10 | [App-24-MAPF-Guarantee-Audit](Hybrid/App-24-MAPF-Guarantee-Audit.ipynb) | ~60 min | MAPF : validateur indépendant, oracle CP-SAT time-expanded, réfutation OD-A*, arrêt CBS au but, audit des garanties ECBS — distillation PrCon G3 (Matteo Atkinson, Paul Witkowski) | Projet étudiant (PrCon PRs #33/#36/#42) | -| 11 | [App-25-CombinatorialAuctions-WDP-VCG](Hybrid/App-25-CombinatorialAuctions-WDP-VCG.ipynb) | ~60 min | Enchères combinatoires : WDP exact CP-SAT vs force brute, langage XOR, budget global, paiements VCG et audit de leurs garanties, contre-exemple de manipulation sous budget matérialisé, forensics `PRICE_SCALE` sur 18 instances CATS — distillation PrCon J2 (Majerczyk, Chartouni, Wangon-Zekou) | Projet étudiant (PrCon PR #26) | +| 10 | [Research-03-MAPF-Guarantee-Audit-Python](Hybrid/Research-03-MAPF-Guarantee-Audit-Python.ipynb) | ~60 min | MAPF : validateur indépendant, oracle CP-SAT time-expanded, réfutation OD-A*, arrêt CBS au but, audit des garanties ECBS — distillation PrCon G3 (Matteo Atkinson, Paul Witkowski) | Projet étudiant (PrCon PRs #33/#36/#42) | +| 11 | [Research-04-CombinatorialAuctions-WDP-VCG-Python](Hybrid/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb) | ~60 min | Enchères combinatoires : WDP exact CP-SAT vs force brute, langage XOR, budget global, paiements VCG et audit de leurs garanties, contre-exemple de manipulation sous budget matérialisé, forensics `PRICE_SCALE` sur 18 instances CATS — distillation PrCon J2 (Majerczyk, Chartouni, Wangon-Zekou) | Projet étudiant (PrCon PR #26) | | 12 | [App-27-Sparse-Index-Tracking-Walk-Forward](Hybrid/App-27-Sparse-Index-Tracking-Walk-Forward.ipynb) | ~75 min | Sparse index tracking : modèle CP-SAT vérifiable, walk-forward sans fuite et lecture pédagogique des résultats QuantConnect réels — une recherche, deux lectures — distillation PrCon M2 (Godric Bouteloup) | Projet étudiant (PrCon PR #52) | -| 13 | [App-28-LearningToBranch-Generalization-Audit](Hybrid/App-28-LearningToBranch-Generalization-Audit.ipynb) | ~75 min | Learning to branch : dérivation de dom/wdeg, splits groupés, transfert inter-familles, performance intégrée, coût d'inférence et seuil d'amortissement — distillation PrCon G4 (Simon Naulet, Matis Codjia) | Projet étudiant (PrCon PR #46) | -| 14 | [App-29-SALBP-AssemblyLineBalancing-Audit](Hybrid/App-29-SALBP-AssemblyLineBalancing-Audit.ipynb) | ~70 min | SALBP-1/2 : CP-SAT, PuLP/CBC et RPW, statuts/incumbents/bornes, identité de benchmark, front Pareto certifié et MMALBP robuste/pondéré — distillation PrCon B1 (Ilias Kalalou, Kaelan Grall) | Projet étudiant (PrCon PR #57) | -| 15 | [App-30-OrbitalAssembly-Certificate-Audit](Hybrid/App-30-OrbitalAssembly-Certificate-Audit.ipynb) | ~70 min | Assemblage orbital : physique de Hohmann dans le modèle, auditeur externe, preuve que la scalarisation est exactement lexicographique, comparaison à makespan égal, front d'échange ε-contrainte et sonde en taille **et** en densité — distillation PrCon C4 (Gurvan Estable, Joris Bely, Kévin Lubert) | Projet étudiant (PrCon PR #53) | -| 16 | [App-31-RCPSP-Max-Feasibility-Bounds](Hybrid/App-31-RCPSP-Max-Feasibility-Bounds.ipynb) | ~65 min | RCPSP/max : le lag maximal comme arc inverse, faisabilité NP-difficile et son témoin de circuit positif, balayage des trois régimes temporel/ressource/réalisable, échelle de bornes certifiées et repli explicite quand la référence externe manque — distillation PrCon B4 (Arthur Gallier, Nicolas Naegelen) | Projet étudiant (PrCon PR #51) | -| 17 | [App-33-NeuralDiving-Coloration](Hybrid/App-33-NeuralDiving-Coloration.ipynb) | ~60 min | Neural diving : un plongeur MLP prédit une affectation partielle, injectée comme hint réparable dans CP-SAT ; la médiane des branches recule (2829 → 2325, 25/25 instances améliorées) alors que ≈ 49 % des arêtes du hint violent l'adjacence — cohérence du hint avec les contraintes, pas précision par bit — hommage Nair et al. 2021 | Recherche (Nair et al. 2021) | +| 13 | [Research-06-LearningToBranch-Generalization-Audit-Python](Hybrid/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb) | ~75 min | Learning to branch : dérivation de dom/wdeg, splits groupés, transfert inter-familles, performance intégrée, coût d'inférence et seuil d'amortissement — distillation PrCon G4 (Simon Naulet, Matis Codjia) | Projet étudiant (PrCon PR #46) | +| 14 | [Research-07-SALBP-AssemblyLineBalancing-Audit-Python](Hybrid/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb) | ~70 min | SALBP-1/2 : CP-SAT, PuLP/CBC et RPW, statuts/incumbents/bornes, identité de benchmark, front Pareto certifié et MMALBP robuste/pondéré — distillation PrCon B1 (Ilias Kalalou, Kaelan Grall) | Projet étudiant (PrCon PR #57) | +| 15 | [Research-08-OrbitalAssembly-Certificate-Audit-Python](Hybrid/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb) | ~70 min | Assemblage orbital : physique de Hohmann dans le modèle, auditeur externe, preuve que la scalarisation est exactement lexicographique, comparaison à makespan égal, front d'échange ε-contrainte et sonde en taille **et** en densité — distillation PrCon C4 (Gurvan Estable, Joris Bely, Kévin Lubert) | Projet étudiant (PrCon PR #53) | +| 16 | [Research-09-RCPSP-Max-Feasibility-Bounds-Python](Hybrid/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb) | ~65 min | RCPSP/max : le lag maximal comme arc inverse, faisabilité NP-difficile et son témoin de circuit positif, balayage des trois régimes temporel/ressource/réalisable, échelle de bornes certifiées et repli explicite quand la référence externe manque — distillation PrCon B4 (Arthur Gallier, Nicolas Naegelen) | Projet étudiant (PrCon PR #51) | +| 17 | [Research-11-NeuralDiving-Coloration-Python](Hybrid/Research-11-NeuralDiving-Coloration-Python.ipynb) | ~60 min | Neural diving : un plongeur MLP prédit une affectation partielle, injectée comme hint réparable dans CP-SAT ; la médiane des branches recule (2829 → 2325, 25/25 instances améliorées) alors que ≈ 49 % des arêtes du hint violent l'adjacence — cohérence du hint avec les contraintes, pas précision par bit — hommage Nair et al. 2021 | Recherche (Nair et al. 2021) | --- @@ -251,23 +251,23 @@ Le [App-22-AlgorithmSelection-Python](Hybrid/App-22-AlgorithmSelection-Python.ht Le [App-23-PRESENT-Differential-Cryptanalysis-SAT](Hybrid/App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb) distille le projet PrCon F2 de **Théodore Deguest**, *« Cryptanalyse différentielle de PRESENT via SAT »*, PR [PrCon #49](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/49). Le notebook reconstruit l'expérience de façon autonome, reproduit la DDT et les frontières SAT/UNSAT, corrige le seuil documentaire à R=15/W=66 et distingue explicitement trail, cluster et niveau de preuve. -Le [App-24-MAPF-Guarantee-Audit](Hybrid/App-24-MAPF-Guarantee-Audit.ipynb) distille le projet PrCon G3 de **Matteo Atkinson** et **Paul Witkowski**, *« Coordination de drones par Multi-Agent Path Finding »*, PRs [PrCon #33](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/33), [#36](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/36) et [#42](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/42). Un rerun frais alimente un validateur et un oracle CP-SAT indépendants ; le notebook distingue trajectoire valide, optimum observé et garantie réellement établie, avec provenance détaillée dans [`Hybrid/data/app24-mapf-audit/SOURCE.md`](Hybrid/data/app24-mapf-audit/SOURCE.md). +Le [Research-03-MAPF-Guarantee-Audit-Python](Hybrid/Research-03-MAPF-Guarantee-Audit-Python.ipynb) distille le projet PrCon G3 de **Matteo Atkinson** et **Paul Witkowski**, *« Coordination de drones par Multi-Agent Path Finding »*, PRs [PrCon #33](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/33), [#36](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/36) et [#42](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/42). Un rerun frais alimente un validateur et un oracle CP-SAT indépendants ; le notebook distingue trajectoire valide, optimum observé et garantie réellement établie, avec provenance détaillée dans [`Hybrid/data/app24-mapf-audit/SOURCE.md`](Hybrid/data/app24-mapf-audit/SOURCE.md). -Le [App-25-CombinatorialAuctions-WDP-VCG](Hybrid/App-25-CombinatorialAuctions-WDP-VCG.ipynb) distille le projet PrCon J2 de **Lucas Majerczyk**, **Nabil Chartouni** et **Wilfrid Wangon-Zekou**, *« Enchères combinatoires et Winner Determination »*, PR [PrCon #26](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/26). Le notebook ré-écrit le solveur WDP (CP-SAT, prix entiers milli-unités bout-en-bout) sans importer le package `wdp/` des étudiants ; il re-résout les 18 instances CATS, **matérialise en exécutable** le contre-exemple de manipulation sous budget documenté mais jamais testé dans la source, et audite honnêtement l'écart `PRICE_SCALE` entre les outputs committés et le code au commit source. Données et provenance : [`data/app25-wdp-vcg-audit`](Hybrid/data/app25-wdp-vcg-audit/). +Le [Research-04-CombinatorialAuctions-WDP-VCG-Python](Hybrid/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb) distille le projet PrCon J2 de **Lucas Majerczyk**, **Nabil Chartouni** et **Wilfrid Wangon-Zekou**, *« Enchères combinatoires et Winner Determination »*, PR [PrCon #26](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/26). Le notebook ré-écrit le solveur WDP (CP-SAT, prix entiers milli-unités bout-en-bout) sans importer le package `wdp/` des étudiants ; il re-résout les 18 instances CATS, **matérialise en exécutable** le contre-exemple de manipulation sous budget documenté mais jamais testé dans la source, et audite honnêtement l'écart `PRICE_SCALE` entre les outputs committés et le code au commit source. Données et provenance : [`data/app25-wdp-vcg-audit`](Hybrid/data/app25-wdp-vcg-audit/). -Le [App-26-CoveringArrays-Guarantee-Audit](CSP/App-26-CoveringArrays-Guarantee-Audit.ipynb) distille le projet PrCon H4 de **Valérian Pichot**, *« Covering Arrays »*, PR [PrCon #58](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/58). Sans recopier le générateur étudiant, le notebook reconstruit un oracle indépendant, un set cover CP-SAT exact et deux baselines approchées ; il reproduit surtout le faux verdict d'un validateur qui exige des interactions sémantiquement impossibles, puis le répare par un univers constraint-aware. Provenance : [`CSP/data/app26-covering-arrays-audit/SOURCE.md`](CSP/data/app26-covering-arrays-audit/SOURCE.md). +Le [Research-05-CoveringArrays-Guarantee-Audit-Python](CSP/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb) distille le projet PrCon H4 de **Valérian Pichot**, *« Covering Arrays »*, PR [PrCon #58](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/58). Sans recopier le générateur étudiant, le notebook reconstruit un oracle indépendant, un set cover CP-SAT exact et deux baselines approchées ; il reproduit surtout le faux verdict d'un validateur qui exige des interactions sémantiquement impossibles, puis le répare par un univers constraint-aware. Provenance : [`CSP/data/app26-covering-arrays-audit/SOURCE.md`](CSP/data/app26-covering-arrays-audit/SOURCE.md). Le [App-27-Sparse-Index-Tracking-Walk-Forward](Hybrid/App-27-Sparse-Index-Tracking-Walk-Forward.ipynb) distille le projet PrCon M2 de **Godric Bouteloup**, *« Sparse Index Tracking »*, PR [PrCon #52](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/52). Le notebook conserve la modélisation CP-SAT en lots entiers, mais reconstruit l'expérience sur un marché synthétique seedé : cardinalité exacte, turnover entre rebalancements consécutifs, validation indépendante, choix de K avant le test et statut/borne/gap explicites. Il matérialise aussi un protocole contaminé pour montrer qu'un score obtenu après consultation du test est ininterprétable, qu'il paraisse meilleur ou moins bon. Cette lecture de méthode reprend ensuite, sans relancer de recherche de marché, les résultats autoritatifs du projet [Sparse-Index-Tracking-QC](../../QuantConnect/projects/Sparse-Index-Tracking-QC/README.md) intégré par la PR CoursIA [#14068](https://github.com/jsboige/CoursIA/pull/14068) : 703 contre 1 414 ordres, mais pas de domination sparse sur les performances ni sur le turnover. **Une recherche, deux lectures.** Provenance : [`Hybrid/data/app27-sparse-index-tracking/SOURCE.md`](Hybrid/data/app27-sparse-index-tracking/SOURCE.md). -Le [App-28-LearningToBranch-Generalization-Audit](Hybrid/App-28-LearningToBranch-Generalization-Audit.ipynb) distille le projet PrCon G4 de **Simon Naulet** et **Matis Codjia**, *« Apprentissage d'heuristiques de branchement pour solveur CP »*, PR [PrCon #46](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/46). La reproduction est entièrement réécrite : elle remplace le split par lignes par des instances disjointes, ajoute trois transferts leave-one-family-out et compare l'arbre, le temps total et le coût d'inférence à une baseline choisie sur le train uniquement. Elle établit un résultat négatif utile : une imitation locale fidèle ne garantit ni un arbre plus petit ni un solveur plus rapide. Provenance : [`Hybrid/data/app28-learning-to-branch-audit/SOURCE.md`](Hybrid/data/app28-learning-to-branch-audit/SOURCE.md). +Le [Research-06-LearningToBranch-Generalization-Audit-Python](Hybrid/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb) distille le projet PrCon G4 de **Simon Naulet** et **Matis Codjia**, *« Apprentissage d'heuristiques de branchement pour solveur CP »*, PR [PrCon #46](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/46). La reproduction est entièrement réécrite : elle remplace le split par lignes par des instances disjointes, ajoute trois transferts leave-one-family-out et compare l'arbre, le temps total et le coût d'inférence à une baseline choisie sur le train uniquement. Elle établit un résultat négatif utile : une imitation locale fidèle ne garantit ni un arbre plus petit ni un solveur plus rapide. Provenance : [`Hybrid/data/app28-learning-to-branch-audit/SOURCE.md`](Hybrid/data/app28-learning-to-branch-audit/SOURCE.md). -Le [App-29-SALBP-AssemblyLineBalancing-Audit](Hybrid/App-29-SALBP-AssemblyLineBalancing-Audit.ipynb) rend hommage au projet PrCon B1 d'**Ilias Kalalou** et **Kaelan Grall**, *« Équilibrage de chaîne d'assemblage (SALBP) »*, PR [PrCon #57](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/57). Le notebook préserve leur geste central — SALBP-1/2, comparaison CP-SAT/PuLP/RPW, Pareto et multi-modèles — dans une réécriture CoursIA indépendante qui publie statuts, incumbents, bornes, gaps, identité structurelle des instances et validation hors solveur. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Hybrid/data/app29-salbp-audit/SOURCE.md`](Hybrid/data/app29-salbp-audit/SOURCE.md). +Le [Research-07-SALBP-AssemblyLineBalancing-Audit-Python](Hybrid/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb) rend hommage au projet PrCon B1 d'**Ilias Kalalou** et **Kaelan Grall**, *« Équilibrage de chaîne d'assemblage (SALBP) »*, PR [PrCon #57](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/57). Le notebook préserve leur geste central — SALBP-1/2, comparaison CP-SAT/PuLP/RPW, Pareto et multi-modèles — dans une réécriture CoursIA indépendante qui publie statuts, incumbents, bornes, gaps, identité structurelle des instances et validation hors solveur. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Hybrid/data/app29-salbp-audit/SOURCE.md`](Hybrid/data/app29-salbp-audit/SOURCE.md). -Le [App-30-OrbitalAssembly-Certificate-Audit](Hybrid/App-30-OrbitalAssembly-Certificate-Audit.ipynb) rend hommage au projet PrCon C4 de **Gurvan Estable**, **Joris Bely** et **Kévin Lubert**, *« Assemblage orbital de satellites »*, PR [PrCon #53](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/53). Le geste distillé est une décision de modélisation : faire descendre la physique dans le modèle, durées issues d'un temps de vol de Hohmann calculé et coûts d'un Δv calculé, les deux contraignant les mêmes intervalles CP-SAT. La reproduction CoursIA est indépendante et volontairement discrétisée autrement, donc non comparable chiffre à chiffre : elle ajoute un auditeur externe qui ne partage aucun état avec les solveurs, la preuve que l'objectif scalarisé `makespan × (B+1) + ergol` est *exactement* lexicographique dès que le budget borne l'ergol — ce que le rapport source qualifiait prudemment d'« approximation » —, une comparaison à makespan égal qui sépare l'inefficacité en ergol d'une heuristique de son retard d'échéancier, un front d'échange ε-contrainte dont chaque point porte son statut, et une sonde qui montre que la taille est un mauvais prédicteur de difficulté. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Hybrid/data/app30-orbital-assembly-audit/SOURCE.md`](Hybrid/data/app30-orbital-assembly-audit/SOURCE.md). +Le [Research-08-OrbitalAssembly-Certificate-Audit-Python](Hybrid/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb) rend hommage au projet PrCon C4 de **Gurvan Estable**, **Joris Bely** et **Kévin Lubert**, *« Assemblage orbital de satellites »*, PR [PrCon #53](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/53). Le geste distillé est une décision de modélisation : faire descendre la physique dans le modèle, durées issues d'un temps de vol de Hohmann calculé et coûts d'un Δv calculé, les deux contraignant les mêmes intervalles CP-SAT. La reproduction CoursIA est indépendante et volontairement discrétisée autrement, donc non comparable chiffre à chiffre : elle ajoute un auditeur externe qui ne partage aucun état avec les solveurs, la preuve que l'objectif scalarisé `makespan × (B+1) + ergol` est *exactement* lexicographique dès que le budget borne l'ergol — ce que le rapport source qualifiait prudemment d'« approximation » —, une comparaison à makespan égal qui sépare l'inefficacité en ergol d'une heuristique de son retard d'échéancier, un front d'échange ε-contrainte dont chaque point porte son statut, et une sonde qui montre que la taille est un mauvais prédicteur de difficulté. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Hybrid/data/app30-orbital-assembly-audit/SOURCE.md`](Hybrid/data/app30-orbital-assembly-audit/SOURCE.md). -Le [App-31-RCPSP-Max-Feasibility-Bounds](Hybrid/App-31-RCPSP-Max-Feasibility-Bounds.ipynb) rend hommage au projet PrCon B4 d'**Arthur Gallier** et **Nicolas Naegelen**, *« RCPSP — ordonnancement de projet sous contraintes de ressources »*, PR [PrCon #51](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/51). Leur rendu a fait ce que [Planners-8-Temporal](../../SymbolicAI/Planners/03-Advanced/Planners-8-Temporal-Csharp.ipynb) laissait explicitement « en exercice » : confronter un solveur à un benchmark public d'ordonnancement. La vérification indépendante conduite pour cette distillation confirme leurs dix makespans, tous recalculés `OPTIMAL` par un modèle réécrit de zéro. Le prolongement CoursIA porte sur ce que leur section RCPSP/max rendait possible sans l'exercer : un lag maximal s'encode par un **arc inverse** qui referme un circuit, la faisabilité elle-même devient NP-difficile (Bartusch, Möhring, Radermacher, 1988), et un circuit de poids strictement positif en est le témoin vérifiable à la main. Le notebook balaye les trois régimes — infaisable temporellement, infaisable par les ressources, réalisable —, mesure que le diagnostic polynomial épargne au solveur le tiers gauche du domaine, et propose une échelle de bornes certifiées comme repli explicite lorsqu'aucune référence externe n'est disponible : le champ `niveau_de_preuve` interdit de confondre un écart à une borne calculée avec un écart à un optimum connu. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Hybrid/data/app31-rcpsp-max/SOURCE.md`](Hybrid/data/app31-rcpsp-max/SOURCE.md). +Le [Research-09-RCPSP-Max-Feasibility-Bounds-Python](Hybrid/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb) rend hommage au projet PrCon B4 d'**Arthur Gallier** et **Nicolas Naegelen**, *« RCPSP — ordonnancement de projet sous contraintes de ressources »*, PR [PrCon #51](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/51). Leur rendu a fait ce que [Planners-8-Temporal](../../SymbolicAI/Planners/03-Advanced/Planners-8-Temporal-Csharp.ipynb) laissait explicitement « en exercice » : confronter un solveur à un benchmark public d'ordonnancement. La vérification indépendante conduite pour cette distillation confirme leurs dix makespans, tous recalculés `OPTIMAL` par un modèle réécrit de zéro. Le prolongement CoursIA porte sur ce que leur section RCPSP/max rendait possible sans l'exercer : un lag maximal s'encode par un **arc inverse** qui referme un circuit, la faisabilité elle-même devient NP-difficile (Bartusch, Möhring, Radermacher, 1988), et un circuit de poids strictement positif en est le témoin vérifiable à la main. Le notebook balaye les trois régimes — infaisable temporellement, infaisable par les ressources, réalisable —, mesure que le diagnostic polynomial épargne au solveur le tiers gauche du domaine, et propose une échelle de bornes certifiées comme repli explicite lorsqu'aucune référence externe n'est disponible : le champ `niveau_de_preuve` interdit de confondre un écart à une borne calculée avec un écart à un optimum connu. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Hybrid/data/app31-rcpsp-max/SOURCE.md`](Hybrid/data/app31-rcpsp-max/SOURCE.md). -Le [App-33-NeuralDiving-Coloration](Hybrid/App-33-NeuralDiving-Coloration.ipynb) rend hommage au second geste de l'article de Nair et al. (2021), *« Solving Mixed Integer Programs Using Neural Networks »* (arXiv:2012.13349) : le **diving**, qui apprend une solution partielle pour guider un solveur MIP. App-28 a audité la composante *branching* (politique de branchement apprise) ; App-33 enchaîne sur l'autre composante : un plongeur MLP prédit une affectation des 60 sommets d'une coloration de graphe, injectée comme `hint` réparable dans OR-Tools CP-SAT, et l'on mesure l'effet sur les branches de preuve. La famille est calibrée pour qu'une fenêtre existe : les set-cover denses s'effondrent au presolve (`nodes = 0`) et les knapsack corrélés ne se prouvent pas en fenêtre notebook ; la coloration 60 sommets / 3 arêtes branche (médiane 2742, 2303-3799 sur les 60 instances d'entraînement) et se prouve (< 0,1 s). Verdict mesuré sur 25 instances de test, sur un run déterministe (`num_workers = 1`) : la médiane des branches recule (2829 → 2325, ≈ −18 %), les 25 instances s'améliorent (gain relatif médian ≈ 15 %, de 8 % à 28 %), et ≈ 49 % des arêtes du hint (44 sur ~90) sont en conflit avec l'adjacence — la cohérence, pas la précision par bit, détermine l'effet du hint. Le notebook ne copie aucun code, donnée, figure ou prose de l'article, archivé au gisement `G:\Mon Drive\MyIA\IA\Bibliographie IA\Search\`. Provenance : [`Hybrid/data/app33-neural-diving/SOURCE.md`](Hybrid/data/app33-neural-diving/SOURCE.md). +Le [Research-11-NeuralDiving-Coloration-Python](Hybrid/Research-11-NeuralDiving-Coloration-Python.ipynb) rend hommage au second geste de l'article de Nair et al. (2021), *« Solving Mixed Integer Programs Using Neural Networks »* (arXiv:2012.13349) : le **diving**, qui apprend une solution partielle pour guider un solveur MIP. App-28 a audité la composante *branching* (politique de branchement apprise) ; App-33 enchaîne sur l'autre composante : un plongeur MLP prédit une affectation des 60 sommets d'une coloration de graphe, injectée comme `hint` réparable dans OR-Tools CP-SAT, et l'on mesure l'effet sur les branches de preuve. La famille est calibrée pour qu'une fenêtre existe : les set-cover denses s'effondrent au presolve (`nodes = 0`) et les knapsack corrélés ne se prouvent pas en fenêtre notebook ; la coloration 60 sommets / 3 arêtes branche (médiane 2742, 2303-3799 sur les 60 instances d'entraînement) et se prouve (< 0,1 s). Verdict mesuré sur 25 instances de test, sur un run déterministe (`num_workers = 1`) : la médiane des branches recule (2829 → 2325, ≈ −18 %), les 25 instances s'améliorent (gain relatif médian ≈ 15 %, de 8 % à 28 %), et ≈ 49 % des arêtes du hint (44 sur ~90) sont en conflit avec l'adjacence — la cohérence, pas la précision par bit, détermine l'effet du hint. Le notebook ne copie aucun code, donnée, figure ou prose de l'article, archivé au gisement `G:\Mon Drive\MyIA\IA\Bibliographie IA\Search\`. Provenance : [`Hybrid/data/app33-neural-diving/SOURCE.md`](Hybrid/data/app33-neural-diving/SOURCE.md). --- diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb index 0053312635..f27b667e95 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb @@ -1513,8 +1513,8 @@ "end_time": "2026-08-26T07:09:59.851046+00:00", "environment_variables": {}, "exception": null, - "input_path": "App-22-EdgeColoring-Tutte.ipynb", - "output_path": "App-22-EdgeColoring-Tutte.ipynb", + "input_path": "Research-01-EdgeColoring-Tutte-Python.ipynb", + "output_path": "Research-01-EdgeColoring-Tutte-Python.ipynb", "parameters": {}, "start_time": "2026-08-26T07:09:53.031757+00:00", "version": "2.7.0" diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb index 4c5c19696b..93361dbaa6 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb @@ -52,7 +52,7 @@ "source": [ "# App-23 - Factorio Belt Balancer (CP-SAT borne)\n", "\n", - "**Navigation** : [<< App-22 EdgeColoring Tutte](../CSP/App-22-EdgeColoring-Tutte.ipynb) | [Index](../README.md) | [App-26 Covering Arrays >>](../CSP/App-26-CoveringArrays-Guarantee-Audit.ipynb)\n", + "**Navigation** : [<< App-22 EdgeColoring Tutte](../CSP/Research-01-EdgeColoring-Tutte-Python.ipynb) | [Index](../README.md) | [App-26 Covering Arrays >>](../CSP/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb)\n", "\n", "## Belt balancer Factorio : MIP continu vs CP-SAT discret sur cas borne\n", "\n", @@ -2467,8 +2467,8 @@ "end_time": "2026-09-12T19:01:31.739521", "environment_variables": {}, "exception": null, - "input_path": "MyIA.AI.Notebooks/Search/Applications/CSP/App-23-Factorio-Balancer.ipynb", - "output_path": "MyIA.AI.Notebooks/Search/Applications/CSP/App-23-Factorio-Balancer.ipynb", + "input_path": "MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb", + "output_path": "MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb", "parameters": {}, "start_time": "2026-09-12T19:00:34.530542", "version": "2.6.0" diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb index 14a4a66d02..840e68c405 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb @@ -1310,8 +1310,8 @@ "end_time": "2026-08-28T14:57:47.128348+00:00", "environment_variables": {}, "exception": null, - "input_path": "App-24-MAPF-Guarantee-Audit.ipynb", - "output_path": "App-24-MAPF-Guarantee-Audit.ipynb", + "input_path": "Research-03-MAPF-Guarantee-Audit-Python.ipynb", + "output_path": "Research-03-MAPF-Guarantee-Audit-Python.ipynb", "parameters": {}, "start_time": "2026-08-28T14:57:43.006649+00:00", "version": "2.7.0" diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb index d19fbba2c9..f0605f9e16 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb @@ -2879,8 +2879,8 @@ "end_time": "2026-08-28T19:47:01.780333+00:00", "environment_variables": {}, "exception": null, - "input_path": "App-25-CombinatorialAuctions-WDP-VCG.ipynb", - "output_path": "App-25-CombinatorialAuctions-WDP-VCG.ipynb", + "input_path": "Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb", + "output_path": "Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb", "parameters": {}, "start_time": "2026-08-28T19:46:53.676049+00:00", "version": "2.7.0" diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb index 15bf4f9a7b..68e9d09f00 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb @@ -1235,7 +1235,7 @@ "- [CSP-3 — CP-SAT avancé](../../Part2-CSP/CSP-3-Advanced.ipynb) : variables booléennes, contraintes réifiées et lecture des statuts ;\n", "- [CSP-5 — Optimisation](../../Part2-CSP/CSP-5-Optimization.ipynb) : incumbent, borne et différence entre faisabilité et optimalité ;\n", "- [App-20 — Sudoku Benchmark](App-20-SudokuBenchmark-Python.ipynb) : autre comparaison d'algorithmes sous oracle commun ;\n", - "- [App-24 — MAPF Guarantee Audit](../Hybrid/App-24-MAPF-Guarantee-Audit.ipynb) : même discipline, séparer solution valide, optimum observé et garantie prouvée.\n", + "- [App-24 — MAPF Guarantee Audit](../Hybrid/Research-03-MAPF-Guarantee-Audit-Python.ipynb) : même discipline, séparer solution valide, optimum observé et garantie prouvée.\n", "\n", "Le projet H4 reste la source du geste et de la question : [dépôt](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/tree/main/H4-Covering-Arrays) (MIT), notebook, solveur CP-SAT, IPOG, AETG et slides — non recopiés ici." ] @@ -1286,8 +1286,8 @@ "end_time": "2026-08-29T14:51:34.342781+00:00", "environment_variables": {}, "exception": null, - "input_path": "App-26-CoveringArrays-Guarantee-Audit.ipynb", - "output_path": "App-26-CoveringArrays-Guarantee-Audit.ipynb", + "input_path": "Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb", + "output_path": "Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb", "parameters": {}, "start_time": "2026-08-29T14:51:13.448983+00:00", "version": "2.7.0" diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb index bb3f1f9a28..62074145de 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb @@ -17,7 +17,7 @@ "# App-28 — Learning to branch\n", "## Auditer la généralisation avant d'annoncer un gain\n", "\n", - "[← Applications](../README.md) | [↑ Search](../../README.md) | [<< App-25 Enchères WDP/VCG](App-25-CombinatorialAuctions-WDP-VCG.ipynb)\n", + "[← Applications](../README.md) | [↑ Search](../../README.md) | [<< App-25 Enchères WDP/VCG](Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb)\n", "\n", "> **Durée estimée : 75 minutes**\n", "\n", @@ -2042,8 +2042,8 @@ "end_time": "2026-09-01T20:07:18.549523+00:00", "environment_variables": {}, "exception": null, - "input_path": "App-28-LearningToBranch-Generalization-Audit.ipynb", - "output_path": "App-28-LearningToBranch-Generalization-Audit.ipynb", + "input_path": "Research-06-LearningToBranch-Generalization-Audit-Python.ipynb", + "output_path": "Research-06-LearningToBranch-Generalization-Audit-Python.ipynb", "parameters": {}, "start_time": "2026-09-01T20:05:11.740318+00:00", "version": "2.7.0" diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb index f66fa24c2a..5d34e9c3f4 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb @@ -1454,8 +1454,8 @@ "end_time": "2026-09-01T18:55:21.154131+00:00", "environment_variables": {}, "exception": null, - "input_path": "App-29-SALBP-AssemblyLineBalancing-Audit.ipynb", - "output_path": "App-29-SALBP-AssemblyLineBalancing-Audit.ipynb", + "input_path": "Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb", + "output_path": "Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb", "parameters": {}, "start_time": "2026-09-01T18:55:05.098128+00:00", "version": "2.7.0" diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb index 113796437c..d22590a1ee 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb @@ -17,7 +17,7 @@ "# App-30 — Ordonnancement d'assemblage orbital\n", "## Le certificat, pas seulement le chiffre : encodage lexicographique, comparaison appariée, front d'échange\n", "\n", - "**Navigation** : [Index Applications](../README.md) | [Série Search](../../README.md) | [CSP-4 Scheduling](../../Part2-CSP/CSP-4-Scheduling.ipynb) | [App-29 SALBP](App-29-SALBP-AssemblyLineBalancing-Audit.ipynb)\n", + "**Navigation** : [Index Applications](../README.md) | [Série Search](../../README.md) | [CSP-4 Scheduling](../../Part2-CSP/CSP-4-Scheduling.ipynb) | [App-29 SALBP](Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb)\n", "\n", "> **Hommage à Gurvan Estable, Joris Bely et Kévin Lubert — projet C4, EPITA SCIA 2026.** Leur projet n'a pas traité l'assemblage orbital comme un ordonnancement d'atelier déguisé. Il a fait descendre la physique dans le modèle : les durées de manœuvre viennent d'un temps de vol de Hohmann réellement calculé, les coûts viennent d'un Δv réellement calculé, et le budget d'ergol contraint les mêmes intervalles que les couloirs orbitaux. Coupler ainsi la décision temporelle et la décision énergétique dans un unique modèle CP-SAT — au lieu de fixer des durées arbitraires — est le geste central de cette distillation.\n", "\n", @@ -2655,8 +2655,8 @@ "\n", "- [CSP-4 Scheduling](../../Part2-CSP/CSP-4-Scheduling.ipynb) — les primitives d'intervalles, `NoOverlap` et `Cumulative` en contexte.\n", "- [CSP-5 Optimisation](../../Part2-CSP/CSP-5-Optimization.ipynb) — objectifs, bornes et lecture des statuts.\n", - "- [App-29 SALBP](App-29-SALBP-AssemblyLineBalancing-Audit.ipynb) — même exigence de certificats et de provenance sur l'équilibrage de ligne.\n", - "- [App-24 MAPF](App-24-MAPF-Guarantee-Audit.ipynb) — l'audit de garanties appliqué au *pathfinding* multi-agent." + "- [App-29 SALBP](Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb) — même exigence de certificats et de provenance sur l'équilibrage de ligne.\n", + "- [App-24 MAPF](Research-03-MAPF-Guarantee-Audit-Python.ipynb) — l'audit de garanties appliqué au *pathfinding* multi-agent." ] } ], @@ -2684,8 +2684,8 @@ "end_time": "2026-09-06T23:45:09.969967+00:00", "environment_variables": {}, "exception": null, - "input_path": "App-30-OrbitalAssembly-Certificate-Audit.ipynb", - "output_path": "App-30-OrbitalAssembly-Certificate-Audit.ipynb", + "input_path": "Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb", + "output_path": "Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb", "parameters": {}, "start_time": "2026-09-06T23:41:03.737562+00:00", "version": "2.7.0" diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb index 38d7f5f02e..b084979b1c 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb @@ -659,8 +659,8 @@ "end_time": "2026-09-18T13:24:28.095906", "environment_variables": {}, "exception": null, - "input_path": "MyIA.AI.Notebooks/Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb", - "output_path": "MyIA.AI.Notebooks/Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb", + "input_path": "MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb", + "output_path": "MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb", "parameters": {}, "start_time": "2026-09-18T13:24:25.798720", "version": "2.6.0" diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb index d64a9c15fa..9d3782ee9c 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb @@ -18,13 +18,13 @@ "\n", "## Du conseil aux valeurs aux branches prouvées : ce que le diving apporte, mesure à l'appui\n", "\n", - "[← Applications](../README.md) | [↑ Search](../../README.md) | [<< App-31 Bornes RCPSP](App-31-RCPSP-Max-Feasibility-Bounds.ipynb)\n", + "[← Applications](../README.md) | [↑ Search](../../README.md) | [<< App-31 Bornes RCPSP](Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb)\n", "\n", "> **Durée estimée : 60 minutes**\n", "\n", "## Hommage et question scientifique\n", "\n", - "Une branche de la recherche « machine learning for combinatorial optimization » promet d'apprendre une **solution initiale** pour accélérer le solveur : c'est le **diving** de Nair et al. (2021), *« Solving Mixed Integer Programs Using Neural Networks »* (arXiv:2012.13349, v3, juillet 2021). Leur apport se compose de deux gestes distincts : la **priorité de branchement** (choisir quelle variable contribuer en premier, à chaque nœud) et le **plongement** (apprendre quel *sous-ensemble de variables fixer tout de suite*). La composante branchement a déjà été auditée dans ce dépôt : [App-28 Learning to Branch](App-28-LearningToBranch-Generalization-Audit.ipynb) y mesure qu'une politique locale fidèle ne garantit ni un arbre plus petit ni un solveur plus rapide. Ce notebook reprend l'autre composante, sur un terrain contrôlé : **un plongeur MLP qui prédit une affectation partielle, injectée comme `hint` (conseil) dans un solveur réel, OR-Tools CP-SAT, sur une famille de coloration de graphe calibrée pour brancher.**\n", + "Une branche de la recherche « machine learning for combinatorial optimization » promet d'apprendre une **solution initiale** pour accélérer le solveur : c'est le **diving** de Nair et al. (2021), *« Solving Mixed Integer Programs Using Neural Networks »* (arXiv:2012.13349, v3, juillet 2021). Leur apport se compose de deux gestes distincts : la **priorité de branchement** (choisir quelle variable contribuer en premier, à chaque nœud) et le **plongement** (apprendre quel *sous-ensemble de variables fixer tout de suite*). La composante branchement a déjà été auditée dans ce dépôt : [App-28 Learning to Branch](Research-06-LearningToBranch-Generalization-Audit-Python.ipynb) y mesure qu'une politique locale fidèle ne garantit ni un arbre plus petit ni un solveur plus rapide. Ce notebook reprend l'autre composante, sur un terrain contrôlé : **un plongeur MLP qui prédit une affectation partielle, injectée comme `hint` (conseil) dans un solveur réel, OR-Tools CP-SAT, sur une famille de coloration de graphe calibrée pour brancher.**\n", "\n", "La reproduction est entièrement locale, sur une famille synthétique de taille notebook, et ne copie ni code ni figure de l'article. Le but n'est pas de « refaire l'article », mais de mesurer sur un cas où la recherche travaille vraiment ce que le mécanisme promet : moins de nœuds, ou une recherche plus stable. Verdict au programme : **deux nombres ensemble** — la médiane des branches, et la queue de distribution.\n", "\n", @@ -859,7 +859,7 @@ "source": [ "## 6. Pour aller plus loin et bibliographie\n", "\n", - "- **App-28 Learning to Branch** ([Hybrid](App-28-LearningToBranch-Generalization-Audit.ipynb)) : l'autre moitié du geste Nair — la priorité de branchement apprise, auditée sur la même famille de questions (arbre × temps × coût d'inférence). La complémentarité des deux verdicts : aucune source d'amélioration locale ne se transforme en gain global sans mesure intégrée.\n", + "- **App-28 Learning to Branch** ([Hybrid](Research-06-LearningToBranch-Generalization-Audit-Python.ipynb)) : l'autre moitié du geste Nair — la priorité de branchement apprise, auditée sur la même famille de questions (arbre × temps × coût d'inférence). La complémentarité des deux verdicts : aucune source d'amélioration locale ne se transforme en gain global sans mesure intégrée.\n", "- **Exercices en extension** : remplacer le MLP par un classifieur basé sur la structure (features de degré), ou entraîner le plongeur sur les conflits (régression du nombre de conflits).\n", "\n", "Bibliographie :\n", @@ -896,8 +896,8 @@ "end_time": "2026-09-23T13:42:30.790789", "environment_variables": {}, "exception": null, - "input_path": "App-33-NeuralDiving-Coloration.ipynb", - "output_path": "App-33-NeuralDiving-Coloration.ipynb", + "input_path": "Research-11-NeuralDiving-Coloration-Python.ipynb", + "output_path": "Research-11-NeuralDiving-Coloration-Python.ipynb", "parameters": {}, "start_time": "2026-09-23T13:42:07.654200", "version": "2.6.0" diff --git a/MyIA.AI.Notebooks/Search/README.md b/MyIA.AI.Notebooks/Search/README.md index 6bc27f10fb..2fbd72841e 100644 --- a/MyIA.AI.Notebooks/Search/README.md +++ b/MyIA.AI.Notebooks/Search/README.md @@ -147,7 +147,7 @@ Problèmes du monde réel adaptés de projets étudiants. Chaque application est | 12 (C#) | [App-19-ProceduralGeneration-WFC-CSharp](Applications/CSP/App-19-ProceduralGeneration-WFC-CSharp.ipynb) | ~45 min | Twin C# du 12 : WFC from-scratch (entropie de Shannon + propagation AC-3 + backtracking) (See #4956) | Marathon | | 13 | [App-20-SudokuBenchmark-Python](Applications/CSP/App-20-SudokuBenchmark-Python.html) | ~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](Applications/CSP/App-20b-SudokuBenchmark-CSharp.html) | ~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](Applications/CSP/App-26-CoveringArrays-Guarantee-Audit.ipynb) | ~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) | +| 16 | [Research-05-CoveringArrays-Guarantee-Audit-Python](Applications/CSP/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb) | ~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). diff --git a/MyIA.AI.Notebooks/Search/search_lean/README.md b/MyIA.AI.Notebooks/Search/search_lean/README.md index 712f34854b..6eadca6af1 100644 --- a/MyIA.AI.Notebooks/Search/search_lean/README.md +++ b/MyIA.AI.Notebooks/Search/search_lean/README.md @@ -193,7 +193,7 @@ flowchart TD Le module [`Szpiro.lean`](Szpiro.lean) (miroir EN : [`Szpiro_en.lean`](Szpiro_en.lean)) est le sibling Lean du carnet -[`App-32-Szpiro-Pasten-2026.ipynb`](../Applications/Search/App-32-Szpiro-Pasten-2026.ipynb) : +[`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Search/Research-10-Szpiro-Pasten-2026-Python.ipynb) : Pasten 2026, *Improved Bounds for Szpiro's Conjecture* (arXiv 2609.17390) rend la borne `h(E) ≪ N·log log N` **inconditionnelle** — elle était connue sous GRH — et prouve `h(E) ≪_S N` pour les courbes semistables hors d'un ensemble fini. @@ -242,6 +242,6 @@ Phases suivantes (suivi #4048) : of Minimum Cost Paths*, IEEE Trans. Syst. Sci. Cybern. **4**(2), 1968. - H. Pasten, *Improved Bounds for Szpiro's Conjecture*, arXiv 2609.17390 (2026), archivé `G:\Mon Drive\MyIA\IA\Bibliographie IA\NumberTheory\` — carnet compagnon - [`App-32-Szpiro-Pasten-2026.ipynb`](../Applications/Search/App-32-Szpiro-Pasten-2026.ipynb). + [`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Search/Research-10-Szpiro-Pasten-2026-Python.ipynb). - S. Russell, P. Norvig, *Artificial Intelligence: A Modern Approach*, §3.5 (A* Search). - Notebooks compagnons : [`Search-02-Uninformed.ipynb`](../Part1-Foundations/Search-02-Uninformed.html), [`Search-03-Informed.ipynb`](../Part1-Foundations/Search-03-Informed.ipynb) (le notebook historique [`Exploration_non_informée_et_informée_intro.ipynb`](../_archive/Exploration_non_informée_et_informée_intro.ipynb) est archivé depuis 2026-07-03). diff --git a/MyIA.AI.Notebooks/Search/search_lean/Szpiro.lean b/MyIA.AI.Notebooks/Search/search_lean/Szpiro.lean index a021abce5e..f8d1a9bd9e 100644 --- a/MyIA.AI.Notebooks/Search/search_lean/Szpiro.lean +++ b/MyIA.AI.Notebooks/Search/search_lean/Szpiro.lean @@ -4,7 +4,7 @@ import Mathlib # Szpiro — ancrage Mathlib des bornes de Pasten 2026 (hommage à Serre) Sibling Lean du carnet -[`App-32-Szpiro-Pasten-2026.ipynb`](../Applications/Search/App-32-Szpiro-Pasten-2026.ipynb) +[`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Search/Research-10-Szpiro-Pasten-2026-Python.ipynb) (issue #16549, option A) : Pasten 2026, *Improved Bounds for Szpiro's Conjecture*, arXiv 2609.17390 (preprint, 261 Ko, archivé `Bibliographie IA\NumberTheory`). diff --git a/MyIA.AI.Notebooks/Search/search_lean/Szpiro_en.lean b/MyIA.AI.Notebooks/Search/search_lean/Szpiro_en.lean index 29e5bee013..c8b8097f0d 100644 --- a/MyIA.AI.Notebooks/Search/search_lean/Szpiro_en.lean +++ b/MyIA.AI.Notebooks/Search/search_lean/Szpiro_en.lean @@ -10,7 +10,7 @@ EN sibling files, both compile; namespace `Szpiro_en` (anti-collision with FR docstrings manually translated. Companion Lean file of the notebook -[`App-32-Szpiro-Pasten-2026.ipynb`](../Applications/Search/App-32-Szpiro-Pasten-2026.ipynb): +[`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Search/Research-10-Szpiro-Pasten-2026-Python.ipynb): Pasten 2026, *Improved Bounds for Szpiro's Conjecture*, arXiv 2609.17390 (preprint, archived under `Bibliographie IA\NumberTheory`). diff --git a/MyIA.AI.Notebooks/SymbolicAI/Lean/Langlands/02-monstrous-moonshine-invariant-j.ipynb b/MyIA.AI.Notebooks/SymbolicAI/Lean/Langlands/02-monstrous-moonshine-invariant-j.ipynb index f0368e5d01..f946b591b7 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/Lean/Langlands/02-monstrous-moonshine-invariant-j.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/Lean/Langlands/02-monstrous-moonshine-invariant-j.ipynb @@ -929,7 +929,7 @@ "- 01 — Formes modulaires : de $SL_2(\\mathbb{Z})$ aux opérateurs de Hecke (notebook 01, PR #17972) — le socle calculatoire ;\n", "- [Lean-16a — Conway: Man and Work](../Lean-16a-Conway-Man-and-Work.ipynb) — le contexte biographique (Conway a co-signé la conjecture et nommé « moonshine ») ;\n", "- [Serre100 — 07 : zéros de fonctions $L$, gaps GUE](../Serre100/07-zeros-fonctions-l-gaps-gue.ipynb) — la face analytique ;\n", - "- [App-32 : Szpiro–Pasten 2026](../../../Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb) — une correspondance de Jacquet–Langlands qui contraint un invariant calculable.\n", + "- [App-32 : Szpiro–Pasten 2026](../../../Search/Applications/Search/Research-10-Szpiro-Pasten-2026-Python.ipynb) — une correspondance de Jacquet–Langlands qui contraint un invariant calculable.\n", "\n", "**Sources** : Conway & Norton, *Monstrous Moonshine*, Bull. LMS **11** (1979) ; Borcherds, *Monstrous moonshine and monstrous Lie superalgebras*, Invent. Math. **109** (1992) ; Frenkel, Lepowsky & Meurman, *Vertex Operator Algebras and the Monster*, Academic Press (1988) ; Diamond & Shurman, *A First Course in Modular Forms* (ch. 1) ; Serre, *A Course in Arithmetic* (ch. VII). Récit : Margaret Wertheim, « Hunting a Mathematical Snark: The sublime symmetry of the Monster », *Cabinet Magazine* n° 34 (2009), [cabinetmagazine.org/issues/34/wertheim.php](https://www.cabinetmagazine.org/issues/34/wertheim.php) ; Adam Goucher, « An attempt to understand the Monster group », *cp4space* (29/11/2020), [cp4space.hatsya.com](https://cp4space.hatsya.com/2020/11/29/an-attempt-to-understand-the-monster-group/)\n", "\n", diff --git a/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-27-EdgeColoring-Tutte-Companion.ipynb b/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-27-EdgeColoring-Tutte-Companion.ipynb index 0fc2556b6d..2c6814ce1f 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-27-EdgeColoring-Tutte-Companion.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-27-EdgeColoring-Tutte-Companion.ipynb @@ -16,7 +16,7 @@ "source": [ "# Lean-27 : coloration d'arêtes et conjecture de Tutte — compagnon formel\n", "\n", - "Compagnon **formel** du notebook Python [`App-22-EdgeColoring-Tutte`](../../Search/Applications/CSP/App-22-EdgeColoring-Tutte.ipynb) (même mandat, issue #13031) : ici, les définitions sont écrites **en Lean 4 sur `Mathlib.Combinatorics.SimpleGraph`** et interrogées par le compilateur (`#check`, `#eval`, `decide`). Les sorties de ce notebook sont des sorties du compilateur Lean, pas de la prose à propos de Lean.\n", + "Compagnon **formel** du notebook Python [`Research-01-EdgeColoring-Tutte-Python`](../../Search/Applications/CSP/Research-01-EdgeColoring-Tutte-Python.ipynb) (même mandat, issue #13031) : ici, les définitions sont écrites **en Lean 4 sur `Mathlib.Combinatorics.SimpleGraph`** et interrogées par le compilateur (`#check`, `#eval`, `decide`). Les sorties de ce notebook sont des sorties du compilateur Lean, pas de la prose à propos de Lean.\n", "\n", "**Navigation** : [<< Lean-26 Munkres](Lean-26-Munkres-Tribute.ipynb) | [Index](README.md)\n", "\n", @@ -903,7 +903,7 @@ "1. **La planarité n'est pas dans Mathlib.** Notre `IsApexRelativeTo` prend le prédicat de planarité comme **paramètre** `P` — honnête, mais tant que `P` n'est pas instancié, l'énoncé « cubique + sans pont + apex ⇒ 3-colorable » reste un schéma. Formaliser la planarité (via les embeddings combinatoires ou les matroïdes graphiques) est un sous-projet en soi.\n", "2. **La preuve est un programme, pas un lemme.** Même avec la planarité, la preuve du papier combine un ensemble de réductibilité vérifié par ordinateur et une phase de déchargement — exactement la structure de la preuve des quatre couleurs, dont la formalisation (Gonthier, 2005) a pris des années-homme.\n", "\n", - "Ce que ce compagnon laisse au lecteur est donc la **grammaire** du théorème : `IsCubic`, `Edge3Colorable`, `IsApexRelativeTo`, un Petersen exécutable, et l'équivalence de Tutte (`SimpleGraph.tutte`) comme racine Mathlib du fil couplages. Le notebook Python compagnon ([App-22](../../Search/Applications/CSP/App-22-EdgeColoring-Tutte.ipynb)) porte, lui, la vérification empirique à large échantillon (48 graphes, 0 violation).\n", + "Ce que ce compagnon laisse au lecteur est donc la **grammaire** du théorème : `IsCubic`, `Edge3Colorable`, `IsApexRelativeTo`, un Petersen exécutable, et l'équivalence de Tutte (`SimpleGraph.tutte`) comme racine Mathlib du fil couplages. Le notebook Python compagnon ([App-22](../../Search/Applications/CSP/Research-01-EdgeColoring-Tutte-Python.ipynb)) porte, lui, la vérification empirique à large échantillon (48 graphes, 0 violation).\n", "\n", "## Exercices\n", "\n", diff --git a/MyIA.AI.Notebooks/SymbolicAI/Lean/README.md b/MyIA.AI.Notebooks/SymbolicAI/Lean/README.md index 027132254d..88ecee5365 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/Lean/README.md +++ b/MyIA.AI.Notebooks/SymbolicAI/Lean/README.md @@ -159,7 +159,7 @@ Tous les notebooks incluent une **barre de navigation** en haut et en bas permet | 24b | [Lean-24b-Confiance-Preuves-Native](Lean-24b-Confiance-Preuves-Native.ipynb) | Compagnon **natif** (kernel `lean4-wsl`, lake `mathlib_examples`) sur la fiabilité d'un certificat formel, piste Dougherty/von Hippel 2026 (*Lies, Damned Lies, and Proofs* — « ce qui rend une preuve formelle fiable ») : mis-définition rendant la preuve trivialement vraie (`DivPar` → `True` vs la vraie divisibilité avec témoin), axiomes de secours mesurés par `#print axioms` (`sorryAx` transitif, `native_decide`, `Classical.choice` whitelisté par nom), implosion depuis `False` (0 axiome), et orthogonalité certificat-vs-headline (mêmes axiomes, fidélités opposées) — cellules code exécutées sans erreur, 3 exercices | 30 min | | 25 | [Lean-25-Coherence-et-Temoin](Lean-25-Coherence-et-Temoin.ipynb) | Cohérence de de Finetti et témoin (Dutch book) : miroir Python **exact** (`fractions.Fraction`) du lake `decision_theory_lean` — un livret (+1,+1,−1,−1) encaisse l'écart d'inclusion-exclusion uniformément dans les 4 états, balayage borné exhaustif (390 625 combinaisons) qui certifie l'absence de livre sur le système réparé, stabilité affine vNM mesurée (0 divergence pour 3u+2 contre 124 pour u² sur les 2145 paires de 66 loteries du simplexe) | 40 min | | 26 | [Lean-26-Munkres-Tribute](Lean-26-Munkres-Tribute.ipynb) | Hommage à James R. Munkres (1930-2026), le cours 18.901 dans Mathlib en kernel **natif** `lean4-wsl`, exécuté sur le lake `mathlib_examples` (environnement d'exécution Mathlib, cf. [`mathlib_examples/`](mathlib_examples/)) : les cinq chapitres du manuel *Topology* — axiomes (`IsOpen`), adhérence/intérieur (`nhds`, dualités §17 ex. 6), continuité (`continuous_def` = Munkres §18.1), T2/compacité, connexité — chaque notion interrogée par `#check`/`example`/`#print axioms` (0 axiome), 3 exercices `sorry` | 30 min | -| 27 | [Lean-27-EdgeColoring-Tutte-Companion](Lean-27-EdgeColoring-Tutte-Companion.ipynb) | Compagnon **natif** (kernel `lean4-wsl`) du notebook [App-22](../../Search/Applications/CSP/App-22-EdgeColoring-Tutte.ipynb) (théorème apex arXiv 2608.22870, #13031) : définitions `IsCubic`/`Edge3Colorable`/`IsApexRelativeTo` posées sur `SimpleGraph` (absentes de Mathlib, vérifié), Petersen = Kneser KG(5,2) via `SimpleGraph.mk'` — 10 sommets, 15 arêtes, cubique prouvés par `decide`, backtracking `#eval` qui certifie l'absence de toute 3-coloration d'arêtes (`0`) avec contrôle positif K4 (`6`), ancrage `SimpleGraph.tutte` | 35 min | +| 27 | [Lean-27-EdgeColoring-Tutte-Companion](Lean-27-EdgeColoring-Tutte-Companion.ipynb) | Compagnon **natif** (kernel `lean4-wsl`) du notebook [App-22](../../Search/Applications/CSP/Research-01-EdgeColoring-Tutte-Python.ipynb) (théorème apex arXiv 2608.22870, #13031) : définitions `IsCubic`/`Edge3Colorable`/`IsApexRelativeTo` posées sur `SimpleGraph` (absentes de Mathlib, vérifié), Petersen = Kneser KG(5,2) via `SimpleGraph.mk'` — 10 sommets, 15 arêtes, cubique prouvés par `decide`, backtracking `#eval` qui certifie l'absence de toute 3-coloration d'arêtes (`0`) avec contrôle positif K4 (`6`), ancrage `SimpleGraph.tutte` | 35 min | | 28 | [Lean-28-Complex-Structure-S6](Lean-28-Complex-Structure-S6.ipynb) | Le problème de Hopf résolu : une structure complexe intégrable sur S⁶ (énoncé `Mathoverflow1973` de Formal Conjectures) — digestion du fil constructif (triangle (3,4,∞), accouplement de Shioda ⟨P,P⟩=1/6 calculé, transformations logarithmiques 3 et 4, remplissage de Mumford dP₆, reconnaissance Hurewicz→Smale→Kervaire–Milnor) avec deux invariants **calculés** (\|π₁\| = \|4m+3n\| par forme normale de Smith, χ = 2), reproduction **réelle** du dépôt piné `plby/HopfProblem` via `hopf_s6_reproduction.py` (248 818 lignes compilées en 1154 s, 0 sorry/0 axiom, comparator double kernel Lean+nanoda : *« Your solution is okay! »*, axiomes [propext, Classical.choice, Quot.sound]) et attribution différenciée (manuscrit écrit par Claude/communiqué par Alpöge, exposition Engel avec caveat, code Lean majoritairement Codex) | 45 min | | 29 | [Lean-29-Hecke-Operators-Native](Lean-29-Hecke-Operators-Native.ipynb) | Compagnon **natif** (kernel `lean4-wsl`) du lake `hecke_lean` (port pédagogique de `anthropics/fermats-last-theorem`, Apache-2.0, toolchain pinée `leanprover/lean4:v4.33.0`) : les opérateurs de Hecke T_p et U_p sur le demi-plan supérieur — représentants γ_{p,j} et partie diagonale, action de slash et ses deux comportements opposés, formule des coefficients a(np) + p^{k−1}·a(n/p) portée par `coeffHeckeT` — chaque déclaration interrogée par `#check`/`#print axioms` exécutés in-kernel (0 erreur), 3 exercices | 40 min | | 30 | [Lean-30-FormalGroups-Native](Lean-30-FormalGroups-Native.ipynb) | Compagnon **natif** (kernel `lean4-wsl`) du lake `formal_groups_lean` (port de `anthropics/fermats-last-theorem`, Apache-2.0, toolchain pinée `leanprover/lean4:v4.33.0`) : les groupes formels multivariés à travers les quatre modules `Basic`/`Hom`/`Additive`/`Iterates` — structure `MvFormalGroup` (neutre, partie linéaire, associativité), commutativité et substitution sûre, morphismes `Hom` et changement d'anneau, loi additive `addMv`, itérés `nthSeries`/`linearPart`/`FiniteHeight` — `#check`/`#print axioms` exécutés in-kernel (0 erreur), 3 exercices | 40 min | diff --git a/_quarto.yml b/_quarto.yml index 73a11d45c5..a21d518aa3 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -1640,9 +1640,9 @@ project: - "MyIA.AI.Notebooks/Search/Applications/CSP/App-20-SudokuBenchmark-Python.ipynb" - "MyIA.AI.Notebooks/Search/Applications/CSP/App-20b-SudokuBenchmark-CSharp.ipynb" - "MyIA.AI.Notebooks/Search/Applications/CSP/App-21-VoiceLeading.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/CSP/App-22-EdgeColoring-Tutte.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/CSP/App-23-Factorio-Balancer.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/CSP/App-26-CoveringArrays-Guarantee-Audit.ipynb" + - "MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb" + - "MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb" + - "MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb" - "MyIA.AI.Notebooks/Search/Applications/CSP/App-2b-GraphColoring-CSharp.ipynb" - "MyIA.AI.Notebooks/Search/Applications/CSP/App-3-NurseScheduling.ipynb" - "MyIA.AI.Notebooks/Search/Applications/CSP/App-3b-NurseScheduling-CSharp.ipynb" @@ -1669,21 +1669,21 @@ project: - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-18c-HyperparameterTuning-Rustuna-vs-Optuna.ipynb" - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-22-AlgorithmSelection-Python.ipynb" - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-24-MAPF-Guarantee-Audit.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-25-CombinatorialAuctions-WDP-VCG.ipynb" + - "MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb" + - "MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb" - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-27-Sparse-Index-Tracking-Walk-Forward.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-28-LearningToBranch-Generalization-Audit.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-29-SALBP-AssemblyLineBalancing-Audit.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-30-OrbitalAssembly-Certificate-Audit.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-31-RCPSP-Max-Feasibility-Bounds.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-33-NeuralDiving-Coloration.ipynb" + - "MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb" + - "MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb" + - "MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb" + - "MyIA.AI.Notebooks/Search/Applications/Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb" + - "MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb" - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-9-EdgeDetection.ipynb" - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-9b-EdgeDetection-CSharp.ipynb" - "MyIA.AI.Notebooks/Search/Applications/Search/App-14-ConnectFour-Adversarial-CSharp.ipynb" - "MyIA.AI.Notebooks/Search/Applications/Search/App-14-ConnectFour-Adversarial.ipynb" - "MyIA.AI.Notebooks/Search/Applications/Search/App-14b-ConnectFour.ipynb" - "MyIA.AI.Notebooks/Search/Applications/Search/App-14c-ConnectFour-CSharp.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb" + - "MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb" - "MyIA.AI.Notebooks/Search/Discrepancy/Discrepancy-01-BeckFiala-Lean-Python.ipynb" - "MyIA.AI.Notebooks/Search/Part1-Foundations/Search-01-StateSpace-CSharp.ipynb" - "MyIA.AI.Notebooks/Search/Part1-Foundations/Search-01-StateSpace.ipynb" diff --git a/docs/curriculum/ia-classique.md b/docs/curriculum/ia-classique.md index 16a9118323..3715c8434a 100644 --- a/docs/curriculum/ia-classique.md +++ b/docs/curriculum/ia-classique.md @@ -44,9 +44,9 @@ Algorithmes de recherche classique, satisfaction de contraintes (CSP), résoluti | 13 | [App-20 — Benchmark comparatif des solveurs Sudoku…](../../MyIA.AI.Notebooks/Search/Applications/CSP/App-20-SudokuBenchmark-Python.ipynb) | BETA | Oui | | 14 | [App-20b : Benchmark compare des solveurs Sudoku (jumeau…](../../MyIA.AI.Notebooks/Search/Applications/CSP/App-20b-SudokuBenchmark-CSharp.ipynb) | BETA | Oui | | 15 | [Voice Leading Minimal par Affectation — l'algorithme de…](../../MyIA.AI.Notebooks/Search/Applications/CSP/App-21-VoiceLeading.ipynb) | BETA | Oui | -| 16 | [App-22 : Coloration d'arêtes et conjecture de Tutte](../../MyIA.AI.Notebooks/Search/Applications/CSP/App-22-EdgeColoring-Tutte.ipynb) | BETA | Oui | -| 17 | [App-23 - Factorio Belt Balancer (CP-SAT borne)](../../MyIA.AI.Notebooks/Search/Applications/CSP/App-23-Factorio-Balancer.ipynb) | BETA | Oui | -| 18 | [App-26 — Covering Arrays : tester les interactions…](../../MyIA.AI.Notebooks/Search/Applications/CSP/App-26-CoveringArrays-Guarantee-Audit.ipynb) | BETA | Oui | +| 16 | [App-22 : Coloration d'arêtes et conjecture de Tutte](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb) | BETA | Oui | +| 17 | [App-23 - Factorio Belt Balancer (CP-SAT borne)](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb) | BETA | Oui | +| 18 | [App-26 — Covering Arrays : tester les interactions…](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb) | BETA | Oui | | 19 | [App-2b : Coloration de graphes — Jumeau C#](../../MyIA.AI.Notebooks/Search/Applications/CSP/App-2b-GraphColoring-CSharp.ipynb) | BETA | Oui | | 20 | [App-3 : Nurse Scheduling (Planification des horaires…](../../MyIA.AI.Notebooks/Search/Applications/CSP/App-3-NurseScheduling.ipynb) | BETA | Oui | | 21 | [App-3b : Nurse Scheduling — Twin C# (planification de…](../../MyIA.AI.Notebooks/Search/Applications/CSP/App-3b-NurseScheduling-CSharp.ipynb) | BETA | Oui | @@ -72,21 +72,21 @@ Algorithmes de recherche classique, satisfaction de contraintes (CSP), résoluti | 41 | [App-18c — Rustuna vs Optuna : mesurer un portage Rust…](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-18c-HyperparameterTuning-Rustuna-vs-Optuna.ipynb) | BETA | Oui | | 42 | [App-22 — Sélection empirique d'algorithmes : trois…](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-22-AlgorithmSelection-Python.ipynb) | BETA | Oui | | 43 | [App-23 — Cryptanalyse différentielle de PRESENT par SAT](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb) | BETA | Oui | -| 44 | [App-24 — MAPF : auditer les garanties des solveurs](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-24-MAPF-Guarantee-Audit.ipynb) | BETA | Non | -| 45 | [App-25 — Enchères combinatoires : Winner Determination…](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-25-CombinatorialAuctions-WDP-VCG.ipynb) | BETA | Oui | +| 44 | [App-24 — MAPF : auditer les garanties des solveurs](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb) | BETA | Non | +| 45 | [App-25 — Enchères combinatoires : Winner Determination…](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb) | BETA | Oui | | 46 | [App-27 — Sparse index tracking](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-27-Sparse-Index-Tracking-Walk-Forward.ipynb) | BETA | Oui | -| 47 | [App-28 — Learning to branch](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-28-LearningToBranch-Generalization-Audit.ipynb) | BETA | Oui | -| 48 | [App-29 — Équilibrage de chaîne d'assemblage (SALBP)](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-29-SALBP-AssemblyLineBalancing-Audit.ipynb) | BETA | Oui | -| 49 | [App-30 — Ordonnancement d'assemblage orbital](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-30-OrbitalAssembly-Certificate-Audit.ipynb) | BETA | Oui | -| 50 | [App-31 — RCPSP/max : quand la faisabilité devient le…](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-31-RCPSP-Max-Feasibility-Bounds.ipynb) | BETA | Oui | -| 51 | [App-33 — Neural diving : un plongeur appris pour CP-SAT](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-33-NeuralDiving-Coloration.ipynb) | BETA | Oui | +| 47 | [App-28 — Learning to branch](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb) | BETA | Oui | +| 48 | [App-29 — Équilibrage de chaîne d'assemblage (SALBP)](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb) | BETA | Oui | +| 49 | [App-30 — Ordonnancement d'assemblage orbital](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb) | BETA | Oui | +| 50 | [App-31 — RCPSP/max : quand la faisabilité devient le…](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb) | BETA | Oui | +| 51 | [App-33 — Neural diving : un plongeur appris pour CP-SAT](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb) | BETA | Oui | | 52 | [App-9 : Detection de bords par algorithmes génétiques](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-9-EdgeDetection.ipynb) | BETA | Oui | | 53 | [TP : Conception d'Algorithmes Génétiques avec…](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-9b-EdgeDetection-CSharp.ipynb) | BETA | Oui | | 54 | [App-14-ConnectFour-Adversarial-CSharp — Jumeau C# :…](../../MyIA.AI.Notebooks/Search/Applications/Search/App-14-ConnectFour-Adversarial-CSharp.ipynb) | BETA | Oui | | 55 | [App-14 - Connect Four : Benchmark Adversarial Search](../../MyIA.AI.Notebooks/Search/Applications/Search/App-14-ConnectFour-Adversarial.ipynb) | BETA | Oui | | 56 | [App-14b : Puissance 4 -- Comparaison d'algorithmes IA…](../../MyIA.AI.Notebooks/Search/Applications/Search/App-14b-ConnectFour.ipynb) | BETA | Oui | | 57 | [App-14c (C#) : Puissance 4 -- Comparaison d'algorithmes…](../../MyIA.AI.Notebooks/Search/Applications/Search/App-14c-ConnectFour-CSharp.ipynb) | BETA | Oui | -| 58 | [App-32 — Szpiro : Pasten 2026 rend N log log N…](../../MyIA.AI.Notebooks/Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb) | BETA | Oui | +| 58 | [App-32 — Szpiro : Pasten 2026 rend N log log N…](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb) | BETA | Oui | ## Search/Part1-Foundations (44 notebooks) diff --git a/docs/reference/rename-ledger.tsv b/docs/reference/rename-ledger.tsv index 0b7acb1758..e91bfa4cbd 100644 --- a/docs/reference/rename-ledger.tsv +++ b/docs/reference/rename-ledger.tsv @@ -226,3 +226,14 @@ MyIA.AI.Notebooks/SymbolicAI/SmartContracts/06-Real-World/SC-26-Final-Project.ip MyIA.AI.Notebooks/SymbolicAI/SmartContracts/06-Real-World/SC-27-Dette-Irreversibilite.ipynb MyIA.AI.Notebooks/SymbolicAI/SmartContracts/06-Real-World/SC-27-Dette-Irreversibilite-Python.ipynb 2026-09-25 myia-po-2025:CoursIA ancien nouveau date lane MyIA.AI.Notebooks/IIT/ICT-Series/ICT-42-Crosscoder-Distillation-Python.ipynb MyIA.AI.Notebooks/IIT/ICT-Series/ICT-41b-Crosscoder-Distillation-Python.ipynb 2026-10-03 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/CSP/App-22-EdgeColoring-Tutte.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb 2026-10-04 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/CSP/App-23-Factorio-Balancer.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb 2026-10-04 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/Hybrid/App-24-MAPF-Guarantee-Audit.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb 2026-10-04 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/Hybrid/App-25-CombinatorialAuctions-WDP-VCG.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb 2026-10-04 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/CSP/App-26-CoveringArrays-Guarantee-Audit.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb 2026-10-04 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/Hybrid/App-28-LearningToBranch-Generalization-Audit.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb 2026-10-04 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/Hybrid/App-29-SALBP-AssemblyLineBalancing-Audit.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb 2026-10-04 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/Hybrid/App-30-OrbitalAssembly-Certificate-Audit.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb 2026-10-04 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/Hybrid/App-31-RCPSP-Max-Feasibility-Bounds.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb 2026-10-04 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb 2026-10-04 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/Hybrid/App-33-NeuralDiving-Coloration.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb 2026-10-04 myia-po-2027:CoursIA diff --git a/scripts/tests/baseline_nb_nav_chain.json b/scripts/tests/baseline_nb_nav_chain.json index 83186b29d4..01137e7a3f 100644 --- a/scripts/tests/baseline_nb_nav_chain.json +++ b/scripts/tests/baseline_nb_nav_chain.json @@ -1222,7 +1222,7 @@ }, { "kind": "orphan_entry", - "notebook": "MyIA.AI.Notebooks/Search/Applications/CSP/App-23-Factorio-Balancer.ipynb", + "notebook": "MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb", "series": "MyIA.AI.Notebooks/Search/Applications/CSP" }, { @@ -1267,7 +1267,7 @@ }, { "kind": "orphan_entry", - "notebook": "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-24-MAPF-Guarantee-Audit.ipynb", + "notebook": "MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb", "series": "MyIA.AI.Notebooks/Search/Applications/Hybrid" }, { @@ -1277,17 +1277,17 @@ }, { "kind": "orphan_entry", - "notebook": "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-28-LearningToBranch-Generalization-Audit.ipynb", + "notebook": "MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb", "series": "MyIA.AI.Notebooks/Search/Applications/Hybrid" }, { "kind": "orphan_entry", - "notebook": "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-30-OrbitalAssembly-Certificate-Audit.ipynb", + "notebook": "MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb", "series": "MyIA.AI.Notebooks/Search/Applications/Hybrid" }, { "kind": "orphan_entry", - "notebook": "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-33-NeuralDiving-Coloration.ipynb", + "notebook": "MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb", "series": "MyIA.AI.Notebooks/Search/Applications/Hybrid" }, { @@ -1302,7 +1302,7 @@ }, { "kind": "orphan_entry", - "notebook": "MyIA.AI.Notebooks/Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb", + "notebook": "MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb", "series": "MyIA.AI.Notebooks/Search/Applications/Search" }, { From ad5570bc90666e1febbe050d064489eb8b4635d0 Mon Sep 17 00:00:00 2001 From: jsboige Date: Mon, 5 Oct 2026 02:06:46 +0200 Subject: [PATCH 3/8] rename(#16231): descente Applications/Research -- referents manuels, data, re-exec C.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Referents hors perimetre organe (titres Research-NN, liens galerie ../CSP ../Hybrid, prefixes dossier restants: Szpiro.lean x2, Langlands 02, Lean-27, READMEs Search/ Applications/search_lean), 8 dossiers data descendus (sous-serie auto-contenue), re-exec papermill R07/R08/R09 (cellules code data-path touchees, 41 cellules 0 erreur), cap pulp<4.0 (LpVariable.dicts retire en 4.0, consomme par Search-09 et Research-07), baseline nav-chain 6 series Research, README Applications section Research + prerequis + mermaid, compteurs delegues CATALOG-STATUS (#19133). See #17802 · See #10038 Co-Authored-By: Claude Sonnet 5.5 --- .../difficulty_probe.csv | 25 - .../grid_runs.csv | 26 - .../data/app31-rcpsp-max/temporal_regimes.csv | 217 --- .../Search/Applications/README.md | 115 +- ...esearch-01-EdgeColoring-Tutte-Python.ipynb | 8 +- ...Research-02-Factorio-Balancer-Python.ipynb | 2 +- ...earch-03-MAPF-Guarantee-Audit-Python.ipynb | 4 +- ...CombinatorialAuctions-WDP-VCG-Python.ipynb | 4 +- ...overingArrays-Guarantee-Audit-Python.ipynb | 6 +- ...ToBranch-Generalization-Audit-Python.ipynb | 4 +- ...P-AssemblyLineBalancing-Audit-Python.ipynb | 314 ++--- ...talAssembly-Certificate-Audit-Python.ipynb | 494 ++++--- ...-RCPSP-Max-Feasibility-Bounds-Python.ipynb | 426 +++--- ...esearch-10-Szpiro-Pasten-2026-Python.ipynb | 2 +- ...ch-11-NeuralDiving-Coloration-Python.ipynb | 6 +- .../data/app24-mapf-audit/SOURCE.md | 0 .../data/app24-mapf-audit/fresh_runs.json | 0 .../data/app25-wdp-vcg-audit/LICENSE | 0 .../data/app25-wdp-vcg-audit/SOURCE.md | 0 .../cats/matching_g32_b100_s10000.txt | 0 .../cats/paths_g30_b100_s10000.txt | 0 .../cats/regions_g30_b100_s10000.txt | 0 .../app25-wdp-vcg-audit/cats_snapshot.json | 0 .../app26-covering-arrays-audit/SOURCE.md | 0 .../app28-learning-to-branch-audit/LICENSE | 0 .../app28-learning-to-branch-audit/SOURCE.md | 0 .../baseline_runs.csv | 0 .../evaluation_runs.csv | 0 .../maturation_report.json | 0 .../oracle_trace.csv | 0 .../data/app29-salbp-audit/LICENSE | 0 .../data/app29-salbp-audit/SOURCE.md | 0 .../data/app29-salbp-audit/benchmark_runs.csv | 32 +- .../data/app29-salbp-audit/mmalbp_runs.json | 106 +- .../data/app29-salbp-audit/pareto_fronts.json | 174 +-- .../data/app29-salbp-audit/provenance.json | 958 ++++++------- .../data/app30-orbital-assembly-audit/LICENSE | 0 .../app30-orbital-assembly-audit/SOURCE.md | 0 .../difficulty_probe.csv | 25 + .../exchange_fronts.json | 1226 ++++++++--------- .../grid_runs.csv | 26 + .../matched_comparison.csv | 52 +- .../provenance.json | 724 +++++----- .../data/app31-rcpsp-max/LICENSE | 0 .../data/app31-rcpsp-max/SOURCE.md | 0 .../data/app31-rcpsp-max/bounds_ladder.json | 536 +++---- .../data/app31-rcpsp-max/provenance.json | 210 +-- .../data/app31-rcpsp-max/temporal_regimes.csv | 217 +++ .../data/app33-neural-diving/SOURCE.md | 0 .../app33-neural-diving/diving_results.csv | 0 MyIA.AI.Notebooks/Search/README.md | 12 +- MyIA.AI.Notebooks/Search/requirements.txt | 2 +- .../Search/search_lean/README.md | 4 +- .../Search/search_lean/Szpiro.lean | 2 +- .../Search/search_lean/Szpiro_en.lean | 2 +- .../02-monstrous-moonshine-invariant-j.ipynb | 2 +- ...Lean-27-EdgeColoring-Tutte-Companion.ipynb | 4 +- MyIA.AI.Notebooks/SymbolicAI/Lean/README.md | 2 +- scripts/tests/baseline_nb_nav_chain.json | 12 +- 59 files changed, 2998 insertions(+), 2983 deletions(-) delete mode 100644 MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/difficulty_probe.csv delete mode 100644 MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/grid_runs.csv delete mode 100644 MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/temporal_regimes.csv rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app24-mapf-audit/SOURCE.md (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app24-mapf-audit/fresh_runs.json (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app25-wdp-vcg-audit/LICENSE (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app25-wdp-vcg-audit/SOURCE.md (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app25-wdp-vcg-audit/cats/matching_g32_b100_s10000.txt (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app25-wdp-vcg-audit/cats/paths_g30_b100_s10000.txt (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app25-wdp-vcg-audit/cats/regions_g30_b100_s10000.txt (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app25-wdp-vcg-audit/cats_snapshot.json (100%) rename MyIA.AI.Notebooks/Search/Applications/{CSP => Research}/data/app26-covering-arrays-audit/SOURCE.md (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app28-learning-to-branch-audit/LICENSE (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app28-learning-to-branch-audit/SOURCE.md (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app28-learning-to-branch-audit/baseline_runs.csv (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app28-learning-to-branch-audit/evaluation_runs.csv (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app28-learning-to-branch-audit/maturation_report.json (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app28-learning-to-branch-audit/oracle_trace.csv (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app29-salbp-audit/LICENSE (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app29-salbp-audit/SOURCE.md (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app29-salbp-audit/benchmark_runs.csv (61%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app29-salbp-audit/mmalbp_runs.json (84%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app29-salbp-audit/pareto_fronts.json (85%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app29-salbp-audit/provenance.json (92%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app30-orbital-assembly-audit/LICENSE (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app30-orbital-assembly-audit/SOURCE.md (100%) create mode 100644 MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/difficulty_probe.csv rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app30-orbital-assembly-audit/exchange_fronts.json (81%) create mode 100644 MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/grid_runs.csv rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app30-orbital-assembly-audit/matched_comparison.csv (96%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app30-orbital-assembly-audit/provenance.json (94%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app31-rcpsp-max/LICENSE (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app31-rcpsp-max/SOURCE.md (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app31-rcpsp-max/bounds_ladder.json (90%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app31-rcpsp-max/provenance.json (94%) create mode 100644 MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/temporal_regimes.csv rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app33-neural-diving/SOURCE.md (100%) rename MyIA.AI.Notebooks/Search/Applications/{Hybrid => Research}/data/app33-neural-diving/diving_results.csv (100%) diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/difficulty_probe.csv b/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/difficulty_probe.csv deleted file mode 100644 index 075ec7feb7..0000000000 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/difficulty_probe.csv +++ /dev/null @@ -1,25 +0,0 @@ -densite,n_modules,seed,n_burns,separations,couloirs,horizon,pond_status,pond_mk,pond_fuel,pond_wall_s,2p_status,2p_mk,2p_fuel,2p_wall_s,2p_mk_certifie,2p_certifie,audit_pond,audit_2p -0.25,16,11,32,25,6,448,OPTIMAL,121,1791,0.16,OPTIMAL/OPTIMAL,121.0,1791.0,0.28,True,True,True,True -0.25,16,22,32,24,6,448,OPTIMAL,118,1793,0.13,OPTIMAL/OPTIMAL,118.0,1793.0,0.22,True,True,True,True -0.25,16,33,32,32,6,448,OPTIMAL,121,1897,0.13,OPTIMAL/OPTIMAL,121.0,1897.0,0.23,True,True,True,True -0.25,32,11,64,109,11,800,OPTIMAL,226,3850,0.63,OPTIMAL/OPTIMAL,226.0,3850.0,1.09,True,True,True,True -0.25,32,22,64,124,11,800,OPTIMAL,202,3909,0.3,OPTIMAL/OPTIMAL,202.0,3909.0,0.75,True,True,True,True -0.25,32,33,64,116,11,800,OPTIMAL,204,3753,0.33,OPTIMAL/OPTIMAL,204.0,3753.0,0.62,True,True,True,True -0.25,64,11,128,497,22,1504,OPTIMAL,382,7346,0.9,OPTIMAL/OPTIMAL,382.0,7346.0,1.94,True,True,True,True -0.25,64,22,128,490,22,1504,OPTIMAL,383,7285,0.93,OPTIMAL/OPTIMAL,383.0,7285.0,1.54,True,True,True,True -0.25,64,33,128,514,22,1504,FEASIBLE,386,7456,10.05,OPTIMAL/FEASIBLE,386.0,7450.0,11.28,True,False,True,True -0.25,90,11,180,975,30,2076,OPTIMAL,518,10289,1.67,OPTIMAL/OPTIMAL,518.0,10289.0,3.29,True,True,True,True -0.25,90,22,180,972,30,2076,OPTIMAL,528,10548,1.6,OPTIMAL/OPTIMAL,528.0,10548.0,4.54,True,True,True,True -0.25,90,33,180,993,30,2076,OPTIMAL,526,10445,1.85,OPTIMAL/OPTIMAL,526.0,10445.0,4.13,True,True,True,True -0.6,16,11,32,63,6,448,OPTIMAL,129,1816,2.52,OPTIMAL/OPTIMAL,129.0,1816.0,2.16,True,True,True,True -0.6,16,22,32,65,6,448,OPTIMAL,118,1795,0.19,OPTIMAL/OPTIMAL,118.0,1795.0,0.35,True,True,True,True -0.6,16,33,32,76,6,448,OPTIMAL,122,1900,0.16,OPTIMAL/OPTIMAL,122.0,1900.0,0.35,True,True,True,True -0.6,32,11,64,285,11,800,FEASIBLE,245,3867,10.02,FEASIBLE/UNKNOWN,,,20.06,False,False,True, -0.6,32,22,64,274,11,800,FEASIBLE,202,3930,10.04,OPTIMAL/FEASIBLE,202.0,3930.0,10.42,True,False,True,True -0.6,32,33,64,268,11,800,OPTIMAL,204,3776,0.44,OPTIMAL/OPTIMAL,204.0,3776.0,0.83,True,True,True,True -0.6,64,11,128,1190,22,1504,OPTIMAL,384,7367,1.66,OPTIMAL/OPTIMAL,384.0,7367.0,4.2,True,True,True,True -0.6,64,22,128,1184,22,1504,FEASIBLE,383,7320,10.02,OPTIMAL/FEASIBLE,383.0,7323.0,11.76,True,False,True,True -0.6,64,33,128,1170,22,1504,FEASIBLE,433,7335,10.03,FEASIBLE/FEASIBLE,401.0,7433.0,20.06,False,False,True,True -0.6,90,11,180,2362,30,2076,FEASIBLE,521,10494,10.05,OPTIMAL/FEASIBLE,521.0,10519.0,13.14,True,False,True,True -0.6,90,22,180,2351,30,2076,OPTIMAL,531,10455,4.11,OPTIMAL/OPTIMAL,531.0,10455.0,10.83,True,True,True,True -0.6,90,33,180,2336,30,2076,OPTIMAL,529,10453,4.23,OPTIMAL/OPTIMAL,529.0,10453.0,7.07,True,True,True,True diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/grid_runs.csv b/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/grid_runs.csv deleted file mode 100644 index 69a7ad16bd..0000000000 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/grid_runs.csv +++ /dev/null @@ -1,26 +0,0 @@ -instance,n_modules,seed,n_burns,horizon,corridors,separations,budget,digest,pond_status,pond_mk,pond_fuel,pond_wall_s,pond_conflicts,pond_domaine_objectif,2p_status,2p_mk,2p_fuel,2p_wall_s,2p_certifie,disp_status,disp_mk,disp_fuel,disp_wall_s,audit_pond,audit_2p,audit_disp -coursia-orbital-m4-s11,4,11,8,184,2,0,464,b2ae490d34632341,OPTIMAL,51,408,0.0306,0,86024,OPTIMAL/OPTIMAL,51,408,0.0653,True,FAISABLE,52,433,0.0002,True,True,True -coursia-orbital-m4-s22,4,22,8,184,2,1,478,076b3bd96a209334,OPTIMAL,56,442,0.0287,3,88614,OPTIMAL/OPTIMAL,56,442,0.0259,True,FAISABLE,56,448,0.0001,True,True,True -coursia-orbital-m4-s33,4,33,8,184,2,1,475,4a01cc08497d2f0e,OPTIMAL,37,421,0.0296,1,88059,OPTIMAL/OPTIMAL,37,421,0.039,True,FAISABLE,41,444,0.0001,True,True,True -coursia-orbital-m4-s44,4,44,8,184,2,0,462,63929a1ca6a9e931,OPTIMAL,59,406,0.0292,0,85654,OPTIMAL/OPTIMAL,59,406,0.0515,True,FAISABLE,59,429,0.0001,True,True,True -coursia-orbital-m4-s55,4,55,8,184,2,2,461,8e3fb414ccb77fbd,OPTIMAL,56,390,0.0281,0,85469,OPTIMAL/OPTIMAL,56,390,0.0418,True,FAISABLE,57,428,0.0001,True,True,True -coursia-orbital-m6-s11,6,11,12,228,2,4,818,9561a6bad9f3485d,OPTIMAL,69,789,0.0592,1,187550,OPTIMAL/OPTIMAL,69,789,0.1128,True,FAISABLE,75,739,0.0002,True,True,True -coursia-orbital-m6-s22,6,22,12,228,2,3,843,80cfbce022aff265,OPTIMAL,68,809,0.0719,5,193275,OPTIMAL/OPTIMAL,68,809,0.0881,True,FAISABLE,83,842,0.0002,True,True,True -coursia-orbital-m6-s33,6,33,12,228,2,2,836,0da7820663568a8d,OPTIMAL,71,810,0.0568,0,191672,OPTIMAL/OPTIMAL,71,810,0.0705,True,FAISABLE,88,836,0.0002,True,True,True -coursia-orbital-m6-s44,6,44,12,228,2,0,825,5d0af050f1f29418,OPTIMAL,72,821,0.0441,0,189153,OPTIMAL/OPTIMAL,72,821,0.1191,True,FAISABLE,88,825,0.0002,True,True,True -coursia-orbital-m6-s55,6,55,12,228,2,1,816,6adc1e6e279ccddb,OPTIMAL,61,779,0.0417,0,187092,OPTIMAL/OPTIMAL,61,779,0.0869,True,FAISABLE,66,816,0.0002,True,True,True -coursia-orbital-m8-s11,8,11,16,272,3,5,1208,29361dc8b6b78a6c,OPTIMAL,74,1138,0.0656,3,330056,OPTIMAL/OPTIMAL,74,1138,0.116,True,FAISABLE,76,1187,0.0004,True,True,True -coursia-orbital-m8-s22,8,22,16,272,3,3,1231,3c2fd6cd73e7e5a5,OPTIMAL,89,1136,0.0747,0,336335,OPTIMAL/OPTIMAL,89,1136,0.1472,True,FAISABLE,92,1209,0.0003,True,True,True -coursia-orbital-m8-s33,8,33,16,272,3,6,1228,22db3908f076aefd,OPTIMAL,66,1021,0.0721,0,335516,OPTIMAL/OPTIMAL,66,1021,0.0861,True,FAISABLE,66,1208,0.0002,True,True,True -coursia-orbital-m8-s44,8,44,16,272,3,8,1214,42e8790ce236a287,OPTIMAL,66,1036,0.0634,0,331694,OPTIMAL/OPTIMAL,66,1036,0.1017,True,FAISABLE,69,1192,0.0003,True,True,True -coursia-orbital-m8-s55,8,55,16,272,3,5,1203,33df73e03efc0780,OPTIMAL,77,1113,0.0706,3,328691,OPTIMAL/OPTIMAL,77,1113,0.1505,True,FAISABLE,86,1179,0.0003,True,True,True -coursia-orbital-m10-s11,10,11,20,316,4,9,1291,da1baffdf3d2000a,OPTIMAL,82,1075,0.0727,0,409563,OPTIMAL/OPTIMAL,82,1075,0.1528,True,FAISABLE,82,1285,0.0013,True,True,True -coursia-orbital-m10-s22,10,22,20,316,4,12,1318,e5a1544da80e6863,OPTIMAL,87,1138,0.1066,0,418122,OPTIMAL/OPTIMAL,87,1138,0.176,True,FAISABLE,117,1318,0.0006,True,True,True -coursia-orbital-m10-s33,10,33,20,316,4,6,1305,22a14292de403280,OPTIMAL,89,1179,0.0717,0,414001,OPTIMAL/OPTIMAL,89,1179,0.1398,True,FAISABLE,93,1297,0.0003,True,True,True -coursia-orbital-m10-s44,10,44,20,316,4,11,1302,f051cd599c24471a,OPTIMAL,99,1109,0.0881,1,413050,OPTIMAL/OPTIMAL,99,1109,0.1481,True,FAISABLE,118,1301,0.0005,True,True,True -coursia-orbital-m10-s55,10,55,20,316,4,9,1297,57e93d6ec2629897,OPTIMAL,88,1123,0.0579,0,411465,OPTIMAL/OPTIMAL,88,1123,0.1309,True,FAISABLE,99,1287,0.0004,True,True,True -coursia-orbital-m12-s11,12,11,24,360,4,12,1657,d403e0e32448c7c0,OPTIMAL,88,1477,0.0885,0,598537,OPTIMAL/OPTIMAL,88,1477,0.1947,True,FAISABLE,103,1657,0.0007,True,True,True -coursia-orbital-m12-s22,12,22,24,360,4,7,1673,5a92c1051bba9e3b,OPTIMAL,95,1499,0.1018,0,604313,OPTIMAL/OPTIMAL,95,1499,0.1666,True,FAISABLE,102,1673,0.0005,True,True,True -coursia-orbital-m12-s33,12,33,24,360,4,15,1661,6dbd5ce52666769a,OPTIMAL,114,1413,0.0916,21,599981,OPTIMAL/OPTIMAL,114,1413,0.1542,True,FAISABLE,126,1661,0.0008,True,True,True -coursia-orbital-m12-s44,12,44,24,360,4,15,1670,fe770305c6fb5715,OPTIMAL,96,1386,0.0977,19,603230,OPTIMAL/OPTIMAL,96,1386,0.1549,True,FAISABLE,98,1669,0.0005,True,True,True -coursia-orbital-m12-s55,12,55,24,360,4,14,1658,aab6978371a29600,OPTIMAL,97,1391,0.0736,5,598898,OPTIMAL/OPTIMAL,97,1391,0.1828,True,FAISABLE,100,1654,0.0005,True,True,True diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/temporal_regimes.csv b/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/temporal_regimes.csv deleted file mode 100644 index 1de960e14d..0000000000 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/temporal_regimes.csv +++ /dev/null @@ -1,217 +0,0 @@ -jeu,graine,lags,regime,statut,makespan,secondes,temoin --3,0,6,T,circuit positif,,0.0,8-10-8 --3,1,12,T,circuit positif,,0.0,10-11-10 --3,2,8,T,circuit positif,,0.0,10-13-10 --3,3,12,T,circuit positif,,0.0,7-10-7 --3,4,13,T,circuit positif,,0.0,10-11-10 --3,5,13,T,circuit positif,,0.0,10-13-10 --3,6,13,T,circuit positif,,0.0,11-12-11 --3,7,13,T,circuit positif,,0.0,6-11-6 --3,8,17,T,circuit positif,,0.0,8-12-8 --3,9,19,T,circuit positif,,0.0,11-13-11 --3,10,13,T,circuit positif,,0.0,8-9-8 --3,11,21,T,circuit positif,,0.0,11-13-11 --3,12,17,T,circuit positif,,0.0,12-13-11-12 --3,13,15,T,circuit positif,,0.0,7-8-7 --3,14,11,T,circuit positif,,0.0,9-11-9 --3,15,14,T,circuit positif,,0.0,9-11-9 --3,16,21,T,circuit positif,,0.0,10-9-10 --3,17,12,T,circuit positif,,0.0,7-13-7 --3,18,14,T,circuit positif,,0.0,10-12-10 --3,19,17,T,circuit positif,,0.0,8-9-8 --3,20,18,T,circuit positif,,0.0,8-6-8 --3,21,13,T,circuit positif,,0.0,8-12-8 --3,22,10,T,circuit positif,,0.0,10-13-10 --3,23,13,T,circuit positif,,0.0,8-11-8 --2,0,6,T,circuit positif,,0.0,8-10-8 --2,1,12,T,circuit positif,,0.0,10-11-10 --2,2,8,T,circuit positif,,0.0,10-13-10 --2,3,12,T,circuit positif,,0.0,7-10-7 --2,4,13,T,circuit positif,,0.0,10-11-10 --2,5,13,T,circuit positif,,0.0,10-13-10 --2,6,13,T,circuit positif,,0.0,11-12-11 --2,7,13,T,circuit positif,,0.0,6-11-6 --2,8,17,T,circuit positif,,0.0,8-12-8 --2,9,19,T,circuit positif,,0.0,11-13-11 --2,10,13,T,circuit positif,,0.0,8-9-8 --2,11,21,T,circuit positif,,0.0,11-13-11 --2,12,17,T,circuit positif,,0.0,12-13-11-12 --2,13,15,T,circuit positif,,0.0,7-8-7 --2,14,11,T,circuit positif,,0.0,9-11-9 --2,15,14,T,circuit positif,,0.0,9-11-9 --2,16,21,T,circuit positif,,0.0,10-9-10 --2,17,12,T,circuit positif,,0.0,7-13-7 --2,18,14,T,circuit positif,,0.0,10-12-10 --2,19,17,T,circuit positif,,0.0,8-9-8 --2,20,18,T,circuit positif,,0.0,8-6-8 --2,21,13,T,circuit positif,,0.0,8-12-8 --2,22,10,T,circuit positif,,0.0,10-13-10 --2,23,13,T,circuit positif,,0.0,8-11-8 --1,0,6,T,circuit positif,,0.0,8-10-8 --1,1,12,T,circuit positif,,0.0,10-11-10 --1,2,8,T,circuit positif,,0.0,10-13-10 --1,3,12,T,circuit positif,,0.0,7-10-7 --1,4,13,T,circuit positif,,0.0,10-11-10 --1,5,13,T,circuit positif,,0.0,10-13-10 --1,6,13,T,circuit positif,,0.0,11-12-11 --1,7,13,T,circuit positif,,0.0,6-11-6 --1,8,17,T,circuit positif,,0.0,8-12-8 --1,9,19,T,circuit positif,,0.0,11-13-11 --1,10,13,T,circuit positif,,0.0,8-9-8 --1,11,21,T,circuit positif,,0.0,11-13-11 --1,12,17,T,circuit positif,,0.0,12-13-11-12 --1,13,15,T,circuit positif,,0.0,7-8-7 --1,14,11,T,circuit positif,,0.0,9-11-9 --1,15,14,T,circuit positif,,0.0,9-11-9 --1,16,21,T,circuit positif,,0.0,10-9-10 --1,17,12,T,circuit positif,,0.0,7-13-7 --1,18,14,T,circuit positif,,0.0,10-12-10 --1,19,17,T,circuit positif,,0.0,8-9-8 --1,20,18,T,circuit positif,,0.0,8-6-8 --1,21,13,T,circuit positif,,0.0,8-12-8 --1,22,10,T,circuit positif,,0.0,10-13-10 --1,23,13,T,circuit positif,,0.0,8-11-8 -0,0,6,R,INFEASIBLE,,0.005756200000178069, -0,1,12,R,INFEASIBLE,,0.0018750000017462298, -0,2,8,R,INFEASIBLE,,0.0025984999956563115, -0,3,12,R,INFEASIBLE,,0.0020088000019313768, -0,4,13,R,INFEASIBLE,,0.0019746999969356693, -0,5,13,R,INFEASIBLE,,0.002961999998660758, -0,6,13,R,INFEASIBLE,,0.0019326999972690828, -0,7,13,R,INFEASIBLE,,0.0020036999994772486, -0,8,17,R,INFEASIBLE,,0.0023068000009516254, -0,9,19,R,INFEASIBLE,,0.027947900001890957, -0,10,13,R,INFEASIBLE,,0.0024028999978327192, -0,11,21,R,INFEASIBLE,,0.0023496000067098066, -0,12,17,R,INFEASIBLE,,0.0025528000041958876, -0,13,15,R,INFEASIBLE,,0.001828899999964051, -0,14,11,R,INFEASIBLE,,0.0019016000005649403, -0,15,14,R,INFEASIBLE,,0.0025348999988636933, -0,16,21,R,INFEASIBLE,,0.0018581999975140207, -0,17,12,R,INFEASIBLE,,0.0028708999961963855, -0,18,14,R,INFEASIBLE,,0.0020457000064197928, -0,19,17,R,INFEASIBLE,,0.0017398999989381991, -0,20,18,R,INFEASIBLE,,0.0018761999963317066, -0,21,13,R,INFEASIBLE,,0.0018140999964089133, -0,22,10,R,INFEASIBLE,,0.0118746000007377, -0,23,13,R,INFEASIBLE,,0.002428799998597242, -1,0,6,R,INFEASIBLE,,0.002558699998189695, -1,1,12,R,INFEASIBLE,,0.002041000007011462, -1,2,8,R,INFEASIBLE,,0.02168349999556085, -1,3,12,R,INFEASIBLE,,0.0023234999971464276, -1,4,13,R,INFEASIBLE,,0.001920599999721162, -1,5,13,R,INFEASIBLE,,0.10110779999376973, -1,6,13,R,INFEASIBLE,,0.002474200002325233, -1,7,13,F,OPTIMAL,26.0,0.011092399996414315, -1,8,17,R,INFEASIBLE,,0.002284500005771406, -1,9,19,R,INFEASIBLE,,0.028522599997813813, -1,10,13,R,INFEASIBLE,,0.0024081000010482967, -1,11,21,R,INFEASIBLE,,0.0025265000003855675, -1,12,17,R,INFEASIBLE,,0.002857600004062988, -1,13,15,R,INFEASIBLE,,0.0018998000014107674, -1,14,11,R,INFEASIBLE,,0.001964100003533531, -1,15,14,R,INFEASIBLE,,0.014610099999117665, -1,16,21,R,INFEASIBLE,,0.0022946000026422553, -1,17,12,R,INFEASIBLE,,0.0019576000049710274, -1,18,14,R,INFEASIBLE,,0.002059999998891726, -1,19,17,R,INFEASIBLE,,0.0027245000019320287, -1,20,18,R,INFEASIBLE,,0.0024611999979242682, -1,21,13,R,INFEASIBLE,,0.0026408999983686954, -1,22,10,R,INFEASIBLE,,0.1192501000041375, -1,23,13,R,INFEASIBLE,,0.0048386999987997115, -2,0,6,F,OPTIMAL,41.0,0.021408000000519678, -2,1,12,R,INFEASIBLE,,0.014760700003535021, -2,2,8,R,INFEASIBLE,,0.029637599996931385, -2,3,12,R,INFEASIBLE,,0.002149600004486274, -2,4,13,R,INFEASIBLE,,0.0022405999989132397, -2,5,13,R,INFEASIBLE,,0.11929300000338117, -2,6,13,R,INFEASIBLE,,0.0029736999931628816, -2,7,13,F,OPTIMAL,26.0,0.01097430000663735, -2,8,17,R,INFEASIBLE,,0.0023790000050212257, -2,9,19,R,INFEASIBLE,,0.02683130000514211, -2,10,13,R,INFEASIBLE,,0.0034607999987201765, -2,11,21,R,INFEASIBLE,,0.0025127000044449233, -2,12,17,R,INFEASIBLE,,0.021775799999886658, -2,13,15,R,INFEASIBLE,,0.003493500000331551, -2,14,11,R,INFEASIBLE,,0.0037895999994361773, -2,15,14,R,INFEASIBLE,,0.035879700000805315, -2,16,21,R,INFEASIBLE,,0.00252649999310961, -2,17,12,R,INFEASIBLE,,0.002001399996515829, -2,18,14,R,INFEASIBLE,,0.001990299999306444, -2,19,17,R,INFEASIBLE,,0.002390699999523349, -2,20,18,R,INFEASIBLE,,0.0026041000019176863, -2,21,13,R,INFEASIBLE,,0.002389700006460771, -2,22,10,R,INFEASIBLE,,0.0275028999967617, -2,23,13,R,INFEASIBLE,,0.004194399996777065, -3,0,6,F,OPTIMAL,41.0,0.027039699998567812, -3,1,12,R,INFEASIBLE,,0.010736700001871213, -3,2,8,R,INFEASIBLE,,0.031082000001333654, -3,3,12,R,INFEASIBLE,,0.0043341999989934266, -3,4,13,R,INFEASIBLE,,0.021969699999317527, -3,5,13,R,INFEASIBLE,,0.02840680000372231, -3,6,13,R,INFEASIBLE,,0.002867900002456736, -3,7,13,F,OPTIMAL,26.0,0.027363699999114033, -3,8,17,R,INFEASIBLE,,0.00440589999925578, -3,9,19,R,INFEASIBLE,,0.03713129999960074, -3,10,13,R,INFEASIBLE,,0.126753299999109, -3,11,21,R,INFEASIBLE,,0.0026270000016666017, -3,12,17,R,INFEASIBLE,,0.024656399997184053, -3,13,15,R,INFEASIBLE,,0.002413700000033714, -3,14,11,R,INFEASIBLE,,0.003635499997471925, -3,15,14,R,INFEASIBLE,,0.03802200000063749, -3,16,21,R,INFEASIBLE,,0.005817199999000877, -3,17,12,R,INFEASIBLE,,0.002145499995094724, -3,18,14,R,INFEASIBLE,,0.004743700003018603, -3,19,17,R,INFEASIBLE,,0.02599720000580419, -3,20,18,R,INFEASIBLE,,0.00404780000098981, -3,21,13,R,INFEASIBLE,,0.004535499996563885, -3,22,10,R,INFEASIBLE,,0.14341119999880902, -3,23,13,R,INFEASIBLE,,0.0036259000044083223, -5,0,6,F,OPTIMAL,41.0,0.025309000004199333, -5,1,12,R,INFEASIBLE,,0.044013799997628666, -5,2,8,F,OPTIMAL,34.0,0.0240884000013466, -5,3,12,R,INFEASIBLE,,0.004531999999016989, -5,4,13,R,INFEASIBLE,,0.039392699996824376, -5,5,13,R,INFEASIBLE,,0.02345470000000205, -5,6,13,F,OPTIMAL,37.0,0.030414000000746455, -5,7,13,F,OPTIMAL,25.0,0.029997400000866037, -5,8,17,R,INFEASIBLE,,0.116903000001912, -5,9,19,R,INFEASIBLE,,0.058199699997203425, -5,10,13,R,INFEASIBLE,,0.043841700004122686, -5,11,21,R,INFEASIBLE,,0.0036076000033062883, -5,12,17,R,INFEASIBLE,,0.11392080000223359, -5,13,15,R,INFEASIBLE,,0.004463099998247344, -5,14,11,R,INFEASIBLE,,0.10234910000144737, -5,15,14,R,INFEASIBLE,,0.15551240000058897, -5,16,21,R,INFEASIBLE,,0.06076640000537736, -5,17,12,R,INFEASIBLE,,0.004857299994910136, -5,18,14,R,INFEASIBLE,,0.0366238999995403, -5,19,17,F,OPTIMAL,35.0,0.03340100000059465, -5,20,18,R,INFEASIBLE,,0.004812399994989391, -5,21,13,R,INFEASIBLE,,0.12694790000387002, -5,22,10,R,INFEASIBLE,,0.14224620000459254, -5,23,13,R,INFEASIBLE,,0.031799900003534276, -8,0,6,F,OPTIMAL,40.0,0.04445340000529541, -8,1,12,F,OPTIMAL,36.0,0.014769700006581843, -8,2,8,F,OPTIMAL,34.0,0.02905319999990752, -8,3,12,R,INFEASIBLE,,0.02888610000081826, -8,4,13,F,OPTIMAL,32.0,0.028830099996412173, -8,5,13,F,OPTIMAL,42.0,0.01556459999846993, -8,6,13,F,OPTIMAL,33.0,0.03259570000227541, -8,7,13,F,OPTIMAL,23.0,0.029040000001259614, -8,8,17,F,OPTIMAL,32.0,0.028464600000006612, -8,9,19,F,OPTIMAL,34.0,0.029020399997534696, -8,10,13,F,OPTIMAL,36.0,0.028652300003159326, -8,11,21,R,INFEASIBLE,,0.005606699996860698, -8,12,17,F,OPTIMAL,40.0,0.021904799999902025, -8,13,15,R,INFEASIBLE,,0.04480229999899166, -8,14,11,F,OPTIMAL,35.0,0.02869759999884991, -8,15,14,F,OPTIMAL,34.0,0.02973539999948116, -8,16,21,F,OPTIMAL,41.0,0.014638100001320709, -8,17,12,F,OPTIMAL,35.0,0.016342399998393375, -8,18,14,F,OPTIMAL,38.0,0.0314555000004475, -8,19,17,F,OPTIMAL,31.0,0.02641109999967739, -8,20,18,F,OPTIMAL,37.0,0.01423149999754969, -8,21,13,R,INFEASIBLE,,0.06433990000368794, -8,22,10,F,OPTIMAL,32.0,0.027149200002895668, -8,23,13,F,OPTIMAL,41.0,0.03013430000282824, diff --git a/MyIA.AI.Notebooks/Search/Applications/README.md b/MyIA.AI.Notebooks/Search/Applications/README.md index a32a5a8397..35971ba32d 100644 --- a/MyIA.AI.Notebooks/Search/Applications/README.md +++ b/MyIA.AI.Notebooks/Search/Applications/README.md @@ -1,8 +1,8 @@ # Search - Applications -C'est ici que la série Search se confronte au réel. Les 59 notebooks d'application, pour la plupart adaptés de projets étudiants, prennent les algorithmes des Parties 1 et 2 et les mettent face à des problèmes qui ne se laissent pas faire : planifier les gardes d'un service hospitalier, ordonnancer un atelier, construire un calendrier sportif équitable, router une flotte de véhicules. Trois catégories les organisent — **Search pur** (jeux combinatoires), **CSP** (satisfaction de contraintes) et **Hybride** (combinaisons de solveurs, modèles exacts et métaheuristiques) — et la plupart sont autonomes, avec des pointeurs vers les prérequis pertinents. À cela s'ajoutent les **jumeaux C#** (App-1b, App-2b, App-3b, App-4b, App-5b, App-6-CSharp, App-7b, App-8-CSharp, App-9b, App-10b, App-11b, App-13b, App-14-CSharp, App-14c, App-15b, App-16-CSharp, App-17b, App-18b, App-19-CSharp, App-20b) qui déroulent les mêmes algorithmes *from-scratch* en .NET, en complément des versions Python qui invoquent des solveurs industriels. +C'est ici que la série Search se confronte au réel. Les notebooks d'application, pour la plupart adaptés de projets étudiants, prennent les algorithmes des Parties 1 et 2 et les mettent face à des problèmes qui ne se laissent pas faire : planifier les gardes d'un service hospitalier, ordonnancer un atelier, construire un calendrier sportif équitable, router une flotte de véhicules. Quatre catégories les organisent — **Search pur** (jeux combinatoires), **CSP** (satisfaction de contraintes), **Hybride** (combinaisons de solveurs, modèles exacts et métaheuristiques) et **Recherche** (audits de garanties et distillations de preprints, sous-série `Research/` à numérotation propre) — et la plupart sont autonomes, avec des pointeurs vers les prérequis pertinents. À cela s'ajoutent les **jumeaux C#** (App-1b, App-2b, App-3b, App-4b, App-5b, App-6-CSharp, App-7b, App-8-CSharp, App-9b, App-10b, App-11b, App-13b, App-14-CSharp, App-14c, App-15b, App-16-CSharp, App-17b, App-18b, App-19-CSharp, App-20b) qui déroulent les mêmes algorithmes *from-scratch* en .NET, en complément des versions Python qui invoquent des solveurs industriels. -Sous-série de **59 notebooks** | **~46h35** | Python 3.10+ (`ortools`, `python-sat`, `deap`, `mealpy`, `minizinc`, `optuna`, `rustuna`) ; .NET 9 (`dotnet-interactive`) pour les jumeaux C# +Sous-série d'applications | Python 3.10+ (`ortools`, `python-sat`, `deap`, `mealpy`, `minizinc`, `optuna`, `rustuna`) ; .NET 9 (`dotnet-interactive`) pour les jumeaux C#. Les volumes (notebooks par sous-série, maturité) sont portés par le marqueur `CATALOG-STATUS` du [README de la série](../README.md) — aucun chiffre n'est maintenu ici en prose. ## Pourquoi cette sous-série @@ -31,9 +31,10 @@ Un algorithme compris sur un exemple jouet n'est pas encore un algorithme maîtr ```text Applications/ -├── Search/ # Applications purement Search (5 notebooks : 3 Python + 2 twins C#) -├── CSP/ # Applications CSP (31 notebooks : 18 Python + 13 twins C#) -└── Hybrid/ # Méthodes hybrides / métaheuristiques (23 notebooks : 18 Python + 5 twins C#) +├── Search/ # Applications purement Search (Puissance 4 + jumeaux C#) +├── CSP/ # Applications CSP (problèmes classiques + jumeaux C#) +├── Hybrid/ # Méthodes hybrides / métaheuristiques (+ jumeaux C#) +└── Research/ # Audits de garanties et distillations de preprints (numérotation propre Research-01..) ``` ```mermaid @@ -41,21 +42,25 @@ flowchart LR P1["Partie 1 — Search
exploration, jeux adversariaux"] P2["Partie 2 — CSP
modélisation déclarative
(X, D, C) + propagation"] P4["Partie 4 — Métaheuristiques
SA, GA, ACO, recuit"] - S["Applications Search (5)
3 Python + 2 C# :
ConnectFour, Minimax, MCTS, AIMA,
distillation Szpiro (arithmétique)"] - C["Applications CSP (31)
18 Python + 13 C# :
N-Queens, GraphColoring,
Nurse/JobShop, Minesweeper,
Wordle, Picross, WFC,
Covering Arrays..."] - H["Applications Hybrides (22)
17 Python + 5 C# :
EdgeDetection, Portfolio,
TSP, VRP, Hyperparameter,
AlgorithmSelection, PRESENT/SAT,
MAPF, WDP/VCG, index tracking,
branching ML, SALBP,
assemblage orbital, RCPSP/max"] + S["Applications Search
ConnectFour, Minimax,
MCTS, AIMA"] + C["Applications CSP
N-Queens, GraphColoring,
Nurse/JobShop, Minesweeper,
Wordle, Picross, WFC..."] + H["Applications Hybrides
EdgeDetection, Portfolio,
TSP, VRP, Hyperparameter,
AlgorithmSelection, PRESENT/SAT..."] + R["Applications Research
audits de garanties, distillations
de preprints : EdgeColoring/Tutte,
Factorio, MAPF, VCG, SALBP,
RCPSP/max, Szpiro, neural diving"] P1 --> S P2 --> C P4 --> H + P2 --> R + P4 --> R S -.->|"benchmark croisé"| H C -.->|"quand l'espace explose"| H + H -.->|"quand la garantie compte"| R ``` --- ## Applications Search (`Search/`) -Quatre notebooks autour du Puissance 4 — deux Python et deux C# — forment un banc d'essai de la recherche adversariale : assez simple pour être résolu, assez riche pour départager les approches. Un premier binôme construit les joueurs (aléatoire, Minimax α-β, MCTS, glouton, puis le framework AIMA de Russell & Norvig) ; le second compare systématiquement Minimax, Alpha-Beta et MCTS. S'y ajoute une distillation de théorie algorithmique des nombres : le théorème de Szpiro rendu opérable, où le « solveur » est le choix combinatoire optimal d'une factorisation admissible. +Quatre notebooks autour du Puissance 4 — deux Python et deux C# — forment un banc d'essai de la recherche adversariale : assez simple pour être résolu, assez riche pour départager les approches. Un premier binôme construit les joueurs (aléatoire, Minimax α-β, MCTS, glouton, puis le framework AIMA de Russell & Norvig) ; le second compare systématiquement Minimax, Alpha-Beta et MCTS. La distillation de théorie algorithmique des nombres qui les accompagnait (Szpiro/Pasten) a rejoint la sous-série [Research](#applications-research-research) — c'est une distillation de preprint. | # | Notebook | Durée | Contenu | Source | |---|----------|-------|---------|--------| @@ -63,7 +68,6 @@ Quatre notebooks autour du Puissance 4 — deux Python et deux C# — forment un | 1b | [App-14c-ConnectFour-CSharp](Search/App-14c-ConnectFour-CSharp.ipynb) | ~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](Search/App-14-ConnectFour-Adversarial.ipynb) | ~45 min | Benchmark adversarial : Minimax, Alpha-Beta, MCTS | Projet étudiant | | 2b | [App-14-ConnectFour-Adversarial-CSharp](Search/App-14-ConnectFour-Adversarial-CSharp.ipynb) | ~40 min | **Jumeau C#** — Minimax + Alpha-Beta (élagage) + MCTS (UCB1) from-scratch, benchmark nœuds + tournoi round-robin, parité #4956 | Jumeau .NET | -| 3 | [Research-10-Szpiro-Pasten-2026-Python](Search/Research-10-Szpiro-Pasten-2026-Python.ipynb) | ~25 min | Szpiro rendu opérable : factorisations admissibles `N=DM` (parité paire de `D`), balayage de `M·φ(D)` sur N = 6…30030, proxy `log\|Δ\|/log rad(\|Δ\|)` des courbes `y²=x³+ax+b` — théorème 1.1 et corollaires 1.2/1.3 rendus calculables, 3 exercices | Distillation arXiv 2609.17390 (Pasten 2026, #16549) | --- @@ -127,9 +131,6 @@ La génération procédurale de niveaux (App-19) encode le Wave Function Collaps | 13 | [App-20-SudokuBenchmark-Python](CSP/App-20-SudokuBenchmark-Python.html) | ~50 min | Benchmark comparatif : 4 solveurs Sudoku, un problème NP-complet | Nouveau | | 13b | [App-20b-SudokuBenchmark-CSharp](CSP/App-20b-SudokuBenchmark-CSharp.html) | ~35 min | **Jumeau C#** — backtracking naïf/MRV, AC-3, Dancing Links (Knuth) from-scratch, benchmark 3 difficultés, parité #4956 | Jumeau .NET | | 14 | [App-21-VoiceLeading](CSP/App-21-VoiceLeading.ipynb) | ~40 min | Hommage Munkres : voice leading chorale par affectation (Kuhn-Munkres via scipy) + audit/réparation du contrepoint de Fux en CP-SAT — encodage issu des projets étudiants EPITA PrCon (H1/H1_V2) | Hommage Munkres / projets étudiants EPITA | -| 15 | [Research-01-EdgeColoring-Tutte-Python](CSP/Research-01-EdgeColoring-Tutte-Python.ipynb) | ~45 min | Coloration d'arêtes cubiques : Vizing, Petersen, ponts, graphes apex et CP-SAT | Nouveau | -| 15b | [Research-02-Factorio-Balancer-Python](CSP/Research-02-Factorio-Balancer-Python.ipynb) | ~35 min | Belt balancer Factorio : MIP continu vs CP-SAT discret sur cas borné, N×N throughput-unlimited | Nouveau | -| 16 | [Research-05-CoveringArrays-Guarantee-Audit-Python](CSP/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb) | ~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) | --- @@ -154,14 +155,27 @@ Quand l'espace est trop vaste ou l'objectif trop irrégulier pour les méthodes | 7d | [App-18c-HyperparameterTuning-Rustuna-vs-Optuna](Hybrid/App-18c-HyperparameterTuning-Rustuna-vs-Optuna.ipynb) | ~30 min | Rustuna vs Optuna : pont SOTA triple (Random numpy / Optuna TPE / Rustuna TPE) sur l'objectif k-NN CV d'App-18b, speedup mesuré deux régimes, audit d'une dépendance expérimentale (bug `best_trial` mesuré) | Nouveau | | 8 | [App-22-AlgorithmSelection-Python](Hybrid/App-22-AlgorithmSelection-Python.ipynb) | ~45 min | Sélection empirique d'algorithmes : 3 jeux (Sudoku, Puissance 4, Wordle), 13 familles conceptuelles / 14 étiquettes mesurées, non-commensurabilité des métriques + frontières de Pareto + choix sous préférences — hommage PR IS #42 (Théodore Deguest) | Projet étudiant (IS PR #42) | | 9 | [App-23-PRESENT-Differential-Cryptanalysis-SAT](Hybrid/App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb) | ~55 min | PRESENT : DDT, compression d'implicants, CNF pondérée, frontière SAT/UNSAT du meilleur trail et limites de certification — distillation PrCon F2 (Théodore Deguest) | Projet étudiant (PrCon PR #49) | -| 10 | [Research-03-MAPF-Guarantee-Audit-Python](Hybrid/Research-03-MAPF-Guarantee-Audit-Python.ipynb) | ~60 min | MAPF : validateur indépendant, oracle CP-SAT time-expanded, réfutation OD-A*, arrêt CBS au but, audit des garanties ECBS — distillation PrCon G3 (Matteo Atkinson, Paul Witkowski) | Projet étudiant (PrCon PRs #33/#36/#42) | -| 11 | [Research-04-CombinatorialAuctions-WDP-VCG-Python](Hybrid/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb) | ~60 min | Enchères combinatoires : WDP exact CP-SAT vs force brute, langage XOR, budget global, paiements VCG et audit de leurs garanties, contre-exemple de manipulation sous budget matérialisé, forensics `PRICE_SCALE` sur 18 instances CATS — distillation PrCon J2 (Majerczyk, Chartouni, Wangon-Zekou) | Projet étudiant (PrCon PR #26) | -| 12 | [App-27-Sparse-Index-Tracking-Walk-Forward](Hybrid/App-27-Sparse-Index-Tracking-Walk-Forward.ipynb) | ~75 min | Sparse index tracking : modèle CP-SAT vérifiable, walk-forward sans fuite et lecture pédagogique des résultats QuantConnect réels — une recherche, deux lectures — distillation PrCon M2 (Godric Bouteloup) | Projet étudiant (PrCon PR #52) | -| 13 | [Research-06-LearningToBranch-Generalization-Audit-Python](Hybrid/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb) | ~75 min | Learning to branch : dérivation de dom/wdeg, splits groupés, transfert inter-familles, performance intégrée, coût d'inférence et seuil d'amortissement — distillation PrCon G4 (Simon Naulet, Matis Codjia) | Projet étudiant (PrCon PR #46) | -| 14 | [Research-07-SALBP-AssemblyLineBalancing-Audit-Python](Hybrid/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb) | ~70 min | SALBP-1/2 : CP-SAT, PuLP/CBC et RPW, statuts/incumbents/bornes, identité de benchmark, front Pareto certifié et MMALBP robuste/pondéré — distillation PrCon B1 (Ilias Kalalou, Kaelan Grall) | Projet étudiant (PrCon PR #57) | -| 15 | [Research-08-OrbitalAssembly-Certificate-Audit-Python](Hybrid/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb) | ~70 min | Assemblage orbital : physique de Hohmann dans le modèle, auditeur externe, preuve que la scalarisation est exactement lexicographique, comparaison à makespan égal, front d'échange ε-contrainte et sonde en taille **et** en densité — distillation PrCon C4 (Gurvan Estable, Joris Bely, Kévin Lubert) | Projet étudiant (PrCon PR #53) | -| 16 | [Research-09-RCPSP-Max-Feasibility-Bounds-Python](Hybrid/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb) | ~65 min | RCPSP/max : le lag maximal comme arc inverse, faisabilité NP-difficile et son témoin de circuit positif, balayage des trois régimes temporel/ressource/réalisable, échelle de bornes certifiées et repli explicite quand la référence externe manque — distillation PrCon B4 (Arthur Gallier, Nicolas Naegelen) | Projet étudiant (PrCon PR #51) | -| 17 | [Research-11-NeuralDiving-Coloration-Python](Hybrid/Research-11-NeuralDiving-Coloration-Python.ipynb) | ~60 min | Neural diving : un plongeur MLP prédit une affectation partielle, injectée comme hint réparable dans CP-SAT ; la médiane des branches recule (2829 → 2325, 25/25 instances améliorées) alors que ≈ 49 % des arêtes du hint violent l'adjacence — cohérence du hint avec les contraintes, pas précision par bit — hommage Nair et al. 2021 | Recherche (Nair et al. 2021) | +| 10 | [App-27-Sparse-Index-Tracking-Walk-Forward](Hybrid/App-27-Sparse-Index-Tracking-Walk-Forward.ipynb) | ~75 min | Sparse index tracking : modèle CP-SAT vérifiable, walk-forward sans fuite et lecture pédagogique des résultats QuantConnect réels — une recherche, deux lectures — distillation PrCon M2 (Godric Bouteloup) | Projet étudiant (PrCon PR #52) | + +--- + +## Applications Research (`Research/`) + +La queue du dossier, et sa frontière avec la recherche : onze carnets qui ne traitent pas un problème classique pour l'apprendre — ils **auditent une garantie** (vérifier empiriquement ce qu'un solveur ou un théorème récent autorise réellement à affirmer) ou **distillent un preprint** (rendre opérable un résultat publié). Chaque carnet confronte une affirmation récente — théorème arXiv, preprint de conception de solveurs, garanties d'un mécanisme d'enchère — à un oracle indépendant, un certificat ou un témoin vérifiable à la main. La sous-série porte sa propre numérotation (`Research-01..11`, modèle `Discrepancy/`) ; les critères d'entrée et la délimitation galerie/recherche sont fixés par l'arbitrage coordinateur du 2026-10-05 ([#17802](https://github.com/jsboige/CoursIA/issues/17802)) : la clause « audite une garantie » porte sur ce que le carnet déclare vouloir établir ; l'hommage commémoratif et l'hommage à un travail étudiant restent en galerie. + +| # | Notebook | Durée | Contenu | Source | +|---|----------|-------|---------|--------| +| 1 | [Research-01-EdgeColoring-Tutte-Python](Research/Research-01-EdgeColoring-Tutte-Python.ipynb) | ~45 min | Coloration d'arêtes cubiques : Vizing, Petersen, ponts, graphes apex et CP-SAT — vérification empirique d'un théorème récent (arXiv 2608.22870) | Nouveau | +| 2 | [Research-02-Factorio-Balancer-Python](Research/Research-02-Factorio-Balancer-Python.ipynb) | ~35 min | Belt balancer Factorio : MIP continu vs CP-SAT discret sur cas borné, N×N throughput-unlimited | Distillation Venturini 2024 | +| 3 | [Research-03-MAPF-Guarantee-Audit-Python](Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb) | ~60 min | MAPF : validateur indépendant, oracle CP-SAT time-expanded, réfutation OD-A*, arrêt CBS au but, audit des garanties ECBS — distillation PrCon G3 (Matteo Atkinson, Paul Witkowski) | Projet étudiant (PrCon PRs #33/#36/#42) | +| 4 | [Research-04-CombinatorialAuctions-WDP-VCG-Python](Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb) | ~60 min | Enchères combinatoires : WDP exact CP-SAT vs force brute, langage XOR, budget global, paiements VCG et audit de leurs garanties, contre-exemple de manipulation sous budget matérialisé, forensics `PRICE_SCALE` sur 18 instances CATS — distillation PrCon J2 (Majerczyk, Chartouni, Wangon-Zekou) | Projet étudiant (PrCon PR #26) | +| 5 | [Research-05-CoveringArrays-Guarantee-Audit-Python](Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb) | ~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) | +| 6 | [Research-06-LearningToBranch-Generalization-Audit-Python](Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb) | ~75 min | Learning to branch : dérivation de dom/wdeg, splits groupés, transfert inter-familles, performance intégrée, coût d'inférence et seuil d'amortissement — distillation PrCon G4 (Simon Naulet, Matis Codjia) | Projet étudiant (PrCon PR #46) | +| 7 | [Research-07-SALBP-AssemblyLineBalancing-Audit-Python](Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb) | ~70 min | SALBP-1/2 : CP-SAT, PuLP/CBC et RPW, statuts/incumbents/bornes, identité de benchmark, front Pareto certifié et MMALBP robuste/pondéré — distillation PrCon B1 (Ilias Kalalou, Kaelan Grall) | Projet étudiant (PrCon PR #57) | +| 8 | [Research-08-OrbitalAssembly-Certificate-Audit-Python](Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb) | ~70 min | Assemblage orbital : physique de Hohmann dans le modèle, auditeur externe, preuve que la scalarisation est exactement lexicographique, comparaison à makespan égal, front d'échange ε-contrainte et sonde en taille **et** en densité — distillation PrCon C4 (Gurvan Estable, Joris Bely, Kévin Lubert) | Projet étudiant (PrCon PR #53) | +| 9 | [Research-09-RCPSP-Max-Feasibility-Bounds-Python](Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb) | ~65 min | RCPSP/max : le lag maximal comme arc inverse, faisabilité NP-difficile et son témoin de circuit positif, balayage des trois régimes temporel/ressource/réalisable, échelle de bornes certifiées et repli explicite quand la référence externe manque — distillation PrCon B4 (Arthur Gallier, Nicolas Naegelen) | Projet étudiant (PrCon PR #51) | +| 10 | [Research-10-Szpiro-Pasten-2026-Python](Research/Research-10-Szpiro-Pasten-2026-Python.ipynb) | ~25 min | Szpiro rendu opérable : factorisations admissibles `N=DM` (parité paire de `D`), balayage de `M·φ(D)` sur N = 6…30030, proxy `log\|Δ\|/log rad(\|Δ\|)` des courbes `y²=x³+ax+b` — théorème 1.1 et corollaires 1.2/1.3 rendus calculables, 3 exercices | Distillation arXiv 2609.17390 (Pasten 2026, #16549) | +| 11 | [Research-11-NeuralDiving-Coloration-Python](Research/Research-11-NeuralDiving-Coloration-Python.ipynb) | ~60 min | Neural diving : un plongeur MLP prédit une affectation partielle, injectée comme hint réparable dans CP-SAT ; la médiane des branches recule (2829 → 2325, 25/25 instances améliorées) alors que ≈ 49 % des arêtes du hint violent l'adjacence — cohérence du hint avec les contraintes, pas précision par bit — hommage Nair et al. 2021 | Recherche (Nair et al. 2021) | --- @@ -175,7 +189,6 @@ Quand l'espace est trop vaste ou l'objectif trop irrégulier pour les méthodes | App-14 ConnectFour-Adversarial | Search-3 (Heuristiques), Search-6 (AdversarialSearch) | | App-14-CSharp | Search-3 (Heuristiques), Search-6 (AdversarialSearch) | | App-14c-CSharp | Search-6 (AdversarialSearch), Search-7 (MCTS) | -| App-32 Szpiro-Pasten-2026 | Aucun prérequis Search — arithmétique des hauteurs (niveau M1) | ### Applications CSP @@ -209,9 +222,6 @@ Quand l'espace est trop vaste ou l'objectif trop irrégulier pour les méthodes | App-20 SudokuBenchmark | CSP-1, CSP-3, Search-8 (DLX) | ortools | | App-20 SudokuBenchmark (C#) | CSP-1, CSP-3, Search-8 (DLX) | dotnet-interactive | | App-21 VoiceLeading | affectation, CSP-3 | scipy, ortools | -| App-22 EdgeColoring-Tutte | coloration de graphes, CSP-3 | networkx, ortools | -| App-23 Factorio-Balancer | CSP-3 (CP-SAT), CSP-4 | ortools (SCIP + CP-SAT), numpy, matplotlib | -| App-26 CoveringArrays Guarantee Audit | CSP-3, CSP-5 | ortools, pandas, matplotlib | ### Applications Hybrid @@ -232,14 +242,23 @@ Quand l'espace est trop vaste ou l'objectif trop irrégulier pour les méthodes | App-18c HyperparameterTuning Rustuna-vs-Optuna | App-18b (terrain k-NN CV), Search-5 | numpy, optuna, rustuna | | App-22 AlgorithmSelection-Python | MGS-16 (Rice / No Free Lunch) | pandas, numpy, matplotlib | | App-23 PRESENT Differential Cryptanalysis | SAT, CNF, bit-vectors | python-sat, numpy, matplotlib | -| App-24 MAPF Guarantee Audit | Search-3 (A*), CSP-3/CSP-4, heuristiques admissibles | ortools, pandas, matplotlib | -| App-25 CombinatorialAuctions-WDP-VCG | CSP-3 (CP-SAT), CSP-5 (optimisation), GameTheory-16 (VCG) | ortools, pandas, matplotlib | | App-27 Sparse Index Tracking Walk-Forward | CSP-3 (CP-SAT), CSP-5 (optimisation), App-10 (portefeuille) | ortools, pandas, numpy | -| App-28 LearningToBranch Generalization Audit | CSP-6 (heuristiques), MGS-16 (sélection d'algorithmes) | numpy, pandas, scikit-learn | -| App-29 SALBP AssemblyLineBalancing Audit | CSP-3 (CP-SAT), CSP-4 (scheduling), CSP-5 (optimisation) | ortools, pulp, pandas, numpy, matplotlib | -| App-30 OrbitalAssembly Certificate Audit | CSP-3 (CP-SAT), CSP-4 (scheduling), CSP-5 (optimisation) | ortools, pandas, matplotlib | -| App-31 RCPSP Max Feasibility Bounds | CSP-4 (scheduling), CSP-3 (CP-SAT), Planners-8 (temporel) | ortools, pandas, numpy, matplotlib | -| App-33 NeuralDiving Coloration | App-28 (composante branchement), CSP-3 (CP-SAT), MGS-16 (sélection d'algorithmes) | ortools, scikit-learn, numpy, pandas | + +### Applications Research + +| Notebook | Fondations requises | Dépendances | +|----------|--------------------|-------------| +| Research-01 EdgeColoring-Tutte | coloration de graphes, CSP-3 | networkx, ortools | +| Research-02 Factorio-Balancer | CSP-3 (CP-SAT), CSP-4 | ortools (SCIP + CP-SAT), numpy, matplotlib | +| Research-03 MAPF Guarantee Audit | Search-3 (A*), CSP-3/CSP-4, heuristiques admissibles | ortools, pandas, matplotlib | +| Research-04 CombinatorialAuctions-WDP-VCG | CSP-3 (CP-SAT), CSP-5 (optimisation), GameTheory-16 (VCG) | ortools, pandas, matplotlib | +| Research-05 CoveringArrays Guarantee Audit | CSP-3, CSP-5 | ortools, pandas, matplotlib | +| Research-06 LearningToBranch Generalization Audit | CSP-6 (heuristiques), MGS-16 (sélection d'algorithmes) | numpy, pandas, scikit-learn | +| Research-07 SALBP AssemblyLineBalancing Audit | CSP-3 (CP-SAT), CSP-4 (scheduling), CSP-5 (optimisation) | ortools, pulp, pandas, numpy, matplotlib | +| Research-08 OrbitalAssembly Certificate Audit | CSP-3 (CP-SAT), CSP-4 (scheduling), CSP-5 (optimisation) | ortools, pandas, matplotlib | +| Research-09 RCPSP Max Feasibility Bounds | CSP-4 (scheduling), CSP-3 (CP-SAT), Planners-8 (temporel) | ortools, pandas, numpy, matplotlib | +| Research-10 Szpiro-Pasten-2026 | Aucun prérequis Search — arithmétique des hauteurs (niveau M1) | — | +| Research-11 NeuralDiving Coloration | Research-06 (composante branchement), CSP-3 (CP-SAT), MGS-16 (sélection d'algorithmes) | ortools, scikit-learn, numpy, pandas | --- @@ -251,23 +270,23 @@ Le [App-22-AlgorithmSelection-Python](Hybrid/App-22-AlgorithmSelection-Python.ht Le [App-23-PRESENT-Differential-Cryptanalysis-SAT](Hybrid/App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb) distille le projet PrCon F2 de **Théodore Deguest**, *« Cryptanalyse différentielle de PRESENT via SAT »*, PR [PrCon #49](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/49). Le notebook reconstruit l'expérience de façon autonome, reproduit la DDT et les frontières SAT/UNSAT, corrige le seuil documentaire à R=15/W=66 et distingue explicitement trail, cluster et niveau de preuve. -Le [Research-03-MAPF-Guarantee-Audit-Python](Hybrid/Research-03-MAPF-Guarantee-Audit-Python.ipynb) distille le projet PrCon G3 de **Matteo Atkinson** et **Paul Witkowski**, *« Coordination de drones par Multi-Agent Path Finding »*, PRs [PrCon #33](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/33), [#36](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/36) et [#42](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/42). Un rerun frais alimente un validateur et un oracle CP-SAT indépendants ; le notebook distingue trajectoire valide, optimum observé et garantie réellement établie, avec provenance détaillée dans [`Hybrid/data/app24-mapf-audit/SOURCE.md`](Hybrid/data/app24-mapf-audit/SOURCE.md). +Le [Research-03-MAPF-Guarantee-Audit-Python](Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb) distille le projet PrCon G3 de **Matteo Atkinson** et **Paul Witkowski**, *« Coordination de drones par Multi-Agent Path Finding »*, PRs [PrCon #33](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/33), [#36](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/36) et [#42](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/42). Un rerun frais alimente un validateur et un oracle CP-SAT indépendants ; le notebook distingue trajectoire valide, optimum observé et garantie réellement établie, avec provenance détaillée dans [`Research/data/app24-mapf-audit/SOURCE.md`](Research/data/app24-mapf-audit/SOURCE.md). -Le [Research-04-CombinatorialAuctions-WDP-VCG-Python](Hybrid/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb) distille le projet PrCon J2 de **Lucas Majerczyk**, **Nabil Chartouni** et **Wilfrid Wangon-Zekou**, *« Enchères combinatoires et Winner Determination »*, PR [PrCon #26](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/26). Le notebook ré-écrit le solveur WDP (CP-SAT, prix entiers milli-unités bout-en-bout) sans importer le package `wdp/` des étudiants ; il re-résout les 18 instances CATS, **matérialise en exécutable** le contre-exemple de manipulation sous budget documenté mais jamais testé dans la source, et audite honnêtement l'écart `PRICE_SCALE` entre les outputs committés et le code au commit source. Données et provenance : [`data/app25-wdp-vcg-audit`](Hybrid/data/app25-wdp-vcg-audit/). +Le [Research-04-CombinatorialAuctions-WDP-VCG-Python](Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb) distille le projet PrCon J2 de **Lucas Majerczyk**, **Nabil Chartouni** et **Wilfrid Wangon-Zekou**, *« Enchères combinatoires et Winner Determination »*, PR [PrCon #26](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/26). Le notebook ré-écrit le solveur WDP (CP-SAT, prix entiers milli-unités bout-en-bout) sans importer le package `wdp/` des étudiants ; il re-résout les 18 instances CATS, **matérialise en exécutable** le contre-exemple de manipulation sous budget documenté mais jamais testé dans la source, et audite honnêtement l'écart `PRICE_SCALE` entre les outputs committés et le code au commit source. Données et provenance : [`data/app25-wdp-vcg-audit`](Research/data/app25-wdp-vcg-audit/). -Le [Research-05-CoveringArrays-Guarantee-Audit-Python](CSP/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb) distille le projet PrCon H4 de **Valérian Pichot**, *« Covering Arrays »*, PR [PrCon #58](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/58). Sans recopier le générateur étudiant, le notebook reconstruit un oracle indépendant, un set cover CP-SAT exact et deux baselines approchées ; il reproduit surtout le faux verdict d'un validateur qui exige des interactions sémantiquement impossibles, puis le répare par un univers constraint-aware. Provenance : [`CSP/data/app26-covering-arrays-audit/SOURCE.md`](CSP/data/app26-covering-arrays-audit/SOURCE.md). +Le [Research-05-CoveringArrays-Guarantee-Audit-Python](Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb) distille le projet PrCon H4 de **Valérian Pichot**, *« Covering Arrays »*, PR [PrCon #58](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/58). Sans recopier le générateur étudiant, le notebook reconstruit un oracle indépendant, un set cover CP-SAT exact et deux baselines approchées ; il reproduit surtout le faux verdict d'un validateur qui exige des interactions sémantiquement impossibles, puis le répare par un univers constraint-aware. Provenance : [`Research/data/app26-covering-arrays-audit/SOURCE.md`](Research/data/app26-covering-arrays-audit/SOURCE.md). Le [App-27-Sparse-Index-Tracking-Walk-Forward](Hybrid/App-27-Sparse-Index-Tracking-Walk-Forward.ipynb) distille le projet PrCon M2 de **Godric Bouteloup**, *« Sparse Index Tracking »*, PR [PrCon #52](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/52). Le notebook conserve la modélisation CP-SAT en lots entiers, mais reconstruit l'expérience sur un marché synthétique seedé : cardinalité exacte, turnover entre rebalancements consécutifs, validation indépendante, choix de K avant le test et statut/borne/gap explicites. Il matérialise aussi un protocole contaminé pour montrer qu'un score obtenu après consultation du test est ininterprétable, qu'il paraisse meilleur ou moins bon. Cette lecture de méthode reprend ensuite, sans relancer de recherche de marché, les résultats autoritatifs du projet [Sparse-Index-Tracking-QC](../../QuantConnect/projects/Sparse-Index-Tracking-QC/README.md) intégré par la PR CoursIA [#14068](https://github.com/jsboige/CoursIA/pull/14068) : 703 contre 1 414 ordres, mais pas de domination sparse sur les performances ni sur le turnover. **Une recherche, deux lectures.** Provenance : [`Hybrid/data/app27-sparse-index-tracking/SOURCE.md`](Hybrid/data/app27-sparse-index-tracking/SOURCE.md). -Le [Research-06-LearningToBranch-Generalization-Audit-Python](Hybrid/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb) distille le projet PrCon G4 de **Simon Naulet** et **Matis Codjia**, *« Apprentissage d'heuristiques de branchement pour solveur CP »*, PR [PrCon #46](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/46). La reproduction est entièrement réécrite : elle remplace le split par lignes par des instances disjointes, ajoute trois transferts leave-one-family-out et compare l'arbre, le temps total et le coût d'inférence à une baseline choisie sur le train uniquement. Elle établit un résultat négatif utile : une imitation locale fidèle ne garantit ni un arbre plus petit ni un solveur plus rapide. Provenance : [`Hybrid/data/app28-learning-to-branch-audit/SOURCE.md`](Hybrid/data/app28-learning-to-branch-audit/SOURCE.md). +Le [Research-06-LearningToBranch-Generalization-Audit-Python](Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb) distille le projet PrCon G4 de **Simon Naulet** et **Matis Codjia**, *« Apprentissage d'heuristiques de branchement pour solveur CP »*, PR [PrCon #46](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/46). La reproduction est entièrement réécrite : elle remplace le split par lignes par des instances disjointes, ajoute trois transferts leave-one-family-out et compare l'arbre, le temps total et le coût d'inférence à une baseline choisie sur le train uniquement. Elle établit un résultat négatif utile : une imitation locale fidèle ne garantit ni un arbre plus petit ni un solveur plus rapide. Provenance : [`Research/data/app28-learning-to-branch-audit/SOURCE.md`](Research/data/app28-learning-to-branch-audit/SOURCE.md). -Le [Research-07-SALBP-AssemblyLineBalancing-Audit-Python](Hybrid/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb) rend hommage au projet PrCon B1 d'**Ilias Kalalou** et **Kaelan Grall**, *« Équilibrage de chaîne d'assemblage (SALBP) »*, PR [PrCon #57](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/57). Le notebook préserve leur geste central — SALBP-1/2, comparaison CP-SAT/PuLP/RPW, Pareto et multi-modèles — dans une réécriture CoursIA indépendante qui publie statuts, incumbents, bornes, gaps, identité structurelle des instances et validation hors solveur. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Hybrid/data/app29-salbp-audit/SOURCE.md`](Hybrid/data/app29-salbp-audit/SOURCE.md). +Le [Research-07-SALBP-AssemblyLineBalancing-Audit-Python](Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb) rend hommage au projet PrCon B1 d'**Ilias Kalalou** et **Kaelan Grall**, *« Équilibrage de chaîne d'assemblage (SALBP) »*, PR [PrCon #57](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/57). Le notebook préserve leur geste central — SALBP-1/2, comparaison CP-SAT/PuLP/RPW, Pareto et multi-modèles — dans une réécriture CoursIA indépendante qui publie statuts, incumbents, bornes, gaps, identité structurelle des instances et validation hors solveur. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Research/data/app29-salbp-audit/SOURCE.md`](Research/data/app29-salbp-audit/SOURCE.md). -Le [Research-08-OrbitalAssembly-Certificate-Audit-Python](Hybrid/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb) rend hommage au projet PrCon C4 de **Gurvan Estable**, **Joris Bely** et **Kévin Lubert**, *« Assemblage orbital de satellites »*, PR [PrCon #53](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/53). Le geste distillé est une décision de modélisation : faire descendre la physique dans le modèle, durées issues d'un temps de vol de Hohmann calculé et coûts d'un Δv calculé, les deux contraignant les mêmes intervalles CP-SAT. La reproduction CoursIA est indépendante et volontairement discrétisée autrement, donc non comparable chiffre à chiffre : elle ajoute un auditeur externe qui ne partage aucun état avec les solveurs, la preuve que l'objectif scalarisé `makespan × (B+1) + ergol` est *exactement* lexicographique dès que le budget borne l'ergol — ce que le rapport source qualifiait prudemment d'« approximation » —, une comparaison à makespan égal qui sépare l'inefficacité en ergol d'une heuristique de son retard d'échéancier, un front d'échange ε-contrainte dont chaque point porte son statut, et une sonde qui montre que la taille est un mauvais prédicteur de difficulté. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Hybrid/data/app30-orbital-assembly-audit/SOURCE.md`](Hybrid/data/app30-orbital-assembly-audit/SOURCE.md). +Le [Research-08-OrbitalAssembly-Certificate-Audit-Python](Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb) rend hommage au projet PrCon C4 de **Gurvan Estable**, **Joris Bely** et **Kévin Lubert**, *« Assemblage orbital de satellites »*, PR [PrCon #53](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/53). Le geste distillé est une décision de modélisation : faire descendre la physique dans le modèle, durées issues d'un temps de vol de Hohmann calculé et coûts d'un Δv calculé, les deux contraignant les mêmes intervalles CP-SAT. La reproduction CoursIA est indépendante et volontairement discrétisée autrement, donc non comparable chiffre à chiffre : elle ajoute un auditeur externe qui ne partage aucun état avec les solveurs, la preuve que l'objectif scalarisé `makespan × (B+1) + ergol` est *exactement* lexicographique dès que le budget borne l'ergol — ce que le rapport source qualifiait prudemment d'« approximation » —, une comparaison à makespan égal qui sépare l'inefficacité en ergol d'une heuristique de son retard d'échéancier, un front d'échange ε-contrainte dont chaque point porte son statut, et une sonde qui montre que la taille est un mauvais prédicteur de difficulté. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Research/data/app30-orbital-assembly-audit/SOURCE.md`](Research/data/app30-orbital-assembly-audit/SOURCE.md). -Le [Research-09-RCPSP-Max-Feasibility-Bounds-Python](Hybrid/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb) rend hommage au projet PrCon B4 d'**Arthur Gallier** et **Nicolas Naegelen**, *« RCPSP — ordonnancement de projet sous contraintes de ressources »*, PR [PrCon #51](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/51). Leur rendu a fait ce que [Planners-8-Temporal](../../SymbolicAI/Planners/03-Advanced/Planners-8-Temporal-Csharp.ipynb) laissait explicitement « en exercice » : confronter un solveur à un benchmark public d'ordonnancement. La vérification indépendante conduite pour cette distillation confirme leurs dix makespans, tous recalculés `OPTIMAL` par un modèle réécrit de zéro. Le prolongement CoursIA porte sur ce que leur section RCPSP/max rendait possible sans l'exercer : un lag maximal s'encode par un **arc inverse** qui referme un circuit, la faisabilité elle-même devient NP-difficile (Bartusch, Möhring, Radermacher, 1988), et un circuit de poids strictement positif en est le témoin vérifiable à la main. Le notebook balaye les trois régimes — infaisable temporellement, infaisable par les ressources, réalisable —, mesure que le diagnostic polynomial épargne au solveur le tiers gauche du domaine, et propose une échelle de bornes certifiées comme repli explicite lorsqu'aucune référence externe n'est disponible : le champ `niveau_de_preuve` interdit de confondre un écart à une borne calculée avec un écart à un optimum connu. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Hybrid/data/app31-rcpsp-max/SOURCE.md`](Hybrid/data/app31-rcpsp-max/SOURCE.md). +Le [Research-09-RCPSP-Max-Feasibility-Bounds-Python](Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb) rend hommage au projet PrCon B4 d'**Arthur Gallier** et **Nicolas Naegelen**, *« RCPSP — ordonnancement de projet sous contraintes de ressources »*, PR [PrCon #51](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/51). Leur rendu a fait ce que [Planners-8-Temporal](../../SymbolicAI/Planners/03-Advanced/Planners-8-Temporal-Csharp.ipynb) laissait explicitement « en exercice » : confronter un solveur à un benchmark public d'ordonnancement. La vérification indépendante conduite pour cette distillation confirme leurs dix makespans, tous recalculés `OPTIMAL` par un modèle réécrit de zéro. Le prolongement CoursIA porte sur ce que leur section RCPSP/max rendait possible sans l'exercer : un lag maximal s'encode par un **arc inverse** qui referme un circuit, la faisabilité elle-même devient NP-difficile (Bartusch, Möhring, Radermacher, 1988), et un circuit de poids strictement positif en est le témoin vérifiable à la main. Le notebook balaye les trois régimes — infaisable temporellement, infaisable par les ressources, réalisable —, mesure que le diagnostic polynomial épargne au solveur le tiers gauche du domaine, et propose une échelle de bornes certifiées comme repli explicite lorsqu'aucune référence externe n'est disponible : le champ `niveau_de_preuve` interdit de confondre un écart à une borne calculée avec un écart à un optimum connu. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Research/data/app31-rcpsp-max/SOURCE.md`](Research/data/app31-rcpsp-max/SOURCE.md). -Le [Research-11-NeuralDiving-Coloration-Python](Hybrid/Research-11-NeuralDiving-Coloration-Python.ipynb) rend hommage au second geste de l'article de Nair et al. (2021), *« Solving Mixed Integer Programs Using Neural Networks »* (arXiv:2012.13349) : le **diving**, qui apprend une solution partielle pour guider un solveur MIP. App-28 a audité la composante *branching* (politique de branchement apprise) ; App-33 enchaîne sur l'autre composante : un plongeur MLP prédit une affectation des 60 sommets d'une coloration de graphe, injectée comme `hint` réparable dans OR-Tools CP-SAT, et l'on mesure l'effet sur les branches de preuve. La famille est calibrée pour qu'une fenêtre existe : les set-cover denses s'effondrent au presolve (`nodes = 0`) et les knapsack corrélés ne se prouvent pas en fenêtre notebook ; la coloration 60 sommets / 3 arêtes branche (médiane 2742, 2303-3799 sur les 60 instances d'entraînement) et se prouve (< 0,1 s). Verdict mesuré sur 25 instances de test, sur un run déterministe (`num_workers = 1`) : la médiane des branches recule (2829 → 2325, ≈ −18 %), les 25 instances s'améliorent (gain relatif médian ≈ 15 %, de 8 % à 28 %), et ≈ 49 % des arêtes du hint (44 sur ~90) sont en conflit avec l'adjacence — la cohérence, pas la précision par bit, détermine l'effet du hint. Le notebook ne copie aucun code, donnée, figure ou prose de l'article, archivé au gisement `G:\Mon Drive\MyIA\IA\Bibliographie IA\Search\`. Provenance : [`Hybrid/data/app33-neural-diving/SOURCE.md`](Hybrid/data/app33-neural-diving/SOURCE.md). +Le [Research-11-NeuralDiving-Coloration-Python](Research/Research-11-NeuralDiving-Coloration-Python.ipynb) rend hommage au second geste de l'article de Nair et al. (2021), *« Solving Mixed Integer Programs Using Neural Networks »* (arXiv:2012.13349) : le **diving**, qui apprend une solution partielle pour guider un solveur MIP. Research-06 a audité la composante *branching* (politique de branchement apprise) ; Research-11 enchaîne sur l'autre composante : un plongeur MLP prédit une affectation des 60 sommets d'une coloration de graphe, injectée comme `hint` réparable dans OR-Tools CP-SAT, et l'on mesure l'effet sur les branches de preuve. La famille est calibrée pour qu'une fenêtre existe : les set-cover denses s'effondrent au presolve (`nodes = 0`) et les knapsack corrélés ne se prouvent pas en fenêtre notebook ; la coloration 60 sommets / 3 arêtes branche (médiane 2742, 2303-3799 sur les 60 instances d'entraînement) et se prouve (< 0,1 s). Verdict mesuré sur 25 instances de test, sur un run déterministe (`num_workers = 1`) : la médiane des branches recule (2829 → 2325, ≈ −18 %), les 25 instances s'améliorent (gain relatif médian ≈ 15 %, de 8 % à 28 %), et ≈ 49 % des arêtes du hint (44 sur ~90) sont en conflit avec l'adjacence — la cohérence, pas la précision par bit, détermine l'effet du hint. Le notebook ne copie aucun code, donnée, figure ou prose de l'article, archivé au gisement `G:\Mon Drive\MyIA\IA\Bibliographie IA\Search\`. Provenance : [`Research/data/app33-neural-diving/SOURCE.md`](Research/data/app33-neural-diving/SOURCE.md). --- @@ -302,15 +321,15 @@ Couverture par application des sources fondatrices mobilisées dans cette sous-s | App-22 (AlgorithmSelection-Python) | Rice, J. R. (1976) — « The Algorithm Selection Problem », *Advances in Computers* 15, pp. 65-118 ; et Wolpert, D. H., & Macready, W. G. (1997) — « No Free Lunch Theorems for Optimization », *IEEE Trans. on Evolutionary Computation* 1(1), pp. 67-82. | | App-23 (PRESENT Differential Cryptanalysis SAT) | Bogdanov, A., et al. (2007) — « PRESENT: An Ultra-Lightweight Block Cipher », *CHES 2007* ; Tseitin, G. S. (1968) — transformations CNF ; Eén, N., & Sörensson, N. (2006) — « Translating Pseudo-Boolean Constraints into SAT ». | | App-19 (ProceduralGeneration-WFC) | Gumin, M. (2016) — *WaveFunctionCollapse*, github.com/mxgmn/WaveFunctionCollapse. Génération procédurale de niveaux par propagation de contraintes. | -| App-24 (MAPF Guarantee Audit) | Stern, R., et al. (2019) — « Multi-Agent Pathfinding: Definitions, Variants, and Benchmarks », *SoCS* ; Sharon, G., et al. (2015) — « Conflict-Based Search for Optimal Multi-Agent Path Finding », *Artificial Intelligence* 219 ; Standley, T. (2010) — « Finding Optimal Solutions to Cooperative Pathfinding Problems », *AAAI* ; Barer, M., et al. (2014) — « Suboptimal Variants of the Conflict-Based Search Algorithm for the Multi-Agent Pathfinding Problem », *SoCS*. | -| App-25 (CombinatorialAuctions-WDP-VCG) | Rothkopf, M. H., Pekeč, A., & Harstad, R. M. (1998) — « Computationally Combinatorial Auction Design », *Management Science* 44(8) ; Sandholm, T. (2002) — « Algorithm for Optimal Winner Determination in Combinatorial Auctions », *Artificial Intelligence* 135 ; Leyton-Brown, K., Pearson, M., & Shoham, Y. (2000) — « Towards a Universal Test Suite for Combinatorial Auction Design », *EC 2000* (générateur CATS) ; Nisan, N. (2000) — « Bidding and Allocation in Combinatorial Auctions », *EC 2000* (langage XOR) ; Lehmann, D., O'Callaghan, L., & Shoham, Y. (2002) — « Truth Revelation in Approximately Efficient Combinatorial Auctions », *JACM* 49(5) (glouton √m, enchérisseurs single-minded). | -| App-26 (CoveringArrays Guarantee Audit) | Cohen, D. M., Dalal, S. R., Fredman, M. L., & Patton, G. C. (1997) — « The AETG System: An Approach to Testing Based on Combinatorial Design », *IEEE TSE* 23(7) ; Lei, Y., Kacker, R., Kuhn, D. R., Okun, V., & Lawrence, J. (2007) — « IPOG: A General Strategy for T-Way Software Testing », *ECBS 2007*. | +| Research-03 (MAPF Guarantee Audit) | Stern, R., et al. (2019) — « Multi-Agent Pathfinding: Definitions, Variants, and Benchmarks », *SoCS* ; Sharon, G., et al. (2015) — « Conflict-Based Search for Optimal Multi-Agent Path Finding », *Artificial Intelligence* 219 ; Standley, T. (2010) — « Finding Optimal Solutions to Cooperative Pathfinding Problems », *AAAI* ; Barer, M., et al. (2014) — « Suboptimal Variants of the Conflict-Based Search Algorithm for the Multi-Agent Pathfinding Problem », *SoCS*. | +| Research-04 (CombinatorialAuctions-WDP-VCG) | Rothkopf, M. H., Pekeč, A., & Harstad, R. M. (1998) — « Computationally Combinatorial Auction Design », *Management Science* 44(8) ; Sandholm, T. (2002) — « Algorithm for Optimal Winner Determination in Combinatorial Auctions », *Artificial Intelligence* 135 ; Leyton-Brown, K., Pearson, M., & Shoham, Y. (2000) — « Towards a Universal Test Suite for Combinatorial Auction Design », *EC 2000* (générateur CATS) ; Nisan, N. (2000) — « Bidding and Allocation in Combinatorial Auctions », *EC 2000* (langage XOR) ; Lehmann, D., O'Callaghan, L., & Shoham, Y. (2002) — « Truth Revelation in Approximately Efficient Combinatorial Auctions », *JACM* 49(5) (glouton √m, enchérisseurs single-minded). | +| Research-05 (CoveringArrays Guarantee Audit) | Cohen, D. M., Dalal, S. R., Fredman, M. L., & Patton, G. C. (1997) — « The AETG System: An Approach to Testing Based on Combinatorial Design », *IEEE TSE* 23(7) ; Lei, Y., Kacker, R., Kuhn, D. R., Okun, V., & Lawrence, J. (2007) — « IPOG: A General Strategy for T-Way Software Testing », *ECBS 2007*. | | App-27 (Sparse Index Tracking Walk-Forward) | Beasley, J. E., Meade, N., & Chang, T.-J. (2003) — « An Evolutionary Heuristic for the Index Tracking Problem », *European Journal of Operational Research* 148(3) ; Bailey, D. H., Borwein, J. M., López de Prado, M., & Zhu, Q. J. (2014) — « Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance », *Notices of the AMS* 61(5). | -| App-28 (LearningToBranch Generalization Audit) | Boussemart, F., Hemery, F., Lecoutre, C., & Sais, L. (2004) — « Boosting Systematic Search by Weighting Constraints », *ECAI* (dom/wdeg) ; Kotthoff, L. (2014) — « Algorithm Selection for Combinatorial Search Problems: A Survey », *AI Magazine* 35(3) ; Bengio, Y., Lodi, A., & Prouvost, A. (2021) — « Machine Learning for Combinatorial Optimization: a Methodological Tour d'Horizon », *European Journal of Operational Research* 290(2) ; Balcan, M.-F., Dick, T., Sandholm, T., & Vitercik, E. (2020) — « Learning to Branch: Generalization Guarantees and Limits of Data-Independent Discretization », *JACM* 67(6). | -| App-29 (SALBP Assembly Line Balancing Audit) | Salveson, M. E. (1955) — « The Assembly Line Balancing Problem », *Journal of Industrial Engineering* 6(3) ; Helgeson, W. B., & Birnie, D. P. (1961) — « Assembly Line Balancing Using the Ranked Positional Weight Technique », *Journal of Industrial Engineering* 12(6) ; Scholl, A. (1999) — *Balancing and Sequencing of Assembly Lines*, Physica-Verlag. | -| App-30 (OrbitalAssembly Certificate Audit) | Hohmann, W. (1925) — *Die Erreichbarkeit der Himmelskörper*, Oldenbourg ; Vallado, D. A. (2013) — *Fundamentals of Astrodynamics and Applications*, 4e éd., Microcosm Press ; Haimes, Y. Y., Lasdon, L. S., & Wismer, D. A. (1971) — « On a Bicriterion Formulation of the Problems of Integrated System Identification and System Optimization », *IEEE Transactions on Systems, Man, and Cybernetics* 1(3) (ε-contrainte) ; Wilcoxon, F. (1945) — « Individual Comparisons by Ranking Methods », *Biometrics Bulletin* 1(6). | -| App-31 (RCPSP Max Feasibility Bounds) | Bartusch, M., Möhring, R. H., & Radermacher, F. J. (1988) — « Scheduling Project Networks with Resource Constraints and Time Windows », *Annals of Operations Research* 16(1) ; Kolisch, R., & Sprecher, A. (1997) — « PSPLIB — A Project Scheduling Problem Library », *European Journal of Operational Research* 96(1) ; Neumann, K., Schwindt, C., & Zimmermann, J. (2003) — *Project Scheduling with Time Windows and Scarce Resources*, Springer ; Bellman, R. (1958) — « On a Routing Problem », *Quarterly of Applied Mathematics* 16(1) (relaxation et détection de circuit). | -| App-33 (Neural Diving Coloration) | Nair, V., Bartunov, S., Gimeno, F., et al. (2021) — « Solving Mixed Integer Programs Using Neural Networks », arXiv:2012.13349 (v3, juillet 2021) ; Bengio, Y., Lodi, A., & Prouvost, A. (2021) — « Machine Learning for Combinatorial Optimization: a Methodological Tour d'Horizon », *European Journal of Operational Research* 290(2). | +| Research-06 (LearningToBranch Generalization Audit) | Boussemart, F., Hemery, F., Lecoutre, C., & Sais, L. (2004) — « Boosting Systematic Search by Weighting Constraints », *ECAI* (dom/wdeg) ; Kotthoff, L. (2014) — « Algorithm Selection for Combinatorial Search Problems: A Survey », *AI Magazine* 35(3) ; Bengio, Y., Lodi, A., & Prouvost, A. (2021) — « Machine Learning for Combinatorial Optimization: a Methodological Tour d'Horizon », *European Journal of Operational Research* 290(2) ; Balcan, M.-F., Dick, T., Sandholm, T., & Vitercik, E. (2020) — « Learning to Branch: Generalization Guarantees and Limits of Data-Independent Discretization », *JACM* 67(6). | +| Research-07 (SALBP Assembly Line Balancing Audit) | Salveson, M. E. (1955) — « The Assembly Line Balancing Problem », *Journal of Industrial Engineering* 6(3) ; Helgeson, W. B., & Birnie, D. P. (1961) — « Assembly Line Balancing Using the Ranked Positional Weight Technique », *Journal of Industrial Engineering* 12(6) ; Scholl, A. (1999) — *Balancing and Sequencing of Assembly Lines*, Physica-Verlag. | +| Research-08 (OrbitalAssembly Certificate Audit) | Hohmann, W. (1925) — *Die Erreichbarkeit der Himmelskörper*, Oldenbourg ; Vallado, D. A. (2013) — *Fundamentals of Astrodynamics and Applications*, 4e éd., Microcosm Press ; Haimes, Y. Y., Lasdon, L. S., & Wismer, D. A. (1971) — « On a Bicriterion Formulation of the Problems of Integrated System Identification and System Optimization », *IEEE Transactions on Systems, Man, and Cybernetics* 1(3) (ε-contrainte) ; Wilcoxon, F. (1945) — « Individual Comparisons by Ranking Methods », *Biometrics Bulletin* 1(6). | +| Research-09 (RCPSP Max Feasibility Bounds) | Bartusch, M., Möhring, R. H., & Radermacher, F. J. (1988) — « Scheduling Project Networks with Resource Constraints and Time Windows », *Annals of Operations Research* 16(1) ; Kolisch, R., & Sprecher, A. (1997) — « PSPLIB — A Project Scheduling Problem Library », *European Journal of Operational Research* 96(1) ; Neumann, K., Schwindt, C., & Zimmermann, J. (2003) — *Project Scheduling with Time Windows and Scarce Resources*, Springer ; Bellman, R. (1958) — « On a Routing Problem », *Quarterly of Applied Mathematics* 16(1) (relaxation et détection de circuit). | +| Research-11 (Neural Diving Coloration) | Nair, V., Bartunov, S., Gimeno, F., et al. (2021) — « Solving Mixed Integer Programs Using Neural Networks », arXiv:2012.13349 (v3, juillet 2021) ; Bengio, Y., Lodi, A., & Prouvost, A. (2021) — « Machine Learning for Combinatorial Optimization: a Methodological Tour d'Horizon », *European Journal of Operational Research* 290(2). | ## Conclusion / Prochaines étapes diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb index f27b667e95..5e5fe0f823 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb @@ -57,9 +57,9 @@ "tags": [] }, "source": [ - "# App-22 : Coloration d'arêtes et conjecture de Tutte\n", + "# Research-01 : Coloration d'arêtes et conjecture de Tutte\n", "\n", - "**Navigation** : [<< App-21 VoiceLeading](App-21-VoiceLeading.ipynb) | [Index](../../README.md)\n", + "**Navigation** : [<< App-21 VoiceLeading](../CSP/App-21-VoiceLeading.ipynb) | [Index](../../README.md)\n", "\n", "## Objectifs d'apprentissage\n", "\n", @@ -70,7 +70,7 @@ "3. **Construire** des familles témoins : le graphe de Petersen (plus petit snark), un graphe cubique à pont, les échelles de Möbius (non planaires mais apex)\n", "4. **Vérifier empiriquement** un théorème récent (arXiv 2608.22870, 2026) : tout graphe cubique **sans pont et apex** admet une 3-coloration d'arêtes\n", "\n", - "Ce notebook prolonge [App-2 : Coloration de Graphes](App-2-GraphColoring.ipynb), qui traitait la coloration de **sommets** — ici, ce sont les **arêtes** que l'on colore." + "Ce notebook prolonge [App-2 : Coloration de Graphes](../CSP/App-2-GraphColoring.ipynb), qui traitait la coloration de **sommets** — ici, ce sont les **arêtes** que l'on colore." ] }, { @@ -1481,7 +1481,7 @@ "**Perspectives** : un compagnon Lean (tranche B de l'issue #13031) formalisera les définitions (cubique, sans pont, apex, 3-arête-colorable) sur `Mathlib.Combinatorics.SimpleGraph` et vérifiera exécutivement que le Petersen n'est pas 3-arête-colorable. La formalisation de la preuve complète (réductibilité + déchargement) est explicitement hors périmètre : c'est l'échelle du théorème des quatre couleurs (années-homme, cf. Gonthier).\n", "\n", "**Références** :\n", - "- [App-2 : Coloration de Graphes](App-2-GraphColoring.ipynb) — coloration de sommets\n", + "- [App-2 : Coloration de Graphes](../CSP/App-2-GraphColoring.ipynb) — coloration de sommets\n", "- Vizing (1964), *On an estimate of the chromatic class of a p-graph*\n", "- Tutte (1966), *On the algebraic characterization of some graph classes*\n", "- arXiv 2608.22870 (2026), *Three-edge-coloring apex cubic graphs* — preuve assistée par ordinateur, algorithme $O(n^2)$\n", diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb index 93361dbaa6..c6b361fa27 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb @@ -50,7 +50,7 @@ "tags": [] }, "source": [ - "# App-23 - Factorio Belt Balancer (CP-SAT borne)\n", + "# Research-02 - Factorio Belt Balancer (CP-SAT borne)\n", "\n", "**Navigation** : [<< App-22 EdgeColoring Tutte](../CSP/Research-01-EdgeColoring-Tutte-Python.ipynb) | [Index](../README.md) | [App-26 Covering Arrays >>](../CSP/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb)\n", "\n", diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb index 840e68c405..6d6266cd31 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb @@ -14,9 +14,9 @@ "tags": [] }, "source": [ - "# App-24 — MAPF : auditer les garanties des solveurs\n", + "# Research-03 — MAPF : auditer les garanties des solveurs\n", "\n", - "> **Navigation** : [Applications Search](../README.md) · [App-23 PRESENT/SAT](App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb) · [Search-3 A*](../../Part1-Foundations/Search-03-Informed.ipynb) · [CSP-4 Scheduling](../../Part2-CSP/CSP-4-Scheduling.ipynb)\n", + "> **Navigation** : [Applications Search](../README.md) · [App-23 PRESENT/SAT](../Hybrid/App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb) · [Search-3 A*](../../Part1-Foundations/Search-03-Informed.ipynb) · [CSP-4 Scheduling](../../Part2-CSP/CSP-4-Scheduling.ipynb)\n", "\n", "## Objectifs d'apprentissage\n", "\n", diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb index f0605f9e16..8c2aa82aa8 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb @@ -14,7 +14,7 @@ "tags": [] }, "source": [ - "# App-25 — Enchères combinatoires : Winner Determination à grande échelle et audit des garanties VCG\n", + "# Research-04 — Enchères combinatoires : Winner Determination à grande échelle et audit des garanties VCG\n", "\n", "> **Navigation** : [Applications Search](../README.md) · [GameTheory — théorie des mécanismes](../../../GameTheory/README.md) · [CSP-3 (CP-SAT avancé)](../../Part2-CSP/CSP-3-Advanced.ipynb)\n", "\n", @@ -2826,7 +2826,7 @@ "- [GameTheory-16c — Extraction de revenu DSIC+IR](../../../GameTheory/GameTheory-16c-Extraction-de-Revenu-DSIC-IR-Python.ipynb) : l'autre face du trade-off revenu/incitation ;\n", "- [`examples/vcg_auction.py`](../../../GameTheory/examples/vcg_auction.py) : l'énumération brute dont le §2 mesure le mur ;\n", "- [CSP-3](../../Part2-CSP/CSP-3-Advanced.ipynb) et [CSP-5](../../Part2-CSP/CSP-5-Optimization.ipynb) : la boîte à outils CP-SAT (`AddAtMostOne`, `Maximize`) mobilisée ici ;\n", - "- [App-23 — PRESENT par SAT](App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb) : même discipline de niveaux de preuve — exécution finie, certification bornée, théorème.\n", + "- [App-23 — PRESENT par SAT](../Hybrid/App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb) : même discipline de niveaux de preuve — exécution finie, certification bornée, théorème.\n", "\n", "Le projet J2 reste la source : [dépôt](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/tree/main/Groupe-J2-Enchere_combinatoire_et_Winner_Determination) (MIT), notes de recherche 01-04, package `wdp/` et 44 tests — non recopiés ici, conformément à la licence et à la politique de distillation." ] diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb index 68e9d09f00..d2460753aa 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb @@ -14,7 +14,7 @@ "tags": [] }, "source": [ - "# App-26 — Covering Arrays : tester les interactions possibles, auditer les garanties\n", + "# Research-05 — Covering Arrays : tester les interactions possibles, auditer les garanties\n", "\n", "> **Navigation** : [Applications Search](../README.md) · [CSP-3 (CP-SAT avancé)](../../Part2-CSP/CSP-3-Advanced.ipynb) · [CSP-5 (optimisation)](../../Part2-CSP/CSP-5-Optimization.ipynb)\n", "\n", @@ -1234,8 +1234,8 @@ "\n", "- [CSP-3 — CP-SAT avancé](../../Part2-CSP/CSP-3-Advanced.ipynb) : variables booléennes, contraintes réifiées et lecture des statuts ;\n", "- [CSP-5 — Optimisation](../../Part2-CSP/CSP-5-Optimization.ipynb) : incumbent, borne et différence entre faisabilité et optimalité ;\n", - "- [App-20 — Sudoku Benchmark](App-20-SudokuBenchmark-Python.ipynb) : autre comparaison d'algorithmes sous oracle commun ;\n", - "- [App-24 — MAPF Guarantee Audit](../Hybrid/Research-03-MAPF-Guarantee-Audit-Python.ipynb) : même discipline, séparer solution valide, optimum observé et garantie prouvée.\n", + "- [App-20 — Sudoku Benchmark](../CSP/App-20-SudokuBenchmark-Python.ipynb) : autre comparaison d'algorithmes sous oracle commun ;\n", + "- [Research-03 — MAPF Guarantee Audit](Research-03-MAPF-Guarantee-Audit-Python.ipynb) : même discipline, séparer solution valide, optimum observé et garantie prouvée.\n", "\n", "Le projet H4 reste la source du geste et de la question : [dépôt](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/tree/main/H4-Covering-Arrays) (MIT), notebook, solveur CP-SAT, IPOG, AETG et slides — non recopiés ici." ] diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb index 62074145de..bf1bb58a40 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb @@ -14,7 +14,7 @@ "tags": [] }, "source": [ - "# App-28 — Learning to branch\n", + "# Research-06 — Learning to branch\n", "## Auditer la généralisation avant d'annoncer un gain\n", "\n", "[← Applications](../README.md) | [↑ Search](../../README.md) | [<< App-25 Enchères WDP/VCG](Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb)\n", @@ -1979,7 +1979,7 @@ "source": [ "## 10. Bilan critique — ce que la garantie apporte et ce qu'elle coûte\n", "\n", - "| Claim | Preuve dans App-28 | Coût de la garantie | Limite |\n", + "| Claim | Preuve dans Research-06 | Coût de la garantie | Limite |\n", "|---|---|---|---|\n", "| Pas de fuite par instance | identifiants train/test disjoints | moins de lignes corrélées disponibles pour entraîner | seulement 36 instances |\n", "| Transfert inter-familles | trois leave-one-family-out | trois entraînements et évaluations supplémentaires | familles synthétiques seulement |\n", diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb index 5d34e9c3f4..ffe775b114 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb @@ -5,16 +5,16 @@ "id": "12174e35", "metadata": { "papermill": { - "duration": 0.004319, - "end_time": "2026-09-01T18:55:11.625886+00:00", + "duration": 0.004078, + "end_time": "2026-10-05T00:05:19.258164+00:00", "exception": false, - "start_time": "2026-09-01T18:55:11.621567+00:00", + "start_time": "2026-10-05T00:05:19.254086+00:00", "status": "completed" }, "tags": [] }, "source": [ - "# App-29 — Équilibrage de chaîne d'assemblage (SALBP)\n", + "# Research-07 — Équilibrage de chaîne d'assemblage (SALBP)\n", "## De l'affectation au certificat : statut, borne, provenance\n", "\n", "**Navigation** : [Index Applications](../README.md) | [Série Search](../../README.md) | [CSP-4 Scheduling](../../Part2-CSP/CSP-4-Scheduling.ipynb)\n", @@ -42,10 +42,10 @@ "id": "a88b6c09", "metadata": { "papermill": { - "duration": 0.002884, - "end_time": "2026-09-01T18:55:11.633165+00:00", + "duration": 0.003054, + "end_time": "2026-10-05T00:05:19.265110+00:00", "exception": false, - "start_time": "2026-09-01T18:55:11.630281+00:00", + "start_time": "2026-10-05T00:05:19.262056+00:00", "status": "completed" }, "tags": [] @@ -81,16 +81,16 @@ "id": "3d54fb54", "metadata": { "execution": { - "iopub.execute_input": "2026-09-01T18:55:11.639668Z", - "iopub.status.busy": "2026-09-01T18:55:11.639403Z", - "iopub.status.idle": "2026-09-01T18:55:17.517971Z", - "shell.execute_reply": "2026-09-01T18:55:17.517338Z" + "iopub.execute_input": "2026-10-05T00:05:19.274415Z", + "iopub.status.busy": "2026-10-05T00:05:19.274103Z", + "iopub.status.idle": "2026-10-05T00:05:19.971239Z", + "shell.execute_reply": "2026-10-05T00:05:19.970608Z" }, "papermill": { - "duration": 5.882727, - "end_time": "2026-09-01T18:55:17.518552+00:00", + "duration": 0.703248, + "end_time": "2026-10-05T00:05:19.971855+00:00", "exception": false, - "start_time": "2026-09-01T18:55:11.635825+00:00", + "start_time": "2026-10-05T00:05:19.268607+00:00", "status": "completed" }, "tags": [] @@ -100,7 +100,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "{'python': '3.13.14', 'ortools': '9.15.6755', 'pulp': '3.3.1'}\n" + "{'python': '3.13.15', 'ortools': '9.15.6755', 'pulp': '3.3.2'}\n" ] } ], @@ -121,7 +121,7 @@ "\n", "DATA_DIR = Path(\"data/app29-salbp-audit\")\n", "if not DATA_DIR.exists():\n", - " DATA_DIR = Path(\"MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit\")\n", + " DATA_DIR = Path(\"MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit\")\n", "DATA_DIR.mkdir(parents=True, exist_ok=True)\n", "\n", "@dataclass(frozen=True)\n", @@ -165,10 +165,10 @@ "id": "80df9c3d", "metadata": { "papermill": { - "duration": 0.002858, - "end_time": "2026-09-01T18:55:17.524598+00:00", + "duration": 0.00196, + "end_time": "2026-10-05T00:05:19.976222+00:00", "exception": false, - "start_time": "2026-09-01T18:55:17.521740+00:00", + "start_time": "2026-10-05T00:05:19.974262+00:00", "status": "completed" }, "tags": [] @@ -197,10 +197,10 @@ "id": "5fbc5132", "metadata": { "papermill": { - "duration": 0.002699, - "end_time": "2026-09-01T18:55:17.530176+00:00", + "duration": 0.00167, + "end_time": "2026-10-05T00:05:19.979803+00:00", "exception": false, - "start_time": "2026-09-01T18:55:17.527477+00:00", + "start_time": "2026-10-05T00:05:19.978133+00:00", "status": "completed" }, "tags": [] @@ -229,16 +229,16 @@ "id": "cbd49f0e", "metadata": { "execution": { - "iopub.execute_input": "2026-09-01T18:55:17.536619Z", - "iopub.status.busy": "2026-09-01T18:55:17.536341Z", - "iopub.status.idle": "2026-09-01T18:55:17.543706Z", - "shell.execute_reply": "2026-09-01T18:55:17.542972Z" + "iopub.execute_input": "2026-10-05T00:05:19.984585Z", + "iopub.status.busy": "2026-10-05T00:05:19.984343Z", + "iopub.status.idle": "2026-10-05T00:05:19.989928Z", + "shell.execute_reply": "2026-10-05T00:05:19.989469Z" }, "papermill": { - "duration": 0.011506, - "end_time": "2026-09-01T18:55:17.544257+00:00", + "duration": 0.00867, + "end_time": "2026-10-05T00:05:19.990411+00:00", "exception": false, - "start_time": "2026-09-01T18:55:17.532751+00:00", + "start_time": "2026-10-05T00:05:19.981741+00:00", "status": "completed" }, "tags": [] @@ -297,10 +297,10 @@ "id": "9f6e0190", "metadata": { "papermill": { - "duration": 0.002899, - "end_time": "2026-09-01T18:55:17.550130+00:00", + "duration": 0.001647, + "end_time": "2026-10-05T00:05:19.993885+00:00", "exception": false, - "start_time": "2026-09-01T18:55:17.547231+00:00", + "start_time": "2026-10-05T00:05:19.992238+00:00", "status": "completed" }, "tags": [] @@ -326,10 +326,10 @@ "id": "cbcbc322", "metadata": { "papermill": { - "duration": 0.002755, - "end_time": "2026-09-01T18:55:17.555533+00:00", + "duration": 0.001634, + "end_time": "2026-10-05T00:05:19.997244+00:00", "exception": false, - "start_time": "2026-09-01T18:55:17.552778+00:00", + "start_time": "2026-10-05T00:05:19.995610+00:00", "status": "completed" }, "tags": [] @@ -356,16 +356,16 @@ "id": "6f0e2831", "metadata": { "execution": { - "iopub.execute_input": "2026-09-01T18:55:17.562062Z", - "iopub.status.busy": "2026-09-01T18:55:17.561825Z", - "iopub.status.idle": "2026-09-01T18:55:17.643507Z", - "shell.execute_reply": "2026-09-01T18:55:17.642736Z" + "iopub.execute_input": "2026-10-05T00:05:20.001812Z", + "iopub.status.busy": "2026-10-05T00:05:20.001647Z", + "iopub.status.idle": "2026-10-05T00:05:20.046284Z", + "shell.execute_reply": "2026-10-05T00:05:20.045732Z" }, "papermill": { - "duration": 0.085966, - "end_time": "2026-09-01T18:55:17.644159+00:00", + "duration": 0.047637, + "end_time": "2026-10-05T00:05:20.046857+00:00", "exception": false, - "start_time": "2026-09-01T18:55:17.558193+00:00", + "start_time": "2026-10-05T00:05:19.999220+00:00", "status": "completed" }, "tags": [] @@ -376,8 +376,8 @@ "output_type": "stream", "text": [ " method status objective best_bound gap wall_time valid\n", - "CP-SAT SALBP-1 OPTIMAL 4.0 4.0 0.0 0.040857 True\n", - "CP-SAT SALBP-2 OPTIMAL 11.0 11.0 0.0 0.014211 True\n", + "CP-SAT SALBP-1 OPTIMAL 4.0 4.0 0.0 0.012198 True\n", + "CP-SAT SALBP-2 OPTIMAL 11.0 11.0 0.0 0.014527 True\n", "(True, {'loads': {1: 14, 0: 4, 2: 11, 3: 11}, 'stations': 4, 'cycle': 14})\n" ] } @@ -442,10 +442,10 @@ "id": "09671fa7", "metadata": { "papermill": { - "duration": 0.003118, - "end_time": "2026-09-01T18:55:17.650417+00:00", + "duration": 0.002195, + "end_time": "2026-10-05T00:05:20.053864+00:00", "exception": false, - "start_time": "2026-09-01T18:55:17.647299+00:00", + "start_time": "2026-10-05T00:05:20.051669+00:00", "status": "completed" }, "tags": [] @@ -467,10 +467,10 @@ "id": "0a6c1ee4", "metadata": { "papermill": { - "duration": 0.002697, - "end_time": "2026-09-01T18:55:17.655778+00:00", + "duration": 0.001711, + "end_time": "2026-10-05T00:05:20.057443+00:00", "exception": false, - "start_time": "2026-09-01T18:55:17.653081+00:00", + "start_time": "2026-10-05T00:05:20.055732+00:00", "status": "completed" }, "tags": [] @@ -500,16 +500,16 @@ "id": "d862b45c", "metadata": { "execution": { - "iopub.execute_input": "2026-09-01T18:55:17.662156Z", - "iopub.status.busy": "2026-09-01T18:55:17.661945Z", - "iopub.status.idle": "2026-09-01T18:55:18.337359Z", - "shell.execute_reply": "2026-09-01T18:55:18.336557Z" + "iopub.execute_input": "2026-10-05T00:05:20.061852Z", + "iopub.status.busy": "2026-10-05T00:05:20.061688Z", + "iopub.status.idle": "2026-10-05T00:05:20.353372Z", + "shell.execute_reply": "2026-10-05T00:05:20.352869Z" }, "papermill": { - "duration": 0.679883, - "end_time": "2026-09-01T18:55:18.338247+00:00", + "duration": 0.294503, + "end_time": "2026-10-05T00:05:20.353810+00:00", "exception": false, - "start_time": "2026-09-01T18:55:17.658364+00:00", + "start_time": "2026-10-05T00:05:20.059307+00:00", "status": "completed" }, "tags": [] @@ -520,8 +520,8 @@ "output_type": "stream", "text": [ " method status objective best_bound gap wall_time valid\n", - " CP-SAT SALBP-1 OPTIMAL 4.0 4.0 0.0 0.040857 True\n", - "PuLP/CBC SALBP-1 OPTIMAL 4.0 4.0 0.0 0.662470 True\n", + " CP-SAT SALBP-1 OPTIMAL 4.0 4.0 0.0 0.012198 True\n", + "PuLP/CBC SALBP-1 OPTIMAL 4.0 4.0 0.0 0.280259 True\n", " RPW HEURISTIC 4.0 NaN NaN 0.000000 True\n" ] } @@ -583,10 +583,10 @@ "id": "d8bff220", "metadata": { "papermill": { - "duration": 0.002991, - "end_time": "2026-09-01T18:55:18.344824+00:00", + "duration": 0.002048, + "end_time": "2026-10-05T00:05:20.357847+00:00", "exception": false, - "start_time": "2026-09-01T18:55:18.341833+00:00", + "start_time": "2026-10-05T00:05:20.355799+00:00", "status": "completed" }, "tags": [] @@ -612,10 +612,10 @@ "id": "b847952b", "metadata": { "papermill": { - "duration": 0.003364, - "end_time": "2026-09-01T18:55:18.352670+00:00", + "duration": 0.001805, + "end_time": "2026-10-05T00:05:20.361983+00:00", "exception": false, - "start_time": "2026-09-01T18:55:18.349306+00:00", + "start_time": "2026-10-05T00:05:20.360178+00:00", "status": "completed" }, "tags": [] @@ -644,16 +644,16 @@ "id": "2e5d16be", "metadata": { "execution": { - "iopub.execute_input": "2026-09-01T18:55:18.361279Z", - "iopub.status.busy": "2026-09-01T18:55:18.360968Z", - "iopub.status.idle": "2026-09-01T18:55:19.942380Z", - "shell.execute_reply": "2026-09-01T18:55:19.941496Z" + "iopub.execute_input": "2026-10-05T00:05:20.367260Z", + "iopub.status.busy": "2026-10-05T00:05:20.367060Z", + "iopub.status.idle": "2026-10-05T00:05:21.872392Z", + "shell.execute_reply": "2026-10-05T00:05:21.871546Z" }, "papermill": { - "duration": 1.586261, - "end_time": "2026-09-01T18:55:19.942956+00:00", + "duration": 1.508724, + "end_time": "2026-10-05T00:05:21.873099+00:00", "exception": false, - "start_time": "2026-09-01T18:55:18.356695+00:00", + "start_time": "2026-10-05T00:05:20.364375+00:00", "status": "completed" }, "tags": [] @@ -708,10 +708,10 @@ "id": "7c83da19", "metadata": { "papermill": { - "duration": 0.003274, - "end_time": "2026-09-01T18:55:19.949429+00:00", + "duration": 0.001916, + "end_time": "2026-10-05T00:05:21.877268+00:00", "exception": false, - "start_time": "2026-09-01T18:55:19.946155+00:00", + "start_time": "2026-10-05T00:05:21.875352+00:00", "status": "completed" }, "tags": [] @@ -740,10 +740,10 @@ "id": "d31c19eb", "metadata": { "papermill": { - "duration": 0.002694, - "end_time": "2026-09-01T18:55:19.955502+00:00", + "duration": 0.00195, + "end_time": "2026-10-05T00:05:21.881201+00:00", "exception": false, - "start_time": "2026-09-01T18:55:19.952808+00:00", + "start_time": "2026-10-05T00:05:21.879251+00:00", "status": "completed" }, "tags": [] @@ -770,16 +770,16 @@ "id": "b8f0aa8b", "metadata": { "execution": { - "iopub.execute_input": "2026-09-01T18:55:19.961891Z", - "iopub.status.busy": "2026-09-01T18:55:19.961704Z", - "iopub.status.idle": "2026-09-01T18:55:19.967746Z", - "shell.execute_reply": "2026-09-01T18:55:19.967046Z" + "iopub.execute_input": "2026-10-05T00:05:21.887144Z", + "iopub.status.busy": "2026-10-05T00:05:21.886713Z", + "iopub.status.idle": "2026-10-05T00:05:21.893883Z", + "shell.execute_reply": "2026-10-05T00:05:21.892577Z" }, "papermill": { - "duration": 0.010194, - "end_time": "2026-09-01T18:55:19.968353+00:00", + "duration": 0.011531, + "end_time": "2026-10-05T00:05:21.894927+00:00", "exception": false, - "start_time": "2026-09-01T18:55:19.958159+00:00", + "start_time": "2026-10-05T00:05:21.883396+00:00", "status": "completed" }, "tags": [] @@ -828,10 +828,10 @@ "id": "95a6237e", "metadata": { "papermill": { - "duration": 0.003006, - "end_time": "2026-09-01T18:55:19.974303+00:00", + "duration": 0.002383, + "end_time": "2026-10-05T00:05:21.900083+00:00", "exception": false, - "start_time": "2026-09-01T18:55:19.971297+00:00", + "start_time": "2026-10-05T00:05:21.897700+00:00", "status": "completed" }, "tags": [] @@ -853,10 +853,10 @@ "id": "e48be873", "metadata": { "papermill": { - "duration": 0.002802, - "end_time": "2026-09-01T18:55:19.979880+00:00", + "duration": 0.002308, + "end_time": "2026-10-05T00:05:21.904767+00:00", "exception": false, - "start_time": "2026-09-01T18:55:19.977078+00:00", + "start_time": "2026-10-05T00:05:21.902459+00:00", "status": "completed" }, "tags": [] @@ -884,16 +884,16 @@ "id": "ed284baf", "metadata": { "execution": { - "iopub.execute_input": "2026-09-01T18:55:19.986467Z", - "iopub.status.busy": "2026-09-01T18:55:19.986301Z", - "iopub.status.idle": "2026-09-01T18:55:20.610228Z", - "shell.execute_reply": "2026-09-01T18:55:20.608781Z" + "iopub.execute_input": "2026-10-05T00:05:21.911777Z", + "iopub.status.busy": "2026-10-05T00:05:21.911369Z", + "iopub.status.idle": "2026-10-05T00:05:22.272329Z", + "shell.execute_reply": "2026-10-05T00:05:22.271722Z" }, "papermill": { - "duration": 0.628498, - "end_time": "2026-09-01T18:55:20.611190+00:00", + "duration": 0.365121, + "end_time": "2026-10-05T00:05:22.272971+00:00", "exception": false, - "start_time": "2026-09-01T18:55:19.982692+00:00", + "start_time": "2026-10-05T00:05:21.907850+00:00", "status": "completed" }, "tags": [] @@ -913,7 +913,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAFbCAYAAAAzyk+cAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAO1lJREFUeJzt3Qd4FNXawPGXkJBQA4QWkBZ6EwREmgKKVAHFC4KgUZSr6FUQROEKkoCAcBUrl6YCKtgRKVKlKSAISBMvLaFI7y1AINnvec/3bNxNdkPKbjaZ/f+eZ8juzOzM2bOzOy+n5rLZbDYBAACwqABfJwAAAMCbCHYAAIClEewAAABLI9gBAACWRrADAAAsjWAHAABYGsEOAACwNIIdAABgaQQ7AADA0gh2AACApRHsAAAASyPYATxgxowZkitXLpfLkCFDsjSP4+LiJCoqSlatWpXm1xw4cECefPJJqVSpkoSEhEipUqXknnvukREjRrh9zSuvvGLe3yOPPOL2mLr9rbfeSvXcFSpUcMovPX+VKlVk8ODBcvbsWad99X057psvXz6pWbOmDBs2TC5evHjL97l06VJ56qmnpHbt2pI7d25z7owYNGiQOW9qTp06Jf3795fq1atL3rx5pUSJEtKoUSN59dVX5fLlyy5f89///te8r7vuusvtcXX7v/71r1TP3bJlS6d8ypMnj1SsWFH++c9/yuHDh1O9djX/q1atas5x4sSJVM+TmJhoXt+5c2cpW7as5M+f3+TtG2+8IdeuXUv1tUBWCszSswEWN3LkSHNTcaQ//lkd7ERHRyfd9G5l3759cuedd5obcp8+fUwAcOzYMdmyZYuMGzcu6ViOdP7gL774wuw7f/58uXTpkhQsWDDDaa5Xr54JIJTeJDdv3izvvvuurF69WjZu3Jhi/0mTJkmBAgVM0KABzOjRo2XFihWydu1ac8N2Z/bs2fLVV19J/fr1pXTp0hlO78KFC6VTp05ut2uQ1rBhQxOAaZ5qwHPmzBnZvn27SXu/fv1M+pObNWuWyVN9z/q5VK5cOcNpvO2222Ts2LHmcXx8vOzatUsmT54sS5YskT///NMEiq6uXc3/X375xaTzxx9/lJ07d6bY1/Fa0yC5cePG8uyzz5qAbv369SZI/umnn8xnktrnAWQZnfUcQOZMnz7dpl+n3377Lc2vuXr1qi0hIcHjWX/q1CmTlhEjRqRp/+eee84WGBhoO3DgQIptJ06ccPmaFStWmHPo36CgINuMGTNS7BMbG2v2+c9//pPq+cuXL2/r2LFjivUvv/yyef2ePXuS1ul70nX6Hh117drVrF+3bl2q5zpy5IgtPj7ePNZz6rnTa//+/eZcK1eudLvP+PHjzT5r165Nse3ChQvms08uJibGvGbOnDm24sWL26KiolweW/d5/vnnU01jixYtbLVq1Uqx/sMPPzSvX7p06S2v3YEDB5r1s2fPdnue69evu3yP0dHR5rXLli1LNZ1AVqEaC8gCWqWk/8P98ssvTZVLmTJlzP+W7VUv33zzjTRo0MCUrhQrVkx69+4tR44ccTrGE088YUoDdP2DDz5oHhcvXlxefvllSUhISKo60nVKS2TsVRNa/ePO/v37TSlA+fLlU2zT/6m7oiUQWo3TqlUrad26tXnuaVqVpgIDb10Afe+995q/sbGxqe6npTlBQUGZSpeW6oSGhkrz5s1TzVOtJtMSj+QKFSpkqoqS0zwsUqSIdOzYUf7xj3/kiDzV6rGmTZumWP/QQw+Zv1qCBGQHBDuAB124cEFOnz7ttDgaNWqUuVlqgDJmzBhzs9A2D927dzc3R6126Nu3r8yZM8fcTM+fP+/0eg1q2rZtK2FhYaYtTIsWLeTtt9+WqVOnmu0a6Gj1g/2G89lnn5mla9eubtOsQY6249Aqh7S4fv26fPfdd9KzZ0/zXP/qa48fPy4ZdePGjaT8+uuvv0zV2IQJE0y7oeTVgu6CC6X54m1atXP//fenGjBonupnpXmfVhrc6Oek14Tm6d69e+W3337LcDr1/PY81WpJ/Yy0ekmrxpo1a+bVPLVfCxq4A9lClpUhARZmrwpwtSit8tDHERERtri4uKTXaZVKiRIlbLVr13aq2liwYIHZ//XXX09aFxkZadaNHDnS6dx33HGHrUGDBhmuxtq5c6ctb9685jX16tWz9e/f3zZ37lzblStXXO7/7bffmn337t1rnl+8eNEWEhJie+eddzJcjeUq35o1a2Y7ffq00772aqzdu3eb96nnmDJlii04ONhWsmRJt2l2JSPVWHp8fa/6eafm+PHjpipK01q9enXbs88+a6qDzp8/73L/TZs2OVX7JCYm2m677TbzWWS0GstVntaoUcNUl7m6dpcvX27y9PDhw7Yvv/zSFhYWZq6Lv/76y5ZerVu3thUqVMh27ty5dL8W8AZKdgAPmjhxoixbtsxpcRQZGWmqquw2bdokJ0+elOeee86pakOrMrRRq5YCJacNQR3dfffdEhMTk+E016pVS7Zu3WqqzrQa7L333jPVZCVLlpRp06a5LIHQxrf2xrPaMFnTm5lqF+19ZM+vBQsWmAbHf/zxh+nlc/Xq1RT7V6tWzZRiaanPM888Y9KieeWuIa2naOmIlmy1b98+1f0077Zt22Y+q3PnzpmGwY8++qipFtTSvf+PWf6meaev0WpBZe/lptWe9irK9NKGzvY8XbRokWnwrSWPmnbtKZacVkdqnmqvqh49ephq0u+//95UuaaHllguX75c3nzzTSlcuHCG0g54Gr2xAA/SrsUaCLiTvErm4MGDSTfv5DTY0V4xjjQgsrfJsdN2HnpDzQztaqxVLnpj1V47GnCMHz/edFXWNOuNUGm1mlbjaLdk7S1kp9UiWrW1Z88ec6z00uoO+zmUBk+aJ9p25aOPPpIXXnjBaX89l7Z90fY32t5Iu8zb6Q3dMUDSaqGiRYuKJ2hApZ+vBia3Eh4ebqoUtTu5VklpLyjt3fb666+bbU8//bTZT/NcgxoNdBzbx2gAqFWU2qupTZs26U6rdgN3zNN27dqZqlFNvwYieuzkgbp+dlo9p+9P8z8g4P//P6y93hy7y2uVa/LrUGlPN22Tpt37tccZkF1QsgNkIcdSnYzQm4w36fHr1KkjQ4cONf+rV44lNtqQWks29EapY+HYl4EDB6bYN7Puu+8+83fNmjUptmlbHr2Ra5slx0BH6dg2GkzYl9TaK6WXBnodOnRI12u0lEaDCA3Y9L1oAOGYT1papG1qNOBxzFNtx+XpPNVG8Nq42lWeaqCuearDFdSoUSMp0FHaPswxT3WoguS0BOnxxx83gaqWZAHZCSU7gA/Ze0Dt3r07qfeLna5z1UPqVjw1rom9hEpvxHZ649Vxg1wNNjhlyhQzjo2rcXky4ubNm+avuwH4UhvsUKvkHEu+PEHHmzl06JC5mWdURESESU/yPNXqLS1ZSU4bqmvQqcFDZgNlOy1JSm+eahDj2PsseVo2bNhgGsTrNfP111+nqbcXkJW4IgEf0puD3uj0ZqaDzwUHB5v12sZCu+1qlUd62dutJO/J5c7PP/9sukgn75KtpRiOVWzaY0tLBDSY0eql5HTgul69epkbX2ojAKeV9shSdevWTdfrtEv8rUY3zgjND63eSa2a0k7zQINCrUpypIMF6uCC9t5QWt2mAU23bt1c5ql2ldfBG+fNm+d2pOr0WLlypQl00punGqTp4opepxoAahshrf70VFAGeBLBDuBDGmBoOw4dhVarZLTLsQ7Rr42E9ebx0ksvpfuYerPRm722n9DqE22vojdedyM56/l1xGKt7rn99tvNOh09+dNPPzWvHTBggFmnpTbasFYbDbui1Tv6P3otqXAMdrTNiaupA7QRtD1NOnbQ559/nhQ0aeNeLSnStjzJ2+tkho5grIGD0jZH2r5HpzZQGgCkNiqyttfRxr1pKTnT9k+aD1raoVVH2m5Ig4JPPvnEtLv697//bfbTtOjo0+7yVINQbRujx3IMdrRhuz3djrQKyl4Co+/NnqdaSqYlhdqGSK8PT01homnXoRC0zZhO75G8Qb1WMTZp0sQj5wIyxSt9vAA/c6sRlO1dz7/55huX27/66ivThVy7UBctWtTWq1evFF1+tet5/vz5U7zW3h3bkY4krN3R8+TJc8tu6DoCrnZl1u7voaGhZkTkcuXK2Z544gkzWrBdnTp1zPrUtGzZ0nSlv3HjRlLXc3fLZ5995rLreUBAgDlGz549bfv27XP5XpOPoOyJIQI0f93RLuM6yvTXX3+dpvNs377dNnjwYFv9+vXN56mvDQ8Pt3Xr1s22ZcuWpP06depkurKn1mVePwf9TOzd8FPL01GjRrnsep4rVy6Tjs6dO9s2b96c6dG/7W71GaeWp0BWyqX/ZC5cAgBr03YoWkWnA/RpA18AOQu9sQDgFnS8mPfff59AB8ihKNkBAACWRskOAACwNIIdAABgaQQ7AADA0vxinJ3ExEQ5evSombDQU6PLAgAA39HO5DrWkw6+6Ti9id8GOxro6Ey+AADAWnR0d50QWPw92NESHXuG6EzJniwx0pFDda6bW0WVIM+4xryP7yR5xjXmP9/JixcvmoIM+z1e/D3YsVddaaDj6WBHh2HXYxLskGfewDVGfnkb1xj5ldOvr7Q0T6E4AgAAWBrBDgAAsDSCHQAAYGkEOwAAwNIIdjIoIdEmv8ackcV/njZ/9TkAAMh+fB7srFmzRjp16mQGBdIW1XPnznXaHhUVJdWrV5f8+fObrmutW7eWDRs2iC8t3nlMmo9bIY9+tFGGLdxv/upzXQ8AALIXnwc7V65ckbp168rEiRNdbq9atap8+OGHsmPHDvnll1+kQoUK0qZNGzl16pT4ggY0/T7fIscuXHNaf/zCNbOegAcAgOzF5+PstG/f3izuPProo07PJ0yYIB9//LFs375d7rvvPslKWlUVPX+XuKqw0nXa0z9q3i5pVrmY5A5gWgp3Yy5cjU+QuPibjE2UxvzSIdEBADk42EmP+Ph4mTp1qoSGhprSIHeuX79uFsdRFu03Dl0yakPMmRQlOo70lnT84jWpE7U0w+cAkqtbuoB8268pGZOO4DAz33N/Q56RXzn1+krPMXNEsLNgwQLp0aOHxMXFSXh4uCxbtkyKFSvmdv+xY8dKdHR0ivU6ZLWO5JhRMcfOZPi1QEZtO3pZjp48LfmDg8jENPz46cSA+uPKqOZpQ56lD/mVffJLj2upYKdVq1aydetWOX36tEybNk26d+9uGimXKFHC5f5Dhw6VgQMHppg/Qxs4Z2a6iIhwLbvZf8v9PolsII0qFs3weax+4Z8/f14KFy7MzegW4uITpNGYFeaxXrsFQvJkxUeU468v7ejAfHXkGdeY9b+TgYGB1gp2tCdW5cqVzdK4cWOpUqWKabejQY0rwcHBZklOMzozmX1XRDEJDw0xjZFdtaLQVjqlQkOkRbWStNlJ5cKPzxNobtz8zzt1AQE3PXbt+hP9YSW/yDOuMet/JwPScbyAnHrDdGyTk1W00fGITjXN4+TNj+3PdTuNkwEAyD58HuxcvnzZVFHpomJjY83jQ4cOmW7p//73v+XXX3+VgwcPyubNm6VPnz5y5MgR6datm0/S2652uEzqXd+U4DjS57petwMAgOzD59VYmzZtMm1y7OxtbSIjI2Xy5Mnyv//9T2bOnGna64SFhcmdd94pP//8s9SqVctnadaA5v6apWRDzGnTaDkiPMxUcVGiAwBA9uPzYKdly5apjiMyZ84cyY40sGkcESZVC+eSokWLSgDj6gAAkC35vBoLAADAmwh2AACApRHsAAAASyPYAQAAlkawAwAALI1gBwAAWBrBDgAAsDSCHQAAYGkEOwAAwNIIdgAAgKUR7AAAAEsj2AEAAJZGsAMAACyNYAcAAFgawQ4AALA0gh0AAGBpBDsAAMDSCHYAAIClEewAAABLI9gBAACWRrADAAAsjWAHAABYGsEOAACwNIIdAABgaQQ7AADA0gh2AACApRHsAAAASyPYAQAAlkawAwAALI1gBwAAWBrBDgAAsDSCHQAAYGkEOwAAwNIIdgAAgKUR7AAAAEsj2AEAAJbm82BnzZo10qlTJyldurTkypVL5s6dm7Ttxo0b8uqrr0qdOnUkf/78Zp/HH39cjh496tM0AwCAnMPnwc6VK1ekbt26MnHixBTb4uLiZMuWLTJ8+HDzd86cObJ7927p3LmzT9IKAABynsCMvnD//v0yffp08/e9996TEiVKyKJFi6RcuXJSq1atNB+nffv2ZnElNDRUli1b5rTuww8/lEaNGsmhQ4fMuQAAADId7GhpSrVq1ZKer1692gQozZo1M9VQo0ePNsHOtm3b5OOPP5Zvv/1WvOXChQumuqtw4cJu97l+/bpZ7C5evGj+JiYmmsVT9Fg2m82jx7Q68ix9eeX4mOuM68sb+E6SXzn1+krPMdMU7Gj10c6dO+XTTz+V3Llzy5AhQ+SNN96QgQMHSsGCBZP2u/fee03Ji7dcu3bNtOHp2bOnFCpUyO1+Y8eOlejo6BTrz507Jzdv3vRoRl+6dMl8kAEBPq8RzBHIs7S7Gp/gdO3GBwd55TOxEq4v8oxrzH++k5cuXfJssPPyyy+bwKZt27ayfPly2bFjh8yePTvFflq6c/r0afEGbazcvXt3k2GTJk1Kdd+hQ4ea9DqW7JQtW1aKFCmSapCUkQ9RS5n0uAQ75JmnxcX/HZjrNVYgJI/Hz2E1fCfJM64x//lOBgamvSVOmvYMCgqSDz74QL755hvzXKuQjh07JhUrVnTa7/fff5cyZcqItwKdgwcPyooVK24ZsAQHB5slOc1oT2e2fojeOK6VkWdp43hNcY1xfXkT30nyKydeX+k5XrrO3K1bN/O3R48epjrp+PHj5k1o5LZ27VpTAqRdw70R6Ozdu9eUKoWFhXn0+AAAwNoy1BtrzJgx8vzzz5uqoYSEBKlZs6b5++ijj8qwYcPSdazLly/Lvn37kp7HxsbK1q1bpWjRohIeHi7/+Mc/TLfzBQsWmHNogKV0e548FOsDAAAvBDsaZEybNs2Mf6MNlzVgueOOO6RKlSrpPtamTZukVatWSc/tbW0iIyMlKipK5s2bZ57Xq1fP6XUrV66Uli1bZiT5AADAj2R4nB2l49xkdqwbDVi00bE7qW0DAADwWLCjJS6jRo0y0zY49nRyZcKECWk9LAAAQPYIdrSnlTYWVtqGRhsmu+JuPQAAQLYOdnRKCHuX71WrVnkzTQAAAB6T5q7n2gDZPmBgRESEnDlzxnOpAAAA8HWwowMJardwdeDAAebpAQAA1qrGevjhh6VFixZm7Bttl9OwYUMzT5YrMTExnkwjAACA94OdqVOnSteuXc0AgC+++KL07dvXaRJQAACAHD/OTrt27czfzZs3S//+/Ql2AACANQcVnD59uudTAgAA4MtgR6uwZsyYYbqf6+PUzJkzxxNpAwAAyLpgJzQ0NGnAQA14GDwQAABYKthxrLrSEh4AAABLjbPj6N5775Xz58+nWH/x4kWzDQAAIEcHOzpdRHx8fIr1165dk59//tkT6QIAAMj63ljbt29Perxr1y45fvx40vOEhARZvHixlClTxjMpAwAAyOpgp169eqZhsi6uqqvy5s0rH3zwgSfSBQAAkPXBjs6NZbPZzESgGzdulOLFiydty5Mnj5QoUcLtFBIAAADZPtgpX7683LhxQyIjIyUsLMw8BwAAsFQD5aCgIPn++++9kxoAAIDs0BurS5cuMnfuXE+nBQAAIHvMjVWlShUZOXKkrF27Vho0aCD58+d32q6zogMAAOTYYOfjjz+WwoULm9nPdXGkPbUIdgAAQI4OdrRXFgAAgGXb7NjpKMq7d++Wmzdvei5FAAAAvg524uLi5KmnnpJ8+fJJrVq15NChQ2b9Cy+8IG+++aYn0wcAAJD1wc7QoUNl27ZtZo6skJCQpPWtW7eWr776KnMpAgAA8HWbHe12rkFN48aNTYNkOy3l2b9/vyfTBwAAkPUlO6dOnTJTQyR35coVp+AHAAAgRwY7DRs2lIULFyY9twc4H330kTRp0sRzqQMAAPBFNdaYMWOkffv2smvXLtMT67333jOP161bJ6tXr85smgAAAHxbstO8eXPZunWrCXTq1KkjS5cuNdVa69evNyMqAwAAZBcZKtlRlSpVkmnTpnk2NQAAANmhZOfHH3+UJUuWpFiv6xYtWuSJdAEAAPgu2BkyZIgkJCSkWG+z2cw2AACAHB3s7N27V2rWrJliffXq1WXfvn2eSBcAAIDvgp3Q0FCJiYlJsV4Dnfz583siXQAAAL4Ldrp06SIDBgxwGi1ZA51BgwZJ586dPZMywM8lJNqSHm+MPev0HADg5WBn/PjxpgRHq60qVqxolho1akhYWJi89dZb6TrWmjVrpFOnTlK6dGkzOKFOReFozpw50qZNG3Ns3a5d3gGrW7zzmLSe8PeYVX1mbpbm41aY9QCALOh6rtVYOoDgsmXLzISgefPmldtvv13uueeedB9Lp5ioW7eu9OnTR7p27epyu47r0717d+nbt29GkgvkKBrQ9Pt8iyQvxzl+4ZpZP6l3fWlXO9xHqQMAPxpnR0tZtMRFl8zQkZh1ceexxx4zfw8cOJCp8wA5gVZVRc/flSLQUbpOJ2aJmrdLmlUuJrkDmIcuucTERLkanyBx8TclICBDBdd+mWfakxawsgwHO9nZ9evXzWJ38eLFpC+1Lp7+kfDkMa2OPEvdhpgzcuzCNbfb9ZZ0/OI1qRO11OOfDfxX3dIF5Nt+TX2djByB37Dsk1/pOaYlg52xY8dKdHR0ivXnzp0zU1x4MqMvXbpkPkj+F0meeULMsTMeOQ6QHtuOXpajJ09L/uAgMu4W+N3PPvmlx/XrYGfo0KEycOBAp5KdsmXLSpEiRaRQoUIe/RC1Ok+PS7BDnnlCRLiW3fzdy9GdTyIbSKOKRT1yTivR7+T58+elcOHCfCfTIC4+QRqNWWEe6+9YgZA83v6Icjx+97NPfgUGBvp3sBMcHGyW5DSjPZ3Z+iF647hWRp65d1dEMQkPDTGNkV21otBWOqVCQ6RFtZK02XHzwxqfJ9DctPlO3lpAwN8l3fyOpR2/Ydkjv9JzvDQHO/Z2L2nhydITwJ9oo+MRnWqaXlca2DgGPPbmyLqdxskAIJ4PdrRYWKOz1GidnO7jat4sdy5fvuw0xURsbKwZS6do0aJSrlw5OXv2rBw6dEiOHj1qtu/evdv8LVWqlFkAq9Fu5dq9XHtlOTZW1hIdDXTodg4AXgp2Vq5cKd6wadMmadWqVdJze1ubyMhImTFjhsybN0+efPLJpO09evQwf0eMGCFRUVFeSRPgaxrQ3F+zlGyIOW0aLUeEh5kqLkp0AMCLwU6LFi3EG1q2bJnqGA9PPPGEWQB/o4FN44gwqVo4lynpDGBcHQDIkEw1UI6LizNVTPHx8U7rdTRlAACAHBvsnDp1ylQtLVq0yOX29LTZAQAA8KYM9QPTGc91LIsNGzaYebEWL14sM2fOlCpVqpg2NgAAADm6ZGfFihXyww8/SMOGDU0/9/Lly8v9999vupzr6MUdO3b0fEoBAACyqmRHZyIvUaKEeayjImq1lqpTp45s2bIlI4cEAADIPsFOtWrVksa7qVu3rkyZMkWOHDkikydPlvDwcE+nEQAAIGursfr37y/Hjh1LGu+mXbt2MmvWLMmTJ48ZGwcAACBHBzu9e/dOetygQQM5ePCg/O9//zMjHhcrVsyT6QMAAMgUj0wEmi9fPqlfv74nDgUAAOD7YEdHPP7222/NFBInT540Mw07mjNnjqfSBwAAkPXBjo6zo42SdU6rkiVL3nKCUAAAgBwV7Hz22Wem9KZDhw6eTxEAAICvu56HhoZKRESEJ9MBAACQfYKdqKgoiY6OlqtXr3o+RQAAAL6uxurevbt88cUXZhTlChUqSFBQkNN2RlEGAAA5OtiJjIyUzZs3m/F2aKAMAAAsF+wsXLhQlixZIs2bN/d8igAAAHzdZqds2bJmhnMAAABLBjtvv/22vPLKK3LgwAHPpwgAACA7zI0VFxcnlSpVMlNFJG+gfPbsWU+lDwAAIOuDnXfffTdzZwUAAMjuvbEAAAAsFexcvHgxqVGyPk4NjZcBAECOC3aKFCkix44dMwMJFi5c2OXknzobuq5PSEjwdDoBAAC8G+ysWLFCihYtah6vXLkyY2cDAADIrsFOixYtXD4GAADIzjLUQFmdP39eNm7cKCdPnpTExESnbY8//rgn0gYAAOCbYGf+/PnSq1cvuXz5smmM7Nh+Rx8T7AAAgBw9gvKgQYOkT58+JtjREp5z584lLQwoCAAAcnywc+TIEXnxxRfN6MkAAACWC3batm0rmzZt8nxqAAAAskObnY4dO8rgwYNl165dUqdOnRRzY3Xu3NlT6QMAAMj6YKdv377m78iRI1NsY1BBAACQ44Od5F3NAQAALNVmBwAAwHIlO++//77885//lJCQEPM4NdpTCwAAIEcFO++8844ZSFCDHX3sjrbZIdgBAAA5rhorNjZWwsLCkh67W2JiYtKVgDVr1kinTp2kdOnSJlCaO3duipnUX3/9dQkPD5e8efNK69atZe/evek6BwAA8F8+b7Nz5coVqVu3rkycONHl9vHjx5tqs8mTJ8uGDRskf/78Zpyfa9euZXlaAQCAn/TG0tKWb7/9VlauXOlyItA5c+ak+Vjt27c3i7vzvPvuuzJs2DDp0qWLWffpp59KyZIlTQlQjx49MpJ8AADgRzIU7AwYMECmTJkirVq1MoGH40SgnqTVYsePHzdVV3ahoaFy1113yfr1690GO9evXzeL3cWLF81fDco82W1ej6UBGV3xyTNv4Rojv7zJ8bfL07+PVsV3MvvkV3qOmaFg57PPPjOlNx06dBBv0kBHaUDlSJ/bt7kyduxYiY6OTrFeJyq9efOmRzP60qVL5oMMCPB5jWCOQJ6RX1xf2cfV+ASn38f4YOfR8JESv2HZJ7/0uF4NdrR0JSIiQrKroUOHysCBA51KdsqWLStFihSRQoUKefRD1FItPS7BDnnmDVxj5Jc3xcX//Z8//R0rEJLHq+ezAr6T2Se/AgMDvRvsREVFmZKTTz75xPSQ8pZSpUqZvydOnDC9sez0eb169dy+Ljg42CzJaUZ7OrP1Q/TGca2MPCO/uL6yB8ffLX7H0o7fsOyRX+k5XobO3L17d1PkWaJECTMRaP369Z0WT6lYsaIJeH766SenUhrtldWkSROPnQcAAFhXhkp2IiMjZfPmzdK7d+9MN1C+fPmy7Nu3z6lR8tatW6Vo0aJSrlw50xj6jTfekCpVqpjgZ/jw4WZMngcffDDD5wQAAP4jQ8HOwoULZcmSJdK8efNMJ2DTpk2mV5edva2NBlQzZsyQV155xYzFo1NVnD9/3pxz8eLFZiRnAAAArwQ72tjXUw19W7ZsaVppu6OlRiNHjjQLAABAemWozc7bb79tSlwOHDiQkZcDAABk75IdbasTFxcnlSpVknz58klQkPPYDGfPnvVU+gAAALI+2NEpHAAAACzdGwsAACAnYCQ8AABgaQQ7AADA0gh2AACApRHsAAAAS8tUsKPTPOhIylevXjXPUxscEAAAIMcEO2fOnJHWrVtL1apVpUOHDnLs2DGz/qmnnpJBgwZ5Oo0AAABZG+y89NJLEhgYKIcOHTKDCto98sgjZt4qAACAHD3OztKlS0311W233ea0XmcmP3jwoKfSBgAA4JuSHZ2F3LFEx3GaiODg4MynCgAAwJfBzt133y2ffvqp08zkiYmJMn78eGnVqpWn0gYAAOCbaiwNau677z7ZtGmTxMfHmxnQ//jjD1Oys3bt2synCgAAwJclO7Vr15Y9e/ZI8+bNpUuXLqZaq2vXrvL777+bmdABAABydMmOCg0Nlddee82zqQEAAPBVsLN9+/Y0H/T222/PaHoAAAB8E+zUq1fPNES+1SjJuk9CQoIn0gYAAJB1wU5sbGzmzwYAAJBdg53y5ct7NyUAAABekKHeWGPHjpVPPvkkxXpdN27cOE+kCwAAwHfBzpQpU6R69eop1teqVUsmT57siXQBAAD4Ltg5fvy4hIeHp1hfvHjxpBnQAQAAcmywU7ZsWZcjJeu60qVLeyJdAAAAvhtUsG/fvjJgwAC5ceOG3HvvvWbdTz/9ZKaNGDRokGdSBgAA4KtgZ/DgwXLmzBl57rnnzNxYKiQkRF599VUZOnSoJ9IFAADgu2BHBw7UXlfDhw+XP//8U/LmzStVqlSR4OBgz6QKAADAl212pk+fLlevXpUCBQrInXfeaSYGJdABAACWCXaGDBkiJUuWlKeeekrWrVvn+VQBAAD4Mtg5cuSIzJw5U06fPi0tW7Y0Y+5otZZ2SQcAAMjxwU5gYKA89NBD8sMPP8jhw4dN76xZs2ZJuXLlpHPnzmZ9YmKi51MLAACQFcGOI63Oat68uTRp0kQCAgJkx44dEhkZKZUqVZJVq1Zl9vAAAAC+CXZOnDghb731lpkiQquyLl68KAsWLDCzo2s1V/fu3U3QAwAAkOOCnU6dOplRlGfMmGGqsDS4+eKLL6R169Zme/78+c3gglrFBQAAkOPG2SlRooSsXr3aVF25o/NkaSkPACB7Ski0JT3eGHtWWlQrKbkDcvk0TUC2Kdn5+OOPUw107AMPli9fXjzh0qVLZnoKPZ4OYNi0aVP57bffPHJsAPBHi3cek9YTVic97zNzszQft8KsB/w62FmxYoXUrFnTtM9J7sKFC6b9zs8//yye9vTTT8uyZcvks88+Mw2g27RpY6rMtPoMAJA+GtD0+3yLnLh43Wn98QvXzHoCHvh1Nda7775r2ugUKlQoxbbQ0FB55plnZMKECXL33Xd7LIE6UvN3331nurPfc889Zl1UVJTMnz9fJk2aJG+88YbHzgUA/lB1FT1/l/xdgfU3XaeVWFHzdkmzysWo0nJBh1W5Gp8gcfE3TQ9k3Dq/bDZXV1s2Dna2bdtmBg90R0tctIeWJ928eVMSEhLMRKOOtDrrl19+cfma69evm8XOXhKlme7J8X/sHyJjCpFn3sI1Rn552oaYM3LswjW32/W2dPziNakTtdTj54Z/qlu6gHzbr6nHj5uee29gerubBwUFuT9YYKCcOnVKPKlgwYKmfdCoUaOkRo0aZlwf7fm1fv16qVy5ssvXjB07VqKjo1OsP3funAmePJnR2p5IAx4ifPLMG7jGyC9Pizl2xuPHBFKz7ehlOXrytOQPdh8/ZITef70S7JQpU0Z27tzpNsjYvn27hIeHi6dpW50+ffqY8+fOnVvq168vPXv2lM2bN7vcf+jQoTJw4ECnkh3tKl+kSBGXVXCZuRFpQ2w9LsEOeeYNXGPkl6dFhGvZzf5b7vdJZANpVLGox89vhe/k+fPnpXDhwvzu30JcfII0GrPCPNb7ZIGQPOJJWsCS5n3Tc+AOHTrI8OHDpV27dimqlbRtzYgRI+SBBx4QT9PRmLWr+5UrV0zgogHVI488IhERES731xnYXc3CrgGJp4MSDXa8cVwrI8/IL64v37kropiEh4aYxsiuWlJom51SoSF0Q08l2InPE2hu3Pzupy4g4O+aFG/cJ9NzvHSdediwYXL27FmpWrWqjB8/3jQa1kXb8VSrVs1se+2118RbdLBCDXS0OmrJkiXSpUsXr50LAKxIx9EZ0ammeZx8RB37c93OeDuwknSV7Gh7mXXr1km/fv1MVZG9hbX+T71t27YyceJEs4+naWCj59KAat++fTJ48GAz0/qTTz7p8XMBgNW1qx0uk3rXN72yHBsra4mOBjq6HfDrEZR1YL8ff/zRlK5o4KFBSJUqVUx9nLfoGD4aXP31119StGhRefjhh2X06NGpNpYGALinAc39NUvJhpjTptFyRHiYqeKiRAdWlKHpIpQGN3feeadkBZ1UVBcAgOdoYNM4IkyqFs5l/iMZwFQRsCha1QIAAEsj2AEAAJZGsAMAACyNYAcAAFgawQ4AALA0gh0AAGBpBDsAAMDSCHYAAIClEewAAABLI9gBAACWRrADAAAsjWAHAABYGsEOAACwNIIdAABgaQQ7AADA0gh2AACApRHsAAAASyPYAQAAlkawAwAALI1gBwAAWBrBDgAAsDSCHQAAYGkEOwAAwNIIdgAAgKUR7AAAAEsj2AEAAJZGsAMAACyNYAcAAFgawQ4AALA0gh0AAGBpBDsAAMDSCHYAAIClEewAAABLI9gBAACWRrADAAAsjWAHAABYGsEOAADwuIREW9LjjbFnnZ5ntWwf7CQkJMjw4cOlYsWKkjdvXqlUqZKMGjVKbDbfZRoAAHBv8c5j0nrC6qTnfWZulubjVpj1vhAo2dy4ceNk0qRJMnPmTKlVq5Zs2rRJnnzySQkNDZUXX3zR18kDAAAONKDp9/kWSV4kcfzCNbN+Uu/60q52uGSlbB/srFu3Trp06SIdO3Y0zytUqCBffPGFbNy40ddJAwAADrSqKnr+rhSBjtJ1uUTM9vtrlpLcAfosa2T7YKdp06YydepU2bNnj1StWlW2bdsmv/zyi0yYMMHta65fv24Wu4sXL5q/iYmJZvEUPZZWp3nymFZHnpFfXF/ZC99J8suTNsSckWMXrrndrgGPbt8Qc1oaR4Rl6lzpufdm+2BnyJAhJlipXr265M6d27ThGT16tPTq1cvta8aOHSvR0dEp1p87d05u3rzpsbRpRl+6dMkEPAEB2b75U7ZAnpFfXF/ZC99J8suTYo6dSfN+VQtnrmRH77+WCXa+/vprmTVrlsyePdu02dm6dasMGDBASpcuLZGRkS5fM3ToUBk4cGDScw2WypYtK0WKFJFChQp59EciV65c5rgEO+SZN3CNkV/exjVGfnlSRLiW3exPw35hUrRo0UydKzAw0DrBzuDBg03pTo8ePczzOnXqyMGDB03pjbtgJzg42CzJaUDi6aBEgx1vHNfKyDPyi+sre+E7SX55yl0RxSQ8NMQ0RnbVbkfLckqFhpj9AjLZZic9991sf4eOi4tL8Ya0Oot2MgAAZC+5A3LJiE41zePkoYz9uW7PysbJOSLY6dSpk2mjs3DhQjlw4IB8//33pnHyQw895OukAQCAZLRbuXYv1xIcR/rcF93Oc0Q11gcffGAGFXzuuefk5MmTpq3OM888I6+//rqvkwYAAFzQgEa7l2uvK22MrG10tOoqq0t0ckywU7BgQXn33XfNAgAAcobcAblM93LtdaWNkTPbRsfS1VgAAACZQbADAAAsjWAHAABYGsEOAACwtGzfQNkTdDoHxzmyPD3Muo7iyKCC5Jk3cI2RX97GNUZ+5dTry35Pt9/jxd+DHfv8GTplBAAAsNY9PjQ0NNV9ctnSEhJZILI8evSo6cauw6J7in3OrcOHD3t0zi0rI8/IL66v7IXvJPmVU68vDV800NHx925VauQXJTuaCbfddpvXjq8fIMEOeeZNXGPkl7dxjZFfOfH6ulWJjh0NlAEAgKUR7AAAAEsj2MmE4OBgGTFihPkL8swbuMbIL2/jGiO//OH68osGygAAwH9RsgMAACyNYAcAAFgawQ4AALA0gh0AAGBpBDtp9Oabb5rRlwcMGJDqft98841Ur15dQkJCpE6dOvLjjz+Kv0pLns2YMcPs47ho3vmDqKioFO9dr53U+Pv1ld488+fry+7IkSPSu3dvCQsLk7x585rrZtOmTam+ZtWqVVK/fn3Tg6Zy5comH/1FevNL8yr5NabL8ePHxR9UqFDB5ft//vnns9XvmF+MoJxZv/32m0yZMkVuv/32VPdbt26d9OzZU8aOHSsPPPCAzJ49Wx588EHZsmWL1K5dW/xJWvNM6aiau3fvTnruySk9srtatWrJ8uXLk57rZHnucH2lP8/8/fo6d+6cNGvWTFq1aiWLFi2S4sWLy969e6VIkSJuXxMbGysdO3aUZ599VmbNmiU//fSTPP300xIeHi5t27YVK8tIftnpNeY4QnCJEiXEX37rExISkp7v3LlT7r//funWrVv2+h3Trudw79KlS7YqVarYli1bZmvRooWtf//+bvft3r27rWPHjk7r7rrrLtszzzzjV1mcnjybPn26LTQ01OaPRowYYatbt26a9+f6Sn+e+fP1pV599VVb8+bN0/WaV155xVarVi2ndY888oitbdu2NqvLSH6tXLlSh2+xnTt3zmvpykn69+9vq1Spki0xMTFb/Y5RjXULWhSn/8tp3br1LQPH9evXp9hP/yek6/1JevJMXb58WcqXL28mi+vSpYv88ccf4i/0f406iV1ERIT06tVLDh065HZfrq/055m/X1/z5s2Thg0bmv9la0nDHXfcIdOmTUv1Nf58nWUkv+zq1atnSr+0VGPt2rXij+Lj4+Xzzz+XPn36uC1B9dX1RbCTii+//NIUrWlxW1poHW3JkiWd1ulzf6m7zUieVatWTT755BP54YcfzJdEZ6hv2rSp/PXXX2J1d911l2kLsXjxYpk0aZKpPrj77rvNLL6ucH2lP8/8+fpSMTExJp+qVKkiS5YskX79+smLL74oM2fOdPsad9eZzl599epVsbKM5JcGOJMnT5bvvvvOLBpUt2zZ0vwO+pu5c+fK+fPn5YknnnC7j89+x7xabpSDHTp0yFaiRAnbtm3bktbdqkomKCjINnv2bKd1EydONMfxBxnJs+Ti4+NNEeiwYcNs/kaLwQsVKmT76KOPXG739+srI3nm79eXXjNNmjRxWvfCCy/YGjdu7PY1WgU9ZswYp3ULFy40VTVx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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAFaCAYAAAD4lpw5AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvctoD+AAAAAlwSFlzAAAPYQAAD2EBqD+naQAAPvNJREFUeJzt3Qu8jOX+//8PlkPlsJxCyHFLco6QpERRybbTrkTkUKld0a79TZG07ah2p10SpSSU1E6o6OCUJEIHJOVQyXk557zcv8f7+v9n7VlrzazjjFnrntfz8ZjHmrnnvu+51zX3zP2Z6/pc11XA8zzPAAAAfKpgrA8AAAAgmgh2AACArxHsAAAAXyPYAQAAvkawAwAAfI1gBwAA+BrBDgAA8DWCHQAA4GsEOwAAwNcSYn0AQH7Wo0ePsM89++yzVq5cuVN6PP/5z3/s119/tX//+99Z3ubgwYP25ptv2tq1a+3QoUNWs2ZNu/zyy61Ro0Zht9m4caMNHTrUTj/9dHvppZesYMH0v5tWr15tI0eOtD59+li7du1C7iewTrBSpUpZjRo17MYbb7TKlStnuL5et0yZMtaqVSv7y1/+YoULF870/z1+/Lh9+umnNnPmTNu/f78NHz7catWqZdlx4MABu+OOO+xvf/ubtWjRIux6+/btsylTpthPP/1khw8fdq/TqVMnO++888Ju88MPP9i//vUvS0xMtBdeeCHkOsuXL7dnnnnGHcOFF16Y4ToBBQoUcGWr9/emm26yChUqZLh+oUKFrGzZsta6dWvr0qWLJSRkfrn4/PPPbcGCBe4c1Hun971NmzaZbgdEGzU7QC5MnjzZ1q1bZx07dkx3O+2000552S5cuNCmT5+e5fXnzp1r1apVcxc5BWZNmzZ1F9vmzZtb165dw243btw4FyC9/PLLLnAIZevWrSnlE05gnSJFiqSU2znnnGPvv/++uyhPmzYtw/UDQVSvXr2sZcuWLnjJyKxZs6xq1aouKPztt9/cvnbu3GnZ9dFHH7kgpnr16mHX+eCDD1zZKhhUYNGkSRP79ttvXRDZs2fPsNu9+OKLrmxHjx5tixcvDrlO4Ng3bNgQdj+BdUqWLOnK6oorrrDatWvb1KlT3XHr+DJa/5JLLrFjx465oLNt27YuEA7n5MmTdu6557rX+P33361Zs2a2e/du69Chg11//fV24sSJsNsCp4TmxgKQM/oIXXvttXmm+HQstWrVytK6ycnJXtWqVb06dep4hw4dSvXcsmXLvHbt2oXc7vjx417FihW9fv36uW27desWcr1PPvnElc+YMWPCHkO4dY4dO+bVrFnTq1atWpbWHz9+vFv+6KOPZvg/b9q0yUtKSnL3n3zySbfNl19+6WVX9+7dvVatWoV9Xsdfrlw5r2HDht7Ro0dTPbdo0SKvU6dOIbc7fPiwl5iY6N19991elSpVvN69e4dc77333nPH/sYbb4Q9hnDr6DUqVarknXfeeVla/7nnnnPLn3766bCvpXOifv363rp161Itf/PNN922o0ePDrstcCpQswNE0ZIlS1xTl6r11Uz04IMP2s033+yaN0R/1VRx66232oABA2z8+PGuuSPYU089ZYMHD3b333vvPbfewIED0/3qf/jhh23ZsmW2fft295qBm351h7Jjxw73a/7iiy9OVwulX+bvvPNO2NqRbdu22Z133mm33367q4XJSe1IRtQc9ac//SnL+73qqqvc36VLl2a4nmpa1OyVG6ql+PDDD13TTji//PKL7dq1y9U8qRYqmJqFVIMSispc54Sax3ROvP3225nWVmVXsWLFXK1ZJMtWTV5qwtJ7FuzPf/6z+zt//vxcHTOQWwQ7QBRt2rTJXdj++9//uvyKM888044cOeICGuWfqOpfzRW6SFSpUsXljzRu3Ng1BQTMmzfP5Zco4Jk9e7Y1bNjQNV8oF0KPA5S3ouaSM844I1VzmnI1QilfvrzLufn6669DNjOULl065HZqutJr6ThvueUWl8vx+uuvWyTp/9fFNav5HoEmllPRdKiclL1796ZcyENRvorKRcFnqGAzo7Jt3769Ox/69+/v8ovUXBZJyrdSc1oky1bnmHKM0lq/fr37q6YxIJZIUAZySRe0tInKl112mQsEApRH88knn7gai7vuusuSk5PdL2b9Iv7qq69SLgbapm7duq7GRAFO8AVKF9BAcq6eV7Ch4EgBjSjxVTVDypXIKHE6QK/92GOPuVqiBg0auNyMCy64wN3C1X5s3rzZBViB4EYXOG33yiuv2H333Wc59dprr9miRYvc/T179rhagquvvtoleWdGrYlPP/20u3/llVdatM2YMcPlFekWjgKDRx55xIYMGeJydFRG559/vktmDhUUiHKblHOl2jupWLGiy5tS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pzbYKVy4sI0fP94effRR++abb9zM55oUlLmxAACAL4KdO+64w/r06WPNmjUjwAEAAP7L2Vm9erU1b97cGjZsaM8++6zt2rUr8kcGAAAQq2BnwYIF9tNPP1nnzp3tqaeecrU71113nX300UcpOTwAAAD5erqI2rVr27/+9S/75ZdfbPr06W6ZBho8++yz3USgW7ZsieRxAgAAxGZurMOHD9v27dvdLTk52erWreu6pNeoUcMmTJiQ290DAADEJthZvHix9evXzypVqmQPPfSQXXzxxfbzzz/bp59+at999529/vrrdv/99+fu6AAAAGLRG0u1N+vXr7crr7zSJk+e7P4WKlQo1TrXX3+99ejRI7fHBwAAcOqDncAIyqrVCUdj75w4ccJyy/M8mzJlis2ZM8eN1tyyZUu755577Iwzzsj1vgEgniWf9FLuL92429qeU8EKFSwQ02MC8kwz1oMPPphhoBNJt912m913333WunVr69Wrl82dO9c6dOjg8oMAADkze9VWa//0gpTHfV5fbhc9PtctB+I62NHkn1dffXXY56+66qqQE4TmlJKeX375ZXv++edd0HPttde6Obg0zs9bb70VsdcBgHiigGbApBW2ff/RVMu37TvilhPwIK6bsZ544gmXlByOntM606ZNi1iwI9WrV09Zpuar8uXLuzF9brrppoi8DgDEU9PV8Jlr7H8NWP+jZWrEemTGGmtduxxNWiFoLLnDx5Lt0LETbk5IZF5eSkfJV8HO0qVL3YjJ4WhU5UGDBlmknHPOOVa2bFnXhf388893eUDz58+3jRs3WoUKFcJud/ToUXcL2L9/f0qhR3rQw8AbyWCKlFc0cH5RXpH21YYk27rvSNjndVnatv+INXjk44i/NuJTo7OK2zsDLoz4frNz3c1WsLN161ZXqxKOntM6kVK0aFF78803Xa6OanIU+Chwadu2rR08eDDsdiNHjrThw4enW75nz56IJE2nLewDBw64gIcon/KKNM4vyivSNmxNivg+gYx8u+Wgbdmxy84oWtgiSdfeqAQ7FStWtDVr1ljjxo1DPv/DDz9EPHFZyciqyVm7dq0bwLBp06YuN0jHEs7gwYPt3nvvTXmsAKlq1apWunRpK1myZMQvRqpx0r4JdiivSOP8orwirWYl1d2sz3S9V3udbxfUKBPx1/fDZ1I9gxMTE/nOz8ShY8l2wWNz3X1dI4sXK2KRlJCQEJ1gp2PHjq7G5N133033JusEeOSRR9w6kaYankaNGrn7+/btcwMaPvbYYxmur1taOuZoBCQKdqK1bz+ivCgvzq/YaVGznFUqVcwlI4fKpFDOTsVSxeiGHoaudceKJLgLN9/5GStY8H8tKdG4RmZnf9kKdjTnVZMmTVz+zMCBA11OjZpv1q1b53J5Nm/ebCtWrLBImjlzput2XqZMGTt+/LjdddddrrmsT58+EX0dAIgHGkdnWOd6rteVApvggCcwwo6eZ7wd+Em2gh1N8rlw4ULX66p3796pnmvVqpV7Ts1FkXTaaadZs2bNXLOVmrPOOuss+/jjj61EiRIRfR0AiBcd61eyMT2aul5ZwcnKqtFRoKPngbgeQfm8886zL7/80gUeqtFRk8Sf/vQnN/FnNLRv397lCX377beujVS1SQCA3FFA06FeRftqwy6XtFyzUlnXxEWNDvwoR9NFiIKbaAU4aRUrVsxatGhxSl4LAOKFApuWNctancQCLlWgIFNFwKfIqAUAAL5GsAMAAHyNYAcAAPgawQ4AAPA1gh0AAOBrBDsAAMDXCHYAAICvEewAAABfI9gBAAC+RrADAAB8jWAHAAD4GsEOAADwNYIdAADgawQ7AADA1wh2AACArxHsAAAAXyPYAQAAvkawAwAAfI1gBwAA+BrBDgAA8DWCHQAA4GsEOwAAwNcIdgAAgK8R7AAAAF8j2AEAAL5GsAMAAHyNYAcAAPgawQ4AAPA1gh0AAOBrBDsAAMDXCHYAAICvEewAAABfI9gBAAC+RrADAAB8jWAHAAD4Wr4Jdo4ePWrbt2+3kydPxvpQAABAPpLng51NmzZZ+/btrVSpUtawYUMrUaKE3XPPPZacnBzrQwMAAGEkn/RS7i/duDvV41Mtzwc7/fv3t8OHD7taHd0+//xze+WVV2zs2LGxPjQAABDC7FVbrf3TC1Ie93l9uV30+Fy3PBbyfLCzfv1669Chg6vZkaZNm1rt2rXdcgAAkLfMXrXVBkxaYdv3H021fNu+I255LAKePB/sDBo0yCZMmGBz5syxtWvX2n/+8x/bsmWL9enTJ9aHBgAAgqipavjMNRaqwSqwTM+f6iatBMvjFNR88cUXdvXVV1vp0qVt//799swzz9h5552XYTKzbgHaRpTcHOkEZ+3P8zwSpymvqOD8oryijXOM8oqkrzYk2dZ9R8I+rxBHz3+1YZe1rFk2V6+Vnet5ng92rrnmGvcP7dixwwU7K1eutEsvvdQFGHfccUfIbUaOHGnDhw9Pt3zPnj124sSJiB6fju3AgQPueAoWzPMVZTFHeVFenF95C59JyiuSNmxNyvJ6dRIL5Oq1dO3NqgKertJ51NatW+2ss86ymTNnupqdgH79+tmqVatsyZIlWa7ZqVq1qgt2SpYsGfEvCu1XgRjBDuUVaZxflFe0cY5RXpG0ZEOSdX9laabrTel3Qa5rdnRt17V33759mV7b83TNjrqZFyhQwPbu3ZtqeWZBS9GiRd0tLQUj0QhIdIzR2rcfUV6UF+dX3sJnkvKKlBY1y1mlUsVcMnKomhTV5VQsVcytV7Bg7mp2snPNzdPBTvHixe3aa6+1IUOGWGJiotWsWdM+/vhjmz59uk2cODHWhwcAAIIUKljAhnWu53pdKZQJDngCoY2e13qnUp4OdkQ9sZ5++mkbNWqUJSUlWbVq1eztt992QRAAAMhbOtavZGN6NHW9roKTlVWjo0BHz59qeT7YOeOMM2zo0KHuBgAA8r6O9StZh3oVXa8rJSPXrFTWNV2d6hqdfBPsAACA/KdQwQIuCVm9rsqUKZPrHJ3cIKMWAAD4GsEOAADwNYIdAADga3GRsxMYNzEwbUQ0Rh9NSEhgnB3Ki/Mrxvg8UmacY/Hzmdz//1/TszI2clwEO4EhpTWKMgAA8Nc1vlSpUvl3uohIRpaaKT0wInMkBaai+O233yI+FYUfUV6UF+dX3sJnkvLKr+eXwhcFOppWKrNao7io2VEhVKlSJaqvoTeRYIfy4vzKG/g8UmacY/HxmSyVSY1OAAnKAADA1wh2AACArxHs5JJmVx82bFjIWdZBeXF+nVp8HikzzrG8pWgeuUbGRYIyAACIX9TsAAAAXyPYAQAAvkawAwAAfC0uxtmJhJ9++sm2b99uTZo0sTPOOCPDdZOTk23VqlVWqFAhq1evXlxOI7F7925bs2aNnX322e4Wzrp162zHjh2plmkshoYNG5rfJSUl2Q8//JBueYsWLaxw4cIZbrtnzx5bv369VapUySpXrmzxYtGiRemW1apVy5VDJLfxm+PHj7tzLTExMcPPY7CNGze6z3HdunUz/c7zow0bNtgff/zhvsP1XR7Orl27bO3atemWt2zZ0k2R4Gc7duxw3+GhZHatPHHihLtOFilSxM4999yID/ibjhKUkbGff/7ZS0xMVCK3t3LlygzXXbZsmXf22Wd7VapU8SpUqODVrl3bW716dVwVcXJysnfJJZd4BQsW9B566KEM173pppu8M88802vdunXK7dZbb/XiwbRp07xChQql+t91S0pKynC7UaNGecWKFfPOPfdc97d79+7esWPHvHigz2D9+vVTlde7774b8W385LXXXvPKlCnj1alTx6tbt6735z//2Ttw4EDY9fft2+e1b9/eK168uNtGfydOnOjFi1WrVnlNmjTxypcv751//vnuc/b111+HXf/NN9/0EhIS0n2O9+7d6/ndhx9+mO7/1rWvQIEC3ubNm8Nut2jRIq9SpUruWqlyrlevnrvORhPBTiaOHj3qNWvWzPu///u/TIMdrVutWjWvb9++KRf9rl27euedd5538uRJL14MHz7cu/baa71atWplKdjp1auXF48U7JQqVSpb23z66acuiNRf2bhxo1euXDnvX//6lxcP9Bn85JNPor6NX7z33nsuoP7vf/+bsmzmzJnepk2bwm7Tr18/75xzzvF2797tHr/88svuYv7jjz96frdr1y73I7VPnz4pPyBUVrNmzcow2ClbtuwpPMq87cILL/Q6dOgQ9vmDBw96FStW9O6++273+MSJE94VV1zhNW/ePKrHFX/tK9n0wAMPuGrcG264IdN1P/vsM/vll19syJAh7rGarx566CFbvXq1ffXVVxYPPv/8cxs/fryNGzcuy9scPnzYli9f7qrNNY9ZPNG1WM19qs49cuRIpuu/+uqrduGFF9pll13mHlevXt169OjhlseLrVu3uvNFTSzR3MYPHn74Ybv++uuta9euKcuuvvpqq1atWsj1jx49alOmTLG77rrLSpcu7Zb17dvXzjzzTJs4caL53ejRo10ZPP/88ylNySqrq666KsufY20fr9auXWuLFy+2/v37h13nww8/dM1fujaKmggHDx5sy5Ytc+UXLQQ7GdCbMn36dPcByIqVK1da2bJl3QUooGnTpu7N1HN+pwuJLrwKdsqUKZPl7d577z3r06ePNW/e3GrXrm1z5861eJokr0uXLu6mMnvssccyXF/n0fnnn59q2QUXXODydzQhXjwYNGiQO180+d+f//xn27lzZ1S2ye/0P37//ffWuXNnl+Ol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9ZWbk+bCCy+0kiVLpmqOmj59unXq1MnNuK4ZsTV7fWAupVWrVtn69evt3HPPtTp16oTc/88//+y206zijRo1CrlvNTmtXbvWGjdu7I5bfv31V1u5cqWb/6tp06Z2xhlnZPj/aqabJUuWuBmUGzZsGHa97O539+7drkZM87NpDi2Vz5YtW1yZHT582DXXiV5T8x/NmzfPPT7ttNNcmahsAsJtV7VqVVcOaal8f/rpJ6tQoYK1aNEi1RxxKneVWceOHe27775zZajyC56bL9zxA/GOYAfwiUGDBtmwYcNs3LhxYWsg9NzAgQPtggsusD/++MMFJlOnTrXLL788VXOUJjPcuXOnq4HQBJKazPbgwYO2YsUKd3GdO3eum8ivf//+qfb/j3/8w3788Uf705/+5CZU1ASKL730Uqp9X3XVVW7iQAVCpUuXdsHOvffe6yYFbNWqlbtYqzlMkynqgh/K8ePH7ZprrnFNV/pfvv/+ezehZVrZ3e/MmTPdMSu406SGCjw0sa8mZNX/rqBFAZsULVrU/Z+BxypPTTLaoUMHNzmkJiVVYBlqO6173333WZcuXdyy5ORku+GGG+zTTz+1li1buqBHE8LOnj3bBT7yySef2MMPP2y1a9d2k1BqgkUFe1OmTLGuXbtmePyB9xeIW1GdUx3AKVGoUCHvjTfe8J588kmvQoUK3oEDB9zy2267zbvsssvc/U2bNnlFixb1JkyYkLLdfffd51WuXNn7448/3OOtW7dqYmCvZ8+e3smTJ92y1157zS3r169fyrLnn3/eK1++fMp+AttdfPHF3pEjR9yylStXegkJCd7HH3+cap0uXbp4J06cSNn21Vdf9apXr+7t2LEjZdmoUaO82rVrh/1/R48e7V7/999/d4+TkpK8GjVqeKVKlcrVflu2bOk9+uijKY/37NnjzZ07N6UcVFYZ2bVrl1elShXvrbfeSlkWaju9V3qfAl566SUvMTHR27hxo3us969JkybeLbfckrLOmDFjXPkF7/uBBx7w6tWrl6XjB+IZOTuAj9x1112u5uCpp55K95xqFlRbcPPNN6cse+ihh1xziGphgqnGRjUToloRufXWW1MtU82PamuC3X333e71RU0sqlFQ8nQw1ToFN8+89tprrmlHuS3Tpk1z66upSbVO4RKetc5NN91kZ511lnusJqq0tUw52a+aolQbopoYSUxMtEsvvdQycuLECVfDop5gqn1RE9XSpUstO9TEpbwr1aRJ8eLF7Z577nG1bsFUE3b99denPL7kkkvc8apJL6fHD8QDmrEAH1Gg8eijj9rf/vY3u/3229N1d65Ro0ZKwBK4GCrvRM+lvagG7zPcMuXhBAtcrAP0emqyClapUqVUjzdt2uSayNImV+uiruaqcHk4gaab4NfK7X6fe+45FzSp2Ur5TJ07d3ZBXuD/TWv16tUu90bP161b1wVTW7dutR07dlh2qPyvvvrqVMtq1aplhw4dckGljicQ1AXT6+p/UTOY8rSye/xAvCDYAXymZ8+ermZHQU8w1eoobyWYLpIaG0fPRYKShdM+Trvv4GBLlECrGoqnn346y6+jAC3Ua+V2vw0aNHC1NNu2bXO5SipDdRNPWzsVMHToULvoootc3kyAgpZATUtWhXpv9Fg1YApIo3X8QLygGQvwGSWujhw50iUjq8kmoE2bNq6XlG7BTVtaX712IiGQhCtKwp0zZ461bt06w23Uu0gJvWkHJFTzWjgKMDR2TXBQkXZAwZzsN/BcxYoVXTOZkrkVPASaltLWZCmoUI1OgGp0FFwEC7VdqP9HgwyePHkyZZma3pRIrWTkrMro+IF4Rs0O4EPq8aQgQ7/uL7vsspRgp1u3bi4IUC8lBSOjRo2yBx54IF335ZwK1CDUr1/f5cyoxkI9uTIyZMgQl+uigEtNLmoKUs6LenWpd1Mo6vU1adIkV4uiHk36P7/55ptc71djFan7uHKSFKA888wzbpmoh5NylIYPH27nnHOOywdSN3+V4emnn+6ail544QUXPAYLtV1aGjJA+Tl6b/Qeqbu6mt/U6y07Mjp+IJ4R7AA+oDyUtPkyar554oknXNNGgJpbFCQsXLjQ1RjovrpwByjBVfsKbjpRkKBlJUqUSFmm57VM6wdvp67RH374oesSrgt3cMJyqH0H9qWL++TJk+3LL79067dr187VTIWjvB+9xujRo92YMmquUi2GBlHMzX6VzKzaIAVDKh81BwZyg5RD89FHH7naK413o/3df//9Lklao1Rr3CKtr+Tn4BqaUNulHVRQQaHGAtKxKVlcNTPLly9P1Z1eXc7T5vWceeaZrkwDAVZGxw/EswLqkhXrgwAAAIgWcnYAAICvEewAAABfI9gBAAC+RrADAAB8jWAHAAD4GsEOAADwNYIdAADgawQ7AADA1wh2AACArxHsAAAAXyPYAQAAvkawAwAAzM/+Hze25m8w46WUAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -960,10 +960,10 @@ "id": "8e4bf7c5", "metadata": { "papermill": { - "duration": 0.004212, - "end_time": "2026-09-01T18:55:20.620153+00:00", + "duration": 0.002026, + "end_time": "2026-10-05T00:05:22.277314+00:00", "exception": false, - "start_time": "2026-09-01T18:55:20.615941+00:00", + "start_time": "2026-10-05T00:05:22.275288+00:00", "status": "completed" }, "tags": [] @@ -990,10 +990,10 @@ "id": "995aefa8", "metadata": { "papermill": { - "duration": 0.004028, - "end_time": "2026-09-01T18:55:20.628512+00:00", + "duration": 0.002056, + "end_time": "2026-10-05T00:05:22.281420+00:00", "exception": false, - "start_time": "2026-09-01T18:55:20.624484+00:00", + "start_time": "2026-10-05T00:05:22.279364+00:00", "status": "completed" }, "tags": [] @@ -1030,16 +1030,16 @@ "id": "f617b8f5", "metadata": { "execution": { - "iopub.execute_input": "2026-09-01T18:55:20.636214Z", - "iopub.status.busy": "2026-09-01T18:55:20.635768Z", - "iopub.status.idle": "2026-09-01T18:55:20.689534Z", - "shell.execute_reply": "2026-09-01T18:55:20.688606Z" + "iopub.execute_input": "2026-10-05T00:05:22.286648Z", + "iopub.status.busy": "2026-10-05T00:05:22.286386Z", + "iopub.status.idle": "2026-10-05T00:05:22.324461Z", + "shell.execute_reply": "2026-10-05T00:05:22.323780Z" }, "papermill": { - "duration": 0.058619, - "end_time": "2026-09-01T18:55:20.690331+00:00", + "duration": 0.041812, + "end_time": "2026-10-05T00:05:22.325236+00:00", "exception": false, - "start_time": "2026-09-01T18:55:20.631712+00:00", + "start_time": "2026-10-05T00:05:22.283424+00:00", "status": "completed" }, "tags": [] @@ -1122,10 +1122,10 @@ "id": "3c1e5f8b", "metadata": { "papermill": { - "duration": 0.005467, - "end_time": "2026-09-01T18:55:20.701009+00:00", + "duration": 0.002088, + "end_time": "2026-10-05T00:05:22.329642+00:00", "exception": false, - "start_time": "2026-09-01T18:55:20.695542+00:00", + "start_time": "2026-10-05T00:05:22.327554+00:00", "status": "completed" }, "tags": [] @@ -1150,10 +1150,10 @@ "id": "a6f3e1ca", "metadata": { "papermill": { - "duration": 0.004728, - "end_time": "2026-09-01T18:55:20.709750+00:00", + "duration": 0.002866, + "end_time": "2026-10-05T00:05:22.334599+00:00", "exception": false, - "start_time": "2026-09-01T18:55:20.705022+00:00", + "start_time": "2026-10-05T00:05:22.331733+00:00", "status": "completed" }, "tags": [] @@ -1182,16 +1182,16 @@ "id": "8ed7e849", "metadata": { "execution": { - "iopub.execute_input": "2026-09-01T18:55:20.719333Z", - "iopub.status.busy": "2026-09-01T18:55:20.719123Z", - "iopub.status.idle": "2026-09-01T18:55:20.724875Z", - "shell.execute_reply": "2026-09-01T18:55:20.723650Z" + "iopub.execute_input": "2026-10-05T00:05:22.339701Z", + "iopub.status.busy": "2026-10-05T00:05:22.339465Z", + "iopub.status.idle": "2026-10-05T00:05:22.342326Z", + "shell.execute_reply": "2026-10-05T00:05:22.341865Z" }, "papermill": { - "duration": 0.011283, - "end_time": "2026-09-01T18:55:20.726289+00:00", + "duration": 0.006222, + "end_time": "2026-10-05T00:05:22.342916+00:00", "exception": false, - "start_time": "2026-09-01T18:55:20.715006+00:00", + "start_time": "2026-10-05T00:05:22.336694+00:00", "status": "completed" }, "tags": [] @@ -1219,10 +1219,10 @@ "id": "e1735a96", "metadata": { "papermill": { - "duration": 0.004653, - "end_time": "2026-09-01T18:55:20.737892+00:00", + "duration": 0.002037, + "end_time": "2026-10-05T00:05:22.347061+00:00", "exception": false, - "start_time": "2026-09-01T18:55:20.733239+00:00", + "start_time": "2026-10-05T00:05:22.345024+00:00", "status": "completed" }, "tags": [] @@ -1253,16 +1253,16 @@ "id": "f6127e7f", "metadata": { "execution": { - "iopub.execute_input": "2026-09-01T18:55:20.752207Z", - "iopub.status.busy": "2026-09-01T18:55:20.751798Z", - "iopub.status.idle": "2026-09-01T18:55:20.757686Z", - "shell.execute_reply": "2026-09-01T18:55:20.756913Z" + "iopub.execute_input": "2026-10-05T00:05:22.352132Z", + "iopub.status.busy": "2026-10-05T00:05:22.351933Z", + "iopub.status.idle": "2026-10-05T00:05:22.355919Z", + "shell.execute_reply": "2026-10-05T00:05:22.355318Z" }, "papermill": { - "duration": 0.012839, - "end_time": "2026-09-01T18:55:20.758559+00:00", + "duration": 0.00705, + "end_time": "2026-10-05T00:05:22.356387+00:00", "exception": false, - "start_time": "2026-09-01T18:55:20.745720+00:00", + "start_time": "2026-10-05T00:05:22.349337+00:00", "status": "completed" }, "tags": [] @@ -1290,10 +1290,10 @@ "id": "7bd8b295", "metadata": { "papermill": { - "duration": 0.003026, - "end_time": "2026-09-01T18:55:20.767952+00:00", + "duration": 0.00213, + "end_time": "2026-10-05T00:05:22.360715+00:00", "exception": false, - "start_time": "2026-09-01T18:55:20.764926+00:00", + "start_time": "2026-10-05T00:05:22.358585+00:00", "status": "completed" }, "tags": [] @@ -1324,16 +1324,16 @@ "id": "6a95135e", "metadata": { "execution": { - "iopub.execute_input": "2026-09-01T18:55:20.775382Z", - "iopub.status.busy": "2026-09-01T18:55:20.775039Z", - "iopub.status.idle": "2026-09-01T18:55:20.779801Z", - "shell.execute_reply": "2026-09-01T18:55:20.778957Z" + "iopub.execute_input": "2026-10-05T00:05:22.366508Z", + "iopub.status.busy": "2026-10-05T00:05:22.366324Z", + "iopub.status.idle": "2026-10-05T00:05:22.369320Z", + "shell.execute_reply": "2026-10-05T00:05:22.368749Z" }, "papermill": { - "duration": 0.009934, - "end_time": "2026-09-01T18:55:20.780948+00:00", + "duration": 0.006703, + "end_time": "2026-10-05T00:05:22.369833+00:00", "exception": false, - "start_time": "2026-09-01T18:55:20.771014+00:00", + "start_time": "2026-10-05T00:05:22.363130+00:00", "status": "completed" }, "tags": [] @@ -1360,10 +1360,10 @@ "id": "0558298f", "metadata": { "papermill": { - "duration": 0.005698, - "end_time": "2026-09-01T18:55:20.790640+00:00", + "duration": 0.002423, + "end_time": "2026-10-05T00:05:22.374788+00:00", "exception": false, - "start_time": "2026-09-01T18:55:20.784942+00:00", + "start_time": "2026-10-05T00:05:22.372365+00:00", "status": "completed" }, "tags": [] @@ -1383,10 +1383,10 @@ "id": "6eba71e6", "metadata": { "papermill": { - "duration": 0.005723, - "end_time": "2026-09-01T18:55:20.800089+00:00", + "duration": 0.002434, + "end_time": "2026-10-05T00:05:22.379756+00:00", "exception": false, - "start_time": "2026-09-01T18:55:20.794366+00:00", + "start_time": "2026-10-05T00:05:22.377322+00:00", "status": "completed" }, "tags": [] @@ -1446,21 +1446,21 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.14" + "version": "3.13.15" }, "papermill": { "default_parameters": {}, - "duration": 16.056003, - "end_time": "2026-09-01T18:55:21.154131+00:00", + "duration": 4.533459, + "end_time": "2026-10-05T00:05:22.615022+00:00", "environment_variables": {}, "exception": null, "input_path": "Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb", - "output_path": "Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb", + "output_path": "Research-07-SALBP-AssemblyLineBalancing-Audit-Python_output.ipynb", "parameters": {}, - "start_time": "2026-09-01T18:55:05.098128+00:00", + "start_time": "2026-10-05T00:05:18.081563+00:00", "version": "2.7.0" } }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb index d22590a1ee..edc30c1484 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb @@ -5,19 +5,19 @@ "id": "1e92f55a", "metadata": { "papermill": { - "duration": 0.007527, - "end_time": "2026-09-06T23:41:08.794454+00:00", + "duration": 0.006523, + "end_time": "2026-10-04T23:59:54.321310+00:00", "exception": false, - "start_time": "2026-09-06T23:41:08.786927+00:00", + "start_time": "2026-10-04T23:59:54.314787+00:00", "status": "completed" }, "tags": [] }, "source": [ - "# App-30 — Ordonnancement d'assemblage orbital\n", + "# Research-08 — Ordonnancement d'assemblage orbital\n", "## Le certificat, pas seulement le chiffre : encodage lexicographique, comparaison appariée, front d'échange\n", "\n", - "**Navigation** : [Index Applications](../README.md) | [Série Search](../../README.md) | [CSP-4 Scheduling](../../Part2-CSP/CSP-4-Scheduling.ipynb) | [App-29 SALBP](Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb)\n", + "**Navigation** : [Index Applications](../README.md) | [Série Search](../../README.md) | [CSP-4 Scheduling](../../Part2-CSP/CSP-4-Scheduling.ipynb) | [Research-07 SALBP](Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb)\n", "\n", "> **Hommage à Gurvan Estable, Joris Bely et Kévin Lubert — projet C4, EPITA SCIA 2026.** Leur projet n'a pas traité l'assemblage orbital comme un ordonnancement d'atelier déguisé. Il a fait descendre la physique dans le modèle : les durées de manœuvre viennent d'un temps de vol de Hohmann réellement calculé, les coûts viennent d'un Δv réellement calculé, et le budget d'ergol contraint les mêmes intervalles que les couloirs orbitaux. Coupler ainsi la décision temporelle et la décision énergétique dans un unique modèle CP-SAT — au lieu de fixer des durées arbitraires — est le geste central de cette distillation.\n", "\n", @@ -44,10 +44,10 @@ "id": "2c2d88fb", "metadata": { "papermill": { - "duration": 0.006232, - "end_time": "2026-09-06T23:41:08.807055+00:00", + "duration": 0.005559, + "end_time": "2026-10-04T23:59:54.336275+00:00", "exception": false, - "start_time": "2026-09-06T23:41:08.800823+00:00", + "start_time": "2026-10-04T23:59:54.330716+00:00", "status": "completed" }, "tags": [] @@ -71,16 +71,16 @@ "id": "9c98b8a8", "metadata": { "execution": { - "iopub.execute_input": "2026-09-06T23:41:08.820498Z", - "iopub.status.busy": "2026-09-06T23:41:08.820040Z", - "iopub.status.idle": "2026-09-06T23:41:12.179193Z", - "shell.execute_reply": "2026-09-06T23:41:12.177152Z" + "iopub.execute_input": "2026-10-04T23:59:54.349880Z", + "iopub.status.busy": "2026-10-04T23:59:54.349603Z", + "iopub.status.idle": "2026-10-04T23:59:57.466476Z", + "shell.execute_reply": "2026-10-04T23:59:57.465911Z" }, "papermill": { - "duration": 3.367609, - "end_time": "2026-09-06T23:41:12.180350+00:00", + "duration": 3.126981, + "end_time": "2026-10-04T23:59:57.466922+00:00", "exception": false, - "start_time": "2026-09-06T23:41:08.812741+00:00", + "start_time": "2026-10-04T23:59:54.339941+00:00", "status": "completed" }, "tags": [] @@ -91,11 +91,11 @@ "output_type": "stream", "text": [ "Environnement de collecte :\n", - " python : 3.13.14\n", + " python : 3.13.15\n", " ortools : 9.15.6755\n", - " pandas : 2.3.3\n", - " matplotlib : 3.10.8\n", - " platform : Windows-11-10.0.26200-SP0\n", + " pandas : 3.0.5\n", + " matplotlib : 3.11.1\n", + " platform : Windows-11-10.0.26300-SP0\n", " slot_seconds : 900\n", " dv_unit_mps : 5.0\n", "\n", @@ -130,7 +130,7 @@ "\n", "DATA_DIR = Path(\"data/app30-orbital-assembly-audit\")\n", "if not DATA_DIR.exists():\n", - " DATA_DIR = Path(\"MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit\")\n", + " DATA_DIR = Path(\"MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit\")\n", "DATA_DIR.mkdir(parents=True, exist_ok=True)\n", "\n", "# --- Constantes canoniques a deux corps ---\n", @@ -206,10 +206,10 @@ "id": "47717d26", "metadata": { "papermill": { - "duration": 0.006025, - "end_time": "2026-09-06T23:41:12.193006+00:00", + "duration": 0.002563, + "end_time": "2026-10-04T23:59:57.471977+00:00", "exception": false, - "start_time": "2026-09-06T23:41:12.186981+00:00", + "start_time": "2026-10-04T23:59:57.469414+00:00", "status": "completed" }, "tags": [] @@ -229,10 +229,10 @@ "id": "ce48f286", "metadata": { "papermill": { - "duration": 0.006144, - "end_time": "2026-09-06T23:41:12.205462+00:00", + "duration": 0.003796, + "end_time": "2026-10-04T23:59:57.478881+00:00", "exception": false, - "start_time": "2026-09-06T23:41:12.199318+00:00", + "start_time": "2026-10-04T23:59:57.475085+00:00", "status": "completed" }, "tags": [] @@ -258,16 +258,16 @@ "id": "560b3f01", "metadata": { "execution": { - "iopub.execute_input": "2026-09-06T23:41:12.237361Z", - "iopub.status.busy": "2026-09-06T23:41:12.236754Z", - "iopub.status.idle": "2026-09-06T23:41:12.254132Z", - "shell.execute_reply": "2026-09-06T23:41:12.252924Z" + "iopub.execute_input": "2026-10-04T23:59:57.487228Z", + "iopub.status.busy": "2026-10-04T23:59:57.486984Z", + "iopub.status.idle": "2026-10-04T23:59:57.498758Z", + "shell.execute_reply": "2026-10-04T23:59:57.497883Z" }, "papermill": { - "duration": 0.043734, - "end_time": "2026-09-06T23:41:12.255143+00:00", + "duration": 0.016746, + "end_time": "2026-10-04T23:59:57.499426+00:00", "exception": false, - "start_time": "2026-09-06T23:41:12.211409+00:00", + "start_time": "2026-10-04T23:59:57.482680+00:00", "status": "completed" }, "tags": [] @@ -374,10 +374,10 @@ "id": "28bcdd40", "metadata": { "papermill": { - "duration": 0.00603, - "end_time": "2026-09-06T23:41:12.267607+00:00", + "duration": 0.002722, + "end_time": "2026-10-04T23:59:57.505656+00:00", "exception": false, - "start_time": "2026-09-06T23:41:12.261577+00:00", + "start_time": "2026-10-04T23:59:57.502934+00:00", "status": "completed" }, "tags": [] @@ -397,10 +397,10 @@ "id": "5b89a9f4", "metadata": { "papermill": { - "duration": 0.013246, - "end_time": "2026-09-06T23:41:12.286798+00:00", + "duration": 0.0022, + "end_time": "2026-10-04T23:59:57.510296+00:00", "exception": false, - "start_time": "2026-09-06T23:41:12.273552+00:00", + "start_time": "2026-10-04T23:59:57.508096+00:00", "status": "completed" }, "tags": [] @@ -427,16 +427,16 @@ "id": "40f809a3", "metadata": { "execution": { - "iopub.execute_input": "2026-09-06T23:41:12.349968Z", - "iopub.status.busy": "2026-09-06T23:41:12.349498Z", - "iopub.status.idle": "2026-09-06T23:41:12.373451Z", - "shell.execute_reply": "2026-09-06T23:41:12.371834Z" + "iopub.execute_input": "2026-10-04T23:59:57.515545Z", + "iopub.status.busy": "2026-10-04T23:59:57.515295Z", + "iopub.status.idle": "2026-10-04T23:59:57.528662Z", + "shell.execute_reply": "2026-10-04T23:59:57.528132Z" }, "papermill": { - "duration": 0.053716, - "end_time": "2026-09-06T23:41:12.374602+00:00", + "duration": 0.016807, + "end_time": "2026-10-04T23:59:57.529268+00:00", "exception": false, - "start_time": "2026-09-06T23:41:12.320886+00:00", + "start_time": "2026-10-04T23:59:57.512461+00:00", "status": "completed" }, "tags": [] @@ -452,13 +452,7 @@ " budget d'ergol 818 u | capacite de debit 94 u/creneau\n", " empreinte d'identite : 9561a6bad9f3485d526b01c678090c09...\n", "\n", - "Les six premieres poussees :\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "Les six premieres poussees :\n", " idx poussee couloir fenetre rapide debit_hi econome debit_lo\n", " 0 M00/transfert 0 [39,130] 4cr/52u 13 8cr/37u 5\n", " 1 M00/amarrage 0 [18,126] 3cr/6u 2 7cr/3u 1\n", @@ -582,10 +576,10 @@ "id": "8d88a1c7", "metadata": { "papermill": { - "duration": 0.00615, - "end_time": "2026-09-06T23:41:12.387008+00:00", + "duration": 0.002183, + "end_time": "2026-10-04T23:59:57.534165+00:00", "exception": false, - "start_time": "2026-09-06T23:41:12.380858+00:00", + "start_time": "2026-10-04T23:59:57.531982+00:00", "status": "completed" }, "tags": [] @@ -603,10 +597,10 @@ "id": "a9b6052d", "metadata": { "papermill": { - "duration": 0.006087, - "end_time": "2026-09-06T23:41:12.399452+00:00", + "duration": 0.002098, + "end_time": "2026-10-04T23:59:57.538415+00:00", "exception": false, - "start_time": "2026-09-06T23:41:12.393365+00:00", + "start_time": "2026-10-04T23:59:57.536317+00:00", "status": "completed" }, "tags": [] @@ -632,16 +626,16 @@ "id": "69a33792", "metadata": { "execution": { - "iopub.execute_input": "2026-09-06T23:41:12.428341Z", - "iopub.status.busy": "2026-09-06T23:41:12.428026Z", - "iopub.status.idle": "2026-09-06T23:41:12.448420Z", - "shell.execute_reply": "2026-09-06T23:41:12.446818Z" + "iopub.execute_input": "2026-10-04T23:59:57.543615Z", + "iopub.status.busy": "2026-10-04T23:59:57.543449Z", + "iopub.status.idle": "2026-10-04T23:59:57.552078Z", + "shell.execute_reply": "2026-10-04T23:59:57.551593Z" }, "papermill": { - "duration": 0.044153, - "end_time": "2026-09-06T23:41:12.449587+00:00", + "duration": 0.012153, + "end_time": "2026-10-04T23:59:57.552737+00:00", "exception": false, - "start_time": "2026-09-06T23:41:12.405434+00:00", + "start_time": "2026-10-04T23:59:57.540584+00:00", "status": "completed" }, "tags": [] @@ -770,10 +764,10 @@ "id": "f93f9639", "metadata": { "papermill": { - "duration": 0.006096, - "end_time": "2026-09-06T23:41:12.462149+00:00", + "duration": 0.002757, + "end_time": "2026-10-04T23:59:57.558080+00:00", "exception": false, - "start_time": "2026-09-06T23:41:12.456053+00:00", + "start_time": "2026-10-04T23:59:57.555323+00:00", "status": "completed" }, "tags": [] @@ -793,10 +787,10 @@ "id": "f7dd28f2", "metadata": { "papermill": { - "duration": 0.020252, - "end_time": "2026-09-06T23:41:12.488600+00:00", + "duration": 0.002218, + "end_time": "2026-10-04T23:59:57.562785+00:00", "exception": false, - "start_time": "2026-09-06T23:41:12.468348+00:00", + "start_time": "2026-10-04T23:59:57.560567+00:00", "status": "completed" }, "tags": [] @@ -823,16 +817,16 @@ "id": "77045a29", "metadata": { "execution": { - "iopub.execute_input": "2026-09-06T23:41:12.533327Z", - "iopub.status.busy": "2026-09-06T23:41:12.532917Z", - "iopub.status.idle": "2026-09-06T23:41:12.560760Z", - "shell.execute_reply": "2026-09-06T23:41:12.559038Z" + "iopub.execute_input": "2026-10-04T23:59:57.568694Z", + "iopub.status.busy": "2026-10-04T23:59:57.568517Z", + "iopub.status.idle": "2026-10-04T23:59:57.581996Z", + "shell.execute_reply": "2026-10-04T23:59:57.581317Z" }, "papermill": { - "duration": 0.051595, - "end_time": "2026-09-06T23:41:12.561937+00:00", + "duration": 0.01735, + "end_time": "2026-10-04T23:59:57.582587+00:00", "exception": false, - "start_time": "2026-09-06T23:41:12.510342+00:00", + "start_time": "2026-10-04T23:59:57.565237+00:00", "status": "completed" }, "tags": [] @@ -1027,10 +1021,10 @@ "id": "192ff934", "metadata": { "papermill": { - "duration": 0.006596, - "end_time": "2026-09-06T23:41:12.575393+00:00", + "duration": 0.002604, + "end_time": "2026-10-04T23:59:57.587994+00:00", "exception": false, - "start_time": "2026-09-06T23:41:12.568797+00:00", + "start_time": "2026-10-04T23:59:57.585390+00:00", "status": "completed" }, "tags": [] @@ -1056,10 +1050,10 @@ "id": "28bf5522", "metadata": { "papermill": { - "duration": 0.006306, - "end_time": "2026-09-06T23:41:12.588787+00:00", + "duration": 0.002534, + "end_time": "2026-10-04T23:59:57.593315+00:00", "exception": false, - "start_time": "2026-09-06T23:41:12.582481+00:00", + "start_time": "2026-10-04T23:59:57.590781+00:00", "status": "completed" }, "tags": [] @@ -1078,16 +1072,16 @@ "id": "55254d17", "metadata": { "execution": { - "iopub.execute_input": "2026-09-06T23:41:12.636456Z", - "iopub.status.busy": "2026-09-06T23:41:12.635929Z", - "iopub.status.idle": "2026-09-06T23:41:17.650372Z", - "shell.execute_reply": "2026-09-06T23:41:17.648457Z" + "iopub.execute_input": "2026-10-04T23:59:57.599544Z", + "iopub.status.busy": "2026-10-04T23:59:57.599374Z", + "iopub.status.idle": "2026-10-04T23:59:59.615005Z", + "shell.execute_reply": "2026-10-04T23:59:59.614433Z" }, "papermill": { - "duration": 5.043842, - "end_time": "2026-09-06T23:41:17.651646+00:00", + "duration": 2.019564, + "end_time": "2026-10-04T23:59:59.615551+00:00", "exception": false, - "start_time": "2026-09-06T23:41:12.607804+00:00", + "start_time": "2026-10-04T23:59:57.595987+00:00", "status": "completed" }, "tags": [] @@ -1103,7 +1097,7 @@ "Statuts ponderes OPTIMAL : 25/25\n", "\n", "Domaine de l'objectif scalarise : 85469 a 604313\n", - "Temps total pondere 1.617 s | deux passes 2.903 s (x1.80)\n", + "Temps total pondere 0.650 s | deux passes 1.138 s (x1.75)\n", "Audits externes en echec : 0\n", "\n", "Extrait :\n", @@ -1270,10 +1264,10 @@ "id": "067f347b", "metadata": { "papermill": { - "duration": 0.006742, - "end_time": "2026-09-06T23:41:17.665590+00:00", + "duration": 0.002308, + "end_time": "2026-10-04T23:59:59.620507+00:00", "exception": false, - "start_time": "2026-09-06T23:41:17.658848+00:00", + "start_time": "2026-10-04T23:59:59.618199+00:00", "status": "completed" }, "tags": [] @@ -1297,10 +1291,10 @@ "id": "da693543", "metadata": { "papermill": { - "duration": 0.00689, - "end_time": "2026-09-06T23:41:17.679262+00:00", + "duration": 0.002422, + "end_time": "2026-10-04T23:59:59.625372+00:00", "exception": false, - "start_time": "2026-09-06T23:41:17.672372+00:00", + "start_time": "2026-10-04T23:59:59.622950+00:00", "status": "completed" }, "tags": [] @@ -1323,16 +1317,16 @@ "id": "c3c33969", "metadata": { "execution": { - "iopub.execute_input": "2026-09-06T23:41:17.712907Z", - "iopub.status.busy": "2026-09-06T23:41:17.712581Z", - "iopub.status.idle": "2026-09-06T23:41:17.736396Z", - "shell.execute_reply": "2026-09-06T23:41:17.735100Z" + "iopub.execute_input": "2026-10-04T23:59:59.631782Z", + "iopub.status.busy": "2026-10-04T23:59:59.631582Z", + "iopub.status.idle": "2026-10-04T23:59:59.644456Z", + "shell.execute_reply": "2026-10-04T23:59:59.643865Z" }, "papermill": { - "duration": 0.049742, - "end_time": "2026-09-06T23:41:17.737525+00:00", + "duration": 0.017091, + "end_time": "2026-10-04T23:59:59.645001+00:00", "exception": false, - "start_time": "2026-09-06T23:41:17.687783+00:00", + "start_time": "2026-10-04T23:59:59.627910+00:00", "status": "completed" }, "tags": [] @@ -1455,10 +1449,10 @@ "id": "d1b9ff67", "metadata": { "papermill": { - "duration": 0.006947, - "end_time": "2026-09-06T23:41:17.751968+00:00", + "duration": 0.002876, + "end_time": "2026-10-04T23:59:59.651058+00:00", "exception": false, - "start_time": "2026-09-06T23:41:17.745021+00:00", + "start_time": "2026-10-04T23:59:59.648182+00:00", "status": "completed" }, "tags": [] @@ -1484,10 +1478,10 @@ "id": "3283b6b1", "metadata": { "papermill": { - "duration": 0.022625, - "end_time": "2026-09-06T23:41:17.798983+00:00", + "duration": 0.002989, + "end_time": "2026-10-04T23:59:59.657088+00:00", "exception": false, - "start_time": "2026-09-06T23:41:17.776358+00:00", + "start_time": "2026-10-04T23:59:59.654099+00:00", "status": "completed" }, "tags": [] @@ -1510,16 +1504,16 @@ "id": "c03869ac", "metadata": { "execution": { - "iopub.execute_input": "2026-09-06T23:41:17.842969Z", - "iopub.status.busy": "2026-09-06T23:41:17.842474Z", - "iopub.status.idle": "2026-09-06T23:41:19.351068Z", - "shell.execute_reply": "2026-09-06T23:41:19.349229Z" + "iopub.execute_input": "2026-10-04T23:59:59.665068Z", + "iopub.status.busy": "2026-10-04T23:59:59.664808Z", + "iopub.status.idle": "2026-10-05T00:00:00.281894Z", + "shell.execute_reply": "2026-10-05T00:00:00.280650Z" }, "papermill": { - "duration": 1.532469, - "end_time": "2026-09-06T23:41:19.352176+00:00", + "duration": 0.623302, + "end_time": "2026-10-05T00:00:00.283258+00:00", "exception": false, - "start_time": "2026-09-06T23:41:17.819707+00:00", + "start_time": "2026-10-04T23:59:59.659956+00:00", "status": "completed" }, "tags": [] @@ -1611,10 +1605,10 @@ "id": "7ca479c2", "metadata": { "papermill": { - "duration": 0.006639, - "end_time": "2026-09-06T23:41:19.365873+00:00", + "duration": 0.003983, + "end_time": "2026-10-05T00:00:00.290311+00:00", "exception": false, - "start_time": "2026-09-06T23:41:19.359234+00:00", + "start_time": "2026-10-05T00:00:00.286328+00:00", "status": "completed" }, "tags": [] @@ -1645,10 +1639,10 @@ "id": "2f68f37c", "metadata": { "papermill": { - "duration": 0.009314, - "end_time": "2026-09-06T23:41:19.384351+00:00", + "duration": 0.009907, + "end_time": "2026-10-05T00:00:00.303086+00:00", "exception": false, - "start_time": "2026-09-06T23:41:19.375037+00:00", + "start_time": "2026-10-05T00:00:00.293179+00:00", "status": "completed" }, "tags": [] @@ -1669,16 +1663,16 @@ "id": "1d45d450", "metadata": { "execution": { - "iopub.execute_input": "2026-09-06T23:41:19.425982Z", - "iopub.status.busy": "2026-09-06T23:41:19.425518Z", - "iopub.status.idle": "2026-09-06T23:41:23.550699Z", - "shell.execute_reply": "2026-09-06T23:41:23.549120Z" + "iopub.execute_input": "2026-10-05T00:00:00.320489Z", + "iopub.status.busy": "2026-10-05T00:00:00.319834Z", + "iopub.status.idle": "2026-10-05T00:00:01.978101Z", + "shell.execute_reply": "2026-10-05T00:00:01.976909Z" }, "papermill": { - "duration": 4.147657, - "end_time": "2026-09-06T23:41:23.551732+00:00", + "duration": 1.667898, + "end_time": "2026-10-05T00:00:01.979357+00:00", "exception": false, - "start_time": "2026-09-06T23:41:19.404075+00:00", + "start_time": "2026-10-05T00:00:00.311459+00:00", "status": "completed" }, "tags": [] @@ -1721,9 +1715,9 @@ " 10 79 78 675 14.45 OPTIMAL True True\n", " 12 81 80 672 14.83 OPTIMAL True True\n", " 14 83 83 672 14.83 OPTIMAL True True\n", - " 16 85 85 672 14.83 OPTIMAL True True\n", - " 18 87 83 672 14.83 OPTIMAL True True\n", - " 20 89 83 672 14.83 OPTIMAL True True\n", + " 16 85 83 672 14.83 OPTIMAL True True\n", + " 18 87 87 672 14.83 OPTIMAL True True\n", + " 20 89 89 672 14.83 OPTIMAL True True\n", " 22 91 91 672 14.83 OPTIMAL True True\n", " 24 93 83 672 14.83 OPTIMAL True True\n" ] @@ -1776,16 +1770,16 @@ "id": "dc888f31", "metadata": { "execution": { - "iopub.execute_input": "2026-09-06T23:41:23.568515Z", - "iopub.status.busy": "2026-09-06T23:41:23.568027Z", - "iopub.status.idle": "2026-09-06T23:41:24.632175Z", - "shell.execute_reply": "2026-09-06T23:41:24.630786Z" + "iopub.execute_input": "2026-10-05T00:00:01.989469Z", + "iopub.status.busy": "2026-10-05T00:00:01.989261Z", + "iopub.status.idle": "2026-10-05T00:00:02.253643Z", + "shell.execute_reply": "2026-10-05T00:00:02.252973Z" }, "papermill": { - "duration": 1.07382, - "end_time": "2026-09-06T23:41:24.633139+00:00", + "duration": 0.269504, + "end_time": "2026-10-05T00:00:02.254397+00:00", "exception": false, - "start_time": "2026-09-06T23:41:23.559319+00:00", + "start_time": "2026-10-05T00:00:01.984893+00:00", "status": "completed" }, "tags": [] @@ -1793,7 +1787,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA40AAAISCAYAAABoEyobAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnQV4HMf5xj8xo2XZlpltyewkbcBhBgf+bRpOg02ahhtsoG04adBhZmrDDG4aJw6aQWbLJFu2mFn6P++c9nw6naRbaU+3t/P+nud8673V3szOe7Pz7ffNN2Gtra2tQgghhBBCCCGE+CDc105CCCGEEEIIIYRGIyGEEEIIIYSQLqGnkRBCCCGEEEJIp9BoJIQQQgghhBDSKTQaCSGEEEIIIYR0Co1GQgghhBBCCCGdQqOREEIIIYQQQkin0GgkhBBCCCGEENIpNBoJCRAffvih3HPPPdLY2MhrTAghxFLmzZsn//znP6W8vNwR30MIsTc0GgnphhdffFHCwsJk06ZNfl+rBQsWyCmnnCJjxoyRqKgo09d4xIgRcuyxx7JtLGw/tAlxJvhtoo3R1qHSR/QF6Ef++Mc/BvQ7/ve//6m6490JbdkZBx54oHpZSW/qunnzZjnhhBMkKSlJUlJSelwG6AM6CfT39BXd1aevfzP+6Obvf/+70gEhdodGIwnI4MnX6/rrr+/Tq11TU6M6Y6sGM57gJtDZjaWsrExOPvlkufvuu+X//u//LP9uQgghzuTTTz9V962uQPTKH/7wB3UPuvLKKwNWlr76Hp0wHhQEYlzSGa+//ro89NBDffZ9xLlEBrsAxJkglGXkyJHt9k2aNKnPjcZ//OMfatvqJ8RdsWTJErnpppvk3HPP7bPvJIQQb9asWSPh4Xw2bAVffvml5QIbPny41NbWtotGgdH42GOPdWk4rly5UkWyXH755ZaXKRjfozsYLwTyoTqMxhUrVsgVV1wRsO8gekCjkQSEo446SvbYYw+/jq2rq5Po6GjHDG4CEcZEiBOorq6WhISEYBfD0bS2tqo+NS4uTmJiYoJdnJAHDx/j4+PVPcoqmpqapKWlRZ0zNjbW9N9PmzZNvQJNX32P7kRGRqoXIXbHGaN0EjIY81/efPNN9XRt8ODB6oZcUVGhPv/3v/8tM2fOVAOejIwMOeOMMyQ/P7/dORAqk5iYqPZjrgW2+/fvL3/961+lubnZHQKCfQDeRiNEtruwHzxZPfjgg9X3DxkyRG6//XZ1c/eH+vp6ufXWW9U8RgzWhg4dKtdee63a782rr74qe+21l6p7Wlqa7L///j6fZH///ffqOAwsRo0aJS+//HK7z0tKSlS9J0+erK5DcnKyMtiXLl3q87q//fbbcscdd6i64ZyHHHKIrF+/vsP34kk3vg/XAd//3Xff+TSGzdTZG5wL3udly5bJAQccoK4FzvOf//xHff7tt9/Kb37zG1WG8ePHy9dff91hrs2f//xn9RmO6devn/z+97/3a15ZaWmpqheuA7wxZury1VdfyX777SepqanqmuP7b7zxxg7X+q233lL7Bw4cqAyl2bNny9atW9udC9cVZR42bJj7OxEGBu+DWc33JT///LMceeSRao4T2g3tN3/+fJ/zdHJzc+W0005TOsd1A/hN4fOsrCz19wcddJA6ztd8oo0bN6prlJ6ero797W9/K5988omEAp999pnMmjVLtT/mhB1zzDGqj/E3zB8JSP70pz8pbeO3fdZZZynt+pr//MUXX6gHdfgtPPXUU+7PjOsJYxLXGbrZtWuX++8bGhpU/zF69Ghl1HfFtm3blP5Qn8zMTKXVzn7r/mjEX9BHoB7ok9Bv4TeFSI7i4uJu/9bM79HokxYuXKj6ZJTb+G376v9wHc877zwZMGCAKtfUqVPlpZde8hmO+K9//UuFCOI647cOvXvPaUQd0fcCz6kdBvjd4Bw5OTnq+/C90Ie3Jjrj/fffV/XD3+L9vffe83mcv99jaA/3LhiXODY7O1veffddn9M24OlCH4f6o59FojjP+6vntXr66afd12rPPfeUX3/9tcf18QV+D7i/4x5g9EGd/Tb9KXtv8DWnEf//y1/+4q4jvhft8fnnn7c7rrKyUpUNbYFj8Ls87LDDZNGiRepzaBb9Je6Xhp6MOZ/47d9yyy1qzIXfKX4X6K+++eabdt9htl1Wr16tpuigrzHu33/729/aHYN7GX7D0JZRt+eff96S60kCBx9tkICALGtFRUXt9sEINLjtttvUU1YMejHowDZunOecc47qiO666y7ZuXOnPPzww2qgsXjxYjVIN8BA+YgjjlBGBToyGBT333+/6swuvvhi1Vk98cQTavvEE0+Uk046Sf3dlClTOi1zQUGBunHgKTBCRdCBooNEp9cduHlgEAIj78ILL5SJEyfK8uXL5cEHH5S1a9eqjt8ARixuEvvss48K40XdMcD673//K4cffrj7OBhzv/vd79Sg5Oyzz1YdKgYV6ODRwRoDapwbg2qEA+OaYcCIARoGJRiUe4J5lvDo4rqjje699145/fTT1fcb4LrhZoWbBwaFuGFgoIhBP26wPalzZ2AQgkEHQqBQB3w3tl977TV1I7zooouUwXHfffepa4FBHgbfADerH374QR2PcqGc+HvcJFF3DAR8AV3ipgqDG4YpNONvXTCoQHmhI7QdbnZoJ1+DYRjnuNFed911anCJQdihhx6qwpcNTeEhCTwZ0CkMg19++UXmzJmjBuf4zJPuNN8dVVVVqq3vvPNOt34ArgOMEXyvd0i5L6BTPJiADmFkQ08vvPCCetgCIxjGuCdo17Fjx6rvxUAN3HDDDUp7xx13nKoTHnLgHR4yT6Bn/E5wjS677DJ1jTAoR1vh4QJ+23bllVdeUb9b1AsDTNQB+oThjP7Mn2Qd+B2i30N/gYcb+HsM/gxDyACfnXrqqWpgf8EFF6hBmjc4Hn0ItIvflTGwRxtC1zhnV15gPMjAQ6YtW7aotkDfgjpCD73VSHfgQQ36OtwfYPShvOib8f7TTz/5lUTEn98jgCGKsqNfwUNLDGo7ux7oa/D7Rzvht4PfLPpoGBneIZ2oP/SN/gX9Bh6CeBsdaL/t27er+uLaeoPPjfsk2iAvL08effRRpSf0QV0lXYNhhzn2MOpwf0U9cR7PPr0n37Nu3To17xGagt5RT/zmYdygnwXQPu5JMBRwbjwkQ9+NfmDHjh0d5tshnBLGEI5Fm6GvwD0cGjC+20x9fAFjCUbj0UcfrV4wsnD/hSHlidmyWwnuR/id4uEo7nuPPPKIqjN+g+gLAa47+kJoENcC1wF/t2rVKpkxY4Yy1nCvxz0F9zOAh44AD+ufffZZ1Xeg38A1f+6551SfhXuRt5fZn3bBAx6MHfB/aB393IYNG+Sjjz5Sv0GjX8fDP8MwxngND9gw1kGZGEZrY1oJsZAXXngBo0KfL/DNN9+o7VGjRrXW1NS4/66hoaE1MzOzddKkSa21tbXu/R9//LE6/pZbbnHvO/vss9W+f/7zn+2+e/r06a0zZ850/7+wsFAdd+utt/pV9iuuuEId//PPP7v37dq1qzUlJUXtz8vL6/RvX3nlldbw8PDW7777rt3+J598Uv3t/Pnz1f/XrVunjjvxxBNbm5ub2x3b0tLi3h4+fLj6u3nz5rUrS0xMTOvVV1/t3ldXV9fhPCgnjvO8PsZ1nzhxYmt9fb17/8MPP6z2L1++XP0fn/Xr1691zz33bG1sbHQf9+KLL6rjDjjgANN17gycC8e9/vrr7n2rV69W+3Den376yb3/iy++UPuhLwNP/Rj8+OOP6riXX365gyZ//fXX1h07drTm5OQo/W3atMl0XR588EH1f2irM4xrPXjw4NaKigr3/rffflvtxzXvqg533XVXa1hYWOvmzZtNa74zqqqqWmfNmtWanJzc+ssvv7T7DNdk3LhxSnOe3+kLaHTs2LGtRxxxRDu9oh4jR45sPeyww9z78LtDmU899dR25ygoKGiNjIxsPeGEE9rt//vf/66OR129f5Oe7VJZWam+a8SIEW7tQ/Pe+uhLDI0ZfQTKmJqa2nrBBRd0qDv6E+/9nZ0PbYu+0eDee+9V+z/44IMOfcXnn3/e4Tz4zPN6gqeeekod/+qrr6rfWEREhLrO3fHQQw+pv4OODaqrq1vHjBmj9kP3ZjXiC19t6et38sYbb3ToI3v7ezT6JPzuvcFnnv2fcT1wHQ3QVnvvvXdrYmKi+7uM+uC3hz68u7pecskl7vulJ/gNYP9rr73Wbj/a3dd+b6ZNm9Y6aNCg1rKyMve+L7/8Uv0tdNKT7zG0984777j3lZeXq+9B32Rw2223tSYkJLSuXbu23Tmvv/56pb8tW7a0ux64B5WUlLiPg96x/6OPPjJdH1+gHaKjo1uPOeaYdhq98cYbO/RB/pa9M7x14wujr/QE/0cZ169f7963dOlStX/OnDnufehPoJmuQD19XZOmpqZ24wFQWlraOmDAgNZzzz3Xvc9Mu+y///6tSUlJHe4lntf5vPPOU21XVFTU7phTTjlF1cfX753YA4ankoCAEBs8LfV8eYInkp5Pd7EcAp7+4oma5xwPhHNNmDDBZzganrB5gqdbeOLVU5CAAE+/PJ+C4wkYvDPdgSfM8E6hrPBkGS88WQdGuAc8Vni6jKec3nM4vZ+W46kh6uRZFngQPOuIJ9bGeeCJwlNGI2TSCE/xBE9iPefmGOc3zol2wDnw1NFzjgWuATyNPalzV6CseKJvgHLDs4LzwqNmYGx71t1TP8jyh3IjbAh/76vueNKKJ8Y4FmF/SEJhti6Gt/uDDz7oNjQJ3jvDKwrgKR00aJDSma86IDQQ3wnPGsYMeKpvhebhEYFHDyF3CN9CKCI8HsYLdUKZ8J2or3c4uCfwysCzAO8vrrdxnVB2eKFwXb2vi3eZ586dq7z5+K17cumll3b4PpQLv0cjrNXQDJ5gw7MMj7IdQX8HbxOe4HvqKSIiQmnZn98GQD09vTrwKON36akhAC8XvAP+nhPH4nqfeeaZylMNL3B34DuhX+jYAN58nK+3GukOz98JNIvzoa8Gvn7rPf09Gn0q+snuwN/B64k2NkBbwTMHrz6iGDyBh8iYMtET0EchhBDeO09NwZuL30RXmoJHDO2C+67nshk4F+4zvfkeeJw9Pf5GGDX6L0TvGOdEX4V7iOc54enFfQua8ASeS8/7jfd9ykx9fIEoDXgU8RvwvO/68nCZLbuV4Dvw+zRAlACur2efj/4bkULwUJsF/ZExHsBvElEn6JsR5u7rd9VduxQWFqrrgbBTeGQ9Ma4z7jPvvPOOuidh2/Oaol+CV9Tf3zTpexieSgICBnpdJcLxDoNDyBXwFVaFgTzCLTyBYel9A0Zn5u/cDl+gDJ6GioGvMnmDQRLCQTobFBhziBCmASPPnxubd6frq47o6BHC+/jjj6sQIs/5bUb4SlfnNG4AxjmNdoDx5QkGqt7hdP7WuSsQSuRtLGMQgLkj3vs8y2kYQwhLQjgUDB0j9BH4WoQaA2TUA2XGYK8ndcFNE+E8559/vgphxiAY4TkYgHo/BEBIpieoJ66r55xLhBnhAcKHH37YQbvedeip5hGCZQz0UN7uQOjRxx9/7PMzXCeAwVpnoNyeA4vOfuveGkO4nveDic5+kzDwjc/9zcqM3wYGNT0BgyszA37jOhkPHbzBwM8fvDWEQTsMHe95u/6EFXuCEDQMRlFOhNr5E4KPa4028/69evePPdFId2Awi7B+zIX37lf8XXDen98jwDx7f5Le4HrgnN6/e09t9qaNvMF1RV0xZ81sf2uUxfsaAO8HjGa/x5cmxo0bp95xbdHX4pwIW/T3XuHvfcqf+viis79H+bx1abbsVuLPGAAhovit4Z4Jwx6htjDaMf/XHxDuj2kOmIeIB6pd6bW7djGMx676ZPTBeKCG8HK8+vqakt5Bo5EEBX8GKd0N4uwEjDd4cB544AGfn3sbQb2po6dxBA/BzTffrJ7sYZ4oBt4YxOCJqa+n+f6csy/r3Fl5/CknnhLDYERd9957b2VYYvACz6WvusO4QyIhGNkwNntSF+gWT1JhhMH7jXk7SLAB4wBzbMzoEkaMMbcS86zwcARzymAAY16Udx16qnljrijmDqPevgwWfBcG5Xha3dVSMUaZMMe0s6yKxnwZq37rVoH5sD0duMMr7U+CJe/rhHlp3g8ogNWZEs1eY8xfNBLYYO4ufj9W0RONdAeSasC4veaaa9Q58ff4HiTasSoZSaD12tvzop4w5DDf2xe98WIG+ntwTvR1SCzmC8PIDMR9qreYLbuV+HMd8NuAxw9RJLgH4XeHOdSYC4m5uV2BhHy41yBnAX5baHd8J+4TeMDdk/J0h/F7xXzhzh4sdZV7ggQXGo3EFhihgkjo4P10Hvs8Qwn9xZ/kCN5lMJ6Se39/d+CpPZJ5wJPT1fcaSVcQVmdFKnNMgEfyHngOPMGTPM/EQ/5iXGckd8B5DRCygkGzZ2fub50DBeqOmw6eknqGrqHuvoCRiafi8OzBwPRcF8tMXWCU4zi8YGTCcEeyARiSCCcy8NYSbqy4rsY1xGAdSXbwpBdPhg28Q7l7C3SGc6K8yJ6LLJueCU9QLoQYwljFQNFIGuULI1QKhqdnXXuqMU8jDqGM3l5THOvr94en4p7n8gcYbz29tmYH/MZ1wiCsp9fJ0JDn7xBhjwjNgzehp+Dv8VtA0g8jGRnCwrq7lvgca71BL95JeKzWiCfQBEKa8VADv10DX311V3T3ezQLrgc8UOjPPb2NPdGmJ531P7iuCKvcd999TevRKIs/9zez34Nr6K0J9GvAiE7BOaFdK/Rgtj7d/b2nRw5eMO8+yOqyBwJEHyDcHy946ZAAB0lnDKOxM03hHor6w8D0PAbJq3qCcS3RT3QGHjogTBwPTe18TYlvOKeR2AKEsmKA9eSTT7ZL4Y6MWggbxNxGsxjZMzszIrzBQAyZ+JA1zPMm0tkTV0/wtA+D7meeeabDZwijNFLZ44keBhjIvOn9hLwnT1Hx5M/77zAHo6t5ad21A8JaUQ8Yiga4Bt43U3/rHCh81R0ZQLtaggJeWQySkfkO3jezdYFX0BvD+PdeegBeTWSa87xBY8Bu3MiNp7aedcA2PKFWg7AlGIswVL3ncOH39cYbbyivLcJvuzsPBlHI3oqBlDf+hH/CeIWnzfP6A2Rn9PWbxO/xxx9/dO9DWyCsCQNSf8K8PcN7MUjpyQsDaDPACIPRhAcKniFfBv6GyaKenn+Pa4bfZXcehK7AfGX0PXjQhPOjLZC1sLv+B20BT7SxJI6RWdI7xMwKjXji63cCzGat7O73aBZcD8zZQ6SBAdoGfRA8oZg/3ROMBzre9y30UejbEFHiDb63q/scjAr0U3hA5RnOi4co3vOCzX4PNOG51AWyX+Ja4/sMLzvOid8w+iBvcD7Pe40/mKmPL/CbxvxTtJWnrnxpyuqyWwnayTs8G+MozDP1vB9BU77CuH39tjA/0rO/NQMMQixVgyzNmHrhifEd+E7M78W8Rl/GZU+nEJC+gZ5GYgvQgSOkAgkIcLNFcgFjyQ0MDrH0g1nwlBSDStzUEUKC0E3E2ncWb4/wE4STIeQJ6dKNJTeMJ8pdgfly8OIg6Qc8ThhkokPHU2fDuwODDJ4ueKVwQ0ZICbw6SLyA5SPQ0XuHTXYHln+AAYrrhgQqMApg4Pk7n8EbeB6Q3h+eCHh8ccOEhxHp1zEQ9Hwa6W+dAwXqjvaC1xDtjBsdnpD7msvpCcJ3cAO95JJL1BNPhMn4Wxdca4Sn4iEGdIGnuphPirmZnslaAPSGfWgbaBkDErQ/Bu0A4ai4pjBiYbDCyMCNtDfzcrsCcwPxFN47XBLXDt4CX2GU3uCBB+Z0YqCNZTtQN8wBQ/lx3VAHpFbvCixhgN8XPMRYOgO/N3h58YAI3nFPjcEbDIMW34cEI7imGChi/i6ulfd8MruA6wADD7rCU3+ETGNAhYEUwpqhL19GsjdI1gEjG79DtB20Bk3huvUEPBjA9+P3bCxNgIEzfgMor3dyIk+gW5QZXnEkVcLAHb8/76VtrNCIJzgeA1HM3YIBjXMhDA8aMEN3v0ezwDuP5Y0Q3ofrgfsUDFEsSYFzeybdMQOMbgC94+EDBtnQD+6LmG+MewSSwMBTjPsmvGV4UIh7pWeSIm/wd+i3cA0Qgo4HYGh7tJGncW/2e3BvxUMH3MPw24bBgOsLrRkg9BHzttFnG8tG4eEP7le4ZrjHmI2M8bc+vjDWuMU5UCY8AEDiHqMP8iQQZbcKPATB7xjtgTVC8bAC90C0hWcEDsqMcdBVV12lljTDcUhEgzrBy4hERriW+E3hwT3uCd1dw87AsiBoE/R7+I0gmgTXCP0O9GQs/YW+APck/P7wfWg/zEVF+X09nCU2IdjpW4mz8FzeoKv05//+9799fv7WW2+pVN1YMiI9Pb319NNPb922bVu7Y5AOGymw/Ulb/cMPP6i09Uhd7c/yG8uWLVPpsWNjY1WKdqTbfu6557pdcsNIt37PPfeoJR1Q/rS0NPXd//jHP1Qack+ef/55dz1xHL7zq6++cn+O9NhIk91d+m4suYElOJC+Oi4urnXfffdVy054H9fZde9sqYJHHnlElQHl22uvvdSSE6jLkUce2eM6+6oL/s6bzuqOcnqmFkdq8HPOOac1IyNDpbhHin8s2eG9zIAvTWKpBiwFgaUf3n//fb/rMnfu3Nbjjz++NSsrS2kK7ziPZzp241pjSYAbbrhBLSWDtkGdvNOQ5+bmth566KGq/KgHlmIw0qp7tokZzfcFixcvbj3ppJNUCnZcK1zzk08+WV0f77L5Wp4Eqd5vvvnm1oEDB6prc/DBB7euWrVKne+iiy5qd+yGDRtaf/e736klLPC7hB6xFI8ndltyw1ML0CXSyKPso0ePbv3jH//YumDBAr/O9+2337ZeeOGFSovQCPrD4uJiv34vxmfGb2Hr1q2qHMcdd1yH47AEEPS1cePGLssF/c6ePbs1Pj5e6fXyyy93L8VgLLlhRiO+8NWWuAegjNAA6vD73/++dfv27X716WZ+j531SZ0tnbBz5053H4T+YPLkyR00aNTnvvvu86uu+G1ceumlrf3791dL73j/vp9++mnVL6EOWNoA33nttdeq69EdWBoDyy6hPbKzs1vfffddpQ9fyzH48z2G9rAk0pQpU9R5J0yY4PP+jmVocP2xRAuuFa7ZPvvs0/qvf/3LvaxMV9fKV1ubqY83uAegbzfunQceeGDrihUrfC5T40/ZA7Hkhq+lNDzLh+UyrrnmmtapU6eqNsJvGNuPP/54hyWXTjvtNPX78VySBMtg3Hnnne57PcYk6Fu9r6HZdsF1NH6v6PfGjx+v+nvv3w7qN3To0NaoqCh1LzjkkEOU7oh9CcM/wTZcCSH2BuFseDoLz6ivEE7SPskI5qHhqXxXT/5Jx1AvZONDtld443XGWFgdHoNAeut1gL/HwAHvKiJ3Osu2TAhxFvaM7SGEBA0kk/F+loQ5KggZOfDAA4NWLuIcME/UG2M+ETVGCCGE2A/OaSSEtAPJgDCHFEs1YH4g5hkgaQaeKGMfIb0F82vgTcNcIsyvwTqsmLuI+VNmk84QQgghJPDQaCSEdAg5wrqEmNAO7yISSCD5BSav+7PoNSHdgWUOkLUTyU2QbdFIjoPQVEIIIYTYD85pJIQQQgghhBDSKZzTSAghhBBCCCGkU2g0EkIIIYQQQgjpFBqNhBBCCCGEEEL0TYSD9eW2b98uSUlJEhYWFuziEEIIIYQQQkjQwNJqlZWVkpWVJeHh/vkQHW80wmBEJkhCCCGEEEIIIS62bt0qQ4YMEX9wvNEID6NxUZKTk8VuXtDS0lJJS0vz28onhLojoQr7PELtEd1gv0fsqD0sdwWnmmEn+YPjl9zARUlJSZHy8nLbGY2EEEIIIYQQ0pf0xD6ieyuIwF6vra1V74RQd8TpsM8j1B7RDfZ7xCnao9EYZGpqaoJdBKIh1B2h9ohusN8j1B7RjRoL7QyGpxJCCCGEEEKIJlQwPDW0gLsYTwAYnkqoO6ID7PMItUd0g/0ecYr2GJ4aZOrq6oJdBKIh1B2h9ohusN8j1B7RjToL7QzHL7lhZ8LCwiQ9PT3YxSCaQd0Rao/oBvs9Qu0R3Qiz2M6gpzGIwF1cXV3N8FRC3REtYJ9HqD2iG+z3iFO0R6MxyDQ0NAS7CERDqDtC7RHdYL9HqD2iGw0W2hkMTw2y2zgtLS2YRSAaQt0Rao/oBvs9Qu0R3bC636OnMYjAXVxZWcnwVELdES1gn0eoPaIb7PeIU7RHozHItLS0BLsIREOoO0LtEd1gv0eoPaIbLRbaGQxPDbLbOCUlJZhFIBpC3RFqj+gG+z1C7RHdCLPYzqCnMYjAXVxRUcHwVELdES1gn+e6BjoTrPrbQXtsez21j3YvLy/Xuv11rruT+j16GgkhhJAAUllTK0++86W89tl3UlRWIRmpyXL6UbPk4v87QhLjYx1/7XWuv851173+OtcdsP61jmv/sFaHm/+wsOGaxVOe5OTkYBeHEEKIRmDgdNI198mazfnS0rL7dhseHiYTRgyWd++9NmQHEP6gc/11rrvu9de57oD1r7V9+/fEPqKnMYgYbmM0FuKOCaHuiJPRsc/Dk2bvgQPA/1fn5cu9L78vF5x4qDiVp9/7StZsypeW1uDWH9qrqqqSxMTEPtOeXeoeLHSuv851B6z/V523/6Z8efLdL+WvZ8wOuXsuPY1BJBg3MUKoOxIsdNFecXmlrNuyQ73+8ezbUlffGOwiEUIIsQn905Jl8Wv/Cuo9l57GEAMNmJSUFOxiEM2g7gi1Z83NuKC4zGUcbt3R7r2koooiI4QQ4pPCUldymkA/PLV6vMfw1CACwZSVlUlqaqqjn7oTe0HdEWrP3BpX23aVyLot22Xtlh2yfusO93tlTV2nfxcRHi7DB/WXbbuKpaGxqdPj+qUkyZeP3exYUR52yT+lpLwq6PVHlFgF5u6kpEhf3W7tUvdgoXP9da47YP3/2WX7w9PYF+N+q8d7NBqDTHR0dLCLQDSEuiPUXnsam5pk845CWbe1oJ2BuH5bQZfhpdGRkTJqyAAZO3SQjB02yP0+cnCmxERFyX2vfCBz3vq0w5xGIynCmcccIAPSUx0ryDOPPsAW9cfgKSk2SuLj4/vsIa1d6h4sdK6/znUHrP8BXbb/6UftH5LjPRqNQQQ3roSEhGAWgWgIdUd01l5dQ6NszN+pDEPDQFy/tUDta2xq7vTv4mKiOxiGeB82KEMiIyI6/TukV//q56Uq+YGvLHoXnXS4OBm71D8Y2rNL3YOFzvXXue6A9T/Ckf0eE+EEETz5LC0tlbS0NIanEuqOOJ6+7POqa+uUMYh5hp5hpVsKCn0+/TVITohrMwizZNywQTJm6EAZNyxLsvqnSXh4eI/KUlVTp7LlvfbZPDWXBaFJeNKMgUOw0673BXaof7Dut3aoezDRuf461x2w/nW27vd6kgiHRmMQQWPW1tZKXFwcjUZC3RHHgz6vpqbG0hDBssrqdklo1iKkdMsOyS8s6fLvMlKTOngN8Z6ZlhJQo6Ivkh/YmWDV3w73W7a9ntoPRL8XalD7rbbr95g9NcRAA6ITIYS6I04GCz1jvcLXPvtOisoqJCMVT1xnqRAmf5644sZXVFYpaxFS6pWtFE9wu2JQRlqbx9BlFI5rMxDTkhMlGOg6aAx2/e1wv2Xb66l9O4TlBxtqP8wR/R49jUEEA6GSkhJJT0/X/gdFqDviXIPxpGvu67DAvTG34917r3UbjugTtxeWdEhGg/fyqpoub4zDBmZ08BoitDQpPq5P6knsDe+3hNojutHahZ1BT2MIEuwnn0RPqDvSV8DD6G0wAvx/VV6+nHf74zKoX5orIc22Aqmure/0XJER4TIya0CHsFJkL0WiGkK6gv0eCRbUHnGC9pg9NYjA6kecMSHUnV6E+vwOlL+uvkGqauuVJxEJD7zfje3nPpjbaeIZnGf+ktUd9sdER8lotYxFlowdOrAtrDRLRmT1l6hI3raIeXi/JcGC2iNO0R7vvkFeNNpwG/c0Kx8h1J0e8/qsoLm5RapqYdDVKoMP71igvuN7nfs47/2GUdjc0mJZuX53yG+VUag8h8MGydDMDImIYJ9IrIP3WxIsqD3iFO1xTmMQwVP2hoYGtfBmKHsdSGhB3dl7Xp+v9qpvbHIbblhKYrdXzz+Dzzi2pq7z0M/eEhUZoeYPoh54JcW5tr9fskqVvzOQhnzxa/8KWLkIAez3SLCg9ogdtcc5jSEGGjAmJibYxSCaQd3ZbF7fxm3y++v/JaMGD9gd1lnbPtSzq0Xne0tCXIwkxsdJEoy9uFhl+CXA6FPGX5wkxbUZgR4Goef/jfeYqCif57/vlQ9kzluf+gxRhdGMdasICTTs90iwoPaIU7TH8NQgu42LiookIyOD4amEunMgCAddsWGLPPve153P6xOR5eu3qJe/ICFMUkKcMvLcBl87w871mbF/9zG73xPjYiQhNjbgYaAIv/3q56WyepNvLysWOiYk0PB+S4IFtUecoj2GpwbZbdzY2ChRUVEMTyXUnUPYtrNY5i3Ole8Wr5LvlqxSi8/7w9nHHijJMAS9DDtfBl9MVGRI9Rnwlj75LuZzzlPrKiIkFR5GGIx9NZ+T6A3vt4TaI7rR2oWd0ZPwVBqNhBDSCxBC+sPSNW5DcWP+zg7HRISHd5k4Rqd5faGeOZYQQggJdTinMQTdxoWFhdK/f3+GpxLqLkRoam6WpWs3ybeLYCTmyqLVeR0MwozUJNlv2kQ5YEa2en/1s3mc18c+jwQR3m8JtUd0o8ViO4NzGoMInrYjDS6fuhPqzt6esU07CpWBOG/xKvlh6WqpqK5tdwzCRX8zaazMmp4t+0/PlokjB7froDmvzwX7PBIsqD1C7RHdCLPYzgh6eOq8efPkvvvuk4ULF8qOHTvkvffekxNOOMHnsRdddJE89dRT8uCDD8oVV1wRMPcrIURvSiurZf7S1cpQRMjploKiDsdkjxqiDES89swZI3Ex0V2ek/P6CCGEEGIHQjI8tbq6WqZOnSrnnnuunHTSSZ0eB2Pyp59+kqysLHGS23jXrl2SmZnJ8FRC3QWRhsYmWbR6ozIQv120Upat39wh2+mAfqmy//SJykhEyCnmIZoBCV/+esZs9dJ1Xh/7PELtEd1gv0ecor2gG41HHXWUenVFfn6+XHrppfLFF1/IMcccI04Bg0bEGes4eCTBg7pzhZyu31rgTl7zw7I1HRa+h+dw7ynjXN7EGdkydugg60I8NP3NU3uE2iO6wX6POEV7QTca/bGSzzzzTLnmmmskJydHnAQa0XgRQt0FluLyStcyGG1zE3cUlXb4PU4ZO1x5EzE3cebEUZ0uWE96Bvs8EiyoPULtEd0Is9jOsL3ReM8990hkZKRcdtllfh1fX1+vXp4xu8CYumm84wKa3YYBa1x8f7fhDsY58PLebm5uVm7jAQMGuL/LOKanZQx2nbraZp3s0U5g586d6ukTfltObafa+gYVcvrtwpVqvcQVG7Z26C+GZPaTWW0hp/tOHS/pKUm2rlOot5Mu2mOd7NdO1B5/T9Qe+z3d+nJ/7rlm6H2AawBBcpyHH35YXnzxRXVh/OGuu+5SEzuN19ChQ9sZj5WVlepl7KuqqlLbZWVlUlNTo7ZLS0ulttaVHbGkpETq6urc2w0NDWq7qKhILZgJkM62qalJbcMIRAMaccSe2wDH4XgAoxENhxfOi/MDfJ+xjXKgPADlQzkBym3HOuHvcR7AOtmznaC3tLQ0t8ac0k441w+LV8hT734pp930kEw55So55cYH5Yl3vnQbjAlxMXLQzGy5/eJT5YtHbpRPH7hG7rv8LDlw+niJkBbb1clpvyenas9p7eTEOlF7odFO1B7bidor6bN+L+Syp3oCw9Aze+pDDz0kV111VbvJm4ahBWNw06ZNfnkacSw6PhiRdrH+sY3PUR9Y/yDUn2g48SmNE+uEz6E7vEdERIR0nQqKy2Teolz5fskq9dpV6hoAGUSEh8u0cSPUnER4E6eOGyFRkRG2rhO1Fxrac3I7ObFOTur3nNxOTqwTtRca7aSb9srLyyU1NdVU9lRbG43FxcVqGQ5PjjjiCDXH8ZxzzpHx48eH9JIbxlMBZk8l1J1/1NbVy08r1ilDEUls1mze3uGYEVmZ7iyn+0wdL8kJ8RSYTWCfR6g9ohvs94gdtReSS27ADb1+/Xr3//Py8mTJkiVqMcphw4ZJv3792h0fFRUlAwcO9MtgtDtoQNSFEN10ZzwB86fDQ2gpDEQYigtyN0hDW3iGQUpivOw3bYJKXgNDcdjAjACWnIS69oieUHuE2iO6EW7xPTfoRuOCBQvkoIMOcv8f4ajg7LPPVnMZnQwGzog7RniqPwNoQkJZd5U1tfLkO1/Ka599J0VlFZKRmiynHzVLLv6/I9Qahgb5u4pVdlNkOf1+yWopqXDNrTFAeOnMiaPdWU6njBkuERG2np5N2mCfR4IFtUeoPaIbrRaP92wVnhoI7B6eiomqyGpkxaKbhNhVdzAYT7rmPlmzOV9aWnZ3OeHhYTJuWJZcdsrR8svK9cpQ3LBtZ4e/xxqJrnmJE+W3k8dJQtxuI5OEDuzzCLVHdIP9HrGj9npiH9FoJIQEnPte+UDmvPVpO4OxK/qlJMl+0zAvcaLMmpEtWRlpAS8jIYQQQogOVITinEadgZMXqXQxT5PhqcRpukPSmvXbCmTd1gJ5+t2vujUYZ01DuOlE5VHMHjmE3ncHwj6PUHtEN9jvEadoj0ZjkBsTS4FkZGTQaCQhq7uK6hplGK7bst39vn5rgWzdWexOI+0Pr99xBX8HDod9HqH2iG6w3yNO0R6NxiCC+GKkwSUkFHRXXF4p67bsUK+1W3fI+rb3ncWuhaI7Y0C/VCkpr5TGpuZOj+mflkyDUQPY5xFqj+gG+z3iFO3RaAzyE4CGhgaJjo7mgJnYQnf4rKC4zGUcbnUZiMa2dxZTb4YO6Cdjhw1SSWuM9zFDB6klMbqa04hkOKcftb/l9ST2g30eofaIbrDfI07RHo3GIDdmZWWlWpOScxpJX+oOE5+rm1pl47adsnbLDlm/dYf7vbKmrtO/jQgPl+GD+iujcNwwl1GI99FDBkp8bEynf4dlNb76eams3tQxe+qEEYPlopMOt7yexH6wzyPUHtEN9nvEKdpj9lRCHExjU5Ns3lHonmtoGIZIUFNX39jp30VHRsqoIQPaeQ3xPnJwpsRERfWoLFU1dfLku1incZ4UllaokFR4GGEweq7TSAghhBBCAgeX3LDoovTlE4C6ujqJjY2lp1FD0P5WeZjrGhplY/7OdsloEFaat31Xl3MJ42KiOxiGeB82KEMiIyIkFOpOQgf2eYTaI7rBfo/YUXtcciMEqampUY1J9ACL3D/5Drxt30lRWYVkpMLbNkuFb/rjbauurVNGoWc4Kd63FBR2uaRFckJcm0GYJWOHDZSBqYkyI2ecDO6fHpSlLWgw6gv7PELtEd1gv0ecoD2GpxLShwbjSdfcJ2s2+57X9+6917oNx9LKapWd1EhGY2QrzS8s6fI7MlKT2nkNxw3NkjHDBkpmWgoNNUIIIYQQIvQ0hqDbuLa2VuLi4jig1wB4GL0NRoD/r8rLlz/ccL8kxMUqQxFz/rpiUEaaSkAz1iMZDQzFtOTEbstB3ZFgQe0Rao/oBvs94hTtMXtqkEGsMRqTOB+EpHYWQoof9tJ1m9vtww982MCM3V7DNgNxzNCBkhTfO81QdyRYUHuE2iO6wX6POEF7NBqDCIwCpMElzgbLWnzy/UI1h7E7LvvD0TJueJYyEEcOHqAS1VgNdUeCBbVHqD2iG+z3iFO0R6MxiMC7hAmq8fHxDE91WLuu2bxdGYqfzl+ktv0BS1Bce/YJfVI+6o4EA2qPBAtqj1B7RDdaLR7v0WgMMg0NDaoxSej/MJev36KMRLyw/IUnwwdmqEypi9fkSUtrxxBVJMPBmoV9BXVHggW1R6g9ohvs94gTtNcjo7GxsVEKCgqU9dq/f3+GWPYQWP1paWk9/XMSZFpaWpQRaBiKW3cWt/sccw+P2XemHL3vDMkeNUSqa+vlpGvvldWbfGdPxSL3fQF1R4IFtUeoPaIb7PeIU7Tnt9FYWVkpr776qrz55pvyyy+/KMvVWKB7yJAhcvjhh8uFF14oe+65p2WFczq4flVVVZKYmMjw1BChublFfsldJ598v0g+/2GxFBSXtfscxuHR+8yQo/ebIeOGZbX7DMtpYFmNJ9/FOo3zVIZUhKTCwwiD0Z91Gq2AuiPBgtoj1B7RDfZ7xCna88tofOCBB+SOO+6Q0aNHy3HHHSc33nijZGVlqWw8JSUlsmLFCvnuu++U4fib3/xG5syZI2PHju114XTxVhF709jUJD8sW6O8iV/8uESKyirbfT513AjlTcRrZFZml+eCYfjXM2arl/HQJRhQdyRYUHuE2iO6wX6POEF7Ya0YuXbDqaeeKjfddJPk5OR0eVx9fb288MILEh0dLeeee66E6uKVhNQ3Nsp3i1a5DMWflkh5VY37osDQ22PiKGUkHrXPDBkyoB8vGCGEEEIICQl6Yh/5ZTSGMnY2GnHpEfablJTE8FQbUFtXL/9dsEI+nb9Y5v6yTKpq69rNO/ztpHFyzH4z5ch9psmA9FQJVag7Qu0R3WC/R6g9ohutXdgZPbGPepU9FQlx1q5dK83NzTJ+/HiJiYnpzekI6XMqa2pl7i/LlUfxmwUrpLa+wf1ZVGSE7Dt1gvIoHrH3NOmXksQWIoQQQggh2tFjoxFzGE855RRlODY1NUlkZKS8/PLLcuSRR1pbQgcDq99u3k8dKKuslq9+XqoMxW8X5kpDU5P7s5ioSDlgZo4yFA/da4qkJiWI06DuCLVHdIP9HqH2iG6EWWxnRJqZSBkeHu7+/xVXXCGvvfaaHHjgger/Tz/9tFx88cWSl5dnWeF0cBvDPYwGDVZCFF0oKquQz39cIp/NXyTzl66WpubdE4PjYqLl4D0nqeUxDt5zcp9lMQ0W1B2h9ohusN8j1B7RjVaL7Qy/jUZkRX3qqadkxowZ6v9YcmPYsGHuz7FdV7d7DhjxD09DnFgLlsP47AfXGoo/r1jXbm3EpPhYOfQ3U5VH8cAZ2RIXq1doNXVHqD2iG+z3CLVHdCPcQjvDb6Px0UcflfPPP18OOOAAuf322+XWW2+VmTNnqrmMCFFdvXq1WmqD+A+sfkxOJdaxdWeRfDZ/sTIUF6za0O4zhJoe8VuXobjf9IkSExWl5aWn7gi1R3SD/R6h9ohuhFlsZ5jyNP76669y7733KmMR72vWrJGff/5ZJcLZc889ZfDgwZYVTBe3cVlZmaSmpjI8tRds3LZTGYl4LVu/ud1nGalJcuTe0+WY/WbIbyePk6jIXuV+cgTUHaH2iG6w3yPUHtGNVovtjB4tubFhwwa56KKLVIwsvItZWVliV+y+5EZNTY3Ex8fTaDR53dZs3u42FFdvym/3+cB+qcqbiNee2WMkIoIhwNQdsQPs8wi1R3SD/R6xo/YCvuTGypUrVRjq5MmT5auvvpKXXnpJZs2aJVdffbX8+c9/NlcTohowIcF52TkDJfwVG7YoI/GT7xfJxvyd7T4fNjBDjmozFKePG8G5K11A3ZFgQe0Rao/oBvs94hTt+W00PvDAA3LTTTfJlClTZN26dXL33XfLBRdcIMccc4xcddVV8sorr6gMqjAoif+GUGlpqaSlpWnpaUT9u6o3MvYuXrtJPv1+oXz2w2LZUlDU7vPRQwa4PYqTRg/T8hr2BN11R4IHtUeoPaIb7PeIU7Tnd3jqwIED5Y033pCDDjpINm/erNZjXLVqlftzeB4vu+yydvvsgN3DU2trayUuLk6bwXtlTa08+c6X8tpn36llMDJSk+X0o2bJxf93hFrqorm5RX7JXSefzl+slsdABlRPJowYLMfsN1MZiuOGDdLmulmJjroj9oDaI9Qe0Q32e8SO2gtoeCq+2EjbGhERof7vyWGHHSaLFy/293SkzW2MOGNdgMF40jX3yZrN+e7lL2A4znnrU3nvm59l78njZO6vy6WorLLd300dO9wdejpq8IAgld456KY7Yh+oPULtEd1gv0ecoj2/jcZrrrlGjj76aJk6daqsXbtW7rzzzg7HxMY6e1F0q4HhXVJSIunp6Vp4fOBh9DQYDfB/hJ56hp/uMXG0MhKP2ne6DB2QEYTSOhfddEfsA7VHqD2iG+z3iFO057fR+Ne//lWOOOIIdyKcCRMm9PrLiWjl8UFIqrfB6ElUZITccsHv1RIZgzLS+rRsuqGT7oi9oPYItUd0g/0eCRZB8TQCGItMdGMdsPoRZ6zL0w6EonZFY1Oz/PHYg+j9CjA66Y7YC2qPUHtEN9jvEadoz68F7JApFet8+MPPP/8sn3zySW/LpQXIDlpUVKTedRAukt50Rf+0ZBqMfYBOuiP2gtoj1B7RDfZ7xCna88tozM3NleHDh6u1GD/77DMpLCx0f9bU1CTLli2Txx9/XPbZZx/5wx/+IElJSZYUzunAkMK10mVeGbKkhof7riv2n37U/n1eJh3RTXfEPlB7hNojusF+jzhFe34ZjS+//LJ8/fXX0tjYKKeddppafiM6OloVJCYmRqZPny7PP/+8nHXWWWrO4/77c/DvD2hEXD9dBu9YVgNLZvgyGLH/opMOD0q5dEM33RH7QO0Rao/oBvs94hTt+b1OowFcnPAsYq1GrP2RkZEh06ZNU+92xM7rNBpuY1w7YzkTp1NVUyd7n3uDlFZUu0NS4WGEwYh1Gkng0VF3xB5Qe4TaI7rBfo/YUXsBXafRAF8KIxEv0jtg+aempmrl8YFXsazSNT/2nXv/Kr+ZNC7YRdIOHXVH7AG1R6g9ohvs94hTtGfaaCTWgUZEmK9OrN6UrzKpguxRQ4NdHC3RUXfEHlB7hNojusF+jzhFe4xNC7LbeOfOnVplsczN26behw/qL0nxXPYhGOioO2IPqD1C7RHdYL9HnKI9Go1BfgKQnp6uVZhg7sat6j175JBgF0VbdNQdsQfUHqH2iG6w3yNO0R7DU4MIGjEqKkp0YmWb0ZjD0NSgoaPuiD2g9gi1R3SD/R5xivZ67Glcv369fPHFFyqDKjCZhNXNvHnz5LjjjpOsrCxVuffff9/9GZb4uO6662Ty5MmSkJCgjsGyHtu3bxcnAHdxQUGBNmGCqOeqvHy1nTOa8xmD2Q466Y7YB2qPUHtEN9jvEadoz7TRWFxcLIceeqiMGzdOjj76aNmxY4faf95558nVV19tugDV1dUydepUeeyxxzp8VlNTI4sWLZKbb75Zvb/77ruyZs0amT17tunvsSMwkvv3769NmOCmHYVSU1evtulpDB666Y7YB2qPUHtEN9jvEadoz3R46pVXXimRkZGyZcsWmThxonv/H/7wB7nqqqvk/vvvN3W+o446Sr18gfVDvvrqq3b7Hn30Udlrr73U9w8bNkxCGTSi8dJpPmNKYrwMykgLdnG0RTfdEftA7RFqj+gG+z3iFO2Z9jR++eWXcs8998iQIe0TmYwdO1Y2b94sgQaLUBrrjoQ6cBfv2rVLmzBBz/mMNFiCh266I/aB2iPUHtEN9nvEKdoL70k4aXx8fIf9JSUlEhMTI4Gkrq5OzXE89dRTJTk52ecx9fX1UlFR0e7lOecS7z3dxkU3u22cw9c2DKeMjAwJDw/vcIwV5Q1Gnbrazt3oWm4je9QQx9QpFNsJekO4goET6uTEdnJinai90Ggnao/tRO2x39Otj9Dxnhtwo3HWrFny8ssvu/8PwwcFuPfee+Wggw6SQIGkOCeffLKq5BNPPNHpcXfddZcKazVeQ4e6Eq4YxmNlZaV6GfuqqqrUdllZmZpDCUpLS90JfmAMw1g1thsaGtR2UVGRKhMoLCyUpqYmtW1Y9J7WvbENcByOBzgXzoM6YRvnB/g+YxvlQHkAyodyApTbjnXC3+M8Rv0867R8vcsTPWbIAMfUKRTbydCbpw5DvU5ObCcn1onaC412ovbYTtQe+z3d+ggd77lmCWs1aWquWLFCDjnkEJkxY4b897//VUlpVq5cqQoxf/58GT16tOlCuAsTFibvvfeenHDCCT4Nxo0bN6rv7NevX6fngKcRLwM0FgxHNBSMSKO6+C6z22gQIzbY323Di4iX93Zzc7Nq4AEDBri/yzimp2UMdp062y4uq5Spp7kSJX0x5ybJbgtRDeU6hWo7ASz2iqdPmJ/shDo5sZ2cWCdqLzTaidpjO1F77Pd06yN0u+eWl5erqX547yx6s9dGI8AXICHN0qVLlfUMA/KSSy6RQYMGmT1Vt0ajYTCuW7dOvvnmm3ZuVn+A0Qhj0cxFIdbz/ZJVcsqND0pUZISseWeOREdxiVBCCCGEEEL6mp7YRz0aueNL/va3v4kVwOjEmo8GeXl5smTJEklPT1dG6O9+9zu13MbHH3+sPHNYbwTg8+joaAllYK/DhQzrHwazDklwxg3LosEYZHTSHbEX1B6h9ohusN8jTtGeaaNx3rx5XX6+//77mzrfggUL2s2FxLId4Oyzz5a///3v8uGHH6r/T5s2rd3fwet44IEHSqg3JsJ6dVgzb+WGre4kOCS46KQ7Yi+oPULtEd1gv0ecoj3TRqMvQ82zIPAGmj1fVxGyPYieDRkQU4z5jLott0GCi066I/aC2iPUHtEN9nvEKdoznT0V2X48X0jk8vnnn8uee+6p1nAk/gODGJmMnGwYg7qGRtmwzRVWjAQ4JLjoojtiP6g9Qu0R3WC/R5yivciezGf05rDDDlPzCxFaunDhQksKpgNoRGR1xVqNTg4TXLdluzQ1u9aFyR7J8NRgo4vuiP2g9gi1R3SD/R5xivYsS2EJ9+eaNWusOp02buPMzEzRJTR1cP90SU1KCHZxtEcX3RH7Qe0Rao/oBvs94hTtmTYaly1b1sGK3bFjh9x9990dktUQ/9zG8NI62eOzcuM29Z4zmqGpdkAX3RH7Qe0Rao/oBvs94hTtmTYaYRh6LkRp8Nvf/laef/75XhdIJ3ANKysr1fIhTh6857Z5Gjmf0R7oojtiP6g9Qu0R3WC/R5yiPdNGI9ZR9HZ9IpVrbGxsrwujG7h2iDN2umDdRiPnM9oCHXRH7Am1R6g9ohvs94hTtGfaaBw+fLhlX647MKjq6uqUwe1Uj8/WncVSWVOntrnchj3QQXfEnlB7hNojusF+jzhFe6aNxkceecTvYy+77DKzp9eOmpoaR3tpDS9jUnysDB3QL9jFIZrojtgXao9Qe0Q32O8RJ2jPtNH44IMPSmFhoSpEamqq2od0rvHx8SpM1QAWLY3GrsE16tevnxaZU7NHDlVuchJ8dNAdsSfUHqH2iG6w3yNO0Z7pUfwdd9yhkuGsWrVKSkpK1AvbM2bMkNtvv13NecRr48aNlhXSyW5jGN9OXmTd8DROHMX1Ge2CDroj9oTaI9Qe0Q32e8Qp2jNtNN58880yZ84cGT9+vHsftuGBvOmmmywplE4g1tjJuJfbGMXlNuyE03VH7Au1R6g9ohvs94gTtGc6PBVrMjY1NXXY39zcLDt37rSqXNq4jZEG16mUV9XItl3FaptGo31wuu6IfaH2CLVHdIP9HnGK9kx7Gg855BD505/+JIsWLXLvW7hwoVx88cVy6KGHWlYwHYC7uLq62rFhgrl5rtDUiPBwGTc8K9jFIZrojtgXao9Qe0Q32O8Rp2jPtNH4/PPPy8CBA2WPPfaQmJgY9dprr71kwIAB8uyzz1pSKJ1oaGgQp7Jygys0dczQgRIbHRXs4hBNdEfsDbVHqD2iG+z3iBO0Zzo8FRlSP/30U1m7dq2sXr1a7ZswYYKMGzfOskLp5DZOS0sTpyfByeZ8RlvhdN0R+0LtEWqP6Ab7PeIU7Zk2Gg1gJNJQ7B1wF1dVVUliYqIjF1k3wlM5n9FeOF13xL5Qe4TaI7rBfo84RXt+GY1XXXWV3HbbbZKQkKC2u+KBBx7odaF0oqWlRZxIQ2OTrN28Q21nj+RyG3bDqboj9ofaI9Qe0Q32e8QJ2vPLaFy8eLE0Nja6tzuDXgtz4HqlpKSIE1m/rUAa2rLsZnONRlvhZN0Re0PtEWqP6Ab7PeIU7fllNH7zzTc+t0nv3caVlZWSlJTkOIPbmM84oF+qZKQmB7s4RBPdEXtD7RGdtFe3a5c0lFd0+nl0SrLEZmaKU9G5/u3rjgyWNZKQEI9hvOPrrnvb26n+Vvd7PZ7TSEhX5G50ZU7NoZeREEKIZmDQ+ON5F0hLW5SWL8KjomTv555x5OBZ5/rrXHfA+u9ybPubNhqx3sfdd98tc+fOlV27dnWIld24caOV5XM0sPqTk53phVtpZE4dOTTYRSEa6Y7YG2qP6KI9eBm6GjQCfI7jQm3g6A8611/nugPWv8I27W91v2faaDz//PPl22+/lTPPPFMGDRrE8LZeuo0rKipUgzopTBD1MoxGZk61H07VHbE/1B6h9gghJDTvuaaNxs8++0w++eQT2XfffXv95UQkPDzccZdhR3GZlFVWq20ajfbEibojoQG1R6i93ax6+BGJjItznCiaamu1rb/OdQesf6049Z5r2mjEIpHp6emWFUBnYPVjcqrTyN3g8jLGxUTL8EH9g10coonuiP2h9oiTtddUXSPla1ZLee4qKV6w0K+/qVq/XnRG5/rrXHege/1Dsd8zbTRivcZbbrlFXnrpJYmPRyYo0hu3cVlZmaSmpjoqTNAITZ04cohERNCjZTecqjtif6g94hTt4Xy1O3YoA7E8N1e9V23ejA9MnWfIccdKTL9+4jTqi4tl20cfa1l/nesOWP9iv9o/FPs9v4zG6dOnt/uy9evXy4ABA2TEiBESFRXV7thFixb1ulA6ER0dLU4jN4/zGe2OE3VHQgNqj4Si9prr66Vi3bo2I3GVlK9aJY3l5R2OC4uMlKQxoyVu0CDZ+c3/uj3voMMPl+SxY8RpVKxb79fA2Yn117nugPVfbxuj0ep7rl9G4wknnGDZF5LdwBBPSEhw3CVZyeU2bI1TdUfsD7VHQkV7dYVFUr4q120gVq7fIK3NzR2Oi0pNldTsiZIycYKkTMyWpLFjJCImRg2c/TEaCSEkVO65fhmNt956q2VfSNq7jUtLS9U8UaeECVbV1Mmm7bvU9sRRXG7DjjhRdyQ0oPaIHbXX0tQkVRs2KuOwbJXLk1hfWNjxJOHhkjhiRJuBOFFSsrMlbtBAn/0oFu/GWmzdrdWG45yIzvXXue6A9U+2Tftbfc8Na8UZe8CCBQtk1apVajs7O1tmzpwpdgSpZlNSUqS8vNx2a9OpORG1tRIXF+eYwfuvK9fLidfcq+qz5p1HJD42JthFIhrojoQG1B6xg/YaKyqkfBUS1uQqQ7Fi7Tppqa/v8DeRCQmSPGGCpGRPlNSJEyV5/HiJTIg3tcg51mLrDAwanbhOn4HO9W9f91apq6uXWDUeCnN83XVvezvVv6t7bk/sI9OJcLZt2yannnqqzJ8/X02sBJhkuc8++8ibb74pQ4YMMXtKbUEDOi2ZUG7eNvU+anAmDUab4kTdkdCA2iN9TWtLi1Rv2eKei1i2Kldq87f7PDZ+8GBlIMKDCE9iwrChEtaLdPUYFDp5YNwdOtffu+72clkEHp3b3k71t/qea9poPP/886WxsVF5GcePH6/2rVmzRs455xz12eeff25Z4ZwOngCUlJSoJUyc4vExMqdmj2Roql1xou5IaEDtkUDjuewFXhVr1khTtWvdYE/CY2Ikedw4lxcxe6LyKEanpLCBiOWw3yNO0Z5po/Hbb7+VH374wW0wAmzPmTNHZs2a1esC6YbTPD6G0ZjD+Yy2xmm6I6EDtUesot2yF21zEas2bfK57EVMZn9JGjdO0iZNUkZi4qhREh5peghESI9gv0eCRVA9jUOHDlWeRm+am5slKyvLqnJpAax+xBk7habmZlm9KV9tZ49imLJdcZruSOhA7ZHegGUvKtetV1lNy9o8iV0te2Ekq0HimtiMDF58EhTY7xGnaM+00XjffffJpZdeKo899pjsscce7qQ4l19+ufzrX/+yrGA60NLS4nYbh/di3oRdyMvfJfUNrgcKOaMZnmpXnKY7EjroqD27JEQIxfq7lr0wvIi5Urlho7Q2Nfm97IXu2iP2gNojTtGeaaPxj3/8o9TU1MhvfvMbiWwL7WhqalLb5557rnoZoKCk6ycASUlJjplXZoSm9ktJksw0zg2xK07THQkddNMeDKYfz7ug29Trez/3jCMNRzP1j05Pl6qNG9uS1Viz7IXO2iP2gdojTtGeaaPxoYcesuSLiasxY7yehoYyu+czDuGN2cY4TXckdNBNe/CwdWUwAXyO45xoNPpb/6X/vF1qtm4NyLIXumqP2AdqjzhFe6aNxrPPPtuyL9cduI2LiookIyPDEeEyxnIb2UyCY2ucpjsSOlB7vin84QepXL9enOhp9Icqj7pbveyFAbVHggW1R5yivV6lDqurq5OGhoZ2+/xdIJK4ngBgrUunhMvkMnNqSOA03ZHQQSftwYPmryG46Y03RWcGHnaYDNhvn4Aue6GT9oi9oPaIU7Rn2misrq6W6667Tt5++20pLi72mUWV+AcaMTo62hGXa1dJuRSWupId0NNob5ykOxJaOFl7WES+Ki9PShYvkdIlS6R0+Qqf4Za+iB04sEPiFqdkO60rKOj2uKGzj5PksWMCWhYna4/YG2qPOEV7po3Ga6+9Vr755ht54okn5Mwzz1RZVPPz8+Wpp56Su+++27KC6eI2LiwslP79+4d8mKAxnzEmKlJGDxkQ7OIQTXRHQgunaQ9rBMJILIGRuHSpNHaRJbQrJv/txoAbTcGgYt16+fXSy8QOOE17JHSg9ohTtGfaaPzoo4/k5ZdflgMPPFDOOeccmTVrlowZM0aGDx8ur732mpx++um9LpROTwCQBtcJ4TLGfMYJIwZLZEREsItDNNEdCS1CXXsNZWVSsmSp8iTCWKzbubPDMZiTlzZ9mqRPmyaRSYmy+LobglJW4iztkdCF2iNO0Z5poxHLaIwaNco9f9FYVmO//faTiy++2JJC6QIaMSoqSpw0n3HiSK7PaHecpDsSWoSa9ppqa6Vs+QopWbxYSpcsVeGn3kSnpUn69GmSNm2aeo/t37+dp43Yg1DTHnEO1B5xivZMG40wGPPy8mTYsGEyYcIENbdxr732Uh5ITLYk5tzGu3btkszMzJAPl3EvtzF6SLCLQjTSHQkt7K49JK8pX7NGSlXI6VKpWL1aWr3m6UfEx0nalKmSPm2qpE2f7sru2clTXCxcj3UIu1unEMc5ETvV3+7aI86F2iNO0V5Ya2trq5k/ePDBByUiIkIuu+wy+frrr+W4444TnKKxsVEeeOABufzyy8VOVFRUSEpKipSXl9susyuuGxoUDRnKITO1dfUy/neXSUtLq7x73zWyV87YYBeJaKA7EnrYTXsqec2mTW1G4hLlVWyuq2t3TFhUpKRMzFZGYvr06ZI0bqyEmwjBx7ITWK+wM2AwOXGNRrvV327aI/pA7RE7aq8n9pFpT+OVV17p3j700ENl9erVsnDhQjWvccqUKWZPJ/PmzZP77rtPnWPHjh3y3nvvyQknnNCuwrfeeqs888wzUlZWJvvuu69KwjN2bOgbJmhA4xXKrN68XRmMYOJIehrtjlN0R0IPO2ivtqBgd/KaJUheU97+gLAwSRo92h1ympqTLRGxsT3+PhhETjYKQ6X+dtAe0RNqjzhFe6aMRngTjzzySHnyySfdRhsS4ODVU7CEx9SpU+Xcc8+Vk046qcPn9957rzzyyCPy0ksvyciRI+Xmm2+WI444QnJzcyW2FzdyO+CUkAUjNHX4wAxJio8LdnGIJrojoUcwtNdQVi6lS5e4E9jU7ui4BERcVtbueYlTp0iUzaJSSO9hv0eCBbVHnKI9U0YjJlMuW7ZMrOSoo45SL1/Ay/jQQw/JTTfdJMcff7zah8ytAwYMkPfff19OOeUUCWXQgE4YuBtJcLg+Y2jgFN2R0KMvtKeS16xYobyI8ChWbdzoM3lNGsJNp8FQnCpxA7hMkNNhv0eoPaIb4Rbfc02Hp55xxhny3HPP9cmajEi4U1BQoMJgDRB/+5vf/EZ+/PFHn0ZjfX29ennG7AJj6qbxDlet2W1Y7Iab199tNBTOgZf3Nj5vbm52u409j+lpGYNRp9yNruU2ckYN7bSuoVYnf7dDsU7G59jG/GQn1MmJ7eTEOgVCe0hUU756jfIi4oXt1qYm8U5ekzppsvIm4hU3dKh7jodRHrYTtRdqvycn9hFOrBPvuaHRTrpqzwymTc+mpiY1p3CPPfaQP/3pT3LVVVe1e1kJDEYAz6In+L/xmTd33XWXMiyN19ChQ9sZj5WVlepl7KuqqlLbmC9ZU1OjtktLS6W2tlZtY0mRurbECNhuaGhQ20VFRSpcF2DhTFwXADcwGshwCXtuG9cPxwOca+PGjarhsG0sX4LvM7ZRDpQHoHwoJ0C57VAnvOfmGZ7GIervcR6jfqFYJ+92clqdoDf8fpxUJye2kxPrZIX2MGm/cmOerHvjTVn4t5tk3u//IIv+eo3kvfqalK1YqQzGsMgISZ08SQb97v9k0p23y/5vvyVDL79U+h95hCSOGKHOzXai9kL99+TEPsKJdeI9NzTaSUftBTx76kEHHdT5ycLC5L///a/pQnj+vWcinB9++EElvtm+fbsMGjTIfdzJJ5+sjn3rrbf88jTCcERDwYi0i/XvlCcam3YUyv4X3KzO9/OLd0lW//SQr5MT24l1Cm471RQUSJO6geB41/7d2+ESlZwkMf37O7KdGoqKpKG8vO2pJ55TtrbbjkxKkviBA7ssS+3OnVK2ZKkUY73Epcukse0m7Ukiktcg3HT6VEnNyZHIuDj+nthHOO735MQ+gnViO1F7rX3+e8IDWCyVGNDsqd988430FQMHDlTvO3fubGc04v/Tpk3z+TcxMTHq5Y1rkLb7vSfbnjHBZraNhvXeBkZ4qvcxPS1jX9fJmM+YkhivDMbO6hpKdTKzHYp1QoeBp1CRkZGOqVN328GsE5Yc+PmCP3W7Vt3ezz2jskyGQp382cY56gsL5cfzLvC77gaNFRXKOMScRFfymh0d/i5u0CBX4hoksJk6RaJTUjoco7v2WCf2e9Re8H9PvOey37O79vzFtNHYlyBbKgzHuXPnuo1EeA5//vlnufjiiyXUQWPCTdy/f/8eNZ4d8JzPGKp10A0n6C6UwBp1XRlNAJ/jODssTRCMutcVFkr1li1SstiV4bRyw4YOx0Wlpkr61KnuLKdxA5m8hvgP+z0SLKg94hTtmTYaTzzxRJ9fjH1YAgPrNZ522mkyfvx4v86HON/169e3S36zZMkSSU9Pl2HDhskVV1wht99+u1riw1hyIysrq91ajqEKng54z9cM1eU2MJ+RhAZO0B1xFguvvR5hF+32RcTFqXmJCDmFoZgwYgQfcpAew36PBAtqjzhFe6aNRswLxHIXiIOdOXOm2rdo0SI1Z/Dwww9X8wzvuece5R3EfMTuWLBgQbt5kkYynbPPPltefPFFufbaa9VajhdeeKH6jv32208+//zzkF+j0XgCgAmuWMokVD0+htEITyMJDZygOyey4aWXJCopSZxEY1sigG5BmH5EhKRMnOAOOU0eP17C20JqCOkt7PdIsKD2iFO0ZzoRzvXXX69CRB999FF3HC0mYV5++eWSlJQkd9xxh1x00UWycuVK+f777yXYoKwwdM1M9OwrcN2Q0SgjI6NdfHKoUFJeKVNOvVptf/nozVynMUQIdd2FCs319VK2cqUUfPM/Kfjq62AXx9aMvfhPknX44Sp5DSGBgP0eCRbUHrGj9npiH5k2GhEXO3/+fBk3bly7/WvXrpV99tlHFW758uUya9YsdxraYGJnozHU+X7JKjnlxgclKjJC1rwzR6Kj6BUg+tLS3CyV69a5k7eU5eZKa2P79QK7InPWLIlO7ZjMJZRpKCuXXd991+1xe855RJLHjumTMhFCCCG6U9ED+8j0KB9ZeFavXt3BaMQ+ZAIFCB1l2Fv3qHT0DQ0SHR0dktfLCE0dO2wQDcYQItR1Z6frWLN1qzISS7Cw/NJl0ty2/pIBQi4Thg2Tqry8bs83/OTfO85wqli33i+jkZBAw36PBAtqjzhFe6aNxjPPPFPOO+88ufHGG2XPPfdU+3799Ve588475ayzzlL///bbbyUnJ6fXhdOhMbH4J5L+hOLgfeUGzmcMRUJdd8GkrrBIeRFhJMJYbGhbJNcTLB6fNn2aSuCCRC41+dvl10svC0p5CSEu2O+RYEHtEadoz7TR+OCDD6pMPPfee69aLxHg/1deeaVcd9116v9IiHPkkUf2unBOB/HFiDMOVXLzdi+3QUKHUNddXydyKV22XEqwqPySpVKzzaV5T7BMhrEMRNq0qRKTltbu8+iUZLUWYXdrFeI4p6Fz3Ym9YL9HqD2iG+EWj/dMz2n0jocFdp4raOc5jbj0dXV1IRnOW9fQKBP+71Jpam6Rt+66SvadOiHYRSIa6K4vkteU565yG4kVWA6opaXdMVHJyWoxeVeWz+kSN2hgt9exbtcutWZhZ8Boctoajb7r3ir19Q0SExON24/j607sA/s9Qu0R3WjtYrzXJ3MaDQoLC2XNmjVqe8KECfRc9JCampqQXD5k3ZbtymAE2fQ0hhyhqjuraW1uVoZhadu8xPKVuR28YuExMZI6aZLyJiLkNHHUSAkzmXUWRpGuhpFn3VX675ISSWJoNAkC7PdIsKD2iBO0Z9poxJqJl156qbz88ssqlSuIiIhQ8xnnzJkj8fHxlhRMB2D19+vXT0IRIwnO4P7pkpaUEOziEE10Z0nymm3b3BlOEXraVFXV7hgYhMkTxrs8idOmScqECRIeHRW0MjsJnbVHggu1R6g9ohthFt9zTRuNV111lUp089FHH8m+++6r9mE9xssuu0yuvvpqeeKJJywrnA4D2NraWomLiwu5MMHcjW3zGUdzPmOoEcq66wl1RUhes9SV4XTxEqkvLu5wTMKI4cpAhDcxddJkiUzgw69AoJv2iH2g9gi1R3Sj1eJ7rmmj8Z133pH//Oc/cuCBB7r3HX300apAJ598Mo1GkyDWGNcuVD2NE0cOCXZRiEa684fGqiopW7ZMSmAoLl6ilsXwJjazf9ucxGmSNnWqxKSnB6WsOuJk7RF7Q+0Rao/oRp2F99zInsTGIluqN5mZmeoz4j+w+pEGNxSfXKxi5tSQJVR11xnNDQ1SnpvrDjnF2oDeyWsik5IkfepUSZs+tS15zSB6uoKA07RHQgdqj1B7RDfCLL7nmjYa9957b7n11lvVnEZjYiVcn//4xz/UZ8Tk/KqaGjUPNJRCtbbtKpaK6lq1zeU2Qo9Q1Z1n8prKDRvcRmIZktc0NHRMXpOTI+nTp0ratOmSNHqU6eQ1xHpCXXskdKH2CLVHdKPV4nuuaaPx4YcfliOOOEKGDBkiU6dOVfuWLl2qDMgvvvii1wXSjYaGhpBLHrRygyvcLzEuVoYOYFKLUKSvddebJSdUTH5+vjIS1bzEpct8Jq9JGjfOneE0ZeJEJq+xKaHY5xFnQO0Rao/oRoOF91zTRuOkSZNk3bp18tprr8nq1avVvlNPPVVOP/10zlMxCaz+NK+FwENpPmP2qCFq4VASWvS17mAw/njeBd0u8L73c8+4Dcf64hJ34hq81xcVdfibhGHDJK3NSEybguQ1zOJrd0K1zyOhD7VHqD2iG2EW33N7tE4jLNYLLrjAskLoCjwoVVVVkpiYGFKhWrluo5GZU0ORvtYdPIxdGYwAn+/8fr7UFexUIafVW7Z0OCYmI8OVuEYthTFVYrh0Q8gRqn0eCX2oPULtEd1otfiea9povOuuu1QinHPPPbfd/ueff14KCwvluuuu63WhdMJY6zKUyGUSnD4P0dRBd+uffqbd/yMTEyVt6hSVuAZGYtzgwTQ0HIAdtUf0gNoj1B7RjRYL77mmjcannnpKXn/99Q77c3Jy5JRTTqHRaAJY/SkpKRJKlFfVyNadrnXusrncRkBDNIOpu9aWFpVcBq/m+npprquXloZ6td1SV68ylrbU17n+X+86pgXHtb3U3+K4+nppKC31r1yRkZI2eZKktRmJSaNHS1hEhEW1JnYgFPs84gyoPULtEd0Is/iea9poLCgokEGDBnXY379/f9mxY4dV5dLGbVxZWSlJSUkh40HJzXOFpkaEh8u44VnBLk7I4G+IJo7rKiFMa1NTe0OtnSHXZrgpA6+9Iafe3YZcndRX10h4c/Nuo7C+rp3x552NtC+Ycd89kjpxYp9/L+k7QrHPI86A2iPUHtGNVovvuaaNxqFDh8r8+fNl5MiR7fZjX1YWjQink7txm3ofM3SgxMVEB7s4jmPNY49LeGTEbo+dpyFXX688gMEGy1lExMRIeHS06z02RiKiY3bvj2nb3/b/xupq2fF595mVwyOj+qT8hBBCCCEkwEYjEuBcccUV0tjYKAcffLDaN3fuXLn22mvl6quvNns6rYHVn5ycLKEEk+AEloq2jMRmQWinYcRFxMKgMww4vEd7GHTeBl+sRES3fe7xd+2Nv1j3OfB3Zp9WVaxb75fRSJxPKPZ5xBlQe4TaI7oRZvE917TReM0110hxcbH8+c9/Vmt/AKzRiAQ4N9xwg2UF08VtXFFRoRo0VEK13MttcD5jQMg66kiJGziwvYHXhRHn8vBFS3hkpKN1R5wBtUeoPaIb7PeIU7Rn2mjEl95zzz1y8803y6pVq9TajGPHjpWYmJheF0ZHQmmdw8amJlm72TVvNYfLbQSEwUcfLcljx4iTdIessEjy010SIBxHnE8o9XnEWVB7hNojuhFu4T23R+s0Aqz5seeee1pWEB2BAY7JqaHC+q0F0tDUpLazRw0JdnFIiOgOiX2QFdYuy42Q4BFqfR5xDtQeofaIboRZfM/1y2g86aST5MUXX1TuTWx3xbvvvmtV2bRwG5eVlUlqampIhAkaoakD0lMkI5VeoVAlGLqDQUijkIRan0ecA7VHqD2iG60W33P9MhqxxofxZVxjy1qio6NDLnNqNkNTQz5EM5R0R5wFtUeoPaIb7PeIE7Tnl9H4wgsv+NwmvQOGeEJCQshcRsPTyPmM5oGX7TdPPiE/XXSxtDY2ypjzzpW0adOCEqIZarojzoHaI9Qe0Q32e8Qp2jM9O3J1F0sCfPEF0+qbdRuXlJSod7uDMubm0WjsDfWlJcpglLAwyTricJXwxvPVV+GboaQ74iyoPULtEd1gv0ecoj3TRuOMGTPksccea7evvr5e/vKXv8jxxx9vSaF0AsuVhAI7isuktKJabTMJTs8oXbxEvSeNGiVRQV6rLlR0R5wHtUeoPaIb7PeIE7Rn2mhEQpxbbrlFjj76aNm5c6csWbJEpk+fLl9//bV89913lhVMF7dxfHx8SCSEyN3g8jLGxUTLiEHMctkTSpcuVe/eYal9TSjpjjgLao9Qe0Q32O8Rp2jPtNF48skny9KlS6WxsVFycnJk7733lgMOOEAWLVrEJThMAndxcXFxSIQJGqGpE0cOkYgIrrNmlua6OilfvUZtp0+fKsEklHRHnAW1R6g9ohvs94hTtNfj0X9DQ4M0Nzer16BBg+h67yF4AhAKMAlO7yhbsUJam5okLCJCUnJyJNiEiu6I86D2CLVHdIP9HnGC9kwbjW+++aZMnjxZLb2xdu1a+eSTT+Tpp5+WWbNmycaNGy0rmA7AXRwXFxcSYYIrjeU2Rg4JdlFCkpIlrtDU5AkTJDIuLqhlCSXdEWdB7RFqj+gG+z3iFO2ZNhrPO+88ufPOO+XDDz+U/v37y2GHHSbLly+XwYMHy7Qgz9UKNVpaWqSoqEi925mqmjrZtH2X2s4ePTTYxQlJStuMxvRpwQ1NDSXdEedB7RFqj+gG+z3iFO35tU6jJ5i7OH78+Hb70tLS5O2335ZXXnnFkkLpAiz/pKQk23t8Vm/KV+8o58QRg4NdnJCjsbJSKjdsUNtpNjAaQ0V3xHlQe4TaI7rBfo84RXumPY0wGJuamlS21KeeekoqKyvV/u3bt8uJJ55oSaF0AY0YExNj+8G7MZ9xZFamxMfGBLs4IUfp0mWYjSzhMTGSMmFCsIsTMrojzoPaI9Qe0Q32e8Qp2jNtNG7evFnNacSajJdccokUFhaq/ffcc4/89a9/taRQugB38a5du2wfJsgkOL2jZIlrfcbUSZMkPCpKgk2o6I44D2qPUHtEN9jvEadoz7TRePnll8see+whpaWlanKlAbyMc+fOtaRQugDLPzU11fYen9w2T2POKM5n7N18xiliB0JFd8R5UHuE2iO6wX6POEV7puc0fvfdd/LDDz9IdHR0u/0jRoyQ/HzX3DfiH2hE7+toN5qam2VV25zG7FHMnGqWuqIiqdnmyjybZpNEUaGgO+JMqD1C7RHdYL9HnKI9055GuDixNqM327ZtU5MtiblruXPnTluHCebl75L6hka1nU1PY4+9jJGJiZI0apTYgVDQHXEm1B6h9ohusN8jTtGeaaPx8MMPl4ceeqidFVtVVSW33nqrHH300ZYUShdw7dLT020dJmjMZ+yXkiQD0lOCXZyQNRrTpkyRsIgIsQOhoDviTKg9Qu0R3WC/R5yiPdPhqffff78cccQRkp2dLXV1dXLaaafJunXrJCMjQ9544w1LCqULaMQoGyRG6YrcPFdoZc6oITQyTNLa2upOgmOHpTZCSXfEmVB7hNojusF+jzhFe6aNxiFDhsjSpUvlzTfflGXLlikv43nnnSenn356u8Q4xP+sRpmZmRIebtrp26eexokMTTVN7fbtUl9UpLbTp9tjPmOo6I44E2qPUHtEN9jvEadoL7JHfxQZKWeccUavv1x38ASgf//+tvbgMXNqzzG8jDH9+kn8EPskEQoF3RFnQu0Rao/oBvs94hTt+WU0fvjhh36fcPbs2b0pj1agEY2XHdlVUi6FpRVqm8ttmKd0cdt8xqlTbNXGdtcdcS7UHqH2iG6w3yNO0Z5fRuMJJ5zg18lQKF+ZVXsDzvf3v/9dXn31VSkoKJCsrCz54x//KDfddFPID3rtHrJgzGeMiYqU0UMGBLs4IUVrS4uULltmq6U2QkV3xLlQe4TaI7rBfo9oFZ4azNT899xzjzzxxBPy0ksvSU5OjixYsEDOOeccSUlJkcsuu0xCGTRgKMxnHD98sETaJPNnqFCVlyeNFS4vbbqNkuCEgu6Ic6H2CLVHdIP9HnGK9no0p7Ev+eGHH+T444+XY445Rv1/xIgRKkvrL7/8Ik7Irmm87Og1NeYzcn1G85S0LbURl5UlsZmZYifsrjviXKg9Qu0R3WC/R5yiPdu7GvbZZx+ZO3eurF27Vv0fmVu///57OeqooyTUQSMWFhaqdzuSu7FtuY3R9kniEmrrM9rNyxgKuiPOhdoj1B7RDfZ7xCnas73ReP3118spp5wiEyZMUGuNTJ8+Xa644gq1xIcv6uvrpaKiot0LGBfMsLh7so0wXbPbxjl8bcPqN9zG3sdYUd7e1Km6pk425Beo7Ykjhvhdp662g12nnraT2To1NzZK2YoV7vUZ7VYn6G3AgN1zVHVtJ9aJ2qP29Pk9sd8LjXai9thO1F5Ln/V7jjMa3377bXnttdfk9ddfl0WLFqm5jf/617/Uuy/uuusuNd/ReA0dOlTtN4zHyspK9TL2YZ1JUFZWJjU1NWq7tLRUamtr1XZJSYnU1dW5txsaGtR2UVGRNDY2qm1Y8U1NTWobE07RIMbkU89tgONwPMC5kNwHDYdtnB/g+4xtlAPlASgfyglQ7kDW6aelK6WlxSWojMRov+uEv8d5jPrZqU49bSezdSpctkya28oVNWq07eoEveE7PHWoYzuxTtQetafP74n9Xmi0E7XHdqL2Svqs3zNLWGtPTM0+BEYfvI2XXHKJe9/tt9+usqmuXr3ap6cRLwN0fjgHOj4YkUZ14eUzu40GMVLX+rtteBHx8t5GZlg0JLyNxncZx/S0jFbV6ZVPv5UbHn1Nhg/MkO+evd3vOnW1Hew69bSdzNZp42uvS94rr0riqFGy12NzbFcngI4lIyNDrbmqazuxTtQetafP74n9Xmi0E7XHdqL2Wvqk3ysvL5fU1FT1npycLAFJhBMRESE7duxQho4nxcXFap/VS27gCZd31h+UwXCvehMTE6Ne3hgTQD0ngprd9iyHmW2jYb23UY+BAwdaWkar6rQ6L9+dBMdMnbraDnadetpOZuvkOZ/RrnXy1p2O7cQ6UXvUnl6/J/Z7odFO1B7bidrr237PX0wbjZ05JuHdi46OFqs57rjj5I477pBhw4apJTcWL14sDzzwgJx77rkS6uBawu2MuZo9aby+WG6DmVPN0VxXJ+WrV6nttKn2S4Jjd90RZ0PtEWqP6Ab7PeIU7fltND7yyCPqHV/67LPPSmJiovszeBfnzZunktVYzZw5c+Tmm2+WP//5z8rFmpWVJX/605/klltuESc0JsJm4Ta20+AdXtzcvLbMqaOYOdUMZbm50trYJGEREZI6eZLYEbvqjjgfao9Qe0Q32O8Rp2jPb6PxwQcfdBfgySefVKGVBvAwYv1E7LeapKQkeeihh9TLqYtu2o3NBUVSU+eaF5ozypVIiPiHEZqaPH6cRMbH2/Ky2VV3xPlQe4TaI7rBfo84RXt+G415eXnq/aCDDpJ3331X0tLSLCuErsAARyYjGN128vgYoakpifGS1T892MUJKUoWL7F1aKqddUecD7VHqD2iG+z3iFO0Z3rJjW+++YYGo4WNiRTXnc0TDRa5G4z5jENoVJigESnL169X2+nTpoldsavuiPOh9gi1R3SD/R5xivZMJ8LB/MUXX3xR5s6d614bxJP//ve/lhRMF7cx4ozthuFpZGiqOcqWL8cvVMJjYiRl4kSxK3bVHXE+1B6h9ohusN8jTtGeaaPx8ssvV0bjMcccI5MmTaInqhfA8sfimrGxsba6jruT4HA+oxlK2uYzpuZkS3h0lNgVu+qOOB9qj1B7RDfY7xGnaM+00fjmm2/K22+/LUcffXSvv5y41qFEY9qFkvJK2VFUqrazR9JoNHXtlth/PqNddUf0gdoj1B7RDfZ7xAnaM200YjLlmDFjLPly3YHV369fP7EThpcxKjJCxg4bFOzihAz1xSVSs2Wr7ecz2lV3RA+oPULtEd1gv0ecoj3TiXCuvvpqefjhh5lEwyK3MZ4A2CkhiTGfEQZjdJTpZwraUrrUFZoamZAgSWNGi52xo+6IHlB7hNojusF+jzhFe6atgu+//15lUP3ss88kJydHoqLaz93CchzEfxBrHBcXZ5tLlruR8xl7E5qaOmWyhHmsYWpX7KY7og/UHqH2iG6w3yNO0J5pozE1NVVOPPFES75cd+A2Tk+31zqIhqcxe+SQYBclZMATnNI2o9Huoal21R3RA2qPUHtEN9jvEadoz7TR+MILL1j25bpjuI3j4+NtkcWyvrFR1m/dobazmTnVb2p3FEjdrkK1nRYCRqPddEf0gdoj1B7RDfZ7xCnaMz2nkVhLQ0ODbS7pui07pKnZte4mjUb/MbyM0WlpkjAsNDLO2kl3RC+oPULtEd1gv0ecoD2/PI0zZsyQuXPnSlpamkyfPr1La3XRokWWFc7p4DrimtqFlRtcoamD+6dLWlJCsIsTMpS0JcFJmzY1JDx3dtMd0Qdqj1B7RDfY7xGnaM8vo/H444+XmJgYtX3CCSdY9uW6A7dxVVWVJCYm2sLYcM9nHMX5jP7S2tIipUuWhsx8RjvqjugDtUeoPaIb7PeIU7Tnl9F46623+twmvaelxRUOagd2G42hEWJpB6o2bZbG8nK1nTZ1qoQKdtId0Qtqj1B7RDfY7xEnaK/HC/EtXLhQVq1apbax9AbCVok5YPWnpKTY5mnEqjwut9HT9RnjBg2UuIEDJBSwk+6IXlB7hNojusF+jzhFe6aNxl27dskpp5wi//vf/9TyG6CsrEwOOuggefPNN6V///6WFc7pwFCrrKyUpKSkoIcJbttVLBXVtWqb4anmk+CEQtZUO+qO6AW1R6g9ohvs94hTtGc6e+qll16qCrBy5UopKSlRrxUrVkhFRYVcdtllvS4QCW4SnMS4WBk2IIPN4Actzc1Suny52k6fFjqhqYQQQgghhATU0/j555/L119/LRMnTnTvy87Olscee0wOP/xws6fTGlj9ycnJYgc8k+CEh3MlFn+oXLNWmmtqQ24+o510R/SC2iPUHtEN9nvEKdoL78mEyqioqA77sY8Tfc27jcvLy9V7sMltm8/IJDjml9pIHDFCottCtUMBO+mO6AW1R6g9ohvs94hTtGfaaDz44IPl8ssvl+3bt7v35efny5VXXimHHHKIJYXSCbt49XINT+NILrdhej7j9NCZz2g33RH9oPYItUd0g/0ecYL2TJ/p0UcfVfMXR4wYIaNHj1avkSNHqn1z5syxrGC6uI3tkIykvKpGtu4sVts5XG7DL5rr66U8d1XIhabaSXdEP6g9Qu0R3WC/R5yiPdNzGocOHSqLFi1S8xpXr16t9mF+46GHHmpJgXQC7mJknkUW2mAO4I2lNiLCw2Xc8KyglSOUgMHY0tgoYeHhkjZ5soQSdtEd0Q9qj1B7RDfY7xGnaK9H6zTiiw877DD1Ir0jOjraNklwRg8ZIHExwS9PKFDSFpqaNG6cRCbES6hhB90RPaH2CLVHdIP9HnGC9noU6Dp37lw59thj3eGp2IbnkZg3vhMSEoLu7XHPZ2Roqun5jKG41IZddEf0g9oj1B7RDfZ7xCnaM200Pv7443LkkUeqGFkkxMEL6VyPPvpotewGMec2xjqXwc5iaXgaOZ/RP5qqq6Vi3Xq1nRaCRqNddEf0g9oj1B7RDfZ7xCnaMx2eeuedd8qDDz4of/nLX9z7LrvsMtl3333VZ5dccoklBdOF2NjYoH5/Y1OTrN28Q23TaPSP0mXLsfaMhEdFSUp2toQiwdYd0Rdqj1B7RDfY7xEnaM+0pxETKuFp9Obwww9Xa4EQ/4G7OD4+Pqhhguu3FkhDU5Pazh7F5TbMzGdMycmWiBCcG2gH3RE9ofYItUd0g/0ecYr2TBuNs2fPlvfee6/D/g8++EDNbST+A3dxcXFxUMMEjdDUAekpkpGaHLRyhBKlS5eq9/Rpobc+o110R/SE2iPUHtEN9nvEKdozHZ6anZ0td9xxh/zvf/+TvffeW+376aefZP78+XL11VfLI4880i5slXQNngAEE2O5DSbB8Y/60lKp3rQ5ZOcz2kV3RF+oPULtEd1gv0ecoD3TRuNzzz0naWlpkpubq14GWAMEnxnAFUqjsWtwjeLi4iSYMAmOOUqXuLyMEfHxkjR2rIQidtAd0RNqj1B7RDfY7xGnaM+00ZiXl2fZl+tOS0uLymqUnp4u4eE9Wv2kV8BdbRiN2SM5n9FMaGra5MkSHhEhoUiwdUf0hdoj1B7RDfZ7xCna44gxyE8AsHRJsBKS7Cguk9KKarWdM3poUMoQapS0eRrTpoduaGqwdUf0hdoj1B7RDfZ7xCnaM+1pJNaBRoyJiQnaJV3V5mWMi4mWEYMyg1aOUKG2oEDqCgpCOgmOHXRH9IXaI9Qe0Q32e8Qp2qOnMchu4127dqn3YGCEpk4YMVgiIiiF7ihZ7FpqIyo1VRKGD5dQJdi6I/pC7RFqj+gG+z3iFO3RUgjyEwAkEApWmCCT4PRwqY2pU0M6tDPYuiP6Qu0Rao/oBvs94hTtMTw1iKARo4O4OPzKja7lNnJGcT6jP0mDSpcuC/mlNuygO6Iv1B6h9ohusN8jTtGeaU/j559/Lt9//737/4899phMmzZNTjvtNCktLbWsYDoAd/HOnTuDEiZYVVMnm3cUqu1sJsHplurNm6WhTd/pIW40BlN3RG+oPULtEd1gv0ecoj3TRuM111wjFRUVanv58uVy9dVXy9FHH62W4rjqqqssKZROTwCQBjcYYYKrN+Ur7xm+e+KIwX3+/aG6PmPsgAESN2iQhDLB1B3RG2qPUHtEN9jvEador0frNGZnZ6vtd955R4499li58847ZdGiRcp4JP6DRoyKigrqfMaRWZkSH8tMmv4utRHqXsZg647oDbVHqD2iG+z3iFO0Z9rTiNjYmpoatf3111/L4YcfrrZhyRoeSOIfcBcXFBQEJUwwN89lNHI+Y/e0NDdL6TJnzGcMtu6I3lB7hNojusF+jzhFe6Y9jfvtt58KQ913333ll19+kbfeekvtX7t2rQwZMsSSQun0BKB///5BCRNcuYFGo79Url8vzW0PStKmhr7RGEzdEb2h9gi1R3SD/R5xivZMexofffRRiYyMlP/85z/yxBNPyODBrvlwn332mRx55JGWFEoX0IjGqy9pam6WVZvy1fbEUTT0u6O0bX1GrM0Yk54uoU6wdEcItUeCBbVHqD2iG2EWj/dMexqHDRsmH3/8cYf9Dz74oCUF0nHRzczMTAkP77slM/Pyd0l9Q6PaZniq//MZneBlDKbuCKH2SLCg9gi1R3SjxeLxnukzHHroofLiiy9KZWWl9BX5+flyxhlnSL9+/SQuLk4mT54sCxYskFAHDRiMgbsxn7FfSpIMSE/p0+8ONZobGqQ8N1dtp093htEYLN0RQu2RYEHtEWqP6Ea4xeM902fJycmRG264QQYMGCC///3v5YMPPpDGRpfXKhBg7UfMn0T2H4TA5ubmyv333y9paWkS6mDJC+PVl6zcuE29Z48cwhDFbihftUpaGhrwy5PUyZPFCQRLd4RQeyRYUHuE2iO60WrxeM+00fjwww8rz9/7778vCQkJctZZZykD8sILL5Rvv/1WrOaee+6RoUOHygsvvCB77bWXjBw5UmVsHT16tIQ6aMTCwsIgGI0uT2P26KF9+r2hPJ8xecwYiUpMFCcQLN0RQu2RYEHtEWqP6EarxeO9Hvkr4eaE4YYw1Z07d8pTTz2lMqkefPDBYjUffvih7LHHHsqrCRfr9OnT5ZlnnhEngOs4cODAPg8TXNVmNHI+Y/eULnXOUhvB1h0h1B4JFtQeofaIboRbPN7r1Vmw9seTTz6pvIHLli2TPffcU6xm48aNKkvr2LFj5YsvvpCLL75YLrvsMnnppZd8Hl9fX6/Wi/R8AcPK9nTTmt3GhFKz28Y5fG3jHeU1vsPzGCvK62t7V0m57CqtcBuNVtepq+1A1SlQ7dRQVSUVa9ao/6e2JcEJ9ToZxzQ0NEhzc7Nj6uQ07Tm1TtReaLQTtcd2ovbY7+nWR+h4zw240QgjDKGihx12mAobhUE3e/ZsWbdunfz0009iNajcjBkz5M4771ReRoTBXnDBBcpY9cVdd90lKSkp7hfKaJQbIIGPkcQH+6qqqtR2WVmZ1LStxYd5lLW1tWq7pKRE6urq3Nu4+KCoqMg9lxOu36amJrWNLEUos5GxyHMb4DgcD3CuTZs2uRsV5wf4PmMb5UB5AMqHcgKUuyd1ys1zzWeMjoqU0UMGWF4n/D3OY9SvL+oUqHbaPH++tLa0SFhkpDQNyHREnYwwBbw7pZ2cqD2n1onaC412ovbYTtQe+z3d+ggd77lmCWs1aWoieymS0PzhD3+Q008/XYWOBpLhw4crA/XZZ59174Ohevvtt6u5ld7Ac4eXARoLhiMaCkakUV2sWWJ2Gw1irHfi7zZcwsYTBDPbPS1jd9uP/+cLueuFd2XymGHy2SM3OaJOgWqntU89Ldve/0BSp0yW6Xff5Yg6ObGdWCe2E7XH3xP7CPblvD/xnstxRKvfY6Py8nJJTU1V78nJyRKQdRoxx/CQQw7ps/lQyJy6pi1E0GDt2rXKmPRFTEyMenljLGzpucCl2W3POpvZ9lxY03uRTTwNQGZY72N6WsbutnPbMqfmjBoWkDp1tR2oOnlvW1Wnsrb5jOnTpnV6TKjVybip4skVdOeUOnW3zTrZo52ovd7/bvh7ovbY74XW/Yn9Xmi0U3fbTtaev5i2/OD168sEGldeeaUKe0V46vr16+X111+Xp59+Wi655BIJddCY8ID2JK64p+QamVNHDemz7wxFGsrKpCovz200Oolg6I4Qao8EE/Z7hNojutFq8XjP9ukTkVznvffekzfeeEMmTZokt912mzz00EMqNDbU6evFhmvr6mVDfoHaZubUrildulS9R8TFSdK4sX3QOn0HF7km1B7RDfZ7hNojuhFusZ1hOjw1GBx77LHq5TSMBDjR0dE9chObZfXm7dLS4nraMHHk4IB/XyhTssQVmpo6eZKER4bEz8S2uiOE2iPBhv0eofaIbrRaPN6zvafR6Y2J7Ep9FSZoZE4dPjBDkhPi++Q7Q5XSJUscGZoaDN0RQu2RYMN+j1B7RDdaLR7v9cqFgnStsbGxlhRER+AuzsjI6LPvy93gms84cZRrGRLim9qdO6V2xw61nTbNtT6jk+hr3RFC7ZFgw36PUHtEN8ItHu+Z9jQi7T3mFQ4ePFgSExNl48aNav/NN98szz33nGUF0wFY/lijpa88PivbkuBwPqN/8xmjUpIlccQIcRp9rTtCqD0SbNjvEWqP6EarxeO9bo3Gt956S7Zs2eL+P9ZHfPHFF+Xee+9VMbIGSFLjuZYi8Q9jkc9AA2N/1SZjuQ1mTu2K0sUuozFt6lQJ68NMwU7UHSHUHrEL7PcItUd0o8bC8V63I2KEn+6///6ytM378tJLL6klL5C9NCIiwn3c1KlTZfXq1ZYVTAcwKbVfv359koxkc0GRVNfWq216GjsHT2NK2uYzwmh0In2pO0KoPWIH2O8Rao/oRpjF471ujcbjjz9e3nzzTTnjjDPU/7dv3y5jxozx6cnCApLEnIGCJwB9ESZohKamJMZLVv/0gH9fqFKzdas0lJaq7fTpzkuC09e6I4TaI3aA/R6h9ohutFo83vMr9u63v/2tfPvtt2o7Oztbvvvuuw7H/Oc//5Hp06dbUiidQDKhvkyCkz1qCD1MXVCyxOVRj83sL3GDBolT6SvdEULtEbvAfo9Qe0Q36iwc7/mdPTU93eWduuWWW+Tss8+W/Px85V189913Zc2aNfLyyy/Lxx9/bFnBdADuYuO69tVyGwxN9W+pDTWf0aHhm32pO0KoPWIH2O8Rao/oRpjF4z3TWT4QrvrRRx/J119/LQkJCcqIXLVqldp32GGHWVYwHYC7uLq6uk/DU7NHcrmNTtujuVlKly1X22kOXJ8xGLojhNojdoD9HqH2iG60Wjze69E6jbNmzZKvvvrKkgLoTkNDg8THxwf0O0rKK2VHkWueHj2NnVO5YYM0VVWp7XQHrs/Y17ojhNojdoL9HqH2iG40WDjeM+1p3Lp1q2zb5gp1BL/88otcccUVKqMqMe82TktLC3gYpBGaGhUZIWOHOXeenlXzGeOHDZWYfv3EqfSV7gih9ohdYL9HqD2iG2EWj/dMG42nnXaafPPNN2q7oKBADj30UGU4/u1vf5N//vOflhRKF+AurqysDHiYYO5Gl9EIgzE6qkfOZa3mM6Y7dKmNvtYdIdQesQvs9wi1R3Sj1eLxnmmjccWKFbLXXnup7bffflsmT54sP/zwg7z22mvy4osvWlIonUAyoUDD+Yx+tENDo5StzHX8fMa+1B0h1B6xE+z3CLVHdKPFwvGeabcT1mKMiYlR20iGM3v2bLU9YcIE2bFjh2UF0wG4i1NSUvrMaMwZNSTg3xWqlK9eLS319WgUSZsyWZxMX+mOEGqP2AX2e4TaI7oRZvF4z7SnMScnR5588km1ViOS4Rx55JFq//bt26Wfg+eBBQK4iysqKgIaJljf2Cjrt7qM+exRzJzaGSVtoalJY0ZLVFKSOJm+0B0h1B6xE+z3CLVHdKPV4vGeaaPxnnvukaeeekoOPPBAOfXUU2Vq2/yvDz/80B22SuzDui07pKnZ5Zqm0dg5pW1JcNI1CE0lhBBCCCEkoOGpMBaLioqU5YqMPAYXXnghU/j3wG2cnJwsgWTlBldoalb/NElLSgjod4UqTbW1UrFmjTbzGftCd4RQe8ROsN8j1B7RjTCLx3umPY0gIiKincEIRowYIZmZmVaVSwvgLi4vLw9omODu+YwMTe2MsuUrpLW5WcIiIyU1J1ucTl/ojhBqj9gJ9nuE2iO60WrxeM8vT+OMGTNk7ty5ylCcPn16l+t9LFq0yJKC6UJ4eI/sdtNrNDI0tXNKl7pCU1MmTpCI2FjRgUDrjhBqj9gN9nuE2iO6EW7heM8vo/H44493Z0w94YQTLPty3YHxnRTApCt4spDb5mnMHsnMqd0lwdEhNLUvdEcItUfsBvs9Qu0R3QizeLznl9F46623+twmvTfqysrKJDU1tUvvbU/ZtqtYKqpr1XbOaIan+qKhvFyqNmxU2+ltSZ2cTqB1Rwi1R+wG+z1C7RHdaLV4vGc6EY4nVVVVHRaNZIINc0RHR0ugyN3oCk1NjIuVYQMyAvY9oUzpsuXqHWGpyePHiS4EUneEUHvEjrDfI9Qe0Y1oC8d7pgNd8/Ly5JhjjpGEhAS1YCTmOeIFK9Y7OQ7pGlj9uI6B8vYYSXCyRw3hXI5OKG0LTU2dPEnCo6JEBwKtO0KoPWI32O8Rao/oRpjF4z3TnsYzzjhDuTuff/55GTBgAAeevQDXsbS0VBnbgRjAG0bjRM5n7H4+oyahqX2hO0KoPWI32O8Rao/oRqvF4z3TRuPSpUtl4cKFMn78+F5/ORGJDWC2TiMJDpfb8E1dYaHU5m9X2+maJMHpC90RQu0RO8J+j1B7RDdiLRzvmQ5P3XPPPWXrVpcxQnoHrP74+PiAeHvKq2pk685itU2j0TelS1xLbUQlJ0viqJGiC4HUHSHUHrEj7PcItUd0I8zi8Z5pT+Ozzz4rF110keTn58ukSZMkymse2JQpUywpmC5u45KSEklPT7d8AL+qbX3G8PAwGTc8y9JzOy40dcoUCdNo3cJA6o4Qao/YEfZ7hNojutFq8XjPtNFYWFgoGzZskHPOOce9DwVBwfDe3Nzc60LpBJ4ABAJjPuOYIQMlLoaZMn3Gebd5GtOm6TOfMdC6I4TaI3aF/R6h9ohuxFs43jNtNJ577rkyffp0eeONN5gIp5fAyI6Li5NAzmfMHsX1GX1Rsy1f6otd4bvpmhmNgdQdIdQesSPs9wi1R3QjzOLxnmmjcfPmzfLhhx/KmDFjLCuErmCNS8NtHG5xeGRuW3gq5zN2vdRGTEaGxA0eLDoRSN0RQu0RO8J+j1B7RDdaLB7vmT7DwQcfrDKoEmueACQlJVk+r6yxqUnWbNruXqORdDGfcdpU7eb1BUp3hFB7xK6w3yPUHtGNMIvHe6Y9jccdd5xceeWVsnz5cpk8eXKHRDizZ8+2pGA6gEaMiYmx/LzrtxZIQ1OT2s4eyfBUb1pbWqR06TItl9oIpO4IofaIXWG/R6g9ohthFo/3TBuNyJwK/vnPf3b4jIlwzLuNi4qKJCMjw9IwQSM0dUB6ivRPS7bsvE6hcsNGaaqqUttpU/WazxhI3RFC7RG7wn6PUHtEN1osHu9F9qQAxBpgZKemploeJmgkwZk4kqGpXc1njB88WGL7Z4huBEp3hFB7xK6w3yPUHtGNMIvHe6aNRmIdaMTo6OiALbfBJDi+KW2bk5s2Xb/Q1EDqjhBqj9gV9nuE2iO6EWbxeK9Hvspvv/1WzW1EBlW8MI/xu+++s6xQugCv7c6dOy313mL9QRqNXVzzxkYpXb5Cy6U2Aqk7Qqg9YmfY7xFqj+hGi8XjPdNG46uvviqHHnqoWizysssuUy+sAXLIIYfI66+/bkmhdHoCgDS4VoYJFhSXSWlFtdrOGc0kON6Ur1kjLfX1uPiSNmWK6EggdEcItUfsDPs9Qu0R3QizeLxnOjz1jjvukHvvvVdlUDWA4fjAAw/IbbfdJqeddpolBdMBNKJ39lmr5jPGxkTJiEGZlp7bCZQucYWmJo0aJVHJeiYJCoTuCKH2iJ1hv0eoPaIbYRaP90x7Gjdu3KhCU71BiGpeXp5V5dICuIsLCgosDRM0QlMnjhgiERHMjNlZEpw0DZfaCKTuCKH2iJ1hv0eoPaIbLRaP90xbFUOHDpW5c+d22P/111+rz4i5JwD9+/e3NEwwd6NruQ0mwelIc12dlK9eo7bTp+s5nzFQuiOE2iN2hv0eofaIboRZPN4zHZ569dVXq3DUJUuWyD777KP2zZ8/X1588UV5+OGHLSmULqARjZdVMAlO55StWCGtTU0SFhEhKTk5oiuB0B0h1B6xM+z3CLVHdCPM4vGeaaPx4osvloEDB8r9998vb7/9tto3ceJEeeutt+T444+3pFC6AHfxrl27JDMz05JFN6tq6mTTjkK1nT2KazR6U9I2nzF5wgSJjIsTXbFad4RQe8TusN8j1B7RjRaLx3s9WqfxxBNPVC/SO9CAVg7cV2/KV0tu4InChBGD2TydJMHRdamNQOmOEGqP2B32e4TaI7oRbvF4r8dnaWhokG3btsmWLVvavYj/wMAzXlaQm+dKgjMyK1MS4mLZFB40VlZK5YYNajtNc6PRat0RQu0RuxPsfm/R+nw5/+F31LuO6Fz/hevz5YJH3lPvOqJz2we7/lb3e6aNxnXr1smsWbPU2ozDhw+XkSNHqteIESPUe6C5++67lSftiiuukFAHjVhYWGhZYxrzGbNHMjTVm9Kly3DBJTwmRlImTBCdsVp3hFB7xO4Es9/Ddz7/1ULZUliu3nXre3WuP+r6wpcLZGtRuXrXqe66t70d6m91v2c6PPWPf/yjREZGyscffyyDBg3q02Qav/76qzz11FMyxSGLssNdjPmhVrFyg8tozBnNLLbelLQttZE6aZKEa75GodW6I4TaI/6AJ+2Pf/KT/PmY38qMMYMd1e81t7RIQ2Oz1DU2Sb371azel28qkLX5Reo4vL/w1UIZNShddGHjjhJt66/qvr1YbeNdp7rr3va+6g9v8x5jh4Rsv2faaETW1IULF8qEPvbWVFVVyemnny7PPPOM3H777eIEYPk3NTUpI7y3xndzc4us3uxyfWePotHY+XxGZzxwsIvuCKH2SE+euE8fndUn/U9LS6vUNzVJXUOT1NTWSVOLSH1TcwfDDi9l8DV47GvC/13b7Y1B/L9ZGjy2G5ua/S7Tm/OWic7oXH+d6657/cPDwuTFrxfJzDGD+2zsZfV4z7TRmJ2dLUVFLqu5L7nkkkvkmGOOkUMPPbRLo7G+vl69DCoqKtS74Zo13nHxzG4jC5GRutbfbVj5Rjyx9zY+Ly4uVpNUjbIZx5gt48b8nVJX39guPDUYdepqu6fXvbft1FBcLDXbXOtXpk51zWcM9Tr1pp0AdJeRkaE6EifUyYnt5MQ6UXv6ag9P2D2fuP+6dptMHjFAGppapK6hURllDU3NyrgzjDnsxz5jWxlzbQYgjvH07Lm2245xG3nmjLlAgGGar8CwlPgYiY7qUS7CkAKGdXnN7jGZTvXXue6A9W9q1/4tra2q71uwLl/2HDfENvdcM5hW7T333CPXXnut3HnnnTJ58mSJ8gr1S05OFqt58803ZdGiRSo8tTvuuusu+cc//tFhP4zHlJQUqaysdJcT+3DhkpKSpKysTKKjoyUhIUFKS0slNjZW4uPjpaSkRL1jDie2cWxMTIwynFNTU9XfIF44PT1dXQuktjUW0jTS3KJhcAxcxLD4cZ4BAwZIc3Oz+n68YOiibGjYuro6qampkX79+kltba36P86PfUhAlJaWpjyvEIpRp4W5a1W90pISJCE6Qm0Ho06NjY3qe3EMytqbOlnVTvWLF6tzRSQkSNywYWo71OvU23bC32DbSXVyYjs5sU7UnrO0V15ZJREx8bKzuExKKqqlJTxSdpVWSEVNndQ3ixSVV0plTb2s3VHS7p580ytfSbCf+kdHhktsdJRER0ZIVES4JMTFSGR4mESFh0liQpxEhInaTk6Ml7DWFnVMSlKCtDY3SUxUhKQmJ0lTQ706R1pKktTX1khiXKykpSRLTVWFJCXGy02vfSPrtxdLS2v77x6QliQ3n/QbpQG0086dO93tVFBQ0GU7oW2MdkLbGO3kOY5A2xjthHejj6iurnZrD8ca2jMesEN75eXlbu1Bb4b28J2G9jAQNbQHvRnaQ3kN7aEet737s1TWNqgB8+76iwxITZSHLjxG/W0o1cnfdkI9/vLEh1JZW9+h7TNTEuTvJ++r/jaU6mSmnVD+v//7Bx9t79L+nacfqM4bSnWqMdFOqMf1r/zXZ/1f+OpX2WPsYFvcc80S1mrS1DTStqKgnuA02AdDyEq2bt0qe+yxh3z11VfuuYwHHnigTJs2TR566CG/PI1Dhw5VIkBD2ulJrvKCNTQoYRjXsKdPcu964V15/D9fyKxpE+X1O65wzNNpK9pp1QMPSsHXcyVjn71lys03OaJOvWknfA7d4alTRESEI+rkxHZyYp2oPXu3E7x55dV1aqBTXlMn5dW1ru3qOmUEVtTUqyfnFfh/bb3LMGy09p6PoUVMVGTbK0Ji3duuV2x0pDLyPLdjPbfbjED1t9FR6t3YHy4tEh8bo14wDkEgf0/wKPzt5S87revtZx6mPA5O7SN+WbO1y4cDd5x1uMwckxVSdfK3nRZt2C43vtR12+81fmhI1cnMdnfaR9vDcAqlOpkpFyIpuqr/nWdD+4ODes+FYQuDFO/+OvxMexq/+eYb6UswfxJW9IwZM9z7YJjOmzdPHn30UWUg4kIYwAAzjDBPcOE833uy7bnOiZlto2G9tw2jFhY/ju1NGXPzXOGX2aOHmjqP1XXqattsnXq67Vle7FeZU9V8xmnu40K5Tr1tJ3Qw6CSgO6fUqbtt1ske7aS79nwlgglUnRCiCSMPhh2MPhh7ldj22Of6HIZgnSUGIIyzlIRYSYmPlaT4GBWGlxwfI/NzN0tJZW27ME0UfVj/VLn11IMlNibKbRTCm+dZL6uA9vDUPjk+pd21CpTGwEtzF6l6+no0j/0v/3exMhqd2O9hYIr6dVV/XB8YDqFSJ3+2jXNg7po/bR8qdTKjPX+07932dq+TmXK1trZ2W3/vuY3Bvuf6i2mj8YADDpC+5JBDDpHly5e323fOOeeoRDzXXXddO4Mx1EBDG/MZe0tu23IbOUyC047a7dulvrBQbadPn2bJtQ51rNQdIdSef/QmEYwxN2i3t69Oeftc+7yNQNd+GI29NQCT42MlJQGGHwxB1zuMQBiG7u22d/wf3j5vFqzbJh/+vNrH9RDZvKtMCsqq+iSbYF/3e43NLVJYXuVz0Aiwv7C8Wh2Ha+00dK6/znUHrH+Lbdrf6n6vRzNxEer53HPPyapVq9T/c3Jy5Nxzz1Xhn1aDuN5Jkya124f4ZsQVe+8PxUEE3MaIVe7Nk9VdJeVqDgngGo2+l9qITk+X+CFcv9JK3RFiFp21550I5uNfVsuQjJQ2L58r5NOXYYgwUCR+scwAjIuR5DZvoGHsKYPQa58vA7An7d2dx6Wvsgn2tfZwzedcNFu1Y2ekJsQ50mjQvf7edYf2GhubJCpqdwZLp9Zd97a3W/2t7vdM3xUWLFggRxxxhJqsuddee6l9DzzwgNxxxx3y5ZdftgsjJd03JiakYpJqbxrTCE1FaM/oIQN42X0utTFVu0FqoHVHiO7agwcQRp23l88w9oz9mBu4aVdZu7+d89GPPfrOKISAehl7uz1+rn1JbQaiESaKOX/BuN528jgEQ3uZqYnqpSs619+z7ggRRCISaM87NNqp6Nz2dqq/1f2eaaPxyiuvlNmzZ6v1EjGxEiBLz/nnny9XXHGFmmsYaP73v/+JE0DnYcQZWxGaOn74YIlqaxMi0trS4p7PmDaNoalW644QJ2kPSzsgy6crAQySwbiMPk/vn3cYaG0vPYAR4eGSlugV6ulh7LkNQeUhdH0WLAMw1J+421l7xNlQe8Qp2uuRp9HTYFQniYxUy3Agyykx9wQAKW+Rcrc3g4CVG12exomjGH7pSVVenjS2pXKGp5FYqztCehKi+dhHP8olx+3tzhwXSAPQ7fnzMefPHQbalhm0twYgEri0nwPoMvwQDvrVkvVSVFHdzuOG1OujB6Upo8rJv0M7PXFnv0eoPaITrRb3e6aNRqRl3bJli0pE4700BuYfEnNgvRc0Zm9gEhzflLSFpsZlZUksE79YrjtCzN68XvhqgWwrrlDvM/xMBIPF2dXyDkaop6ex17bfPS+w7b2mvtESA9A956/NEGwXBuq1D3MAfdUHiWBe/9bVF3niWui5WBnSfZEIhrDfI8GD91ziBO2ZNhr/8Ic/yHnnnSf/+te/ZJ999lH75s+fL9dcc42ceuqplhRKFzDAQEKf3lBb3yAb8gvUNjOndj6fkVirO0J6lgimWG3j/d/fLZeB6Uk+5wJ6GoK9NQAjlQG429jbnf2zvdGHfUlxrs/iOjEAQzkRjO6w3yPUHtGNMIvHe6aNRhiLKMRZZ52l5jKCqKgoufjii+Xuu++2rGA6gAFFbW2tSirU0wHDms3bpaXFNRqZODJw4V6hRktTk5StWKG2OZ/Ret0R0h3NLS2SX1whG7YXy9rtRfLpr2vbff7slwt6ZgC6s3/uNvpcnj9j29MbaJ0BGOqJYHSH/R6h9ohutFo83jNtNCJt68MPPyx33XWXbNiwQe0bPXq0xMfH97owOoJYYzRmT1nZlgRn2MAMSU5gGxhUrFkjzbW1ajttyhQLWspZ9FZ3hHiHkGLNvXXbi2XDjmJZvwPvJd2uFZgYGy39kuPbEsAYhuDuOYHJXmsExsdEhdSDDjslgiHs90jw4D2XOEF7po3G8vJyaW5uVulbJ0+e7N6PdMJIiIM5j8Q/MPjBdewNuRtcRmP2qKG87D5CUxNHjZLoVOvXD9Vdd0RfausbZePOElm/vdj12lGsDMam5hafx8Mz2NTSov7O0+GGRDBZ/ZJlzkXHhZQhGKqJYHSH/R6h9oLDZ4veko8XvCHH7nGqHDXjD9oJ8bMg1t/qfs+00XjKKafIcccdJ3/+85/b7X/77bflww8/lE8//dSywungNsYEVXhpezpoys1zGY2cz+g7CQ7nMwZGd0QPMNfQZRiWKA8iPIn5xeWdhlv2T0mQMVn9ZMygtldWP9m0s1T+9vKXnSSCKWIiGNInsN8jwUJn7bkMptfVtvGuk+H4WZDrb7X2TBuNP//8szzwwAMd9h944IHyt7/9rdcF0o2GhoYeh/ZiwdjcPNdyG9kjmX3PoLmuTspXr1LbaVOZBMdq3RHngRtLUUWNK6x0e7Gsa3vfVV7t83jcewb3S5Exg9LdRuLoQf3UHELv8/7j9blMBENsAfs9Qu0Fx2Ay0Mlw/Mwm9bey3zNtNNbX17sT4HjS2NioJlsS/4HVn5aW1uNLtrmgSKpr69U2PY27KcvNldbGJgmLiJDUyZMoSYt1R0IbJM7aUVKhDETDi4htLGHRWfKZ4Zmpbs8h3kcNTJe4mKhuv4uJYIhdYL9HqL3A0tLaIvWNtVJTXy1fL31P5uX6jjyE4bSlcINMHr6XY0W5fPMvsmzzzz4/60vD0ep+z7TRuNdee8nTTz8tc+bMabf/ySeflJkzZ1pWMB3AU/iqqipJTEzskdvYSIKTkhgvgzM5R817PmPy+HESSW+a5bojoQPmGW4pLHPPPcT7xoKSTpexiImKlNEDXd5DeA7HZKXL8My0Hidq8U4EozK51dRKXPzuTG5MBEP6AvZ7JFh8uvBN+WThG3LMzFPl6Jmn2LYhGpsapLahRmobqtreq13v9Xg3XjXKKKxrqJaaBrzXuN/xam03c71zYFB1ZlTpwMd9ZDha3e+ZNhpvv/12OfTQQ2Xp0qVyyCGHqH1z586VX3/9Vb78suO8FdJ9iGlPWbWxLTR11BAO/j0oWbxEvTM0NTC6I/akrqFJ8owENW3ZS/N2lqrMpr5Iiot2hZUacxCz+sngfskSER4esEQwuIFVVFSohGl8YEH6GvZ7JBghijAYAd7R7wXCUICXD0Zbe2PPy/gzDL96r/+3fd7U3Ls1cXvCgFTnTa3aWeYam3cHkuP0hbfRyn7PtNG47777yo8//ij33nuvSn6DNK5TpkyR5557TsaOHWtZwXQAnUdKSs8zexqexuyRzJxq0FhZKZVtS8GkT5tmQSs5j97qjgSfqtp6d1gp5h7ifWthuUou44uM5HiX59AjxDQzNaHPDTdqjwQLao/YeU4bvHwuj52HB6/e8ORVuf/vy9iDEYiwUH+9fP4SHRkjcdEJEhcdL3ExeDde8bu3Y7z+H50gP62ZK3OXv9/t+Y/d4zRHzm38zEe7+wLZVEOt3zNtNIJp06bJ6693f0FI1+Cpe2VlpSQlJfUqPJXzGXdTtnw5HqtIeHS0pEycSAkGQHekdyxany+Pf/KT/PmY38qMMYO7Pb6ksqZdeCneC0qrOj0ey1ioBDVtBiKMxbREe6zJSe0RXbXHZQecu+xCS0uz1DXWtjPivl/1hSzYMM/n8TAovsv9XGKiYt2ev6aWrte0NUt4WHh7I8+HcefTGHT/P14iwntkIshJe58jcTHxXRpOTjUYgVEvO9Tf6n6vR4rYsGGDvPDCC7Jx40Z56KGHJDMzUz777DMZNmyY5OTk9LpQpHtKK6pkR1Gp2qbR2HGpjdScbAmP7j5RByF9CTrw579aKFsKy9X79NFZ7o4cnxWUVro8iEaI6fZiKanynWAsPDxMhvdPbZe9dPSgdEmIjWajEmIjgp12P9jYuf7odxubGzqdv7f7/52HedY11pj+3vKaki4/j46M9TL2Ej2MvniJj0mQ2OgEiY/Ge3zbe0Lb/niJiYwN6kPhrgwnJxuMTq9/t0bjmjVrZPz48e7/f/vtt3LUUUepMNV58+apOY4wGjHHESGq//nPfwJdZseAHzTm9vSE3Lb5jFGRETJ22CCLSxa6lCxpm8/I0NSA6I70joXr89XahADvz37xqzS3tKo1EDEHsaquodOEMiMHpsnYrAxlGOJ9RGaqREf17ElwsKD2iG7as0va/WAR6PobXj5X6Ga13/P3PPc3W+zlM8MFh13vI8yz514+uxtOoWwwhWL9re73ulXlu+++KytWrJCXX35ZIiIi5Prrr1eG4lVXXaXcnQYHH3ywPProo5YVTAd6kxTCCE0dM3RQyA0cA0V9cYnUbHFdF85n7BwmI+l7SqtqZeXmnTLnox/b7f/39ys6HAtPIcJLPecgDs1IkYgIaxPUBANqj+ikva7mNulgOHZXf7TJoVNPlJr6tjl73SRw8TXPDwaj1cDLZ3js3B48w6PnR5jn3GXvu5PfdAUMiGkj9xY9DCdnhibbvf5W93vdWht//etflYF4xBFHyNdffy3Lly/3OZ8R3saiItcTdOI/4T3MVMj5jB0pXeoKTY1MSJCkMaMpwwDojvjXSW8tKldG4srNu2Tllp2SX1zR6fHjBmfIzDFZMiYrQxmLA9OcPdeU2iNO1x6yUL7/88vyzYoPuzwOhtOv6+bJgNTu5zaHGjvL8mVneddZJGFY+WNcmSE8LKJLg8+3AegK/cQ+GH0R4T1bYsgAy2qgD7fDnDY7gHrqUlc71t/Kfq9bozEqKkqtyfjvf/9b/T81NVV27NghI0eObHfc4sWLZfBg53V8gQSdiqe31gy5ea7OOGeU89IV9zY0NXXKZAmL6F2n72R6ozvSkYbGJhVqunKLy0DM3bJLKmrqfVx3GJTt94W3GYd/PHSmow1FA2qPOEF79Y11UlK1S0oqC13vVYXttsurS/zOZAnDqjvjSieQHKbbZC3u/S5jb7cRmChREdG26EudOqeN6H3P9Tuu8fe//716P+WUU+S6665TRiQKg/U/5s+frzySZ511lmUF08UjUVZWpgxxM51cfWOjrNuyXW1zuY3d17K0zWhkaGpgdEdclFfXKePQ8CKuyy+SxuaO6yD1S4qXScMHSPbwTAmTMJUx1RsskQGDE3Md9xjr/AdA1B6xu/ZwXHV9ZZshuKv9e9s2PreK0QMnyqgBzsv0vXHnKtlQsKrb42ZNPEqFqCovYFSchPfSy2cn7DCnjehNq8XjPdOT4e6880655JJLZOjQodLc3CzZ2dnq/bTTTpObbrqp1wXSjeho85kO123ZIU1tg9RsehoVtTsKpG5XodpmEpzA6E7XDndbUUWbkbhTeRO3FZV3OA598cgBaZI9bIDk4DU8UwakJqpOGue49MmPfHoajb998etFMnPMYC2MeGqPBFN7WAS9sqbMwxDcJcXKS9jmKawslIamOv/OFxkj6Yn9JT0p0/WemCnpSW3vif3lxzVfyScL3+z0751uQHS3Xp3T6w9QP9wDEIZ7zEz95vQRZ91zI3vy5c8884zccsstan5jVVWVTJ8+XcaOHWtZoXQBA8SEhATTf7dygyvZS1b/NElLTgxAyUIPw8sYnZYmCcOGBrs4jtSdDjQ0Ncu67UVuLyJCTeFZ9CYmKlImDOmvjEMYiROH9pfEuBif54QXsrC8yqfBCLC/sLxaHYcsqU5Gd+1xrb7Ar9XX2NwoZdVFu8NFvUJIS6uL/M6WmRCT1GYU7jYE3QZiUqb6vKsHPUfPPFXCwsK1DVFkiObuOY54ERLq99wep92EpxEv0suQytJSSUtLM+Vh2D2fkdffoKQtCU7atKlaeGuCoTsnUlGDUNNdktvmRVyDUNOm5g7HpSfFtXkQ4UnMVJlNI/3MZgpDcM5Fs6W8pnPvRWpCnOMNRt21Z+e16kKp/siY6Rkq2j58FPOJy/yaT4iQ8eT4NN8GYZvHEOGSvUX3EEXd6697v0ecpT2u1RBkYmNje5w5lfMZXbS2tEjpEpfRyPmMgdOdEzrP7cUINd3lDjXdUljW4Tj0q8Mz05RxaBiKA9NcoaY9JTM1Ub2IntrjWn3+rdWH32hVXYWHh7CjtxDLM/gD1rlLS8hoMwr7S1pif0mKSZUBaYOlX3Km+iwyIkp0SLsfbHSvv679HnGe9mg0BhEMQuPj4039DW6quYbRyPmMiqpNm6Wx3DXPLG3qVOsbymH0RHehCDyG63cUuw1EvJf5DDWNkPGD20JNkbhmaGanoaakd+iiPU+4Vl/Xa/Ut2/SLJMQmKYOwtArzCTtmHu5sLT1PL2E/L48hvIjhYfZZWijYafeDjc7117HfI87UHo3GIAIDsKSkRNLT0/32YuTvKpGKatditjmjGZ7quT5j3KCBEjdwQABbTF/dhQKVtfVqDiKMwxWbd6qspJij6E1aIkJNMyV7+ACV3XT0wHSJ0iA01A44VXud8cEvr8iXS/7T5TEwnPBCuKTT8CdMdEvR+s7nE7rDRdvPJcR7d/MJddcesQ/UHnGK9mg0BhmzTwCM0NSEuBgZNiAjQKUKzSQ4zJrqP6H+1BMd4Y6SynZLX2ze1THUFAzPTJXsYZnKQES46aB0c4NNYi2hrr2uErBsK94om3etk0271snmwrWyq9y1NJI/+Luun1M5Zb+LlUHYry2UFOv1WY1TtUfsD7VHgkWfexqXLVvm9wmnTJnSm/JoBQaucXFxPZzPOETCw+0TehMsWpqbpXT5crXN0NTA6S7YYIkZ71DT0iqXx90TJJMZNzjDZSAOR1ZThKkx1NQuhKL2fIFlG2AQbt61ts1AXCfbivP8zsrpzT7jD5Pfjj9EnMZPa+bKD2u+6vY4JEaZlX1kQMviFO2R0IPaI07Rnl9G47Rp09zrjXVWKHyGd6zZSPyjpaXF7Tb21wB0G43MnKqoXLtOmmtcxkP6NM5nDJTurGTR+ny10P2fj/mtzBgz2OcxVQg13Qrj0GUgrskvlPrGjn1LSkKsCjU1jMQxg/ox1NTGBFt7PaW8psRlHO5aqwzEzYXrpbah2uexmSlZMrz/OBmROVZGZI6TFVsWqHmNneHkTJJYuB7zDu2wVl+oao+EPtQecYr2/DIa8/Lyev1FpCMwspOSzIXKreJyG+0oaQtNTRwxQqJTUymzAOnOKvBw6fmvFsqWwnL1Pn10ltpfUFrVFmrq8iRu3lXqc13Dof1TVIipK9Q0U7L6JTPUNIQIpvbMLOmwpWiDK8y0EJ7EtVJWXezz2KS4FBnRf5wMz4SROE6G9x8j8THts+Rif0R4BNfqC/JahaGgPeJMqD3iFO35ZTQOHz7cki8j7UEjxsT4HzpXXlUjWwqK1DY9jd7zGellDJTurGTh+nyVoAbg/epnP5XtJRVSUtkx1BTJacZl9VMGYnabkZgcz7TloUwwtecLhJNuL9miDEPlQdy1TnaUbZXW1pYOx0ZHxsiw/mNkeH+XBxEvLNvgz81Y97Xq7FB/u2mP6AO1R5yivR4lwtmwYYM89NBDsmrVKvX/7Oxsufzyy2X06NGWFUwXt3FRUZFkZGT45TY2vIzh4WEyfrjLQ6MzzfX1Up7r0iCT4AROd1aRX1Qu/3r3u3b7kOXUICU+VrKHG2sjZsrYrAwtFrzXiWBpz/ByF1fudBuICDfdWrRBGpsbOhwbFhYuWenDZUT/sTK8Lcx0YOpQ5THsKbqvVRfs+gdTe0RvqD3iFO2ZNhq/+OILmT17tprnuO+++6p98+fPl5ycHPnoo4/ksMMO63WhdHoCkJqa6rfbOLfNaBwzZKDExUSL7sBgbGlslLDwcEmbPDnYxXGs7npDXUOTfL9yk3yxaK0szSvwecxJ++TIMXtOkCEZDDV1On2pPSwS7wox3T0XEft80S8pU3kQjTDTof1GBSR7p85r1QW7/n2pPUKoPWIHrO73TBuN119/vVx55ZVy9913d9h/3XXX0Wg0ARoxOtp/449JcHzPZ0waN04iE5hKPVC664lHB6GnXyxaJ/9dukFq6hs7PTY8LEx5G/901F4czGlAoLSHBeG3FW1sMxBdcxGLKnw/pMCcQ1eI6Vh3wpqkOM6HdjqB7vcIofaI0/s900YjQlLffvvtDvvPPfdcFbJKzLmNCwsLpX///n65jXM9ltsgu+czMmtqYHXnLxU1dTJ3yQb5fOFaydtZ6t6PENPsoZmyJG9Hx7K0GZiY67jHWOra6VihvZaWZikoy1frIBrLXeQXb5KW1o7ZdSMjopTXECGmLkNxvPRPHsgHFBoSqH6PEGqP6NLvmTYa8cVLliyRsWPHttuPfZmZmb0ukG5PAJAG1x+3cWNTk6zZ5FooOmf0UNGdpupqqVi3Xm0zCU7gdNcdzS0tsnjDdmUo/rhqizQ2704ggvUSj5w5Tg6YNEJueOlLwdf5yoiK/S9+vUhmjhmsxWAeyy/oOq/t88VvyycL35BjZp4qR888xa+/QeZSzEM05iJuKVwvdY0dEyeBgalDXCGmbXMRB6ePUIYjIVb2e4SYgdojTtGeaaPxggsukAsvvFA2btwo++yzj3tO4z333CNXXXWVJYXSBTRiVJR/A5oN23ZKQ5Nr4ejskTQaS5ctxyMUCY+KkpTs7AC3lL6664wdJZXy5aJ18uXidVJYvnu9uqS4GDl02mg5YuY4GTUwXe1raGqWwvIqnwYjwH6cAwan0xPfuAxGVwZJ410XwxF1h8EI8A4dete9tqHGncXU8CRijURfpMSntS1zMa7NkzhG4qIT+qQuRM9+jxBqj+jc75k2Gm+++Wa15sf9998vN9xwg9qXlZUlf//73+Wyyy6zrGC6uI137dqlPLTduY2N+YyZacnSPy1ZdMeYz5iSky0RnKcSMN15Ut/YJPNzNyuv4pKNu0NN8QBrxujBcuTMsbL3xOEdDD/8f85Fs6W8pq7Tc6cmxGllMBroYjh2Vvey6hIZnD7cnaxmZ1m+tErHpwtISqMS1bQtd4H3tMSMPqwB0bXfCyTNzc3S2Nj5nG/iHO0VFxdLv379bKM9ogcRERFKe1b1e5E9sVqRCAevyspKtQ9GJDEPriXCff1xG7vnM46ilxGULl2q3tOnTaP0Aqg7sG57kTIUv1m6Uarqdi9PMCA1UY6YMVYOnzFWMlPbL2juDT7v7hjdjCYD7F+1bYmMHjhRnMiGglWyoSDX52ffr/q8w77wsAgZ3G9Eu2Q1A1MHS3gvlrsgxGy/F0iQLKygoEDKysqCXRTSh21eVVXF6036nOTk5OCu02hAY7F34OZlvLrD8DTm0GiU+tJSqd60WV0PzmcMjO4qaurlm2WupDYbduwOD4yKjJD9soeruYpTRw5Sa4aSrhePf33eY/LT2v92eZlgVHVmWOlAVtpw2XvCoWou4pCMURIdyUXYSfDut4HGMBjx9D8+Pt4WZSKBNxrZzqSvNVdTU6MiLOBlHDRoUN8bjdOnT/cpfOyLjY2VMWPGyB//+Ec56KCDel04p+NvuAwaPneja41GGo3ImuryMkbEx0uSV0Im0nPdtbS0ypKNrqQ285HUpml3Nsoxg/qp8NMDp4yW5HgO6Luipr5KcrcukmWbf1HvtQ2753x2x+RhezpKwsu3/OrXcdtLt8jBk2cHvDxEX+wSnoqQVMNgRLgicT4YwzU1NUlkZCQNR9KnwC5Dn1NUVKT6HISr9qnReOSRR8oTTzwhkydPlr322kvt+/XXX2XZsmXKWMzNzZVDDz1U3n33XTn++ON7VTingxuXPzewguIyKalwhTVkj+KyBEZoatrkyRLeyx+AjnjrbldZlVpTEYltdpbtDp9JjI2Wg6eOVl7FMVkc3HRFYcUOWb7pF2Ukrd+xUlpad2eRFcFDtk6yAHlw7B6nOW5uY1dhuZ4gkywhdrjfBhpjDiM8jEQP4FShwUiCpb3ExEQ1rxF9T58bjbBWr776apUQx5Pbb79dNm/eLF9++aXceuutctttt9Fo9OPpk/HqKmzBmM8YGxMlI7MGiO6UtHka06ZPDXZRQhLoDUltflqzVb5YuE4Wb9zeLrPp9FGDlKG4b/ZwiY7qVQS7Y8FagXm71sryzb+oV0GZKxLAM3HLxCHTZcrwvSRn2B7yXe5nXRpPTjQYgVEnHetOQvN+21fYoQykb4DmjHe2O+lLrNac6RHh22+/LQsXLuyw/5RTTpGZM2fKM888I6eeeqo88MADVpXR0Y2JRTfx9LNLozHPNSCdOGKIRETonXmrtqBA6goK1Hb6VBqNZtmwo1iFn369eL1U1+/O2tc/JcGd1GZgGhNb+QJrA67etkSFna7cskCq6irafZ6WkCGTh+8lk4fvKWOzJkuUx/qAXRlPTjeadK47Cb37LQkuRx11lIpa+8MfAt8vvPjii/Lqq6/K119/7fPznJwcefbZZ2Xvvfc2fW6sKLBt2zb198AIT3USixcvVkkx//e//6n/jxgxQl3P/fbbr9fnRsTiGWecobSgAzfeeKNaieIvf/mL5eeG9owHF70lvCfxsT/88EOH/diHz4y5A8Z2b7nrrrtkzz33VEl30NmfcMIJsmbNGnECCJMZOHBg98ttbDAypzI01ZjPGJWaKgkjRvRJO4U6VbX18tHPq+SSxz+Qix/7QD74aZUyGKMiwuWASSPlzrOPkJev/r2cdcgMGoxelFYVyryVn8qjn/5drnvpDHnmq7vl57X/dRuMyPB57B6nyw3/95Dcdtqz8of9/iTZQ2e0MxgNYBzBSNLRaNK57iS07rehglWDQLvx2Wef9YnB6A8rV650G4wwAs8///xerZXXm4cVWK0A34+F2lNTU+W009r3p/7Q0NAg//d//ydDhgxRZdm0aVMHp9Bvf/tbiYmJ8ctYwzVB5KGdQT0QCdkVb731lowfP15lGZ0xY4Z8//33fl+TRx55RIYPHy4pKSmy//77K830hCuuuELuvfdey5fgsUJ7nph+7HHppZfKRRddpLyNMOaMOY14mgJLGXzxxRcyzaKlEL799lu55JJL1HfBWsZ3HH744WruZEJCghaTo5k5teP6jPAy8mlx5yCpzbJNBcqr+P3KTdLgkdRm5IA0OXz6aDl0+lhJSYizRMtOAXMRtxZtaAs7/VW2Fee1+zwqIlomDJ6qPIqThu8hKfHpPfS6vaHm8elkNKGu6PM+WfiGHDNTr7qT4OOEZCSVNbXy5DtfymuffSdFZRWSkZospx81Sy7+vyMkMd6aB/WBxi4eN5Sjr/AMi+6p9s4991zljFm/fr0yblasWNGj88Cwueaaa3x6A2GQ4rN58+ZJeXl5l+fZsWOH/Pjjj/Kf//xHQhlkMj777LPlk08+kYMPPlheeOEFZVhjP9qqq2uyYMECuemmm5SRCa80puXBsIRNZBY4xXCOjz/+WE488UTL6gfdwZFnFaYfueECIQT1l19+kcsuu0y9sI19f/vb39QxMCo/+ugjSwr4+eefq0bAxZw6daoKJ9iyZYvPENlQA41ZUlLS5RPD6to62bSjUG3rnjkV16l06TK1zaU2fFNYXi2vfbNEznnwP3Lt85/Jf5duUAZjQmy0HLvXBHn04tny+J9ny35jB0hSHLOggoamemUgvj7vcbnptXPl3vf+Kp8tetttMCbHpck+Ew6Ti474m9x79qty0ZE3yb4TDzdtMBrAWHrswve1NJqOnH6y3HL80+qdELvdb+1uMJ50zX0y561PlcEI8I7/n3TtvVJVU2fJ98D7dNxxx0lGRoYMGDBA7rzzTrW/rq5Ohc7BWzt06FDlZTIGo95eOAyiEapogO1//etfahyHEDz8HcaO+A54zfbYYw/ZuXOnOvbAAw9UIY5gw4YN6v8YuKMsf/7zn5W3rDO6KiPGjjAK4ITAdz766KNqPz6/4IILlCGGMeaiRYvalRt1QfglrsNLL72kkorgPOD5559XHipEwk2YMEElgOwMZLD0BPVC/g84RHBOjHNxDeAUQVlmz56tlksAcJLAGfP444+rawGjuyvHzE8//aRWOsB5cL1x7UF0dLRcfvnlynPWWUgoDCasZ9odX331lUqGCS+Wd9QhrgkyAyN01ah3dxqBoTVlyhRV5j/96U/tDB0Y+NAL6o7rfN9997X7W4QBI/Em9DR27Fh588031X6012uvvaaMOeMae5Ofn6/Kesghhygj8fTTT1dZlpG/pbtrsnnzZpUUFOVGghl4f9FWvoCGsLqEJ2hHT28vDHrYPFaDNrCq3zP1uAcNhx8OnnjgwnZGXFzgvBeGpQ/xhDoIk0FH2BWrN+W7n1BNGDFYdKZ682ZpKC1V2+nTOJ/RAEtj/Lh6i8qAunBdvrR4dA5YS/GImWNlv+wREhu9++fene6cTnlNqazY8qsyFjFPsbG5/UBkcPoI9/zEYf3HSHiYM0LaQqHPI0Qn7TU1N8uu0vbzo33x1DtfyppN7ft3I6pkdV6+/OvVD+TCkw7v8hyZackS2UX2RIzxjj32WDUNCGF5GGwa4XYYeMO7hUFxdXW1Mm4Q5uhvyCZCADF3EAYbEibCuIBRCIML2fd9jRsx9rnllltk1qxZyrOF+Y5PP/10p/O+uisjvEXIuYGQQhifKBP2/f73v1cGGSLm4OWBN8/TGIKBhyg3zzmKAHrCIB/hie+9956cddZZyoMHr5GvEEFvcI1hDCL0EWGRy5cvV56u0aNHKwMCRs/FF1+sDCoYSXDawAgaNmyYyhuCcnUW6vjXv/5VjdMxZt64caNYDcoK49CbN954wz3HEdcf1wtGYFegLU466SR1jdFWTz31lDz33HPqegK0OaIODYPsmGOOcf8tjEs85MD8R3g9V61apQw9PACAB/Gbb75RxhqunS9gfMPQRDvg73DNYXDDAO2Oww47TE2hw4MGGI4vv/yyqnNPgUH84YcfimPCU2EVI+bWaMi+BuLAj2HfffeVSZMm+Tymvr5evQwqKio6ZK8CuIBmt/H9RniBv9u4URmhCd7b+Bw/FnQYRtmMY4zvXNE2n3HEoP4SHxvjNiB7U49A1qmr7d6W15jPGDtggMQNGuSIOvWmnTbtKpPPF6xR3sTymt2az0iOl0OnjVEZUAelJ3UoO/4WusPvGU/H7FSnQLUTXjtKt6gkNgg93Vy4rl2/EREeKWMHTZIpI/aSSUP3kPQkV7IMz6dzdqtTKLaTjtpjnezRTnbSnmefsqukXPY6+3rpDTAkn31/rnp1xS8v3yOD+qV2Wsaff/5ZrSH5j3/8Q10X7Ic3CZ/Be4OIsrS0NPXQHnPZYCBgkG9cS6NOntsGGLvBA2gMYjFHb/Xq1crThoG7r3NgsA8DCsBQgkcQHioYjb6ub3dlHDVqlDoHto28G/BIIjoO58H7Pffco8IuYah6tpN3nXD80Ucf7d6G0YO5c4iCw9J0vv7O0KmxD+XC9wMYgPCywXOFY2AYLWmbjgNjFUbaySefrDxjCKWEcbtu3TrlJfNuS3gU8Rk867gWhlfS8xjP/3tfS+8y+7rW0Am8mN7HwJOJdga4/jCkLrzwwnbXw/veigcI+F3CQMZ+eIPhTTSO//e//628ljDS8beYJgfPpdL0L7+oBwT4LhyL64eHAO+88447+tH7ez2/3/AQov1gO6ANMK+2s3oDYxveS3g4f/Ob36h9uB4wUru7psZ+z//jHeeDkd+T/qWr8qLP8f5tefZ7ZjD9+BwuXFj8wQBCwlMkw/XsC1j9mJBqvIwfpGE8oqPCy9hXVVXl/gEYoQClpaVSW1urtvGjQ8iDsW2ERsB1bUxYRUY2Iz4ebm00kLGQsOc2wHE4HuBcCLVFw2Eb5wf4PmN72bo8d2gqyodyApTbjnXC3xtu/c7qhHKgPMBMnYylNpIm5TimTmbbqbquQd7+30K59IkP5U9z3pP3fsxVBmNkRLjsOXqg/POMQ+Slq34nR08ZIgPTEn3WCXrDmj12qVOg2mlX0S5ZtW2JvDHvCbn59fPlzncul48XvOY2GONjEmXa8H3lvEOvlZtPelzO2u8qOSDnGImSONvWKdTbSRftsU72aye7aM9zUGhlVkN/wbUxQga9tzEegUcLZTKMW3yO7e3bt8vgwYPd+zG2wj7jbw086+S5jQE1wP/hRYOBBg/UoEGD5KqrrlIDdqNNcQy24V383e9+p/4Wg3l4ooz2w9/DS4mB9h133KHKifLAs2jUybuM+MyzTsCzTtiPv8H3es559N426gTvIoxeGGZ4wbCDxryPR1lRfpQX0XrGwB1GEN7xvfC0IgTSKDuMWkNj2Iahff311yvjCobKyJEjZf78+Wo8jmuAcxvOlCeffFJ55WB0w8ny3XffdSi7cZ19tVlnbenZNhhfo3ye+41rbtTJuJaeobmeejMwtOXZNnhIYPyWcQ7PdjK0BOBFzcvLUx5sox3gLcQ5jTIZf2eU3bNO8HpjCUFcR8P7DE875jQax3v+djx/N/Ci4qEEvPHQL9oW3kf87o2ye+vNc9s4l7EffQmua2e/oa7ao7P9xj7je7z7PbOYno2M8AAIFz8OLLHhnYwGcdiBAE+WMEEUoQTGD98XN9xwg+qADNAIEC5+sAA/LANjH4DgDCA6A88wWGwbTwfguja28UM3to103ngZCwmj8YxwBfzgjdhoeBjxo8YxeDJkfBc6COMp2NotruUlckYPVYsBGwsCo5MwsFOd0LEZbv3O6oTO0QhF8bdOLc3NUrrMNZ+x/8yZjqiTv+2EcuVXNMgX//tJvlu5Seobd3fAwzNTlUfxkGmjJTkuxq86YT9u1EYnE4w6Baqd4hKj5ee13yhv4qpti9UyGZ4MSB0ik4ftIZNH/EZG9h8n4eERHZ7K2a1OwdSe1XVysvac1E5OrJNdtIdBoWGIomyZ6SnKA+heLBf18t4OC5Mj/3KblFS4jFNf9EtJlM8euanzc7SFp3pmj/XexkAd87QMLyMwFgPHQB1ernHjxrm9X8bgHdfDMJBRJ8Ng90x4Y2zjvNiG5wjeR5wH4YWvvPKKO4zUOAZGIq4vDCBcz4ceekiNAw3DCC/P/hvlwfkQbuhdRtTJqK/nAueok+d+/A104l1243oY+2EkIPwTXjB4FvG3CDFFWbz/FuGWKKu3Z8j4v1Ee722jXPCeee8zynvAAQeohxae97CJEycq4weGAr4bnjTUyzsBkXedfG0b5fVuP5QJ4aCe+8HWrVvd9cA2riW2YStAI0b9jAduntrybBv8rdFmOAeMQKPuxoMAgNBghHXCJunME2f8nVF2zzotXbpUzVGFPYP9CFGFgYp5oTDOPa9HeNt5jHf8LWwe6A1/Cz1A01jhAeGxnu2E3wgeKBn1w8MFGIqe2lu7dq26rl21h/e2rzp570dfbnyPd78XcKMRE5GBr3UYUTjvyb69BRcBrmg80UGcNJ6udAUMMSPc07tsnu892e6qs+1q27iheW8DPDlFI3ofA5qbW2TVJtcajdmjhvaq7H1Vp662e1Peqg0bpLntCa4xnzHU69TddkllrXy5eJ2aq7i9ePecl/iYKDlw8ig1V3HCkN2DJ0+6qpPh2Ybu+rpOgWinXeX5bWGnv8rGnaultXX3UzzMRRw9MNs9PzEzZfcTSk/sVqdgay9QdXKa9pzaTk6skx21h/1RkZGSlbHbwOyMM485QCW9wRxGb8LDw+TMYw6UrP7mcj14lxFhdhjcIvQPD+AxnoPBhhBVLIOB8EvM90I44P33368MP4DwxwcffFAN5nF9H374YZ/nN/6PEE60B86F78Og1tMwM46FMQSDAYY25hnCADI8Ur6ub1dl7Kw9YJxgzhxydSCxDeqMRDHex8MraHjs8H9oCS8jZBLJe2C4dKY9b0OxszbwdcxBBx2k6o3pYddee618+umnyrjfZ599fB7/+uuvK0MWoau4dp6GKIxdw6BC+eFtMowH1B1jUrzjhWPRLp7GivE98KghqyiO82y7OXPmuMNzoQmEnOIzGFGwG+A19NQIQD3wvWhftANCjGHkGtcD3mY8MDDO+9hjj7n/FprFMUhshNBj/L5gzMFIhfGMh0fwRHpfJ+MdnmLoBDpHoiY4phA2nZ2drY7xviZ1dXXua4K/RRgt7CI4p/AAAdcMYdDe7Yr5n3hYhPBVeH8RAu5dHujrvPPO63H/4mufL+35Oj5g4amGy9XXy2qD0QhJxY8RPwJ0LnAZ42U81Qpl0JBw73cWnpK3fafUtS3Anj1S7zUaSxe7YvsThg+XGAckQVq0Pl/Of/gd9e5JU3OLfJ+7SW5+5Ss5/b635IWvFroNxskjBspfT5olb1x3ilxxwr4ycWjPFqnuTnd2p7mlWdZtXyHv/vSC/OOti+Wfb18i7//8kmwoyFUGY2xUvMwctZ+cfdCVcveZL8sVx90hh0w5vlODkfQdoa49ErqEuvawrAaS4cFA9AT/x/6LukmC4w8YCMOTh6UEYKRgPuHcua55kgjhw8AXA3EYVcgoiQG+YUDA44LPEHqK+WFdgRBd/C08s/BcYvB95plndjgOSXAwiIe3EZ/jO7uiqzJ2BsqL+sLAgjGCuXDGgwVPYLjAUwQvDeqL8SiMIsxrhCcbyWpg/HRGb8bHMKo/+OADlZ0V1wLXBY6UzhJCYk4evG8oIwwieHENcH3gSUd5cIxnAiIch//DoMG4G9udrXEI7yDWsEQCGU8w7xLXFEYXvKCG97grjeB647rD8EM7YC4njjFAGDMMLeNvMZ/TcA5Bs5jjCacSDDcY8UgCZOQ2QfujfaE1GGTeYC4pHpDA243rhe964okn3B71rq7J2WefrbyRaHcY5whPheHoGX1ggM9hKCMRE0LA8aDF0+MNzyseOqAcds6eGtZq8x60s0ExMkz5s/ioESOMTspXQ9qZD779RS6551lJT06UpW/c3yMDwSksuv5GKV2yRIbMni3j/3yRhDLKe/7kR7I2v0jGDc6QORcdJ1sLy+XzRWvl68Xrpax6d5x5elKcHDZ9rBw5Y6wMzkgRXaltqJbcrYtV2OnKrQulpr59mFa/pAEyRa2duKeMGZgtkREdM9URQkiwgacCng9ETZkND8OyGk++i3Ua50lhaYX0T8M6jfsrgzFU1mkkzmHx4sXKk2tkS+0rkFkVWWT/+9//ilO48cYblSHeWWbgQPQ5PbGP/A5PxdMUTPjEF4C7775bTe41YvgRn4tsU52tUdJTbG7T9rpuRmiAL4Mwd+M2dxIcnQ3G5oYGKW/TVfr00F9qY+H6fGUwArxf8PC7sqVo96KxEeFh8pvxQ9VcxT3HDpGIiPA+1V2g+WzRW34tbl9UsVOWb/lFVmz+VdZuXyEtrbuf1IZJmIwYME4mD0PY6V4yKE3v30ioEGztEX1xgvZgGP71jNnq5RlyRuyNZ4igk9oMYcB9YTAi1BhJf5CIE2G5WHcS9oeTuLNtPVSr8UxqZQV+G41wQXsuZYEKwg1tGI3IzoPJn8QcCHfo7Gnjyo2u5TayR+kdmlq+apW0IINeeLiktk0ID1XwA37m81/b7TMMxqH9U5ShiOUy0hIDt9Zpd7oLvMH4uto23g3DsaW1RTbvWqfmJ8JQ3F66ud3fRkfGyMQh05SROGnYHpIUtzvpBAkdgqU9QpykPScZHzqAgbtnOCIxN25CAk4kikEIKeauYq4k8Y+gGI3eHj8newD7stNH/HZn5LqNRteyIbrPZ0weM0aiPDLYhRqlVbXy4HvfS95OVzp3T/501F5y0j45fTIQ6E53fWEwGuD/BaVbJSoyRlZs+VUqa3d7XEFqQj+ZNGxPlcRmfNYUiYrsONeEhA7B0h4h1B4Jpva8M5cS/0Hm4kWLFvGS2UB7VHEQgeGNhD6YWOttLGC+wq7SCnd4qs6ULnUttZHWljU11Kipb5T/fL9c/v398nbLZRiEh4XJN8s2KqMx2LrrS4PRYMEGV0Y6g6EZo93ZTof2a5+FjIQ2wdAeIdQeCSZGiKDnUiaE9AXGmpl9bjT6isWm+HsP5lh4Zq8yyM1zeRljoiJl9JABoitN1TVS0Rb2nD5tmoQSjU3N8tmCNfLqN0vaJbfxpqW1Vc1txFzHPcYOCarurKSqrkLyizfJ18vek9yt3T8lhEfxlP0ukrRE19pwxJn0hfYIofaInWB0HnGC9kyFpyJbqZHmFjd+TETFWijAc74j8Q8Y3Z2lTF65wWU0jhuepdZx0pWyFcultaVFwqIiJSV7ooQCWEdr3so8eRHLZZRUqn2xURGSEBsjJZU14uvni+cxL369SGaOGRzwhzFd6a4nNLc0yc6y7ZJfkqeMxPySzZJfnCflNSWmzrNiywIajA7Hau0RQu0Ru8PwVKJdeCrWI/HkjDPO6HDMWWedZU2pNAGGOCbmx8fHdzAUVrZlTtV9PmPJkqXqPWVitkSEQAKDxRu2y7Nf/Crrther/0dGhMuxe02Q3+07SS598kOfBiPAg6DC8mppbG6R6MiIoOnOH+/htuI82V68SbaVbFLvO0q3SFNLk8/jw8NgLCd2mKvoC2RTJc6mN9ojhNojoQjDU4l24alYF5FYT0NDgxpAebOqLTxV+/mMbUZjus3nM27YUSzPfblAFqzLd+87aMooOfuQGZLVz7X+zZyLZkt5TedhqqkJcQE3GLvTXXvvYb7kl2xq8x5uavMedkziY5AUlyKD00fK4H4jZHD6CPU+MHWIWjOxqzmN4Ng9Tuty+Q3iHLrTHiHUHnEaDE8lWoWnEuvBk/a0tLQO+2vrG2T9tgLR3WhsKCuTqrw8W89nLCitVGGl/126wb1vxugsOe+IPWRsVvu5eZmpieplN93BC+htHCKjaWfew4jwSGUM7jYOR6r35PjOl8AwDEJfhiMNRn3orM8jhNoj4KijjlJTobCsQqB58cUX5dVXX5Wvv/7a5+c5OTny7LPPyt5772363H//+99l27Zt6u+dGp76/vvvy7vvvisvv/yy+j/quXXrVhkypPe5GcaMGaOu3YEHHii6U1JSIvvuu68sXrzY9JJBzJ7qMOu/qqpKpRP2DNVas3m7mhcHJo4cLLpSutTlZYyIi5OkcWPFTpRX18nr3y6Vj39epUJKwZhB/ZSxiHmJdgTew4Kybco4zNuxVgqrtsv2kk3deA9TZUi/EZKVPkKGtBmHA1IHK++hWXwZjjQY9aKzPo8Qaq9r6nbtkoZyV0Z1X0SnJEtsZmbIC+mzzz4Tu7By5UqfRmAwwlMfeeQRuf/++6WsrEymTp0qTzzxhDJqzfDJJ5/IHXfcoeqFfCSnnHKK3HvvvcqgRV4SrH0IAxrfkZ2dLQ8++GCXBvOtt96qjG47A6Pz/PPP9zmlzoh8OfXUU+Xnn3+W/Px8ycvLkxEjRrg/v/rqq5VxvGvXLhk5cqRao/7YY49Vny1ZskTOOecc2bRpk2rb/fffXx5//HEZNGiQ+vzRRx+V5557TpYvXy433XST0lBPQB6Aww8/XJ555hm59NJLQyM8lfTdopsr29ZnHDYwQ5IT9A3jKlniWmojdfIkCbfJU7rahkZ574eV8vZ3y9VSGmBgWqKcc+hMOWDyKAkPt8dAuLK2TBmHxrxDvMN7CMOxU+9h2lAZnD7c7TnsznvYE3Ybjm+oOYwMSdUPKxcaJkQH7cFg/PG8C6Sl0XXP8UV4VJTs/dwztjccm5qabOF1QzlCJURwwYIFyuj4/vvvlaF42223KW/sr7/+auo8FRUVynCZNWuW2p49+//bOw/wqIouDB8S0mih9957r4IoAoIgAmIFFdEfREQFFRUUVOwde8WGgAiKCmIBRFAEkSa9995Db8n+zzth1ptld9OzSfa8z7Nkd+/de+fOnHuZb86ZM9cYIfrII4+Y+kAscQ48hWPGjJEuXbrItm3bvE4nWLBggbmf6tSpI1kdxN6QIUOkVatWF23LmzevGcjA8zljxgy57rrrjAgsV66clC1b1ghK/p47d05GjBgh9913n0ycONH8tlSpUjJy5Ei3JzY19OzZU/r165ds0ZjW4akhaXYkJdkw4hQdHX3RyNOqC6Ix2JPgHF66NNOEpsbGxsnUBWukz2uTTDgqgjE6V6QM6NxcRt/fQ9rUq5Qswcgcv3s+7Gb+pobzsedMSOmC9b/L5PmfydvTnpChY26XR8f0lremPSGT538qf6+fZUJOrWDMF1VAapSuL+3qdpfebQbLsOvekNf6fCXDeowyn9vV7Wa2p7VgtCAU3+n3nQrGIMTXM09R1PZ8g4fRn2AEtvvzRCYVvCaIhcKFC0uxYsWMZ8VmzB84cKAUL15cypQpY8SHFeG8x5tjQXg4vTW8f+WVV4zgKVmypPkdnWvOkT9/fmncuLHs3bvX7Rmy3quNGzeaz3haKMuAAQOMZ8gX/spIKOoVV1wh99xzjzknXiBTb3Fx0rdvX8mXL5/x4DkXkbci6vfffzf18Pnnn5soCY4Dn3zyiVSrVs0Ii+rVq5tQTX8hgs7nHteFp65JkybmmIhA6gCPEmVB0JE0DLZu3WrEWd26dSU0NNQIiFWrVvmsh6lTp5ryUC6uYezYseZ7PGocnyWPqE+8b/Pnzzfb8DwiehBAeM1IfonYWL9+vddz/Pzzz3LZZZdd9P3kyZONoOL4L7zwgvt7ru+ZZ55xf6aNnaGnVpjR1tSLkxMnTphrpt0aNmxoyun8LZ7TNm3amKkP1NNvv/1mvkdc//HHH8Y2qWPP40J4eLjcf//90rx5c6/XiQ1VrVrV1MmVV14pVapUMR5GoKxcK+1KXbEPNmvp3r27uZf4Py8xnHYP1BV1ZuEe2bBhg+zevVuSg4anZiMwsmPHjpkb2/kwcYvGChmzZl9m5NTevXLqws1RIIBJcGijuau2yifTF8qOA/H/IUeG5zTZUHu0rC25I8OTfUxnUhj7Nyket6Mnj8TPObww75ClLZLiPSxdsLyULFTe/GUeYp7IaK92pyiBeuYpSrDaXlxsrJw95HuKgJ3fnxTY7/T+Az63hxcsICGhvpOt4W0i9K5bt27y9ddfm7A2G6JJB3zFihVGrNCJpwONR8opFv0xYcIE46mh4//rr7/KX3/9ZTrYtMeyZcu8rt1KmyEQ8IzRWWa+44cffmiEoTcSK+OcOXOMcCLUE/FJmfju+uuvN2GFhJ7S0adzHhYWlqBDP2zYsIvCUxFGiCeEA2KJFQTwVhX18Pb6Ck+ljn/55RezlB1iCA8WSScrVapkvF+IVEJG27dvL88//7wRtAhHPFdcmy+43m+++cbMgyOscv/+/V73mzt3rs8Q1zVr1hjRWrFiRa/bKStl9CZYaU8EMEKuQYMG0qFDB/EH5bvhhhtk3LhxZt/hw4ebwQvLU089JQcOHDBeT45LfdhBCaY78BsGJWhH256Un+PMnDnTb3hqcucWrl271oTuWmJiYkz747llYICBhPSAwQJENXVrw1+TgoanZnN4sKzaHL/cRjAnwbHzGcOi80kex4hlRrJs8x6zfMaaHfEPXDyJnRpXk1va1JeCeVMWNuwti6incMR7SOZSlrZwJqgh5NQXeA+dWUtt5lKEoyeaxU1RFCVzgGCce2vaLFf27/ARfre3HPOFRBZJmKDNM+SQ+WyE1CFwoFmzZubvV199ZQQT3hVeDz30kOnkJ1U0Dh482N3ZxbuDgKcDjqetvo9oIjrJvAAPGOF5eP58icbEyogAwqsIVqTikUSYAX9ffPFFmTdvnldB5Ennzp3d73v06GG8Qwi7jh07JqlOKBfXZYUpHilEISDe/73QD8JLhpCnLfj/G28t3k9fUL+rV682nlMErKeIBSuYrcfVCWLx1ltvNSGxiHpvYCfetg0dOtRcBy/qmvMkJhqnTZsmjRo1Ml45691744033NsJ98RTjAeWF/MIZ82a5Z6niYhjfiYgVKknxHivXr0krWAApXfv3mbQAW+jheukLnhhe3gl0wvqG5EaSAIfWB7EMOLEDeBk654DcuLUGfM+qEXjkviHZYF69STHhf+8MorNew7JJ9MXyd9r4z2+0Lp2ebm9XSMpXTjxMANf+Ft2gu+XbPrLvCdZjS/vYU4799DOOzRCsZxJWJMau1OUjEBtTwkUanuJQ+ZLPDhWMDrZtWuXW+AA3hW+SyqIMwvhnQg0RCAeRDr3hDIidpywjTlceMTwHOIJxXsG/fv3d4fz4QXklVgZnWWweGb6ZJ+khgD+8MMPRmDjMbVJvg4ejF+j2QnX6llW66m0IGKd4o7PHA8QI4hfRDbXhBBr166d8QITEnvXXXeZ/fDIEuY5adIkUy5EMwKKhDZO7xgeX+oVYUWIsBM8sAhg9rfl9AZiCeHvibOOeU+CmcSgvp2/49qLFCnic7uzzQjdnT17tvFgW5hfmNZZV6njU6dOyTvvvON1O+cnnJTwWBLqeLuHUgv1nZRQV8/nHl7KtEJFYwDhIYNLmw68DVmwoanReXJJqaIFJVjr5dCFmHFEY0ax78hx+WLmEpm+dL3YecP1KhSXOzs0keql/3uApYTE1ikEvIlOonMV8BCH8ZlLvXkPU2t3ipIRqO0pgSKz2h4ho3gA/XF8y5ZEvYhQ7+mRfiNzOJc/6JjTCaeuPOsI7xbhgYROAu/5zs6Hs/PvwM5PdOJ5vEGDBpkXIZ941Qi59PRaIlrwruA1o1OO92nKlClm2/vvv29eSS2jtzIA5/f87C38z/O3ZBtlWRAEGp40QhMJxfQWyUOmUzx6dN5TYnt4HLt27eoOFWV+H3NCEZEIbk+PWtOmTU2YKGVEPFoPLRAWjLeM8FXK6+lN41iId7J++isr4mjdunVeBx5s/fPe1qU/G2EfwnwtiDNnSC3baRd7/c42Q0ASqmvtwpO0uNcfeOABE/Y8Y8aMiwY2POtvz549Ruwnd2A+sXuIYzM4kdzEQ9hjWiZ90kQ4AcZzNGLVpviboUaF0pnqP7aM5OT27XL2cPwcj4IN0j8JztGTZ+TDnxdIn1HfyK9L4gVjhWIF5Jnb2stLd1yVasFIWGligtHJvZ1Hygu3fiHP3fKZ3HPVE9KtWW9pUvkyKVmwXKoFoyU9RsEURW1PycxkxucecwwJGfX3Cnd4UfzBfv6O428+oxUbiDQShtBxp/NLyCogkJgzePjwYdNpZw6ZDQkkDJJwQbx6zD0bNWpUotlAyfxJZ5bQS+YPevOGcH7KQweceYaeItETf2X0BcLmgw8+MN4p/tI595YUBS8gyzFYUYhHjhff01cj2yjz/HyRmv4cIbx4NRHBnJ+5kAhCb/MNKRNeSQZIEDjUr61b5sMhPpk36S38FnGJWMOTmViGW0Jw8fB5Qngv5yaBDh5S5ipaG0HIEl7JfEXn3NBOnTrJokWLTJgq5UfoOoUOGUtJRMRxsQPmejpDhBHViHd+Q71QLissaZ9Nmzb5vRZ+QxIlz/dAWfDIUrY8eRKus41XlzbHZpjviLgkzNYKRsrDsdjufO8N6odr4Py0E23shPphyQ/nIEhSSUstkfmeoEEEDek5Kd8utxHMoamHlsaHpkYWLSJRyZjwm1zOnDsvE+Ysk96vTZRJf66Qc+djpWh0bnm4R2t5956u0rRqmRTfbCStmbPqJ3lj6uMy9Ms+Sf4d6xZWL1VP8kalPAw2JXanKBmB2p4SKNT2EgehQMceUcdyAXiMSCQCJBUhU2iNGjWMqCKE8Y477jDbSExCtk+2IUauvfZav+dBOPBbvIfMAUMUMYfOE5LgMO+OTjjbOac//JXRF5SX6y1UqJAJPcQD582bhHDBE8RcSa6X/0MJ+0TwEEqJCL7kkkv8hgim9P9c5tIh9jg+4YkIKOb5+fJmIaoIY6V+ETsk+QHKi7hBSCOAeNlEOHiYSeJCOCkhq3a7zbzqCWGvXI9zLUugPmrXrm3CiAnLtfM7aT/mAuLNJlGNU8xTf+PHjzchs4TsUv/O7LsMYnAt/BYRyuAAyYOA+kC8kSCJ3+J5RLjarLkcEy82vyehjjewGUJiEXRknXUmZeLcCFXCnvNcqBObUZi6xNZpB2yOgQfsx8IcV47FfEzWx+Q9gwu+5vwiLKl7xCfeYCcMBNj5uIEMT83hyuZZMRiZwKh4SGW2eVxUPZNnMWb7MGna+xHZtf+wvDb4drmhvfcHUHZn2cinZf9f86RE+3ZS88EH0mX5jOlLN8gXMxfLgaPx4QB5oyKk5+X1pEvT6hIeljPFQnHplnmyZNNcWb97pbhc/60JljsirxTMW1S2H/gvHbMnGbXQvTe7U5SMQG1PCXbbw9uAxwqvQWRkZNCt0xiM2AyWqRGOmRHWKCRrrNPzlxEwOMC8wfTKVJrZOHTokBHhS5YsSfIzw2l7zAfGo+75zEmJPtI5jQHGOaJ1+OhxIxihZsXgXG7DFRsrh5fFh3gUSOP1Gbl55q/ZbpbP2LovPhNpRFiodG9RS25sXTdFy2dYobh445+yYc+qi4Ri/QotpEHFllK1ZG0TWuprbmNGCUaLv7h8RVHbU7IjWfW5hxBEEPpbhzE8Op8KxkxMdhKLFjK68kpvEIiEm+KRJhT1o48+MqHEwULBggXNvN7MYHsqGgMIDcnkV8/5jDlDQ6RK2fQLy8zMHNu4Uc5fyBhWMA3XZ1y5da9ZPmPltn3mc0iOHNKhURW59YoGUjjff22QFGJOHpZ/N8+TxZvmJkkoOrHC0CkcM1owetqdoqjtKdmdrP7cQziqFzFrktYhgsEG8/xYZoMQWsKICTklHFpJHM2emo3A88WE7QIFCsTHhl+Yz1ilbEmJcCwsG4zzGXOVKSMRhQql+njb9h2R0dMXyrzV29zftaxZTvq0byRli+RPmVAk9FT+i+rOE5lP6pVvIQ0rXiJVStaR0BD//zn8JxzHy9WNb85QwejN7hRFbU/J7uhzTwmk7WXH8NSMgoQ/q1atCnQxsiRpnT1VPY0BxhlfvGpzvKcxmJPgHL4gGlPrZTxw9ISMmblEflm8XuIuTNutXa6Y/K9DE6lZtmiSheLSzX+Z9RNTKxQ9QShmtFh0kty4eEVR21OyOvrcUwKFikUlUGh4ajZqyFy5crk/W09jzQrBOZ8x7uw5OXIhE1dK5zMeP3VGJvyxXCb/tVLOno9PbVyuaH6548rG0rxa4tlQkyQUK7WUKiUIPQ3NFnanKGp7SnZHn3tKIG1Pw1OVQKDhqdltEftDh8wk17Pnz8v6bbuC2tMYs2aNxJ05g5VLgbrJW8D07Lnz8sPfq2X87H/l2Kmz5jvmKvZu20DaNagsoX7W54o5eUiWbJonSzbPlY27V10kFO0cxawsFH3ZnY5+Kmp7SjCgzz0lkLan4alKINDw1GyG9fhs2LZHzsfGBXXm1ENLl5q/eStXkrC8eZP0m9i4OPnt343y+YzFsi/mhPkuT2S43HRZPenavIZE+Fg+w79QjJb6FZpnK6HoiXoaFbU9JdjQ554SKEL8DFwrSlaxPZ3TGEDw8thFRG1oaskiBaRAvjwS3PMZ6ydp9OSfdTtk9K8LZfPe+GVKwnKyfEZNs3wG6y76EoqLN/0pm/as9ioUG1ZsJZVL1MqWQtGb3SmK2p4SDOhzTwmk7WlUjxIIsDsVjdmEuLg4d5jgf/MZgzM09fypU3J07dokzWdcvX2fjP5loSzbsse9fEb7BpXN8hlF8ycU3EdOHJSlF7KeeheKJLNpme2Foi+709FPRW1PCQb0uZc1uOqqq+T222+XG29M/0Rxn332mXz55ZcyY8YMr9tr1aolH3/8sbRo0SLZx37yySfN2oL83oYI5syZM2jEI9fctGlTGTdunFSpUiVBfaQW2ozj/P7772lS1qxOz549zevqq6/22g7nzp0zf9MC9ZcHEB4eefPmTbDcRrDOZzyyfIW4YmMlR86ckr9WTa/77DgQI0+P/03u/2CqWzA2r15G3hvYTR689lK3YEQo/r5iqrz2w1B5fOydMvGvj2Qj6ymKS/JGRUurGh3lvs5Py3O3fCo3X3q3VCtVN2gEo6fdKYranhIM6HMva/DTTz9liGBMCitXrnQLRkTP//73vxQfKzWJcM6ePSs9evSQ0qVLGzvesmVLgu2nTp2S2267zfy/XqZMGfn8888lNWzatMlEI/m63rvuusuUAxHoi++++07Kli1rBGNmBdFZuXJlv/t8/fXX0rx5c4mIiDCDGU6WLl0qDRo0MMuXsX5k9+7dZffu3e7tBw4cMEKO9WGph59//jnBgEXDhg0lX758Uq5cOXnhhRdSfB1DhgyRJ554wuf2tFzqRcNTAwiNiCEyArD6wnIbwTqf8fC/8aGp0TWqS6jHchAHj52UsbOWyrSFayUuLn60pGaZonJnh8ZSp3xxt1BcciHrqadHEaFYv8IlZnmMysVrSUgQCUR/dqcoantKsJCdnnuLN+yUd3+cLwM6N5eGlUtJVsJ63AJNWq5dlxHhqa1btzbioFWrVhdtQzDs3btXdu7cKatXr5Yrr7zSCJI6dZKXUNBy3333SaNGjbxuW7BggaxZsybRY3z00Udy5513SlaHiCzqfc6cORITE5NgG6LYimO8eSNGjDB1N3HiRLN9wIABUrRoUdm/f7/MnDnTDIasX7/efHf69Gl5++23pUmTJrJt2zbTZhUqVEjRgAnC9eTJk7JkyRLzPj3DU9XTGOBwmX379sn2vQck5vhJ813NIPU02iQ4ztDUE6fPmgQ3t782SaYuWGMEY+nC0TKi5xXyer/OUqZImMxaMcXtUZz018cJPIqX1rxK7r/6aXmu16dyU6v+UrVk3aAXjE6746+iZCRqe0qgyC62xyDzJ9MXybb9MeZvWoWdWfBidenSRQoXLizFihWT5557znxPJ3fgwIFSvHhx483C82br0tML9+eff0r58uXdn3n/yiuvmHDPkiVLmt/RueYc+fPnl8aNGxvRA5dffrkJP4SNGzeaz3TcKQudcLxuvvBXRjw7V1xxhdxzzz3mnHTYge19+/Y1Hp969erJ4sWLE5Sba8EjRT3gwcuTJ485DnzyySdSrVo14+GrXr26fPvtt17L5S1EkOtC7CEaOCZeLOoA8UBZrrnmGiMEIDw8XO6//37j8fLGmDFjZPjw4eZ3zZo1k2uvvVbGjx/vdV+8kjfffLOpU16IUOc98f3335vBlXbt2l30W/a799575Y033hB/0EazZs2Syy67LMH3J06ckG7dupn64rybN29225znQAIeQBt+yu969epl2g0xvPbCVCbLtGnTzP5cD23u/C1lfuaZZ4wgQ6z169fP1AHZbAmFxqtK/fM6Q/Z+D6gHvLxFihS5aBvnw0uIMKNtEWfYLBw/ftwIypEjR5oEXNxTlJ3voH///nLJJZdIWFiYVKpUydTL/PnzvdYntutsDzy8noMQDCo4PZnpFZ4a+OGeIIZG5yb4bWH82oS5oyKkXPHCEmycjYmR4xs3mfcF69Uz6yv++M8aGTfrX4k5eTr++7xRctsVDaVZtYKybOt8ee2H92XT3tUJjvOfR7GlVC5eUwViInan4alKRqO2pwSKzGp7sbFxcuj4qSTvv2zzblm384B5z1+yh9etUCJJvy2YJ0pCQ0P8et8Ip6MDS1geHWtCNOHpp5+WFStWyKpVq0wnHnFDuGRSQzYnTJhg5g7SBr/++qv89ddfpoONgFi2bJnX5Gx0dPHeXHrppSbsj07+hx9+aIShNxIrI94iBNObb75phA1l4rvrr79e3n33XTNPjhDDDRs2mM68U+ANGzbsojl5CFk66giHyZMnmxBRxBDiJCnhqdTxL7/8YkQagmL58uXy6aefGhGBCECk3n333X7r9fDhw7Jnzx6pW7eu+zvEL6LNGxyTusEryTX+/fff7nsCMTV06FATIkw5PHn//feNB7J+Inkn8KYhlBgUcPLNN9+YF9eNuEMIYgeJ8dRTTxlBvXXrVmMH7du3N3UEePFuuukmI5L5HpHGfpZRo0bJ9OnTZd68ecbWOCd2wiAA14lt0N4pJSYmxrT/0aNHjfBlIMHWAUIU+3O2i72fPJk7d26qwp8ZtMAL7A0NT80mcKMygrTKhqZWKB2UiUkOL1tu/oZERsqis2Hy+RvfyJ7Dx813uSLCpFuL8lKy8EFZvvVT+XGJp1DMLw0urKOoQjF5dqcoGY3anhIoMqvtIRh7vTwhxb9/cdKcJO87dsiNUiQ6t8/tdDqPHDliOt62L4LnCr766isjmKyH6qGHHjJJTpLa0R08eLCUKBEvbmmHY8eOGY8RnjZfIgSPkZ1zRgggXiI8f75EY2JlrFixovEqghWpeCStMOPviy++aAQGoi0xOnfu7H6PNwqPFp7Kjh07Jik8lXJxXVaYRkdHu8Uf4v3fC9N2/IFHCxBEFo5jv/eEuj948KDxsOH5bdmypXvbs88+KzfccIMRQZ4gzl5//XUjMhMDG3KWx4JnDY8bMBjw2muvmdDMxCDcExHLdfHq06ePEfvWy4iQtW2Bx/XVV19NECY7evRo432Gxx57zCSNsR701BIdHW2ulxe2V7VqVfM99Y/n13Nfb/NAX3rpJSPkb7nllhSXg/r2DJ8FzZ6ajcBtzo24ymZODaLQ1NHTP5JFm6ZKo4pXS8s1Z2RzvqLyZ9VmsuvbP832yLAz0rT6eQkP3yb/bJokEu+INKhQTBu7I9wiGAcplMChtqeo7WVetm/fbkIyvf2/sGvXLrfAAYQF3yUVxJmF8E4EGiIQzxHeHxKBeIp6thEOiReGTjWeUCtyCO+zYax4AXklVkZnGSxOT5Ddx5nMxB8//PCDEdh4TPGKIhQQZN4Sx4wdOzZBWa2n0oKIdXoo+exL+DnBmwWIcCtS8HrZ7xGG1vOGZ+3WW281nwlhxbNIGzz++OPGM4Y4I7mLNx555BF54IEHjBhPDMQR5fHEWf+RkZGmD0JdO+vBG+zj/K1T1Hpuw2vr9HByrXiorWhP63BuCx50QoyZR4oXl/qnHZw428XyxRdfmFBpBkOok5RCfVPvnmh4ajYCI+YGXLVpR1CJxmmLvpLFm6cK9zB//zleXjZVbS05Q09J/lwbpXSRQ3Lm/C7ZHXOxUGQdxUrFa2joaRrYXWYL01KyP2p7itrexSGjeAATw4Rqfjldtuw9InGOji9LTpUvll9G3tI+0Wc65/IHnW862ZzL81jMRcQrZMMCec93QHZIO/8O7PxEJ57HGzRokHnhecGrRufZ02uJuMKDQnIXOuXMpZsyZYo7VJJXUsvorQzg6fnhs/WI+is/899IWjJp0iTp0KGDCU0kCYk3UUI533vvvXRZr5HMnXjRCG21ghoPJWIRvIVDEu7JC08vAp65klw3gwbM/QMEK4N87PPHH3/Ib7/9JlOnTjW/sxBSiyeva9euCY5PplDsAQFNVlELx3fOP2XwmrpGIBMKTZ0i+uzgooV9+K2zXZ3bCHe2cAyyljoHBQhd9ZbYJ63bIjY21oQKU3fUAX8RkKVKlXK3C6G0FubAPvzwwyaU2DnY4UlS7i/ayVfio7QMT1U3QwChEU+dPSfb9h4ImuU2flo8QX5clHCCdmihLVK+5C9SodSvUqTACiMYIV9UAWlds5MMuvpZea7XJ3Jjq/5SpWRtFYxpYHfMZVDRqGQ0antKoMistsccQ0JGE3tt239ENu05nEAwAp/5nu2JHcPffEZgXT1EGgla8ELR6bXzpBBIzAVjDh0Cg8Q2tgNs59Dh1aPDzjwyfyxcuFD++ecf4znE80K7eJvzx/kpDx405p15ikRP/JXRF4iRDz74wCQL4S8df28JZ/ACkrjFikLmRPLie2yKZDQIN2/YEMHU2B5iCKHl+R4IayQ0Fk8W7YUYYe6mN2gnhCTCjHql3nlRd4Ss4mnkhSeX+Z3M1QTai7mndjswHxPB7AnCj3Db2bNnJ/ie+YuEk1LXlBeRjVjC44j4I5QYmyBc0ymSrrvuOhNOyvWtW7cuwXzLTp06mbIxt5TjEmLrzIzLQAQhqYg34C/lBtqO5Fj+PLrYA3XNMWMd763nljbne9a+xhOLOKVesWvENGG4XMuPP/4oixYtMvOFgfm9eHkZBKlRo4bftidkmcyozNWlrN6W5yBc11tbaPbUbAQ37dxFy8z7kJAcUq3cfyNi2YWTZ87J8i17ZPK8lfLYmBdl6sJxXvcLy3k6oVDs8pw822u03NjqLhWK6WB3jIZl9SyCStZDbU9R20s+CJXPZiw20Tne4Hu2pzb0Dm8Z3iREHd4RPDssFWDnipEplA4uooo5fHfccYfZRgISsn2yjbmAhD76g7lX/BbvIXPAmNdI2KQndLjpDNMJZzvn9Ie/MvqC8nK9eMTeeecdk6jF29xXhAudf6J0uF7ELHP8EC2IHoQLc/a8kRYhglyX9ciR9MSZOIgQWUIy8aoi9BDtvrxO/N/PPtQpAof6adOmjTkeHkv7QvTwnQ315Bqd2+13vkIqEUSeGVxpDxIZ4R3Fc2nDi4HvGawgVJVrdIag8j3tgyecQYDevXu7t1EGxCZZcfkt4hzbtcvrPPjggyaLKy+uuW3btu4lQ7AT6oJzYYvesqcyGEA94GH98ssvzXsELyAUsXWOy7FoY+zHgneZ+qYOyX7LnFsbgoy4ZR4kdW+ztxJG66vtH330UZNkiXb1zGyLiKcdvHlT0zo8NYcrvQJ8MwmMTBDny0PKc1JqoKHqR38/U5788GupUqaEzPrgP7d/VuTIiVOyYdch2bj7oKzbuVu27NskR0/tkvCwo5I7cq+EhSWeIa5zo5ukUyPvI2RK2tkdnffUjnwqitqeklXILM89PBV4rAgDTOocJjKK3/rKBDl8/D/vkicF8kTJmIdukPCcwb0OcWbE2c0Olv9zuWY81whHm8woI8BDjgBkjqa/kM/sRM+ePc2LMG9v7cAzh2VNPJ85KdFHuuRGAOHhsdpmTs1CoakY4f6YE7Jh90FZv/OArNu1WXYc3CJnzu2TiPCjRiSGh52QyCgxr+Tw46IJKhrTGTuvIlj+81IyD2p7itpe8kEIvtX/GvcSVN7InztKBWMmxa7jF0z/53KteF8zAsJNW7RoYcKcWTKE+ZzBIhgBT6sv0trmVDQGEEY9/10Xv7hprYoJM3hlFuLiXLLz4FHZsOuArN25Wzbs3iB7Y7ZKnOuQWyCGhpyXPLlFEuaEghwSnauIlC1SQc6cOynrdnmP93dydWP1MmbUIteESWj2VCUjUdtTAkVWt72i+fOYl5L1QDAyD47w32ASjhkFiXqYw0kdk5zHn4gKVttzpVFQqYrGABIbFyebd8VniKpVKfCexnPnY81k+nU798uaHZtky76NcvD4TgkNOSLhYTESHhY/MTmfl/+3coZGSrHoMlKhaCUpXbiClC5UQUoULCuRYfGuRgx24AcjRUIW+y5AXEPp2OCGdLs+JR46TFm146RkbdT2FLU9JdhAKKpgTD+YY2jnGSrpa3sqGgPIhu175My5+CxMNStkrGgka+umPYdk7fadsnrnOtl5cIscO71bwnLGSETYUQkJiTX7RXsRiHkii0ipguWlconKUqoQArG8FMwTn0HMF+di4+TAkSqSI+SkFMofPwnZycEj1cUVV9Xsp3My0hcEvH3pqKeSkajtKYFCbU8JpO3Zv/p/rpKRpHXaGhWNAWTlpvg1a4oUyGde6cXRk2dkw679snzbBtm4a73sjdkmpy/MPwzLGe89zBEqki93wt+FhkRIwTylpHzRSlKpeGXjQSxR4D/vYXJACL5yfUs5uL+GLN47WxbtneXeVitHLbmk9fVSuEhBFYwZNSd1/353qnBFySjU9pRAobanBBIbnqooGY2Gp2YTVm/ZmabrM/Kf4sFjJ2XVth2yYusa2bp/oxw6vlNiXQcTeA9zhonkCUv426jwQlIsuqxULlHFCMRSSfAeJofT+/bJhkH3Sdy5c0Ii5ZPVQ2R1jRCpsTpOqq1ZKge/WSqHw8Kk8OiPJPJCSmIl/UIEbcpsRclI1PaUQKG2pwR6jVBFyerr0+qwRwaDeDobc9S837N7hlzTda8UPhstR9dvMN+FR+dLkmgiQc2uQzHy7+Z1snrHWtl1aIscPbVbQkIOu72H5ngeyw2F5IiQfFElTEhp9dLVpHyxSlKyQDmJCEta6u+UwjUjGC011sSZV4JrOnfO7KeiMX3RSflKoFDbU9T2lGDDOR1Eo3uUQCw1lFZkGdHIoqsvv/yyWSizXr168tZbb5k1YLKaYJx3Z18jjlZXDxGpGSpo/4MR6+SLdwYZERUSFiYtPLxt52PjZMOuXbJk0yrZuGe97IvZLqfO7pWcOWPc3kOIcApEFyGhBaVQ3tJSvlhFqVmmhpQrUlEK5imSbg8tV1ycxJ09a16xZ85I7OkzEnf2jHl/fFN8llglczxEWJSWRXH1PzBFbU8JBvS5pwQSFqzX8FQlULYXVNlTJ0yYIA888IC8//770qxZMxk1apR06NBB1q5da+ZlZRWstw3BuLpmwgV47edKa2Nl7sp/ZdPSw7Jt3yY5dGKnnIs9kMB7eLEHMVxyRxSX4vnLSpUSVaRW2epm/mF4zoj4Ea7z5+OF3Okzcmr3HreQizuDuDstcQi8M2cv/D2T8C8i8DR/nd9fEIXmt/HvjVg8cyYjqlFJgzCtYsWKaT0qGY7anhIospPt/bR4gkxdON4sUXVVwxslO3HVVVfJ7bffLjfemP7X9dlnn8mXX34pM2bM8Lqd9f4+/vhjswZgcnnyySdlx44d5vfBGJ568uRJadSokcybN0/y589v2rRy5cry+OOPp/rYZErdsGGDaT9FZNiwYVKyZEkZOHDgRdURlOGpr732mvTt21f69OljPiMef/zxR/nkk0/k0UcflayEN8Ho3lYzVFZWzyEh69/+78scImEXWomBgpDYPJIrNq8Ujs0lZc5HSNlToRJ1yiUu493bLrFnNsjuM9/LDiPkzhjBhwcw0OQICxOXIzxVCRwMJJw7dy5NHySKoranZGayy3MvXjDGr0Nn/2Yn4fjTTz9JZmHlypVeRWBGh6eePXvWrEP4999/y86dO2Xz5s1Svnx59/YHH3xQvvvuO7MOaYUKFeS5556Tq6++OtnnGTRokEycOFGOHTtmBliGDh0qd9xxh9n2yy+/GOcNdRAREWHEPRGAefJ4Xzv0gw8+kE6dOhnBmFlJbNAA3n77bRk9erQsX77cCF7swAnRj4i1X3/9VcLDw019vfTSSwnO8eyzz8quXbukbNmy8v3330vVqlVl9+7dRtfQpgcOHEiVJ5B2a9y4sdx1110XDU4EXXgqN8uiRYuM8TpHDNu1a2dGMDw5c+aMeVmOHo2fPxgTE2P+2obhxk3ueyre3vRJfU9Z7QPjx5U/yL8V4kROJd6AcbE5JeR0pEQdyyEFj8RKyUOnpPDhs5IzDo/jPvd+B1NYr+aaQnNKaESEhERESGh4mISER0iOiHAJDec7/oa7t4eEhUtIJH/DJDQyUkLCw837nFG8j5AcYTklZ2SU5OA4YeGSMypKQsJySo7wcMkZGSnHNm2SxUMeTrRMR48fo9EC2k7JeZ/SMgbymoCHVMGCBU24THa4puzYTtnxmtT2skY7qe2lXzudPn3a1D0hY2Q1TMpv7d9flk6UaYu/cvyPGS8cOR5rHGfkcyGl77nu0NDQgJeFuqfe7PvE9nfum1g7Afvzsvvb7KkpKS+/bdmypRFtl112mfnsDDnMnTu3TJkyxXjyZs6caby0S5YsMcIyOedCxDz99NMSFRUl69evlyuuuEIaNmwotWvXNl5XhBFi8sSJEzJgwAB54okn5MUXX/R6vI8++sgIJnv9tg6TUtdJedbZeyglx7F/7e/9tSlJA7lOxGWcl3N26dJFLr/8ctm2bZsRbOvWrXPvM23aNCMyv/rqK+N13bp1q+TLl8+dzRThjdC75pprkvws8PaevlzNmjWNIO3WrVuC7cBgGWU/fvy40Uf2GW91UbYSjXRuaQDPsBI+r1lz8Xp/zz//vDz11FMXfY/CV7IADRsGugSKoiiKki6UK1fOREudOnXKfI5zxcmpc8cT/d3KfX/Lyn3zvW5DSG7dsUVqFW3m9xhRYXkkJEeI333wiJA/As8K4u6mm24yUV50Nt944w0jShA/Xbt2lf/973+m8/nhhx8aL5cNPVy6dKmMGDFCfvjhB/OZTvH1119vhM2RI0fk559/NhFk/KV/V6ZMGXn99delUKFCphPNsfFS4dVCxBCKyDnbtGljvGq+Qj39lZFz04lHSHFeBFLevHmNY+G6664z3iZC/Ch39erV3eUeOXKkKSN9Szrb48ePNwLqvffeM9f3+eefm34qOQIQUggt64EidwB14Q2uE0E2d+5c2bJli/ndvffeawTKihUrzDY8hpGR8UkKW7du7f7tqlWrTD1aKCfhoMuWLTPlKFWqlPE8IjA9QTz4qntg2hcgghAb1KUVNICHDNtFcGAr3q6Pa+f3iBe7/eDBg2bAhFwkCKv69esbQYUnEscQIaeTJ092H6N58+by7bffmjY5fPiwqReuj7apVKmSEa4IY0AsYYOUk3rF02d/i03gLfztt9/MteOB7d+/v7kO2os6QMghvKgzT6xHl2Pv2bPHfU6g7agDbBsbtdh9CBu97bbbjC3++++/5jvajboBptvt3bvXvPdlJ5BY/QB1Mm7cuAQeaCfYaOfOnY1wTQ2ZXjQmFzySjMZYeCBwU9BI0dHRAR3J/fH3T+T3rb7d4JbLy7WVq9v8L8t5Efy9P7pxY5I8jQ1ffknyVaqUJa4pI0dG0/Ka2M6DlP946RRkh2vKju2UHa9JbS9rtJPaXvp6Glknl84dYX5HThyUJyb0k9SCoPQlKi1P3fSh5M9VyGcZ6Rgz9wwRgsDCRhAwdPCHDx9uOrirV682AgUvCd4TRBneGH7boEEDcxw8GoTq8TvgPR3s2bNnS4ECBcxfOtkbN240wg2BSlglnXfCHRHW/JZtL7zwgrRq1cp02OnwL1iwwIQDeqtff2Wk005nnvd4jYhiIxST73r37m28QYSePvbYY0Y40dGn3FWqVDFePsJCeRF2ac+LYLj11ltNW9KhJzTxlltuMbk2bJ3YOrDPP1tervPPP/80U62wA8QU/VfKgMcQ7xVC4u67705wrYBXifryVgcIrO3btxvRTRik5z6Emfqqe/ZB6JBoEmGIcO3Xr5/xPAK2QLkQjHg3uWauz9OWuCbOze/t94hSxB3bSGaJuONax44da45HHVj7sXCd1C2huZSRslMn2AEDAuxP+d98800jguvUqWOEN0LQ/nbw4MHmM0Kb9uB31g7effddI7Q4rq97wr5HVBYvXjxBGRmIYAABEc6gA4KWsnB9nAs74rrw/CLAsQ2EMs9Xe3wGRsDaibcy2Ppx7uNpBww6MNjj2R5AW9KGCxcuNP0++4znuMl1qGV60Vi4cGHTsbVq3MJnb2vNUbG8PEEwclMEki61rpFN8xbInkrxI4zeKL4xSrp06ir5oqMlOxFeqpTkjcqVYNkNTwh3LVyqlEQGuJ2yO3QEeIBxT/DgUBS1PSW7k1meewgRvC70axAm/M0oQkPiz+kLBBmeELwato4QTPD111+bTr5NPvjQQw+ZDjedf/blZa/FnsN5LgbzGcAHOrDMm0O4NGnSxAg7Cx1eWzfVqlUzL6BzjIBhWtL999/vtfz+ysgxK1asaN4D/UTKTJlsAhH+vvLKK6YerGfPlsV29J3XhLi23HDDDcYbiTesY8eO7jqxU0AQETYs114nwoUyAWIM20RoAWGPiDRv9uHLbhBHCFdEVo0aNbzWkb+6B8JNuQ7m2s2aNcvsb68ZQYJ9IOAJP6VNvNkTx6e/7Swj10vopLUn5vkhLG0dO/86r5Pf4QEkXBaRe+mllxrhZ+0NIXrttde6kxUhygiLtXXEfEREsvWk4qnGK4m30bZHUrLaeto44K2cPn26Od8XX3xhIgjwOhIFyT1Om1M+bJZBChJ44hG88847xeLtXvHE875y/tZuw3Zwknnu4xSgDFRYz3VKyfSikQcsRo2LHIOzD38+e8sUlJmh8dafbSxnj+yTQvnjQwCcHDxSTY6dLZpghCC7wBIiLCVi16j0RlLXqFRSBw8+BmMUJaNR21MCRWa1vXy5CsgzPUf73WfW8ikyc/nFoXOetK3TTdrU6eL3XP7AQ4V3xpuotok8LHgD+S6pWMEIeEXwoCEC6Xj36tXLeBTp7zlhG54jvJSEI9q5fUCnH48h4B3jlVgZnWWwlC5d+qJyct6kQHgq4asIMOthRSx4wrV6lhWc064QZ87VAPjM8ZIDghivEglqLHhb//jjD/MeLyl1nVjd0/6IMLyACCzCOJ3gsOG4PXv2NALbEwQMwtETZ/1T7wziEDbpD7zytLvzt7Qrtgpcg+dxnb+lPvDIWdAPvkI4k0tUVJQRzniq4b777jPT4/AwEiIM6BTbrrQPiZ6cojGtoL6pd0+CMnsqI1Q0CtmBcOGz5AYPEJtNNasQkiePHAvPJSeOEi+fQwrl/29O5sEj1eXQ0WqSO/y02S87giBUURh4+M+NEClGnNLqQaIoantKZiazPvfw/hXI41/MXtuij0RF5HJnS/XG1Y17pjqLKp1v5jzZUEonzJ1img+eEuC9nU9FqCLhoBbPyDDwPB4ZH3kRnke4IZ4aPG9OEFd4lwg3Ze4b8xUJCQS8OrySWkZvZQAbHuj8XKJEiUTLzxQPwg4nTZpkPEh4eDzDKy3MfyQU0oanplc/Gc8kYZJOAegtG21S6t56Lp1z9ZK6jTBRtnnakRV6wLmpMwZyPO0H4c3xgTma7GcHNMDOlwTayjlPz9meHJv7HVFvPY1OUtsWtWvXdtuj53EJw3baXmrO6a9+LAhV6t2TtM6emiVi07gxCRlggjLucWKaiV/Oamsu5S1ZQt7s11leurqBPNr6JmlUrI35nr985vu3+nU2+ylKeuJ8AClKRqK2pwSKrGx7CEKEYXoJRmBQHpFG0hE8NHi6rCeJfhhJaZgzR8ecPhlJcoA5XIQy4tXDc8TAvj+YW/XPP/8YDxIhc3Z+vSecn/IQ6ogI8RSJnvgroy8QI3jg8Hrxl844SUY8wVvEUhdWFBJuyIvvEQJjxowx8+t8kdqOOyKVQQ/P94C3k3l5zEP1tQRGYnXPMVnGjnlulJXEMXgabWIfxLH1qDK3k7mfdpsneAIRTM6kMUCoJvZE2bGxHj16mHMTpkrYK+ekHM5klmwnypCwU35H2KwzYQ3H+Oabb8x1sZ3QaqfHFOcSgpqkRJR906ZNZk4t0Ha0P23vC+qJ49psx6cvvAfCYhFwhEDzHQMDiEUbdsv8YL5jHxvSSzIaC8eyqz0433vir34sc+bMMYMX3gg60WhdvIwmUGEYDVmHsiJlKpWT+s0bmNcdXQfJO/2+N3/td6UrlQt0EZVsDv/BMeqWmUbbleBAbU9R20tb4ZhWghHw6EydOtV0wAmvw2PHVCCbZIb5hcyVQ1TRWbdr+LVv397M72MbcwHpTPsDYcJv8R7SIWZuHQllPMFRQGcY0ch2zukPf2X0BeXlevk/kbBOBIhnmCyQYZVBBxKicL2IWbKOknAGbxhC7JJLLvF6DjtvLjX/53JdhEMiTki4YpPTAAIMUU1oLkKQF5lXk1v3ZIbFm8c2Qi0R3Xa9R/rfiESOzeAC+9mkQN4g/JXjOSEUdsiQIUaskW2XhDtAWCVeZOZiclycQ85BBLKfIrqoZ9ZmJyOp09tHORGW/BZvL/Vsc5u8+uqr5nd8z3V1797dHX7M9RBeSnns3FlPEKHUtV1vMSoqygwQADaDgGWggmNzvXy22X1pF7x/zFslUhJ7tKGswLFIemTf+ypDYvVDGC4DFsyD9SSpczaTSg5XdpxA54CJoVQ4N0qgE+F4QtXbrEbagVfU7pTsjj7zlGC3PTwKeKzorKY0KcVPiyfI1IXj5erGN6eZYFTSDxsiaJPpBAM2+ypJYBBUGQXeUEQ1DqZgSfQ3bNgw49n1lucF22Owg5Bez2dOSvRRlpjTmJ3hPxDniJGiqN0p2Rl95ilqe6kDoahiMWuRzf0zF0G/lrmoGQHe8bZt25pwYTyReEeDRTCCL69yethe8NRqJsSu/RIsI09K5kDtTlHbU4INfe4pgbS91IanKr5hviUJcQjdxMPozB4b7ORI4/BU9TQGEOs2zpUrlz5MFLU7JdujzzxFbU8JNoIxPDUjYb6h4tv2PDOtpgb1NAYY3OmKonanBAv6zFPU9pRgI9jCU5XsaXvqaQwgdi0XRVG7U4IBfeYpantpnwZfCa4QQUVJju2l5fxOteIAq3/WISKFsYYsKGp3SnZHn3lKsNseyznQiWNNQ5YC4LP+/5+90fBUJVB2R2QPy5vwzPG2lExyUdEYYHS0UVG7U4IJfeYpwWx7dN5Ifc9acQhHJTiwcxoVJaPBy02SoLSwPxWNAYTRRdZIURS1OyUY0GeeorYX721kIfbz58+naZIKRVEUJ6GhoWmauVdFY4Bdx8eOHZO8efNqeIqidqdke/SZp6jtxUMnLiwszLyU7I0+95TsYnvqK1cURVEURVEURVF8op7GAILqz5cvXyCLoAQhaneK2p4SbOhzT1HbU4KNHGmsM3IGy/okR48elcxYNspFg2r2NEXtTsnu6DNPUdtTgg197imZ0fasLkrOOo7ZXjQSywtlypQJdFEURVEURVEURVEyjU5KalLOHK7kSMwsmuaYtNaZMdkMKh8xu337dg1TVdTulGyPPvMUtT0l2NDnnpIZbc8mySlZsmSSl+PI9p5GKqJ06dKSmaEhdW6jonanBAv6zFPU9pRgQ597SmazveQu+6fZUxVFURRFURRFURSfqGhUFEVRFEVRFEVRfKKiMYBERETIE088Yf4qitqdkt3RZ56itqcEG/rcU7KL7WX7RDiKoiiKoiiKoihKylFPo6IoiqIoiqIoiuITFY2KoiiKoiiKoiiKT1Q0KoqiKIqiKIqiKD5R0agoiqIoiqIoiqL4REVjgHjnnXekfPnyEhkZKc2aNZMFCxYEqihKkPDkk09Kjhw5EryqV68e6GIp2ZA5c+ZIly5dpGTJksbOvvvuuwTbyb82YsQIKVGihERFRUm7du1k/fr1ASuvEjy2d/vtt1/0HOzYsWPAyqtkH55//nlp0qSJ5M2bV4oWLSrdunWTtWvXJtjn9OnTcs8990ihQoUkT5480qNHD9m7d2/AyqwEj+1dfvnlFz37+vfvn6zzqGgMABMmTJAHHnjApMFdvHix1KtXTzp06CD79u0LRHGUIKJWrVqye/du9+vPP/8MdJGUbMiJEyfMc43BMW+89NJL8uabb8r7778vf//9t+TOnds8A+lQKUp62h4gEp3PwfHjx2ulK6lm9uzZRhDOnz9fpk+fLufOnZMrr7zS2KRl8ODBMmXKFJk4caLZf9euXXLttddq7SvpbnvQt2/fBM8+/i9ODrrkRgDAs8iIwNtvv20+x8XFSZkyZeTee++VRx99NBBFUoLE08io+9KlSwNdFCWIYDRz8uTJZuTTehnxAj344IPy0EMPme9iYmKkWLFi8tlnn8lNN90U4BIr2dX2rKfxyJEjF3kgFSWt2b9/v/H60KFv3bq1ec4VKVJExo0bJ9ddd53ZZ82aNVKjRg2ZN2+eNG/eXBtBSRfbs57G+vXry6hRo1J8XPU0ZjBnz56VRYsWmXAsdyOEhJjPPDQUJT0hBJAOe8WKFaVXr16ybds2rXAlQ9m8ebPs2bMnwTMwOjraDKbpM1DJCH7//XfToapWrZrcfffdcvDgQa14Jc1BJELBggXNX/p+eICczz6miJQtW1affUq62p5l7NixUrhwYaldu7YMHTpUTp48mazj5kzTUiqJcuDAAYmNjTWj6k74zIiToqQXdMrx5NBRIizhqaeekksvvVRWrFhh4uAVJSNAMIK3Z6DdpijpBaGphANWqFBBNm7cKMOGDZOrrrrKdNpDQ0O14pU0gQiyQYMGScuWLU0HHXi+hYeHS/78+RPsq88+Jb1tD3r27CnlypUzjoNly5bJI488YuY9fvvtt0k+topGRQkS6BhZ6tata0QkD5Cvv/5a7rzzzoCWTVEUJSNwhj/XqVPHPAsrVapkvI9t27bVRlDSBOaXMSCreQOUzGJ7/fr1S/DsIxEdzzwGz3gGJgUNT81gcAszmumZLYvPxYsXz+jiKEEMo51Vq1aVDRs2BLooShBhn3P6DFQyA4Tq8/+yPgeVtGLgwIEydepUmTVrlpQuXTrBs48pSsypdaL9PyW9bc8bOA4gOc8+FY0ZDKEJjRo1kpkzZyZwJfO5RYsWGV0cJYg5fvy4GWFitElRMgrCAuk8OZ+BR48eNVlU9RmoZDQ7duwwcxr1OaikFpJ80Wkn+dJvv/1mnnVO6PuFhYUlePYRHkhuAX32Kelpe96wSRGT8+zT8NQAwHIbvXv3lsaNG0vTpk1NJiPS4vbp0ycQxVGCBDJVsn4ZIamk+WbJF7zeN998c6CLpmTDAQnn6CXJb/gPikn5JH1gvsUzzzwjVapUMf+5DR8+3MyzcGa5VJS0tj1ezOVmbTwGLhg0e/jhh6Vy5cpmyRdFSW1YIJlRv//+e5MnwM7RJtEX69Hyl6kg9AGxxXz58pms+QhGzZyqpKft8axje6dOncwaocxpZPkXMqsSop9kXEpAeOutt1xly5Z1hYeHu5o2beqaP3++toSSrtx4442uEiVKGJsrVaqU+bxhwwatdSXNmTVrlov/XjxfvXv3Ntvj4uJcw4cPdxUrVswVERHhatu2rWvt2rXaEkq62t7JkyddV155patIkSKusLAwV7ly5Vx9+/Z17dmzR2teSTXe7I7Xp59+6t7n1KlTrgEDBrgKFCjgypUrl6t79+6u3WOo4dQAABPwSURBVLt3a+0r6Wp727Ztc7Vu3dpVsGBB839u5cqVXUOGDHHFxMQk6zy6TqOiKIqiKIqiKIriE53TqCiKoiiKoiiKovhERaOiKIqiKIqiKIriExWNiqIoiqIoiqIoik9UNCqKoiiKoiiKoig+UdGoKIqiKIqiKIqi+ERFo6IoiqIoiqIoiuITFY2KoiiKoiiKoiiKT1Q0KoqS6di9e7c89dRTEhMTE+iiKOnMd999J+PHj9d6VtKUpUuXyssvvyznz5/XmlUURUkDVDQqihIwfv/9d8mRI4ccOXIkwff33HOPzJ8/X4YMGZKs423ZssUcjw6jkjn47LPPJH/+/F630cb33XeftGjRQjIDt99+u3Tr1k0yI5dffrkMGjRIsiNr166V4sWLy7Fjx9LkeIcOHZIePXpIjRo1JGfOnJJdefLJJ6V+/fqSHWnevLl88803gS6GoigOVDQqipLiDjYCjVdYWJhUqFBBHn74YTl9+nSqanTixImSN29emTZtmmzfvl1mzZoVNC0UTKL34MGDcueddxpPY/ny5QNdHCWADB06VO69915z36cWl8slt912mzzyyCNy9dVXp0n5sjMIdQYjypUrJ1FRUXLJJZfIP//8c1GdjhgxQkqUKGH2adeunaxfv/4iod6rVy/Jly+fGSTi3j5+/HiKy/X444/Lo48+KnFxcSk+hqIoaYuKRkVRUkzHjh1NKOmmTZvk9ddflw8++ECeeOKJVNXo9ddfL59//rkRTz/99JO0adNGWygLcPbs2WTtX6hQIVm5cqU0bNhQMntZlfRj27ZtMnXqVDMIlRbtyXOD4/Xr1y+NSpi9+d///ifTp0+XMWPGyPLly+XKK680onDnzp3ufV566SV588035f3335e///5bcufOLR06dEgwQIhg5H7mWNT/nDlzUtUGV111lRG0/B+gKErmQEWjoigpJiIiwoSVlSlTxoT10dmg02BhlPj55583XkhGqOvVqyeTJk3y6326+eabpVSpUpIrVy6pU6fORfPdOCadmMqVK5vzly1bVp599tkE+yBiEZscg3POmzcvwfY///xTLr30UlMmyk6I5IkTJ9zb8Xw988wzxmORJ08eMwr/ww8/yP79+6Vr167mu7p168rChQuTfdznnntO7rjjDuNVoewffvihezv1BA0aNDCdX0ISvREbG2tG8m29VqtWTd54442L9vvkk0+kVq1app7wEgwcONC9jZDgu+66S4oVKyaRkZFSu3Zt09mzEBpmf0u5X3311QTH5runn37a1BHeBdtBJByV66Luu3fvbtrUk++//96IRc5bsWJFM3/V39wzwpibNm1qOqt4MVq2bClbt271GVKK58RZd7zn2vm+cOHCpsObFJJrvym1naTYvSc//vijREdHy9ixY81nvPI33HCDqZ+CBQuac+G5Tkod2jBHBn2wW8rAsZxzivE+tW/f3tQf573ssstk8eLFCcqEzX788cem3TlGlSpVzLX74+uvvzb1yrU7mTt3rmk3jlOgQAHTZocPH/bbnitWrDBigzrGrm+99VY5cOCA+5j8jnuSiAjqiGcX1+6E+wIhVaRIEWPXV1xxhfz777/u7Rs3bjR1y/E5T5MmTWTGjBkX1QMedCfUOfcGfPHFF+a3Tm/dgAEDpHr16nLy5EmfdfXCCy+Y8/Ls4P73FtVB/ROWy73F8d59912fxzt16pS5z3metm7d2jxTqQ/+vvfee24v46hRo4znj+vGdin/rl273Ne4evVq+fnnn825mzVrJq1atZK33npLvvrqK7OfNzgu5+JZwTOmZMmSpm0soaGh0qlTJ3MMRVEyCS5FUZQU0Lt3b1fXrl3dn5cvX+4qXry4q1mzZu7vnnnmGVf16tVdP//8s2vjxo2uTz/91BUREeH6/fffzfZZs2a5eAwdPnzYfN6xY4fr5Zdfdi1ZssTs/+abb7pCQ0Ndf//9t/uYDz/8sKtAgQKuzz77zLVhwwbXH3/84froo4/Mts2bN5vjcc6pU6e61q5d67ruuutc5cqVc507d87sw29y587tev31113r1q1zzZ0719WgQQPX7bff7j4H+xcsWND1/vvvm33uvvtuV758+VwdO3Z0ff311+a43bp1c9WoUcMVFxeX7OO+8847rvXr17uef/55V0hIiGvNmjVm+4IFC0z5Z8yY4dq9e7fr4MGDXuv+7NmzrhEjRrj++ecf16ZNm1xffvmlK1euXK4JEya493n33XddkZGRrlGjRpnycmzKBrGxsa7mzZu7atWq5fr1119NXU+ZMsU1bdo0s33hwoWmXCNHjjS/pd2ioqLMX+e1UCevvPKKuXZe8+fPN7978cUXze/eeOMNV/78+V3R0dHu382ZM8f8jvbjvJy/fPnyrieffNLrtdJu/P6hhx4y51i1apX57datW73aIdx///2uyy67zP2Z93ny5HENGTLE1LWtb088j5WY/XojJbaTFLvnGrguGDt2rCtv3rymzaw9cLw77rjDtWzZMlNHPXv2dFWrVs115syZROvwiSeeMLZ7xRVXmDLMnj3bVblyZXMMy8yZM11jxoxxrV692vz+zjvvdBUrVsx19OhR9z7YbunSpV3jxo0z9n3fffeZevdlx3DNNde4+vfvn+A7ykA9U3dLly51rVixwvXWW2+59u/f77M9eYYUKVLENXToUFPGxYsXu9q3b+9q06ZNgjqkLbA12ubzzz935ciRw9igpV27dq4uXbqYe4t9HnzwQVehQoXc10B5aFued2x//PHHzX1m69LWw+TJkxNcE/XvvH+uv/56V5MmTUzb8KwKCwsz950vuLepk48//thc72OPPWZsoF69eu59eA6UKFHC9c0335jnAn+xRdraG7Sdfd44admypfv+wR7ZhzZx0rp1a9O+MHr0aHOfO+G6sOFvv/3W67knTpxo2oJnDnWHrX/44YcJ9nnvvffM/aQoSuZARaOiKCmCDjadAjqbdGboWCAYJk2aZLafPn3aCJm//vorwe/obN58881eRaM3OnfubDputpPDuaxI9MSKRjpWlpUrV5rv6Eja8/fr1y/B7xCelP3UqVPmMx2VW265xb0dAccxhg8f7v5u3rx55ju2pfS4iIaiRYuazpGz/J4dtKRwzz33uHr06OH+XLJkSdOx9MYvv/xiyoWA8QZigQ63EzroNWvWdH/mWhA/TmjXTp06JfjuxhtvTCAa27Zt63ruuecS7IMYobPrDTrr1IkvoZZU0YiATwznsZJiv95Iie0kZvf2Griut99+29Snsz6oPwSiFaGAWETo09aJ1SGikXsZ8Wr56aefjI34KiMDD07hCpwDEWU5fvy4+Y5j+QLRw+CEE+oX4eILb+359NNPu6688soE323fvt2c39o5v2vVqlWCfRBujzzyiPt+RcjQ9k4qVark+uCDD3yWh8EXRG1yROOhQ4eMwEYYI76fffZZlz9atGjhGjBgQILvGKBzikbKiWD3rBd+6++41MvOnTtd58+fN7ZEu1etWtVsZ/CL69m1a1eC3yF6b7jhBvOestv9nSDiGbzyxquvvmp+w4CHL77//ntTFmxNUZTAo+GpiqKkGEJASdrCPJfevXtLnz59TNZC2LBhgwm1IqSNUCz7IrSJ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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA40AAAISCAYAAABoEyobAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvctoD+AAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnQd8FNX2x0967wktCaGEkoQOFp7Yu6hPsTz1qVj/dsWuz94Vu9i7Pn2WpyjPgoCKgogoJbQESEIPISSk97b/z7mbWTab3WR3Mrs7M/f3/Xw2ezM7O3vv3N/enTPn3HMDLBaLhQAAAAAAAAAAACcEOtsIAAAAAAAAAADAaAQAAAAAAAAA0CPwNAIAAAAAAAAAcAmMRgAAAAAAAAAALoHRCAAAAAAAAADAJTAaAQAAAAAAAAC4BEYjAAAAAAAAAACXwGgEAAAAAAAAAOASGI0AAAAAAAAAAFwCoxEADTn//PNp5MiRVFZWhvMKAADA69x22200YMAAKioqMsXnAAD0CYxGABzYvXs3BQQE0Msvv+zRuXnppZfo119/pYULF1JKSopH7/3hhx/EZ/7yyy/oD43AOZXr+/r6669L+fl6qBd/zl133aXJsWQ7n3097ty5c+mtt96i+fPn0/Dhw73Wh1p9ji/pqy79oWu96h8ABkYjUM31118vBjdnD74j6WvY4OLPZmNBa3Jzc8Wx//jjD6evL1++nB555BHxgzpkyBDNPx8AAIAcFBYWit+bt99+u8f9tmzZQldddRV99dVXNHHiRK/Vx1efIxvl5eWin7/44gtd6gsAR4K7bQHAQ0pKSkTIisxMnToVIakAAN2QlpZGFovF39UwDd46n305rq+mQmDKhe/A9xboGXgaAQDA5DQ2NtKpp55KK1as6LK9qamJzjjjDFq6dKnf6gYAAAAA/QOjEXiV5ORkuuKKK8TF6rRp0ygiIoLuvfdeW+z+zJkzqX///hQaGkqZmZl0//33U0tLi9N5aa+88ooI/QwPD6e//e1vtHr1att+77//Ph199NGifPLJJ9vCZF944YVew26mT59OUVFR1K9fP7r11luptbXV7fbV1tbSHXfcIeZ4cBvY48phPBUVFV32q6mpoTvvvFPcseX6Dxs2TITwVldXdztmT+1ktm/f3iUUOCwsjLKysuiJJ56g9vZ2j8+dwqZNm+iUU07pci62bdvmdH6nu+12xL5OTz/9NKWnp1NsbCydd9554pjM7NmzafDgwUIr3JfsyVbTfmdwP5x00kmUlJQk5p8qcNgV6zM6OpoiIyPp8MMPp8WLF3d5L89VPfLII8V74+Pj6bDDDusWVsTnmNuyatUq8Tq3gbdx3Ry9CVwPpQ1BQUHie3Duued2SzKhHHPjxo101FFHiWPyeXvqqafIHfj7NGPGDNGe5ubmLq91dHRQVVWVMCi5zu7gzrlS6sxh3fy95P1mzZpl+95zO+Pi4ighIYEuu+wyqqurczp/iPV03XXXibvvrDPWBR+H+1Hv8HnnkHXWJmuUx8J//vOfov09sWHDBnEuPvroI3rnnXfEd4y/t1OmTBEadLXvhx9+KD4rODiYfvzxR6dzo/g7y1rj1+254YYbKCQkpNebB3v27BH96th3WrbfGW1tbV2+86wFPi933323uCHir/PprkY9OS5vGzFihChfeeWVTqd89OXcat2HnpxfNcf89NNPadSoUeKYEyZMoJ9//rlPbfLFOekLznTmyfng35lnnnmGcnJyxG95amoqnXXWWbR+/Xq39OXud83TPuLfnscee4zGjBlj+w3ja4a9e/f67NwCDbAAoJLrrruOr4ItJSUlLvdJSkqyHHfccZZTTz3VsnHjRsvu3bstX331lWXfvn2W1NRUS3Z2tmXFihWW6upqy+eff26JjY21nHLKKZaOjg7x/vnz54vPuOCCCyxPPPGEeF9hYaHloIMOsqSnp1uam5ttn7V48WKxL7/HHfbu3Wvp16+fZcqUKZbc3FxLZWWl5a233rL84x//EMeZM2eObd81a9aIbcuXL7dtq6urs0yYMMEybNgwy4IFCyw1NTViv0mTJlnGjx9vaWpqEvvx9rFjx4r6zps3T3zOtm3bLM8++6zl9ddf97idjlRUVFg++ugjS1RUlOWRRx6xbffkmHv27LGkpKRYDj74YMu6detEHd977z3Leeed1+1cuNtuZyh1Ouecc0T79+/fb1m1apVl0KBBln/+85+inrNnz7aUl5eLY6alpQnt9ERv7WddMNu3b7fk5ORYRowYYdm8ebNtv2eeecYSGBhoefjhh4U++Tzdd999lqCgIMuiRYvEPnl5eZbQ0FDL7bffLnTD54B1e+6554r3KGRkZFiOPPJIy8knn2xZv369qNurr75qCQkJsdxxxx0u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h5099dRTUqlSJdm4caN07NhRvv32W82ir6SYL7/8Ul555RXzN2Jxx44d8sYbb0jv3r29x4waNUqeeeaZRAO42bJlk19//TWka6lozGCWLFki9913nxGJdJjw/vDj9eyzz8q7776b0cVRogw65r///nu4i6FEOHSGfv75Z/nqq69kwoQJSfYfPXpUunXrJj169JD333/feIboPN18883y119/haXMyoUPQhHvNc84Ouz87Y+ffvpJvTxKmoGX57vvvpM6dep4B8UYtKhVq5bccsst3m04DHgmXnPNNbJ161bT/3vttdfk5Zdf1tZQUgQicebMmd6oxREjRhibq1+/vjRt2tR7HAMVqe3/aUxaGEYELrroIiMYoXjx4nLPPffIsGHDJCEhIaOLo0QZ2Bhen+XLl8upU6fCXRwlQmE03R0W6PZ6M2DGyCfExMSY0ff58+f79EoqSjCULl3adL7LlSsXVCef8GmmiihKarn//vu9ghEI+6tXr16iTvoXX3whjRo1MoIRCE294447zHZFSSl4uJ3T3G666SYTav/HH38kOo7B2aVLl8rKlSvl9OnTKbqWisYMhh8pHhpOLrnkEjNCStiMoqT3iFTXrl3l2muvNSE07733nla4EpbnIB17Bs2cz0G7T1HSG7zat912mxQpUsSEcZ08eVIrXUkz7LzFqlWrBuz/MQ9yz549WvtKmoDdYX9O2wPyqCAo27dvb6LOhgwZEvK5VTRmMPv27TM/Uk7se/YpSnpRrVo148XhwcEoO6Ob/fv3N2GEihLu5yDzannpc1BJT0hOQnggoYFEXODdZr7P888/rxWvpBkMRGBrd955p3eb9v+U9IYIMrzXzF20Hm3A600ixBUrVphcKsz9JsfFjBkzQjq/isYMhqQPJ06cSDJ5H5yT8hUlrSFcpnbt2t73zCdjzgXx74oS7ucg2d/4wdPnoJKeEBLI/FnLxRdfLH369NHnoJJmMJ928uTJMn78eClUqJB3u/b/lPSEOdx4EsmUSgIwEt1Y6Os5PY+9evWShg0bmvwqoaCiMYMh7phQBCf2fTDzMBQlLSlRokQSe1SUjHgOEiqNULTwnjkXZJVWlIxEn4NKWvHYY4+ZHBVkJXcvNeSv/8ecbubjKkpqBCMh94sWLTJJcYLREyl57qlozGCuuuoqk+LWOfl+7NixJoNWwYIFM7o4ShRB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ym+OoigZDOGpiqIogZg6dSqTSTxbtmzxblu+fLnZNmnSJO+22bNne0qWLOm55JJLPB07dvQUKlTI89RTTyU6V548eTw///yz9/1DDz3kufHGGz3du3f31KtXz1OuXDnP4sWLE31m1qxZ5rwXXXSRp0OHDp5KlSp5xo0b591POa655hpP1apVPddee62naNGink6dOiU6RzBl4zytW7c25+GYvHnzmnI99thjnurVq5ttuXPn9rzyyispOndyZezTp48na9asnlatWpn64L0v0qK+Au3/8ccfzb03a9bM06JFC9Nmw4cPT3I/9rM33HCD56effvLeB8e3a9fOU7lyZXMMx+7YscP72Q8//NBToEABz5VXXulp27atqa/Ro0d7/LFkyRJPsWLFPE2aNDH1W7FiRc+QIUPMvh9++MGcy8k///yT6JozZ8407/ls/fr1PT169PCsWrUqyXXmz59vjtu/f3+Ky2qvddlllxl74HO061tvveW5/PLLTZ22adPGkytXLvO9ssTHx5t25dWlSxdP2bJlPc2bN/ccOnQoyblPnz5t3s+dO9dTuHBhz5tvvmneb9++3dO4cWNPtWrVjG2VL1/etMPRo0e957jnnnvMZ6677jpTPtp37969Zh9l5j3Xvvrqqz0VKlTw1KhRI1HbDR482FtOjsdOvvnmm0R1wPaWLVt6qlSpYuqc8mALu3fv9ltvzzzzjPmMk23btpk2L1GihPe789xzzyW6DuXFHrjOq6++arZPnjzZfL/Yh/3Rfm+88Yb3c7Qv9cj3kO8A/xYsWNDTs2fPRNcPdB7o1auXqYtu3bp5atasae559erV3v1r164114qLi0v0uZiYGO+zc8OGDZ78+fN7Pv74Y/M+ISHB0759e3N/Z8+e9VlfHJsjRw5jUw0aNPBcddVVnuzZsyd6HgdTfieffvqpJzY21lzfgm1Q/lGjRpn3K1euNO95hliOHDli7JnPB3uMmz179nhq1apl2gPbxWYeeeSRRMdQx7fffrvf8iuKkn6oaFQUJcWiEZHBtoULF5r3dG7poDg7kBs3bjQdFWfn2C0a3Tz88MOmI+Ts4NFRZ7vtzHCt6dOn//swEzGd45MnT5r369atM52y3377LaSycR46y7ZTTgeMbZ07d/acOXPGK1LorNmOeCjnTq6MwHnHjx8fsD1SU1+B9u/bty+REIEB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", "text/plain": [ "
" ] @@ -1854,10 +1848,10 @@ "id": "5a4ac59f", "metadata": { "papermill": { - "duration": 0.007722, - "end_time": "2026-09-06T23:41:24.648907+00:00", + "duration": 0.004006, + "end_time": "2026-10-05T00:00:02.262579+00:00", "exception": false, - "start_time": "2026-09-06T23:41:24.641185+00:00", + "start_time": "2026-10-05T00:00:02.258573+00:00", "status": "completed" }, "tags": [] @@ -1888,10 +1882,10 @@ "id": "c6908ea8", "metadata": { "papermill": { - "duration": 0.010834, - "end_time": "2026-09-06T23:41:24.667525+00:00", + "duration": 0.003755, + "end_time": "2026-10-05T00:00:02.270188+00:00", "exception": false, - "start_time": "2026-09-06T23:41:24.656691+00:00", + "start_time": "2026-10-05T00:00:02.266433+00:00", "status": "completed" }, "tags": [] @@ -1915,16 +1909,16 @@ "id": "f8440694", "metadata": { "execution": { - "iopub.execute_input": "2026-09-06T23:41:24.738607Z", - "iopub.status.busy": "2026-09-06T23:41:24.738149Z", - "iopub.status.idle": "2026-09-06T23:45:08.470383Z", - "shell.execute_reply": "2026-09-06T23:45:08.468614Z" + "iopub.execute_input": "2026-10-05T00:00:02.279201Z", + "iopub.status.busy": "2026-10-05T00:00:02.278979Z", + "iopub.status.idle": "2026-10-05T00:02:49.802597Z", + "shell.execute_reply": "2026-10-05T00:02:49.801288Z" }, "papermill": { - "duration": 223.773309, - "end_time": "2026-09-06T23:45:08.471949+00:00", + "duration": 167.529278, + "end_time": "2026-10-05T00:02:49.803406+00:00", "exception": false, - "start_time": "2026-09-06T23:41:24.698640+00:00", + "start_time": "2026-10-05T00:00:02.274128+00:00", "status": "completed" }, "tags": [] @@ -1934,168 +1928,168 @@ "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 16 s=11 poussees= 32 separations= 25 | pond OPTIMAL 0.16s | 2p OPTIMAL/OPTIMAL 0.28s\n" + " d=0.25 n= 16 s=11 poussees= 32 separations= 25 | pond OPTIMAL 0.07s | 2p OPTIMAL/OPTIMAL 0.11s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 16 s=22 poussees= 32 separations= 24 | pond OPTIMAL 0.13s | 2p OPTIMAL/OPTIMAL 0.22s\n" + " d=0.25 n= 16 s=22 poussees= 32 separations= 24 | pond OPTIMAL 0.04s | 2p OPTIMAL/OPTIMAL 0.08s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 16 s=33 poussees= 32 separations= 32 | pond OPTIMAL 0.13s | 2p OPTIMAL/OPTIMAL 0.23s\n" + " d=0.25 n= 16 s=33 poussees= 32 separations= 32 | pond OPTIMAL 0.04s | 2p OPTIMAL/OPTIMAL 0.07s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 32 s=11 poussees= 64 separations= 109 | pond OPTIMAL 0.63s | 2p OPTIMAL/OPTIMAL 1.09s\n" + " d=0.25 n= 32 s=11 poussees= 64 separations= 109 | pond OPTIMAL 0.29s | 2p OPTIMAL/OPTIMAL 0.35s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 32 s=22 poussees= 64 separations= 124 | pond OPTIMAL 0.30s | 2p OPTIMAL/OPTIMAL 0.75s\n" + " d=0.25 n= 32 s=22 poussees= 64 separations= 124 | pond OPTIMAL 0.08s | 2p OPTIMAL/OPTIMAL 0.22s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 32 s=33 poussees= 64 separations= 116 | pond OPTIMAL 0.33s | 2p OPTIMAL/OPTIMAL 0.62s\n" + " d=0.25 n= 32 s=33 poussees= 64 separations= 116 | pond OPTIMAL 0.11s | 2p OPTIMAL/OPTIMAL 0.17s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 64 s=11 poussees=128 separations= 497 | pond OPTIMAL 0.90s | 2p OPTIMAL/OPTIMAL 1.94s\n" + " d=0.25 n= 64 s=11 poussees=128 separations= 497 | pond OPTIMAL 0.22s | 2p OPTIMAL/OPTIMAL 0.50s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 64 s=22 poussees=128 separations= 490 | pond OPTIMAL 0.93s | 2p OPTIMAL/OPTIMAL 1.54s\n" + " d=0.25 n= 64 s=22 poussees=128 separations= 490 | pond OPTIMAL 0.26s | 2p OPTIMAL/OPTIMAL 0.38s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 64 s=33 poussees=128 separations= 514 | pond FEASIBLE 10.05s | 2p OPTIMAL/FEASIBLE 11.28s\n" + " d=0.25 n= 64 s=33 poussees=128 separations= 514 | pond FEASIBLE 10.05s | 2p OPTIMAL/FEASIBLE 10.55s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 90 s=11 poussees=180 separations= 975 | pond OPTIMAL 1.67s | 2p OPTIMAL/OPTIMAL 3.29s\n" + " d=0.25 n= 90 s=11 poussees=180 separations= 975 | pond OPTIMAL 0.62s | 2p OPTIMAL/OPTIMAL 1.10s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 90 s=22 poussees=180 separations= 972 | pond OPTIMAL 1.60s | 2p OPTIMAL/OPTIMAL 4.54s\n" + " d=0.25 n= 90 s=22 poussees=180 separations= 972 | pond OPTIMAL 0.91s | 2p OPTIMAL/OPTIMAL 1.52s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 90 s=33 poussees=180 separations= 993 | pond OPTIMAL 1.85s | 2p OPTIMAL/OPTIMAL 4.13s\n" + " d=0.25 n= 90 s=33 poussees=180 separations= 993 | pond OPTIMAL 0.48s | 2p OPTIMAL/OPTIMAL 1.16s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 16 s=11 poussees= 32 separations= 63 | pond OPTIMAL 2.52s | 2p OPTIMAL/OPTIMAL 2.16s\n" + " d=0.6 n= 16 s=11 poussees= 32 separations= 63 | pond OPTIMAL 1.06s | 2p OPTIMAL/OPTIMAL 1.06s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 16 s=22 poussees= 32 separations= 65 | pond OPTIMAL 0.19s | 2p OPTIMAL/OPTIMAL 0.35s\n" + " d=0.6 n= 16 s=22 poussees= 32 separations= 65 | pond OPTIMAL 0.04s | 2p OPTIMAL/OPTIMAL 0.09s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 16 s=33 poussees= 32 separations= 76 | pond OPTIMAL 0.16s | 2p OPTIMAL/OPTIMAL 0.35s\n" + " d=0.6 n= 16 s=33 poussees= 32 separations= 76 | pond OPTIMAL 0.06s | 2p OPTIMAL/OPTIMAL 0.10s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 32 s=11 poussees= 64 separations= 285 | pond FEASIBLE 10.02s | 2p FEASIBLE/UNKNOWN 20.06s\n" + " d=0.6 n= 32 s=11 poussees= 64 separations= 285 | pond FEASIBLE 10.02s | 2p FEASIBLE/FEASIBLE 20.05s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 32 s=22 poussees= 64 separations= 274 | pond FEASIBLE 10.04s | 2p OPTIMAL/FEASIBLE 10.42s\n" + " d=0.6 n= 32 s=22 poussees= 64 separations= 274 | pond FEASIBLE 10.02s | 2p OPTIMAL/FEASIBLE 10.18s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 32 s=33 poussees= 64 separations= 268 | pond OPTIMAL 0.44s | 2p OPTIMAL/OPTIMAL 0.83s\n" + " d=0.6 n= 32 s=33 poussees= 64 separations= 268 | pond OPTIMAL 0.21s | 2p OPTIMAL/OPTIMAL 0.37s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 64 s=11 poussees=128 separations=1190 | pond OPTIMAL 1.66s | 2p OPTIMAL/OPTIMAL 4.20s\n" + " d=0.6 n= 64 s=11 poussees=128 separations=1190 | pond OPTIMAL 0.60s | 2p OPTIMAL/OPTIMAL 1.15s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 64 s=22 poussees=128 separations=1184 | pond FEASIBLE 10.02s | 2p OPTIMAL/FEASIBLE 11.76s\n" + " d=0.6 n= 64 s=22 poussees=128 separations=1184 | pond FEASIBLE 10.03s | 2p OPTIMAL/FEASIBLE 10.74s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 64 s=33 poussees=128 separations=1170 | pond FEASIBLE 10.03s | 2p FEASIBLE/FEASIBLE 20.06s\n" + " d=0.6 n= 64 s=33 poussees=128 separations=1170 | pond FEASIBLE 10.08s | 2p FEASIBLE/FEASIBLE 20.07s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 90 s=11 poussees=180 separations=2362 | pond FEASIBLE 10.05s | 2p OPTIMAL/FEASIBLE 13.14s\n" + " d=0.6 n= 90 s=11 poussees=180 separations=2362 | pond FEASIBLE 10.06s | 2p OPTIMAL/FEASIBLE 11.60s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 90 s=22 poussees=180 separations=2351 | pond OPTIMAL 4.11s | 2p OPTIMAL/OPTIMAL 10.83s\n" + " d=0.6 n= 90 s=22 poussees=180 separations=2351 | pond OPTIMAL 1.53s | 2p OPTIMAL/OPTIMAL 3.23s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 90 s=33 poussees=180 separations=2336 | pond OPTIMAL 4.23s | 2p OPTIMAL/OPTIMAL 7.07s\n" + " d=0.6 n= 90 s=33 poussees=180 separations=2336 | pond OPTIMAL 1.66s | 2p OPTIMAL/OPTIMAL 2.14s\n" ] }, { @@ -2106,16 +2100,16 @@ "=== Certification par densite et par taille ===\n", "\n", "densite 0.25 : pondere OPTIMAL 11/12 | makespan certifie par les deux passes 12/12\n", - " n= 16 ( 32 poussees, ~ 27 separations) : pondere 3/3 OPTIMAL, pire temps 0.16s | makespan certifie 3/3\n", - " n= 32 ( 64 poussees, ~ 116 separations) : pondere 3/3 OPTIMAL, pire temps 0.63s | makespan certifie 3/3\n", + " n= 16 ( 32 poussees, ~ 27 separations) : pondere 3/3 OPTIMAL, pire temps 0.07s | makespan certifie 3/3\n", + " n= 32 ( 64 poussees, ~ 116 separations) : pondere 3/3 OPTIMAL, pire temps 0.29s | makespan certifie 3/3\n", " n= 64 (128 poussees, ~ 500 separations) : pondere 2/3 OPTIMAL, pire temps 10.05s | makespan certifie 3/3\n", - " n= 90 (180 poussees, ~ 980 separations) : pondere 3/3 OPTIMAL, pire temps 1.85s | makespan certifie 3/3\n", + " n= 90 (180 poussees, ~ 980 separations) : pondere 3/3 OPTIMAL, pire temps 0.91s | makespan certifie 3/3\n", "\n", "densite 0.6 : pondere OPTIMAL 7/12 | makespan certifie par les deux passes 10/12\n", - " n= 16 ( 32 poussees, ~ 68 separations) : pondere 3/3 OPTIMAL, pire temps 2.52s | makespan certifie 3/3\n", - " n= 32 ( 64 poussees, ~ 275 separations) : pondere 1/3 OPTIMAL, pire temps 10.04s | makespan certifie 2/3\n", - " n= 64 (128 poussees, ~1181 separations) : pondere 1/3 OPTIMAL, pire temps 10.03s | makespan certifie 2/3\n", - " n= 90 (180 poussees, ~2349 separations) : pondere 2/3 OPTIMAL, pire temps 10.05s | makespan certifie 3/3\n", + " n= 16 ( 32 poussees, ~ 68 separations) : pondere 3/3 OPTIMAL, pire temps 1.06s | makespan certifie 3/3\n", + " n= 32 ( 64 poussees, ~ 275 separations) : pondere 1/3 OPTIMAL, pire temps 10.02s | makespan certifie 2/3\n", + " n= 64 (128 poussees, ~1181 separations) : pondere 1/3 OPTIMAL, pire temps 10.08s | makespan certifie 2/3\n", + " n= 90 (180 poussees, ~2349 separations) : pondere 2/3 OPTIMAL, pire temps 10.06s | makespan certifie 3/3\n", "\n", "=== Instances ou l'encodage pondere rend un FEASIBLE indistinct alors que les deux passes CERTIFIENT le makespan : 4/24 ===\n", " densite n_modules seed pond_status 2p_status\n", @@ -2124,7 +2118,7 @@ " 0.60 64 22 FEASIBLE OPTIMAL/FEASIBLE\n", " 0.60 90 11 FEASIBLE OPTIMAL/FEASIBLE\n", "\n", - "Cout du second encodage : 82.2 s contre 131.1 s (x1.60)\n", + "Cout du second encodage : 68.5 s contre 97.0 s (x1.42)\n", "Audits externes en echec sur la sonde : 0\n" ] } @@ -2189,10 +2183,10 @@ "id": "bb1f6872", "metadata": { "papermill": { - "duration": 0.0099, - "end_time": "2026-09-06T23:45:08.491621+00:00", + "duration": 0.00618, + "end_time": "2026-10-05T00:02:49.816193+00:00", "exception": false, - "start_time": "2026-09-06T23:45:08.481721+00:00", + "start_time": "2026-10-05T00:02:49.810013+00:00", "status": "completed" }, "tags": [] @@ -2230,16 +2224,16 @@ "id": "824a04a6", "metadata": { "execution": { - "iopub.execute_input": "2026-09-06T23:45:08.516983Z", - "iopub.status.busy": "2026-09-06T23:45:08.516693Z", - "iopub.status.idle": "2026-09-06T23:45:08.536717Z", - "shell.execute_reply": "2026-09-06T23:45:08.535220Z" + "iopub.execute_input": "2026-10-05T00:02:49.826144Z", + "iopub.status.busy": "2026-10-05T00:02:49.825883Z", + "iopub.status.idle": "2026-10-05T00:02:49.834990Z", + "shell.execute_reply": "2026-10-05T00:02:49.834414Z" }, "papermill": { - "duration": 0.037391, - "end_time": "2026-09-06T23:45:08.537916+00:00", + "duration": 0.014522, + "end_time": "2026-10-05T00:02:49.835595+00:00", "exception": false, - "start_time": "2026-09-06T23:45:08.500525+00:00", + "start_time": "2026-10-05T00:02:49.821073+00:00", "status": "completed" }, "tags": [] @@ -2252,19 +2246,19 @@ "provenance.json : 25 instances identifiees par empreinte\n", "\n", "Artefacts publies dans data\\app30-orbital-assembly-audit\n", - " difficulty_probe.csv 2,665 octets\n", - " exchange_fronts.json 14,996 octets\n", - " grid_runs.csv 4,483 octets\n", + " difficulty_probe.csv 2,583 octets\n", + " exchange_fronts.json 15,031 octets\n", + " grid_runs.csv 4,481 octets\n", " LICENSE 1,129 octets\n", " matched_comparison.csv 2,738 octets\n", - " provenance.json 9,890 octets\n", - " SOURCE.md 6,851 octets\n" + " provenance.json 9,895 octets\n", + " SOURCE.md 6,865 octets\n" ] } ], "source": [ "provenance = {\n", - " \"application\": \"App-30 — Ordonnancement d'assemblage orbital\",\n", + " \"application\": \"Research-08 — Ordonnancement d'assemblage orbital\",\n", " \"distillation\": {\n", " \"projet\": \"PrCon C4 — Orbital Assembly Scheduling\",\n", " \"auteurs\": [\"Gurvan Estable\", \"Joris Bely\", \"Kévin Lubert\"],\n", @@ -2311,10 +2305,10 @@ "id": "9562692c", "metadata": { "papermill": { - "duration": 0.009234, - "end_time": "2026-09-06T23:45:08.556360+00:00", + "duration": 0.004661, + "end_time": "2026-10-05T00:02:49.844760+00:00", "exception": false, - "start_time": "2026-09-06T23:45:08.547126+00:00", + "start_time": "2026-10-05T00:02:49.840099+00:00", "status": "completed" }, "tags": [] @@ -2331,16 +2325,16 @@ "id": "10e749ec", "metadata": { "execution": { - "iopub.execute_input": "2026-09-06T23:45:08.580514Z", - "iopub.status.busy": "2026-09-06T23:45:08.580034Z", - "iopub.status.idle": "2026-09-06T23:45:08.589724Z", - "shell.execute_reply": "2026-09-06T23:45:08.588376Z" + "iopub.execute_input": "2026-10-05T00:02:49.858250Z", + "iopub.status.busy": "2026-10-05T00:02:49.857922Z", + "iopub.status.idle": "2026-10-05T00:02:49.865970Z", + "shell.execute_reply": "2026-10-05T00:02:49.864837Z" }, "papermill": { - "duration": 0.021235, - "end_time": "2026-09-06T23:45:08.590830+00:00", + "duration": 0.017014, + "end_time": "2026-10-05T00:02:49.866936+00:00", "exception": false, - "start_time": "2026-09-06T23:45:08.569595+00:00", + "start_time": "2026-10-05T00:02:49.849922+00:00", "status": "completed" }, "tags": [] @@ -2391,10 +2385,10 @@ "id": "ded4bf55", "metadata": { "papermill": { - "duration": 0.018179, - "end_time": "2026-09-06T23:45:08.621068+00:00", + "duration": 0.005265, + "end_time": "2026-10-05T00:02:49.878537+00:00", "exception": false, - "start_time": "2026-09-06T23:45:08.602889+00:00", + "start_time": "2026-10-05T00:02:49.873272+00:00", "status": "completed" }, "tags": [] @@ -2413,16 +2407,16 @@ "id": "677a9a93", "metadata": { "execution": { - "iopub.execute_input": "2026-09-06T23:45:08.689528Z", - "iopub.status.busy": "2026-09-06T23:45:08.689250Z", - "iopub.status.idle": "2026-09-06T23:45:08.742249Z", - "shell.execute_reply": "2026-09-06T23:45:08.740430Z" + "iopub.execute_input": "2026-10-05T00:02:49.890215Z", + "iopub.status.busy": "2026-10-05T00:02:49.890003Z", + "iopub.status.idle": "2026-10-05T00:02:49.923796Z", + "shell.execute_reply": "2026-10-05T00:02:49.922669Z" }, "papermill": { - "duration": 0.092843, - "end_time": "2026-09-06T23:45:08.743443+00:00", + "duration": 0.04036, + "end_time": "2026-10-05T00:02:49.924778+00:00", "exception": false, - "start_time": "2026-09-06T23:45:08.650600+00:00", + "start_time": "2026-10-05T00:02:49.884418+00:00", "status": "completed" }, "tags": [] @@ -2473,10 +2467,10 @@ "id": "ee1d988f", "metadata": { "papermill": { - "duration": 0.00931, - "end_time": "2026-09-06T23:45:08.762089+00:00", + "duration": 0.006167, + "end_time": "2026-10-05T00:02:49.937516+00:00", "exception": false, - "start_time": "2026-09-06T23:45:08.752779+00:00", + "start_time": "2026-10-05T00:02:49.931349+00:00", "status": "completed" }, "tags": [] @@ -2497,16 +2491,16 @@ "id": "f821dfe4", "metadata": { "execution": { - "iopub.execute_input": "2026-09-06T23:45:08.819056Z", - "iopub.status.busy": "2026-09-06T23:45:08.818535Z", - "iopub.status.idle": "2026-09-06T23:45:08.828337Z", - "shell.execute_reply": "2026-09-06T23:45:08.827079Z" + "iopub.execute_input": "2026-10-05T00:02:49.946707Z", + "iopub.status.busy": "2026-10-05T00:02:49.946515Z", + "iopub.status.idle": "2026-10-05T00:02:49.951712Z", + "shell.execute_reply": "2026-10-05T00:02:49.951130Z" }, "papermill": { - "duration": 0.053635, - "end_time": "2026-09-06T23:45:08.829713+00:00", + "duration": 0.009955, + "end_time": "2026-10-05T00:02:49.952175+00:00", "exception": false, - "start_time": "2026-09-06T23:45:08.776078+00:00", + "start_time": "2026-10-05T00:02:49.942220+00:00", "status": "completed" }, "tags": [] @@ -2556,10 +2550,10 @@ "id": "dec4aa40", "metadata": { "papermill": { - "duration": 0.009678, - "end_time": "2026-09-06T23:45:08.848746+00:00", + "duration": 0.003386, + "end_time": "2026-10-05T00:02:49.959248+00:00", "exception": false, - "start_time": "2026-09-06T23:45:08.839068+00:00", + "start_time": "2026-10-05T00:02:49.955862+00:00", "status": "completed" }, "tags": [] @@ -2579,10 +2573,10 @@ "id": "8cd7a398", "metadata": { "papermill": { - "duration": 0.031214, - "end_time": "2026-09-06T23:45:08.889858+00:00", + "duration": 0.004538, + "end_time": "2026-10-05T00:02:49.967763+00:00", "exception": false, - "start_time": "2026-09-06T23:45:08.858644+00:00", + "start_time": "2026-10-05T00:02:49.963225+00:00", "status": "completed" }, "tags": [] @@ -2613,10 +2607,10 @@ "id": "f75dddcf", "metadata": { "papermill": { - "duration": 0.031927, - "end_time": "2026-09-06T23:45:08.959894+00:00", + "duration": 0.004085, + "end_time": "2026-10-05T00:02:49.976142+00:00", "exception": false, - "start_time": "2026-09-06T23:45:08.927967+00:00", + "start_time": "2026-10-05T00:02:49.972057+00:00", "status": "completed" }, "tags": [] @@ -2655,7 +2649,7 @@ "\n", "- [CSP-4 Scheduling](../../Part2-CSP/CSP-4-Scheduling.ipynb) — les primitives d'intervalles, `NoOverlap` et `Cumulative` en contexte.\n", "- [CSP-5 Optimisation](../../Part2-CSP/CSP-5-Optimization.ipynb) — objectifs, bornes et lecture des statuts.\n", - "- [App-29 SALBP](Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb) — même exigence de certificats et de provenance sur l'équilibrage de ligne.\n", + "- [Research-07 SALBP](Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb) — même exigence de certificats et de provenance sur l'équilibrage de ligne.\n", "- [App-24 MAPF](Research-03-MAPF-Guarantee-Audit-Python.ipynb) — l'audit de garanties appliqué au *pathfinding* multi-agent." ] } @@ -2676,21 +2670,21 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.14" + "version": "3.13.15" }, "papermill": { "default_parameters": {}, - "duration": 246.232405, - "end_time": "2026-09-06T23:45:09.969967+00:00", + "duration": 177.576558, + "end_time": "2026-10-05T00:02:50.318673+00:00", "environment_variables": {}, "exception": null, "input_path": "Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb", - "output_path": "Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb", + "output_path": "Research-08-OrbitalAssembly-Certificate-Audit-Python_output.ipynb", "parameters": {}, - "start_time": "2026-09-06T23:41:03.737562+00:00", + "start_time": "2026-10-04T23:59:52.742115+00:00", "version": "2.7.0" } }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb index 6c49632c2a..82ee78724a 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb @@ -5,16 +5,16 @@ "id": "bd00bbaf", "metadata": { "papermill": { - "duration": 0.0043, - "end_time": "2026-09-07T08:01:54.212517+00:00", + "duration": 0.004328, + "end_time": "2026-10-05T00:02:54.367313+00:00", "exception": false, - "start_time": "2026-09-07T08:01:54.208217+00:00", + "start_time": "2026-10-05T00:02:54.362985+00:00", "status": "completed" }, "tags": [] }, "source": [ - "# App-31 — RCPSP/max : quand la faisabilité devient le problème\n", + "# Research-09 — RCPSP/max : quand la faisabilité devient le problème\n", "\n", "## Décalages généralisés, circuits de poids positif, et ce qu'une borne gratuite dit d'un banc d'essai\n", "\n", @@ -65,10 +65,10 @@ "id": "ac3a6c1b", "metadata": { "papermill": { - "duration": 0.003051, - "end_time": "2026-09-07T08:01:54.220007+00:00", + "duration": 0.004063, + "end_time": "2026-10-05T00:02:54.379153+00:00", "exception": false, - "start_time": "2026-09-07T08:01:54.216956+00:00", + "start_time": "2026-10-05T00:02:54.375090+00:00", "status": "completed" }, "tags": [] @@ -96,16 +96,16 @@ "id": "f37cf19b", "metadata": { "execution": { - "iopub.execute_input": "2026-09-07T08:01:54.228063Z", - "iopub.status.busy": "2026-09-07T08:01:54.227894Z", - "iopub.status.idle": "2026-09-07T08:01:56.363405Z", - "shell.execute_reply": "2026-09-07T08:01:56.362430Z" + "iopub.execute_input": "2026-10-05T00:02:54.388718Z", + "iopub.status.busy": "2026-10-05T00:02:54.388404Z", + "iopub.status.idle": "2026-10-05T00:02:55.020624Z", + "shell.execute_reply": "2026-10-05T00:02:55.019983Z" }, "papermill": { - "duration": 2.141043, - "end_time": "2026-09-07T08:01:56.364096+00:00", + "duration": 0.637968, + "end_time": "2026-10-05T00:02:55.021276+00:00", "exception": false, - "start_time": "2026-09-07T08:01:54.223053+00:00", + "start_time": "2026-10-05T00:02:54.383308+00:00", "status": "completed" }, "tags": [] @@ -116,11 +116,11 @@ "output_type": "stream", "text": [ "Environnement de collecte\n", - " python 3.13.14\n", + " python 3.13.15\n", " platform Windows\n", " ortools 9.15.6755\n", - " numpy 2.4.4\n", - " pandas 2.3.3\n", + " numpy 2.4.6\n", + " pandas 3.0.5\n", "\n", "Artefacts ecrits dans : data\\app31-rcpsp-max\n" ] @@ -168,10 +168,10 @@ "id": "221e195d", "metadata": { "papermill": { - "duration": 0.002993, - "end_time": "2026-09-07T08:01:56.370524+00:00", + "duration": 0.002477, + "end_time": "2026-10-05T00:02:55.026447+00:00", "exception": false, - "start_time": "2026-09-07T08:01:56.367531+00:00", + "start_time": "2026-10-05T00:02:55.023970+00:00", "status": "completed" }, "tags": [] @@ -187,10 +187,10 @@ "id": "15cc83bc", "metadata": { "papermill": { - "duration": 0.0027, - "end_time": "2026-09-07T08:01:56.376106+00:00", + "duration": 0.002208, + "end_time": "2026-10-05T00:02:55.030969+00:00", "exception": false, - "start_time": "2026-09-07T08:01:56.373406+00:00", + "start_time": "2026-10-05T00:02:55.028761+00:00", "status": "completed" }, "tags": [] @@ -227,16 +227,16 @@ "id": "f7c357f5", "metadata": { "execution": { - "iopub.execute_input": "2026-09-07T08:01:56.383071Z", - "iopub.status.busy": "2026-09-07T08:01:56.382838Z", - "iopub.status.idle": "2026-09-07T08:01:56.390738Z", - "shell.execute_reply": "2026-09-07T08:01:56.389868Z" + "iopub.execute_input": "2026-10-05T00:02:55.036807Z", + "iopub.status.busy": "2026-10-05T00:02:55.036535Z", + "iopub.status.idle": "2026-10-05T00:02:55.042572Z", + "shell.execute_reply": "2026-10-05T00:02:55.042183Z" }, "papermill": { - "duration": 0.012366, - "end_time": "2026-09-07T08:01:56.391396+00:00", + "duration": 0.009826, + "end_time": "2026-10-05T00:02:55.043265+00:00", "exception": false, - "start_time": "2026-09-07T08:01:56.379030+00:00", + "start_time": "2026-10-05T00:02:55.033439+00:00", "status": "completed" }, "tags": [] @@ -322,10 +322,10 @@ "id": "a33e2281", "metadata": { "papermill": { - "duration": 0.003575, - "end_time": "2026-09-07T08:01:56.398158+00:00", + "duration": 0.002245, + "end_time": "2026-10-05T00:02:55.047754+00:00", "exception": false, - "start_time": "2026-09-07T08:01:56.394583+00:00", + "start_time": "2026-10-05T00:02:55.045509+00:00", "status": "completed" }, "tags": [] @@ -346,10 +346,10 @@ "id": "34acfb2f", "metadata": { "papermill": { - "duration": 0.003071, - "end_time": "2026-09-07T08:01:56.404099+00:00", + "duration": 0.002074, + "end_time": "2026-10-05T00:02:55.051939+00:00", "exception": false, - "start_time": "2026-09-07T08:01:56.401028+00:00", + "start_time": "2026-10-05T00:02:55.049865+00:00", "status": "completed" }, "tags": [] @@ -381,16 +381,16 @@ "id": "4a390a79", "metadata": { "execution": { - "iopub.execute_input": "2026-09-07T08:01:56.410562Z", - "iopub.status.busy": "2026-09-07T08:01:56.410410Z", - "iopub.status.idle": "2026-09-07T08:01:56.416363Z", - "shell.execute_reply": "2026-09-07T08:01:56.415818Z" + "iopub.execute_input": "2026-10-05T00:02:55.057077Z", + "iopub.status.busy": "2026-10-05T00:02:55.056915Z", + "iopub.status.idle": "2026-10-05T00:02:55.062881Z", + "shell.execute_reply": "2026-10-05T00:02:55.062197Z" }, "papermill": { - "duration": 0.010031, - "end_time": "2026-09-07T08:01:56.416850+00:00", + "duration": 0.009533, + "end_time": "2026-10-05T00:02:55.063567+00:00", "exception": false, - "start_time": "2026-09-07T08:01:56.406819+00:00", + "start_time": "2026-10-05T00:02:55.054034+00:00", "status": "completed" }, "tags": [] @@ -469,10 +469,10 @@ "id": "5388605f", "metadata": { "papermill": { - "duration": 0.003151, - "end_time": "2026-09-07T08:01:56.422995+00:00", + "duration": 0.002251, + "end_time": "2026-10-05T00:02:55.068429+00:00", "exception": false, - "start_time": "2026-09-07T08:01:56.419844+00:00", + "start_time": "2026-10-05T00:02:55.066178+00:00", "status": "completed" }, "tags": [] @@ -493,10 +493,10 @@ "id": "f88231f3", "metadata": { "papermill": { - "duration": 0.003361, - "end_time": "2026-09-07T08:01:56.429687+00:00", + "duration": 0.002111, + "end_time": "2026-10-05T00:02:55.072879+00:00", "exception": false, - "start_time": "2026-09-07T08:01:56.426326+00:00", + "start_time": "2026-10-05T00:02:55.070768+00:00", "status": "completed" }, "tags": [] @@ -528,16 +528,16 @@ "id": "40eb6f0d", "metadata": { "execution": { - "iopub.execute_input": "2026-09-07T08:01:56.437012Z", - "iopub.status.busy": "2026-09-07T08:01:56.436739Z", - "iopub.status.idle": "2026-09-07T08:01:56.463523Z", - "shell.execute_reply": "2026-09-07T08:01:56.462921Z" + "iopub.execute_input": "2026-10-05T00:02:55.078996Z", + "iopub.status.busy": "2026-10-05T00:02:55.078791Z", + "iopub.status.idle": "2026-10-05T00:02:55.107254Z", + "shell.execute_reply": "2026-10-05T00:02:55.106644Z" }, "papermill": { - "duration": 0.031346, - "end_time": "2026-09-07T08:01:56.464079+00:00", + "duration": 0.032557, + "end_time": "2026-10-05T00:02:55.107823+00:00", "exception": false, - "start_time": "2026-09-07T08:01:56.432733+00:00", + "start_time": "2026-10-05T00:02:55.075266+00:00", "status": "completed" }, "tags": [] @@ -616,10 +616,10 @@ "id": "351f4321", "metadata": { "papermill": { - "duration": 0.003231, - "end_time": "2026-09-07T08:01:56.470577+00:00", + "duration": 0.002178, + "end_time": "2026-10-05T00:02:55.112392+00:00", "exception": false, - "start_time": "2026-09-07T08:01:56.467346+00:00", + "start_time": "2026-10-05T00:02:55.110214+00:00", "status": "completed" }, "tags": [] @@ -637,10 +637,10 @@ "id": "68a8ebb6", "metadata": { "papermill": { - "duration": 0.003319, - "end_time": "2026-09-07T08:01:56.477047+00:00", + "duration": 0.00226, + "end_time": "2026-10-05T00:02:55.116975+00:00", "exception": false, - "start_time": "2026-09-07T08:01:56.473728+00:00", + "start_time": "2026-10-05T00:02:55.114715+00:00", "status": "completed" }, "tags": [] @@ -676,16 +676,16 @@ "id": "75af690f", "metadata": { "execution": { - "iopub.execute_input": "2026-09-07T08:01:56.484298Z", - "iopub.status.busy": "2026-09-07T08:01:56.484128Z", - "iopub.status.idle": "2026-09-07T08:01:56.490836Z", - "shell.execute_reply": "2026-09-07T08:01:56.490341Z" + "iopub.execute_input": "2026-10-05T00:02:55.122926Z", + "iopub.status.busy": "2026-10-05T00:02:55.122729Z", + "iopub.status.idle": "2026-10-05T00:02:55.129704Z", + "shell.execute_reply": "2026-10-05T00:02:55.129146Z" }, "papermill": { - "duration": 0.011099, - "end_time": "2026-09-07T08:01:56.491273+00:00", + "duration": 0.0107, + "end_time": "2026-10-05T00:02:55.130166+00:00", "exception": false, - "start_time": "2026-09-07T08:01:56.480174+00:00", + "start_time": "2026-10-05T00:02:55.119466+00:00", "status": "completed" }, "tags": [] @@ -768,10 +768,10 @@ "id": "22a08eda", "metadata": { "papermill": { - "duration": 0.002966, - "end_time": "2026-09-07T08:01:56.497611+00:00", + "duration": 0.002341, + "end_time": "2026-10-05T00:02:55.135151+00:00", "exception": false, - "start_time": "2026-09-07T08:01:56.494645+00:00", + "start_time": "2026-10-05T00:02:55.132810+00:00", "status": "completed" }, "tags": [] @@ -791,10 +791,10 @@ "id": "e04a8a98", "metadata": { "papermill": { - "duration": 0.003296, - "end_time": "2026-09-07T08:01:56.504144+00:00", + "duration": 0.002383, + "end_time": "2026-10-05T00:02:55.140214+00:00", "exception": false, - "start_time": "2026-09-07T08:01:56.500848+00:00", + "start_time": "2026-10-05T00:02:55.137831+00:00", "status": "completed" }, "tags": [] @@ -813,16 +813,16 @@ "id": "ffd644b0", "metadata": { "execution": { - "iopub.execute_input": "2026-09-07T08:01:56.511180Z", - "iopub.status.busy": "2026-09-07T08:01:56.511036Z", - "iopub.status.idle": "2026-09-07T08:02:00.041603Z", - "shell.execute_reply": "2026-09-07T08:02:00.040341Z" + "iopub.execute_input": "2026-10-05T00:02:55.146932Z", + "iopub.status.busy": "2026-10-05T00:02:55.146712Z", + "iopub.status.idle": "2026-10-05T00:02:57.825997Z", + "shell.execute_reply": "2026-10-05T00:02:57.825301Z" }, "papermill": { - "duration": 3.53566, - "end_time": "2026-09-07T08:02:00.042677+00:00", + "duration": 2.683692, + "end_time": "2026-10-05T00:02:57.826642+00:00", "exception": false, - "start_time": "2026-09-07T08:01:56.507017+00:00", + "start_time": "2026-10-05T00:02:55.142950+00:00", "status": "completed" }, "tags": [] @@ -839,12 +839,12 @@ "-3 24 0 0 0 0.00\n", "-2 24 0 0 0 0.00\n", "-1 24 0 0 0 0.00\n", - " 0 0 24 0 0 0.09\n", - " 1 0 23 1 0 0.34\n", - " 2 0 22 2 0 0.35\n", - " 3 0 22 2 0 0.59\n", - " 5 0 19 5 0 1.26\n", - " 8 0 4 20 0 0.66\n" + " 0 0 24 0 0 0.11\n", + " 1 0 23 1 0 0.17\n", + " 2 0 22 2 0 0.34\n", + " 3 0 22 2 0 0.35\n", + " 5 0 19 5 0 0.89\n", + " 8 0 4 20 0 0.65\n" ] } ], @@ -891,10 +891,10 @@ "id": "d9e1e915", "metadata": { "papermill": { - "duration": 0.006584, - "end_time": "2026-09-07T08:02:00.056798+00:00", + "duration": 0.002784, + "end_time": "2026-10-05T00:02:57.832498+00:00", "exception": false, - "start_time": "2026-09-07T08:02:00.050214+00:00", + "start_time": "2026-10-05T00:02:57.829714+00:00", "status": "completed" }, "tags": [] @@ -927,16 +927,16 @@ "id": "547a1187", "metadata": { "execution": { - "iopub.execute_input": "2026-09-07T08:02:00.067651Z", - "iopub.status.busy": "2026-09-07T08:02:00.067178Z", - "iopub.status.idle": "2026-09-07T08:02:00.470314Z", - "shell.execute_reply": "2026-09-07T08:02:00.469543Z" + "iopub.execute_input": "2026-10-05T00:02:57.839558Z", + "iopub.status.busy": "2026-10-05T00:02:57.839333Z", + "iopub.status.idle": "2026-10-05T00:02:58.033594Z", + "shell.execute_reply": "2026-10-05T00:02:58.033076Z" }, "papermill": { - "duration": 0.4102, - "end_time": "2026-09-07T08:02:00.471073+00:00", + "duration": 0.19902, + "end_time": "2026-10-05T00:02:58.034364+00:00", "exception": false, - "start_time": "2026-09-07T08:02:00.060873+00:00", + "start_time": "2026-10-05T00:02:57.835344+00:00", "status": "completed" }, "tags": [] @@ -944,7 +944,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -984,10 +984,10 @@ "id": "f1dc8c22", "metadata": { "papermill": { - "duration": 0.003513, - "end_time": "2026-09-07T08:02:00.478367+00:00", + "duration": 0.002842, + "end_time": "2026-10-05T00:02:58.040281+00:00", "exception": false, - "start_time": "2026-09-07T08:02:00.474854+00:00", + "start_time": "2026-10-05T00:02:58.037439+00:00", "status": "completed" }, "tags": [] @@ -1015,10 +1015,10 @@ "id": "267ce175", "metadata": { "papermill": { - "duration": 0.002973, - "end_time": "2026-09-07T08:02:00.484517+00:00", + "duration": 0.002547, + "end_time": "2026-10-05T00:02:58.045540+00:00", "exception": false, - "start_time": "2026-09-07T08:02:00.481544+00:00", + "start_time": "2026-10-05T00:02:58.042993+00:00", "status": "completed" }, "tags": [] @@ -1047,16 +1047,16 @@ "id": "6acd6465", "metadata": { "execution": { - "iopub.execute_input": "2026-09-07T08:02:00.492405Z", - "iopub.status.busy": "2026-09-07T08:02:00.492244Z", - "iopub.status.idle": "2026-09-07T08:02:04.816790Z", - "shell.execute_reply": "2026-09-07T08:02:04.816109Z" + "iopub.execute_input": "2026-10-05T00:02:58.051545Z", + "iopub.status.busy": "2026-10-05T00:02:58.051292Z", + "iopub.status.idle": "2026-10-05T00:03:03.694039Z", + "shell.execute_reply": "2026-10-05T00:03:03.693018Z" }, "papermill": { - "duration": 4.329221, - "end_time": "2026-09-07T08:02:04.817504+00:00", + "duration": 5.64699, + "end_time": "2026-10-05T00:03:03.695059+00:00", "exception": false, - "start_time": "2026-09-07T08:02:00.488283+00:00", + "start_time": "2026-10-05T00:02:58.048069+00:00", "status": "completed" }, "tags": [] @@ -1166,10 +1166,10 @@ "id": "8bfcee9c", "metadata": { "papermill": { - "duration": 0.003322, - "end_time": "2026-09-07T08:02:04.825570+00:00", + "duration": 0.003046, + "end_time": "2026-10-05T00:03:03.702512+00:00", "exception": false, - "start_time": "2026-09-07T08:02:04.822248+00:00", + "start_time": "2026-10-05T00:03:03.699466+00:00", "status": "completed" }, "tags": [] @@ -1201,10 +1201,10 @@ "id": "2f823c5d", "metadata": { "papermill": { - "duration": 0.0033, - "end_time": "2026-09-07T08:02:04.832174+00:00", + "duration": 0.00298, + "end_time": "2026-10-05T00:03:03.708580+00:00", "exception": false, - "start_time": "2026-09-07T08:02:04.828874+00:00", + "start_time": "2026-10-05T00:03:03.705600+00:00", "status": "completed" }, "tags": [] @@ -1231,16 +1231,16 @@ "id": "3ec86fe4", "metadata": { "execution": { - "iopub.execute_input": "2026-09-07T08:02:04.840507Z", - "iopub.status.busy": "2026-09-07T08:02:04.840282Z", - "iopub.status.idle": "2026-09-07T08:02:04.847540Z", - "shell.execute_reply": "2026-09-07T08:02:04.847021Z" + "iopub.execute_input": "2026-10-05T00:03:03.717922Z", + "iopub.status.busy": "2026-10-05T00:03:03.717648Z", + "iopub.status.idle": "2026-10-05T00:03:03.723909Z", + "shell.execute_reply": "2026-10-05T00:03:03.723350Z" }, "papermill": { - "duration": 0.012244, - "end_time": "2026-09-07T08:02:04.848042+00:00", + "duration": 0.01095, + "end_time": "2026-10-05T00:03:03.724502+00:00", "exception": false, - "start_time": "2026-09-07T08:02:04.835798+00:00", + "start_time": "2026-10-05T00:03:03.713552+00:00", "status": "completed" }, "tags": [] @@ -1309,10 +1309,10 @@ "id": "e3162d60", "metadata": { "papermill": { - "duration": 0.003349, - "end_time": "2026-09-07T08:02:04.855073+00:00", + "duration": 0.002965, + "end_time": "2026-10-05T00:03:03.730582+00:00", "exception": false, - "start_time": "2026-09-07T08:02:04.851724+00:00", + "start_time": "2026-10-05T00:03:03.727617+00:00", "status": "completed" }, "tags": [] @@ -1327,7 +1327,7 @@ "`OPTIMAL`. Ce qui manque n'est pas un résultat, c'est la garantie qu'une comparaison manquée\n", "se signale.\n", "\n", - "App-29 a déjà doté CoursIA du premier volet : **refuser** une jointure dont l'identité\n", + "Research-07 a déjà doté CoursIA du premier volet : **refuser** une jointure dont l'identité\n", "structurelle ne correspond pas. Le volet complémentaire est celui-ci : **sur quoi se rabattre\n", "quand la référence manque légitimement ?**" ] @@ -1338,16 +1338,16 @@ "id": "95505aae", "metadata": { "execution": { - "iopub.execute_input": "2026-09-07T08:02:04.862752Z", - "iopub.status.busy": "2026-09-07T08:02:04.862513Z", - "iopub.status.idle": "2026-09-07T08:02:05.452329Z", - "shell.execute_reply": "2026-09-07T08:02:05.451613Z" + "iopub.execute_input": "2026-10-05T00:03:03.737999Z", + "iopub.status.busy": "2026-10-05T00:03:03.737807Z", + "iopub.status.idle": "2026-10-05T00:03:04.594194Z", + "shell.execute_reply": "2026-10-05T00:03:04.593119Z" }, "papermill": { - "duration": 0.595079, - "end_time": "2026-09-07T08:02:05.453339+00:00", + "duration": 0.861505, + "end_time": "2026-10-05T00:03:04.595318+00:00", "exception": false, - "start_time": "2026-09-07T08:02:04.858260+00:00", + "start_time": "2026-10-05T00:03:03.733813+00:00", "status": "completed" }, "tags": [] @@ -1416,10 +1416,10 @@ "id": "0033a454", "metadata": { "papermill": { - "duration": 0.003155, - "end_time": "2026-09-07T08:02:05.460621+00:00", + "duration": 0.00549, + "end_time": "2026-10-05T00:03:04.605341+00:00", "exception": false, - "start_time": "2026-09-07T08:02:05.457466+00:00", + "start_time": "2026-10-05T00:03:04.599851+00:00", "status": "completed" }, "tags": [] @@ -1442,10 +1442,10 @@ "id": "9fc991e4", "metadata": { "papermill": { - "duration": 0.003138, - "end_time": "2026-09-07T08:02:05.466934+00:00", + "duration": 0.006532, + "end_time": "2026-10-05T00:03:04.618697+00:00", "exception": false, - "start_time": "2026-09-07T08:02:05.463796+00:00", + "start_time": "2026-10-05T00:03:04.612165+00:00", "status": "completed" }, "tags": [] @@ -1475,16 +1475,16 @@ "id": "eabc81c3", "metadata": { "execution": { - "iopub.execute_input": "2026-09-07T08:02:05.474935Z", - "iopub.status.busy": "2026-09-07T08:02:05.474638Z", - "iopub.status.idle": "2026-09-07T08:02:05.487223Z", - "shell.execute_reply": "2026-09-07T08:02:05.486562Z" + "iopub.execute_input": "2026-10-05T00:03:04.632456Z", + "iopub.status.busy": "2026-10-05T00:03:04.632207Z", + "iopub.status.idle": "2026-10-05T00:03:04.645196Z", + "shell.execute_reply": "2026-10-05T00:03:04.644418Z" }, "papermill": { - "duration": 0.01755, - "end_time": "2026-09-07T08:02:05.488018+00:00", + "duration": 0.019911, + "end_time": "2026-10-05T00:03:04.646118+00:00", "exception": false, - "start_time": "2026-09-07T08:02:05.470468+00:00", + "start_time": "2026-10-05T00:03:04.626207+00:00", "status": "completed" }, "tags": [] @@ -1547,10 +1547,10 @@ "id": "bc86e52c", "metadata": { "papermill": { - "duration": 0.005188, - "end_time": "2026-09-07T08:02:05.499487+00:00", + "duration": 0.0031, + "end_time": "2026-10-05T00:03:04.652857+00:00", "exception": false, - "start_time": "2026-09-07T08:02:05.494299+00:00", + "start_time": "2026-10-05T00:03:04.649757+00:00", "status": "completed" }, "tags": [] @@ -1582,10 +1582,10 @@ "id": "d228babc", "metadata": { "papermill": { - "duration": 0.003112, - "end_time": "2026-09-07T08:02:05.506017+00:00", + "duration": 0.004132, + "end_time": "2026-10-05T00:03:04.660956+00:00", "exception": false, - "start_time": "2026-09-07T08:02:05.502905+00:00", + "start_time": "2026-10-05T00:03:04.656824+00:00", "status": "completed" }, "tags": [] @@ -1614,16 +1614,16 @@ "id": "575b9ed7", "metadata": { "execution": { - "iopub.execute_input": "2026-09-07T08:02:05.513323Z", - "iopub.status.busy": "2026-09-07T08:02:05.513153Z", - "iopub.status.idle": "2026-09-07T08:02:05.518033Z", - "shell.execute_reply": "2026-09-07T08:02:05.517396Z" + "iopub.execute_input": "2026-10-05T00:03:04.671520Z", + "iopub.status.busy": "2026-10-05T00:03:04.671312Z", + "iopub.status.idle": "2026-10-05T00:03:04.676724Z", + "shell.execute_reply": "2026-10-05T00:03:04.675952Z" }, "papermill": { - "duration": 0.009369, - "end_time": "2026-09-07T08:02:05.518558+00:00", + "duration": 0.011542, + "end_time": "2026-10-05T00:03:04.677725+00:00", "exception": false, - "start_time": "2026-09-07T08:02:05.509189+00:00", + "start_time": "2026-10-05T00:03:04.666183+00:00", "status": "completed" }, "tags": [] @@ -1678,10 +1678,10 @@ "id": "598eca40", "metadata": { "papermill": { - "duration": 0.003182, - "end_time": "2026-09-07T08:02:05.525337+00:00", + "duration": 0.004637, + "end_time": "2026-10-05T00:03:04.687261+00:00", "exception": false, - "start_time": "2026-09-07T08:02:05.522155+00:00", + "start_time": "2026-10-05T00:03:04.682624+00:00", "status": "completed" }, "tags": [] @@ -1701,16 +1701,16 @@ "id": "4f4394fa", "metadata": { "execution": { - "iopub.execute_input": "2026-09-07T08:02:05.533252Z", - "iopub.status.busy": "2026-09-07T08:02:05.533091Z", - "iopub.status.idle": "2026-09-07T08:02:05.537503Z", - "shell.execute_reply": "2026-09-07T08:02:05.536980Z" + "iopub.execute_input": "2026-10-05T00:03:04.698681Z", + "iopub.status.busy": "2026-10-05T00:03:04.698347Z", + "iopub.status.idle": "2026-10-05T00:03:04.705706Z", + "shell.execute_reply": "2026-10-05T00:03:04.704657Z" }, "papermill": { - "duration": 0.00959, - "end_time": "2026-09-07T08:02:05.538064+00:00", + "duration": 0.014885, + "end_time": "2026-10-05T00:03:04.706854+00:00", "exception": false, - "start_time": "2026-09-07T08:02:05.528474+00:00", + "start_time": "2026-10-05T00:03:04.691969+00:00", "status": "completed" }, "tags": [] @@ -1764,10 +1764,10 @@ "id": "acd15410", "metadata": { "papermill": { - "duration": 0.003548, - "end_time": "2026-09-07T08:02:05.545764+00:00", + "duration": 0.005195, + "end_time": "2026-10-05T00:03:04.717499+00:00", "exception": false, - "start_time": "2026-09-07T08:02:05.542216+00:00", + "start_time": "2026-10-05T00:03:04.712304+00:00", "status": "completed" }, "tags": [] @@ -1787,16 +1787,16 @@ "id": "88594468", "metadata": { "execution": { - "iopub.execute_input": "2026-09-07T08:02:05.553715Z", - "iopub.status.busy": "2026-09-07T08:02:05.553532Z", - "iopub.status.idle": "2026-09-07T08:02:05.559716Z", - "shell.execute_reply": "2026-09-07T08:02:05.559010Z" + "iopub.execute_input": "2026-10-05T00:03:04.727298Z", + "iopub.status.busy": "2026-10-05T00:03:04.727076Z", + "iopub.status.idle": "2026-10-05T00:03:04.732377Z", + "shell.execute_reply": "2026-10-05T00:03:04.731644Z" }, "papermill": { - "duration": 0.011009, - "end_time": "2026-09-07T08:02:05.560325+00:00", + "duration": 0.010106, + "end_time": "2026-10-05T00:03:04.732938+00:00", "exception": false, - "start_time": "2026-09-07T08:02:05.549316+00:00", + "start_time": "2026-10-05T00:03:04.722832+00:00", "status": "completed" }, "tags": [] @@ -1846,10 +1846,10 @@ "id": "dd2f5993", "metadata": { "papermill": { - "duration": 0.003239, - "end_time": "2026-09-07T08:02:05.567466+00:00", + "duration": 0.003114, + "end_time": "2026-10-05T00:03:04.739463+00:00", "exception": false, - "start_time": "2026-09-07T08:02:05.564227+00:00", + "start_time": "2026-10-05T00:03:04.736349+00:00", "status": "completed" }, "tags": [] @@ -1868,16 +1868,16 @@ "id": "cefd65b2", "metadata": { "execution": { - "iopub.execute_input": "2026-09-07T08:02:05.575604Z", - "iopub.status.busy": "2026-09-07T08:02:05.575343Z", - "iopub.status.idle": "2026-09-07T08:02:05.603561Z", - "shell.execute_reply": "2026-09-07T08:02:05.602997Z" + "iopub.execute_input": "2026-10-05T00:03:04.746968Z", + "iopub.status.busy": "2026-10-05T00:03:04.746772Z", + "iopub.status.idle": "2026-10-05T00:03:04.759194Z", + "shell.execute_reply": "2026-10-05T00:03:04.758489Z" }, "papermill": { - "duration": 0.033211, - "end_time": "2026-09-07T08:02:05.604024+00:00", + "duration": 0.017008, + "end_time": "2026-10-05T00:03:04.759736+00:00", "exception": false, - "start_time": "2026-09-07T08:02:05.570813+00:00", + "start_time": "2026-10-05T00:03:04.742728+00:00", "status": "completed" }, "tags": [] @@ -1889,15 +1889,15 @@ "text": [ " bounds_ladder.json 6776 octets\n", " LICENSE 1129 octets\n", - " provenance.json 3054 octets\n", - " SOURCE.md 7540 octets\n", - " temporal_regimes.csv 9386 octets\n" + " provenance.json 3066 octets\n", + " SOURCE.md 7988 octets\n", + " temporal_regimes.csv 9388 octets\n" ] } ], "source": [ "provenance = {\n", - " \"notebook\": \"App-31-RCPSP-Max-Feasibility-Bounds\",\n", + " \"notebook\": \"Research-09-RCPSP-Max-Feasibility-Bounds-Python\",\n", " \"objet\": \"RCPSP/max : faisabilite, circuits de poids positif, hierarchie de bornes\",\n", " \"source_distillee\": {\n", " \"auteurs\": [\"Arthur Gallier\", \"Nicolas Naegelen\"],\n", @@ -1942,10 +1942,10 @@ "id": "ffb8ae4e", "metadata": { "papermill": { - "duration": 0.003434, - "end_time": "2026-09-07T08:02:05.611042+00:00", + "duration": 0.002802, + "end_time": "2026-10-05T00:03:04.765566+00:00", "exception": false, - "start_time": "2026-09-07T08:02:05.607608+00:00", + "start_time": "2026-10-05T00:03:04.762764+00:00", "status": "completed" }, "tags": [] @@ -1963,10 +1963,10 @@ "id": "6b424dd2", "metadata": { "papermill": { - "duration": 0.003281, - "end_time": "2026-09-07T08:02:05.617806+00:00", + "duration": 0.003352, + "end_time": "2026-10-05T00:03:04.772286+00:00", "exception": false, - "start_time": "2026-09-07T08:02:05.614525+00:00", + "start_time": "2026-10-05T00:03:04.768934+00:00", "status": "completed" }, "tags": [] @@ -1991,7 +1991,7 @@ "visibles :\n", "\n", "- leur section RCPSP/max pose le **bon modèle général**, capable de porter des lags maximaux ;\n", - " App-31 exerce ce que ce modèle rend possible et que la formulation seule ne montre pas — le\n", + " Research-09 exerce ce que ce modèle rend possible et que la formulation seule ne montre pas — le\n", " circuit, le témoin, la bascule de complexité ;\n", "- leur banc d'essai fait reposer sa colonne d'écart sur une jointure par nom ; App-31 en tire\n", " la question de protocole, non pour corriger un chiffre, mais pour que l'absence de référence\n", @@ -2008,10 +2008,10 @@ "id": "dd398fd4", "metadata": { "papermill": { - "duration": 0.004004, - "end_time": "2026-09-07T08:02:05.625079+00:00", + "duration": 0.003459, + "end_time": "2026-10-05T00:03:04.779573+00:00", "exception": false, - "start_time": "2026-09-07T08:02:05.621075+00:00", + "start_time": "2026-10-05T00:03:04.776114+00:00", "status": "completed" }, "tags": [] @@ -2075,21 +2075,21 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.14" + "version": "3.13.15" }, "papermill": { "default_parameters": {}, - "duration": 16.815552, - "end_time": "2026-09-07T08:02:05.971740+00:00", + "duration": 12.328766, + "end_time": "2026-10-05T00:03:05.131878+00:00", "environment_variables": {}, "exception": null, - "input_path": "App-31-RCPSP-Max-Feasibility-Bounds.ipynb", - "output_path": "App-31-RCPSP-Max-Feasibility-Bounds.ipynb", + "input_path": "Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb", + "output_path": "Research-09-RCPSP-Max-Feasibility-Bounds-Python_output.ipynb", "parameters": {}, - "start_time": "2026-09-07T08:01:49.156188+00:00", + "start_time": "2026-10-05T00:02:52.803112+00:00", "version": "2.7.0" } }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb index b084979b1c..718407a2e7 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb @@ -14,7 +14,7 @@ "tags": [] }, "source": [ - "# App-32 — Szpiro : Pasten 2026 rend `N log log N` inconditionnel\n", + "# Research-10 — Szpiro : Pasten 2026 rend `N log log N` inconditionnel\n", "\n", "[← Applications Search](../../README.md) | [Série Search](../../../README.md)\n", "\n", diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb index 9d3782ee9c..d7026fba7d 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb @@ -14,7 +14,7 @@ "tags": [] }, "source": [ - "# App-33 — Neural diving : un plongeur appris pour CP-SAT\n", + "# Research-11 — Neural diving : un plongeur appris pour CP-SAT\n", "\n", "## Du conseil aux valeurs aux branches prouvées : ce que le diving apporte, mesure à l'appui\n", "\n", @@ -53,7 +53,7 @@ "\n", "| Levier | Portée | Effet documenté |\n", "|---|---|---|\n", - "| **Branching appris** | une décision à *chaque nœud* (quelle variable) | imité localement, ne garantit pas un arbre plus petit (App-28) |\n", + "| **Branching appris** | une décision à *chaque nœud* (quelle variable) | imité localement, ne garantit pas un arbre plus petit (Research-06) |\n", "| **Diving appris** | une décision *une fois* (quelles valeurs suggérer) | donne un point de départ : la recherche contient-elle des mauvaises décisions précoces ? |\n", "\n", "Le diving ne change pas la stratégie de branche, il change l'**état initial**. Dans CP-SAT, il se traduit par `AddHint(var, valeur)` : le solveur reçoit un conseil, s'en sert pour diriger sa recherche, et le **corrige** si le conseil contredit les contraintes. Cette correction est mesurable : quand un hint viole des arêtes d'adjacence, on dit qu'il porte des **conflits**." @@ -859,7 +859,7 @@ "source": [ "## 6. Pour aller plus loin et bibliographie\n", "\n", - "- **App-28 Learning to Branch** ([Hybrid](Research-06-LearningToBranch-Generalization-Audit-Python.ipynb)) : l'autre moitié du geste Nair — la priorité de branchement apprise, auditée sur la même famille de questions (arbre × temps × coût d'inférence). La complémentarité des deux verdicts : aucune source d'amélioration locale ne se transforme en gain global sans mesure intégrée.\n", + "- **Research-06 Learning to Branch** ([Recherche](Research-06-LearningToBranch-Generalization-Audit-Python.ipynb)) : l'autre moitié du geste Nair — la priorité de branchement apprise, auditée sur la même famille de questions (arbre × temps × coût d'inférence). La complémentarité des deux verdicts : aucune source d'amélioration locale ne se transforme en gain global sans mesure intégrée.\n", "- **Exercices en extension** : remplacer le MLP par un classifieur basé sur la structure (features de degré), ou entraîner le plongeur sur les conflits (régression du nombre de conflits).\n", "\n", "Bibliographie :\n", diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app24-mapf-audit/SOURCE.md b/MyIA.AI.Notebooks/Search/Applications/Research/data/app24-mapf-audit/SOURCE.md similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app24-mapf-audit/SOURCE.md rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app24-mapf-audit/SOURCE.md diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app24-mapf-audit/fresh_runs.json b/MyIA.AI.Notebooks/Search/Applications/Research/data/app24-mapf-audit/fresh_runs.json similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app24-mapf-audit/fresh_runs.json rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app24-mapf-audit/fresh_runs.json diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app25-wdp-vcg-audit/LICENSE b/MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/LICENSE similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app25-wdp-vcg-audit/LICENSE rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/LICENSE diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app25-wdp-vcg-audit/SOURCE.md b/MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/SOURCE.md similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app25-wdp-vcg-audit/SOURCE.md rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/SOURCE.md diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app25-wdp-vcg-audit/cats/matching_g32_b100_s10000.txt b/MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/cats/matching_g32_b100_s10000.txt similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app25-wdp-vcg-audit/cats/matching_g32_b100_s10000.txt rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/cats/matching_g32_b100_s10000.txt diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app25-wdp-vcg-audit/cats/paths_g30_b100_s10000.txt b/MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/cats/paths_g30_b100_s10000.txt similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app25-wdp-vcg-audit/cats/paths_g30_b100_s10000.txt rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/cats/paths_g30_b100_s10000.txt diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app25-wdp-vcg-audit/cats/regions_g30_b100_s10000.txt b/MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/cats/regions_g30_b100_s10000.txt similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app25-wdp-vcg-audit/cats/regions_g30_b100_s10000.txt rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/cats/regions_g30_b100_s10000.txt diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app25-wdp-vcg-audit/cats_snapshot.json b/MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/cats_snapshot.json similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app25-wdp-vcg-audit/cats_snapshot.json rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/cats_snapshot.json diff --git a/MyIA.AI.Notebooks/Search/Applications/CSP/data/app26-covering-arrays-audit/SOURCE.md b/MyIA.AI.Notebooks/Search/Applications/Research/data/app26-covering-arrays-audit/SOURCE.md similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/CSP/data/app26-covering-arrays-audit/SOURCE.md rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app26-covering-arrays-audit/SOURCE.md diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app28-learning-to-branch-audit/LICENSE b/MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/LICENSE similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app28-learning-to-branch-audit/LICENSE rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/LICENSE diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app28-learning-to-branch-audit/SOURCE.md b/MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/SOURCE.md similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app28-learning-to-branch-audit/SOURCE.md rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/SOURCE.md diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app28-learning-to-branch-audit/baseline_runs.csv b/MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/baseline_runs.csv similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app28-learning-to-branch-audit/baseline_runs.csv rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/baseline_runs.csv diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app28-learning-to-branch-audit/evaluation_runs.csv b/MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/evaluation_runs.csv similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app28-learning-to-branch-audit/evaluation_runs.csv rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/evaluation_runs.csv diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app28-learning-to-branch-audit/maturation_report.json b/MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/maturation_report.json similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app28-learning-to-branch-audit/maturation_report.json rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/maturation_report.json diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app28-learning-to-branch-audit/oracle_trace.csv b/MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/oracle_trace.csv similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app28-learning-to-branch-audit/oracle_trace.csv rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/oracle_trace.csv diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/LICENSE b/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/LICENSE similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/LICENSE rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/LICENSE diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/SOURCE.md b/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/SOURCE.md similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/SOURCE.md rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/SOURCE.md diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/benchmark_runs.csv b/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/benchmark_runs.csv similarity index 61% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/benchmark_runs.csv rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/benchmark_runs.csv index 520cfa33be..471d014170 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/benchmark_runs.csv +++ b/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/benchmark_runs.csv @@ -1,16 +1,16 @@ -instance,identity,method,status,objective,best_bound,gap,wall_time,valid -coursia-toy,11480c70a3adf3d41ff8ab37bcda3860bf8bc8bf318cf841a508f5254035b972,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.011711500003002584,True -coursia-toy,11480c70a3adf3d41ff8ab37bcda3860bf8bc8bf318cf841a508f5254035b972,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.06964010000228882,True -coursia-toy,11480c70a3adf3d41ff8ab37bcda3860bf8bc8bf318cf841a508f5254035b972,RPW,HEURISTIC,4.0,,,0.0,True -generated-11,9a228643396f11d3e81bef6aeae0bdce926df8bac84f6498056ce9afe5eab651,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.05821730000025127,True -generated-11,9a228643396f11d3e81bef6aeae0bdce926df8bac84f6498056ce9afe5eab651,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.3271326000103727,True -generated-11,9a228643396f11d3e81bef6aeae0bdce926df8bac84f6498056ce9afe5eab651,RPW,HEURISTIC,4.0,,,0.0,True -generated-29,e95aed529a68c39018facd47d87943c48cda29fc01e06bb3e33978b5a298ebd1,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.043276099997456186,True -generated-29,e95aed529a68c39018facd47d87943c48cda29fc01e06bb3e33978b5a298ebd1,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.38061500000185333,True -generated-29,e95aed529a68c39018facd47d87943c48cda29fc01e06bb3e33978b5a298ebd1,RPW,HEURISTIC,4.0,,,0.0,True -generated-47,c993ddc974844a909002e38ccb2b501ed84fe639fbe2b34993bed2b4f4c6f76e,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.037209700007224455,True -generated-47,c993ddc974844a909002e38ccb2b501ed84fe639fbe2b34993bed2b4f4c6f76e,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.3242817999998806,True -generated-47,c993ddc974844a909002e38ccb2b501ed84fe639fbe2b34993bed2b4f4c6f76e,RPW,HEURISTIC,4.0,,,0.0,True -generated-71,b81fedad52094dbc6867f565bc942c46bd42ed37e76bc4d50e0d2a75275f13a3,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.05007179999665823,True -generated-71,b81fedad52094dbc6867f565bc942c46bd42ed37e76bc4d50e0d2a75275f13a3,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.21240069999475963,True -generated-71,b81fedad52094dbc6867f565bc942c46bd42ed37e76bc4d50e0d2a75275f13a3,RPW,HEURISTIC,4.0,,,0.0,True +instance,identity,method,status,objective,best_bound,gap,wall_time,valid +coursia-toy,11480c70a3adf3d41ff8ab37bcda3860bf8bc8bf318cf841a508f5254035b972,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.007830100017599761,True +coursia-toy,11480c70a3adf3d41ff8ab37bcda3860bf8bc8bf318cf841a508f5254035b972,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.07294150002417155,True +coursia-toy,11480c70a3adf3d41ff8ab37bcda3860bf8bc8bf318cf841a508f5254035b972,RPW,HEURISTIC,4.0,,,0.0,True +generated-11,9a228643396f11d3e81bef6aeae0bdce926df8bac84f6498056ce9afe5eab651,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.041808500012848526,True +generated-11,9a228643396f11d3e81bef6aeae0bdce926df8bac84f6498056ce9afe5eab651,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.33075260001351126,True +generated-11,9a228643396f11d3e81bef6aeae0bdce926df8bac84f6498056ce9afe5eab651,RPW,HEURISTIC,4.0,,,0.0,True +generated-29,e95aed529a68c39018facd47d87943c48cda29fc01e06bb3e33978b5a298ebd1,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.042367199988802895,True +generated-29,e95aed529a68c39018facd47d87943c48cda29fc01e06bb3e33978b5a298ebd1,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.3754121999954805,True +generated-29,e95aed529a68c39018facd47d87943c48cda29fc01e06bb3e33978b5a298ebd1,RPW,HEURISTIC,4.0,,,0.0,True +generated-47,c993ddc974844a909002e38ccb2b501ed84fe639fbe2b34993bed2b4f4c6f76e,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.03369569999631494,True +generated-47,c993ddc974844a909002e38ccb2b501ed84fe639fbe2b34993bed2b4f4c6f76e,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.3053111000044737,True +generated-47,c993ddc974844a909002e38ccb2b501ed84fe639fbe2b34993bed2b4f4c6f76e,RPW,HEURISTIC,4.0,,,0.0,True +generated-71,b81fedad52094dbc6867f565bc942c46bd42ed37e76bc4d50e0d2a75275f13a3,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.04218000001856126,True +generated-71,b81fedad52094dbc6867f565bc942c46bd42ed37e76bc4d50e0d2a75275f13a3,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.21040069998707622,True +generated-71,b81fedad52094dbc6867f565bc942c46bd42ed37e76bc4d50e0d2a75275f13a3,RPW,HEURISTIC,4.0,,,0.0,True diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/mmalbp_runs.json b/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/mmalbp_runs.json similarity index 84% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/mmalbp_runs.json rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/mmalbp_runs.json index e264877eaa..689225e5c2 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/mmalbp_runs.json +++ b/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/mmalbp_runs.json @@ -1,54 +1,54 @@ -[ - { - "mode": "conservative", - "effective_durations": { - "A": [ - 7, - 3, - 6, - 2, - 8, - 4, - 5, - 3 - ], - "B": [ - 3, - 8, - 4, - 7, - 4, - 6, - 3, - 6 - ] - }, - "method": "CP-SAT MMALBP conservative", - "status": "OPTIMAL", - "objective": 4.0, - "best_bound": 4.0, - "gap": 0.0, - "wall_time": 0.013626700005261227, - "valid": true - }, - { - "mode": "weighted", - "effective_durations": [ - 6, - 4, - 6, - 3, - 7, - 4, - 4, - 4 - ], - "method": "CP-SAT SALBP-1", - "status": "OPTIMAL", - "objective": 3.0, - "best_bound": 3.0, - "gap": 0.0, - "wall_time": 0.015249199990648776, - "valid": true - } +[ + { + "mode": "conservative", + "effective_durations": { + "A": [ + 7, + 3, + 6, + 2, + 8, + 4, + 5, + 3 + ], + "B": [ + 3, + 8, + 4, + 7, + 4, + 6, + 3, + 6 + ] + }, + "method": "CP-SAT MMALBP conservative", + "status": "OPTIMAL", + "objective": 4.0, + "best_bound": 4.0, + "gap": 0.0, + "wall_time": 0.010331700003007427, + "valid": true + }, + { + "mode": "weighted", + "effective_durations": [ + 6, + 4, + 6, + 3, + 7, + 4, + 4, + 4 + ], + "method": "CP-SAT SALBP-1", + "status": "OPTIMAL", + "objective": 3.0, + "best_bound": 3.0, + "gap": 0.0, + "wall_time": 0.009810600022319704, + "valid": true + } ] \ No newline at end of file diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/pareto_fronts.json b/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/pareto_fronts.json similarity index 85% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/pareto_fronts.json rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/pareto_fronts.json index 8e7e727e56..89b4f2b605 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/pareto_fronts.json +++ b/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/pareto_fronts.json @@ -1,88 +1,88 @@ -{ - "instance": "pareto-line", - "certified": true, - "range": [ - 4, - 10 - ], - "upper_bound": "one-task-per-station", - "points": [ - { - "stations": 4, - "method": "CP-SAT SALBP-2", - "status": "OPTIMAL", - "objective": 13.0, - "best_bound": 13.0, - "gap": 0.0, - "wall_time": 0.021748499988461845, - "valid": true - }, - { - "stations": 5, - "method": "CP-SAT SALBP-2", - "status": "OPTIMAL", - "objective": 11.0, - "best_bound": 11.0, - "gap": 0.0, - "wall_time": 0.02133719999983441, - "valid": true - }, - { - "stations": 6, - "method": "CP-SAT SALBP-2", - "status": "OPTIMAL", - "objective": 9.0, - "best_bound": 9.0, - "gap": 0.0, - "wall_time": 0.03042329999152571, - "valid": true - }, - { - "stations": 7, - "method": "CP-SAT SALBP-2", - "status": "OPTIMAL", - "objective": 8.0, - "best_bound": 8.0, - "gap": 0.0, - "wall_time": 0.043965100005152635, - "valid": true - } - ], - "raw_status": [ - { - "stations": 4, - "status": "OPTIMAL", - "valid": true - }, - { - "stations": 5, - "status": "OPTIMAL", - "valid": true - }, - { - "stations": 6, - "status": "OPTIMAL", - "valid": true - }, - { - "stations": 7, - "status": "OPTIMAL", - "valid": true - }, - { - "stations": 8, - "status": "OPTIMAL", - "valid": true - }, - { - "stations": 9, - "status": "OPTIMAL", - "valid": true - }, - { - "stations": 10, - "status": "OPTIMAL", - "valid": true - } - ] +{ + "instance": "pareto-line", + "certified": true, + "range": [ + 4, + 10 + ], + "upper_bound": "one-task-per-station", + "points": [ + { + "stations": 4, + "method": "CP-SAT SALBP-2", + "status": "OPTIMAL", + "objective": 13.0, + "best_bound": 13.0, + "gap": 0.0, + "wall_time": 0.012908099975902587, + "valid": true + }, + { + "stations": 5, + "method": "CP-SAT SALBP-2", + "status": "OPTIMAL", + "objective": 11.0, + "best_bound": 11.0, + "gap": 0.0, + "wall_time": 0.019741199997952208, + "valid": true + }, + { + "stations": 6, + "method": "CP-SAT SALBP-2", + "status": "OPTIMAL", + "objective": 9.0, + "best_bound": 9.0, + "gap": 0.0, + "wall_time": 0.02891780002391897, + "valid": true + }, + { + "stations": 7, + "method": "CP-SAT SALBP-2", + "status": "OPTIMAL", + "objective": 8.0, + "best_bound": 8.0, + "gap": 0.0, + "wall_time": 0.04122899999492802, + "valid": true + } + ], + "raw_status": [ + { + "stations": 4, + "status": "OPTIMAL", + "valid": true + }, + { + "stations": 5, + "status": "OPTIMAL", + "valid": true + }, + { + "stations": 6, + "status": "OPTIMAL", + "valid": true + }, + { + "stations": 7, + "status": "OPTIMAL", + "valid": true + }, + { + "stations": 8, + "status": "OPTIMAL", + "valid": true + }, + { + "stations": 9, + "status": "OPTIMAL", + "valid": true + }, + { + "stations": 10, + "status": "OPTIMAL", + "valid": true + } + ] } \ No newline at end of file diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/provenance.json b/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/provenance.json similarity index 92% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/provenance.json rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/provenance.json index 4738658d93..cb993b375d 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app29-salbp-audit/provenance.json +++ b/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/provenance.json @@ -1,480 +1,480 @@ -{ - "generated_on": "2026-09-01", - "environment": { - "python": "3.13.14", - "ortools": "9.15.6755", - "pulp": "3.3.1" - }, - "instances": [ - { - "name": "coursia-toy", - "identity": "11480c70a3adf3d41ff8ab37bcda3860bf8bc8bf318cf841a508f5254035b972", - "n_tasks": 8, - "durations": [ - 6, - 4, - 5, - 3, - 7, - 4, - 6, - 5 - ], - "precedences": [ - [ - 0, - 2 - ], - [ - 0, - 3 - ], - [ - 1, - 3 - ], - [ - 2, - 4 - ], - [ - 3, - 5 - ], - [ - 4, - 6 - ], - [ - 5, - 6 - ], - [ - 6, - 7 - ] - ], - "cycle_time": 14 - }, - { - "name": "generated-11", - "identity": "9a228643396f11d3e81bef6aeae0bdce926df8bac84f6498056ce9afe5eab651", - "n_tasks": 14, - "durations": [ - 2, - 2, - 7, - 5, - 6, - 6, - 6, - 2, - 5, - 3, - 4, - 8, - 5, - 2 - ], - "precedences": [ - [ - 0, - 4 - ], - [ - 0, - 5 - ], - [ - 0, - 7 - ], - [ - 2, - 5 - ], - [ - 2, - 6 - ], - [ - 2, - 7 - ], - [ - 3, - 4 - ], - [ - 3, - 5 - ], - [ - 4, - 8 - ], - [ - 4, - 10 - ], - [ - 5, - 8 - ], - [ - 5, - 10 - ], - [ - 6, - 9 - ], - [ - 7, - 8 - ], - [ - 7, - 9 - ], - [ - 7, - 10 - ], - [ - 8, - 11 - ], - [ - 8, - 13 - ], - [ - 9, - 12 - ], - [ - 9, - 13 - ], - [ - 10, - 11 - ], - [ - 10, - 12 - ], - [ - 10, - 13 - ] - ], - "cycle_time": 18 - }, - { - "name": "generated-29", - "identity": "e95aed529a68c39018facd47d87943c48cda29fc01e06bb3e33978b5a298ebd1", - "n_tasks": 14, - "durations": [ - 8, - 2, - 6, - 5, - 3, - 5, - 6, - 3, - 6, - 2, - 8, - 2, - 4, - 4 - ], - "precedences": [ - [ - 0, - 4 - ], - [ - 1, - 4 - ], - [ - 1, - 5 - ], - [ - 1, - 6 - ], - [ - 1, - 7 - ], - [ - 2, - 4 - ], - [ - 2, - 6 - ], - [ - 2, - 7 - ], - [ - 3, - 7 - ], - [ - 4, - 8 - ], - [ - 4, - 9 - ], - [ - 5, - 9 - ], - [ - 5, - 10 - ], - [ - 6, - 9 - ], - [ - 8, - 11 - ], - [ - 8, - 13 - ], - [ - 9, - 11 - ], - [ - 9, - 12 - ], - [ - 10, - 11 - ] - ], - "cycle_time": 18 - }, - { - "name": "generated-47", - "identity": "c993ddc974844a909002e38ccb2b501ed84fe639fbe2b34993bed2b4f4c6f76e", - "n_tasks": 14, - "durations": [ - 2, - 7, - 5, - 7, - 5, - 5, - 2, - 2, - 2, - 8, - 4, - 4, - 7, - 3 - ], - "precedences": [ - [ - 0, - 6 - ], - [ - 1, - 4 - ], - [ - 1, - 5 - ], - [ - 1, - 7 - ], - [ - 2, - 4 - ], - [ - 3, - 6 - ], - [ - 3, - 7 - ], - [ - 4, - 10 - ], - [ - 5, - 8 - ], - [ - 6, - 9 - ], - [ - 7, - 9 - ], - [ - 8, - 12 - ], - [ - 9, - 11 - ], - [ - 9, - 13 - ], - [ - 10, - 13 - ] - ], - "cycle_time": 18 - }, - { - "name": "generated-71", - "identity": "b81fedad52094dbc6867f565bc942c46bd42ed37e76bc4d50e0d2a75275f13a3", - "n_tasks": 14, - "durations": [ - 8, - 3, - 5, - 5, - 5, - 7, - 4, - 6, - 6, - 3, - 2, - 2, - 8, - 5 - ], - "precedences": [ - [ - 0, - 4 - ], - [ - 0, - 5 - ], - [ - 0, - 6 - ], - [ - 0, - 7 - ], - [ - 1, - 5 - ], - [ - 1, - 6 - ], - [ - 1, - 7 - ], - [ - 2, - 4 - ], - [ - 2, - 7 - ], - [ - 3, - 6 - ], - [ - 4, - 8 - ], - [ - 5, - 10 - ], - [ - 6, - 8 - ], - [ - 6, - 9 - ], - [ - 7, - 8 - ], - [ - 7, - 9 - ], - [ - 7, - 10 - ], - [ - 8, - 11 - ], - [ - 8, - 12 - ], - [ - 10, - 12 - ], - [ - 10, - 13 - ] - ], - "cycle_time": 18 - } - ], - "joins": { - "accepted": { - "status": "comparable", - "reference": 4, - "identity": "11480c70a3adf3d41ff8ab37bcda3860bf8bc8bf318cf841a508f5254035b972" - }, - "refused": { - "status": "not_comparable", - "reason": "structural_identity_mismatch", - "reference": 2 - } - } +{ + "generated_on": "2026-09-01", + "environment": { + "python": "3.13.15", + "ortools": "9.15.6755", + "pulp": "3.3.2" + }, + "instances": [ + { + "name": "coursia-toy", + "identity": "11480c70a3adf3d41ff8ab37bcda3860bf8bc8bf318cf841a508f5254035b972", + "n_tasks": 8, + "durations": [ + 6, + 4, + 5, + 3, + 7, + 4, + 6, + 5 + ], + "precedences": [ + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 1, + 3 + ], + [ + 2, + 4 + ], + [ + 3, + 5 + ], + [ + 4, + 6 + ], + [ + 5, + 6 + ], + [ + 6, + 7 + ] + ], + "cycle_time": 14 + }, + { + "name": "generated-11", + "identity": "9a228643396f11d3e81bef6aeae0bdce926df8bac84f6498056ce9afe5eab651", + "n_tasks": 14, + "durations": [ + 2, + 2, + 7, + 5, + 6, + 6, + 6, + 2, + 5, + 3, + 4, + 8, + 5, + 2 + ], + "precedences": [ + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 7 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 4, + 8 + ], + [ + 4, + 10 + ], + [ + 5, + 8 + ], + [ + 5, + 10 + ], + [ + 6, + 9 + ], + [ + 7, + 8 + ], + [ + 7, + 9 + ], + [ + 7, + 10 + ], + [ + 8, + 11 + ], + [ + 8, + 13 + ], + [ + 9, + 12 + ], + [ + 9, + 13 + ], + [ + 10, + 11 + ], + [ + 10, + 12 + ], + [ + 10, + 13 + ] + ], + "cycle_time": 18 + }, + { + "name": "generated-29", + "identity": "e95aed529a68c39018facd47d87943c48cda29fc01e06bb3e33978b5a298ebd1", + "n_tasks": 14, + "durations": [ + 8, + 2, + 6, + 5, + 3, + 5, + 6, + 3, + 6, + 2, + 8, + 2, + 4, + 4 + ], + "precedences": [ + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 1, + 7 + ], + [ + 2, + 4 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ], + [ + 3, + 7 + ], + [ + 4, + 8 + ], + [ + 4, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 10 + ], + [ + 6, + 9 + ], + [ + 8, + 11 + ], + [ + 8, + 13 + ], + [ + 9, + 11 + ], + [ + 9, + 12 + ], + [ + 10, + 11 + ] + ], + "cycle_time": 18 + }, + { + "name": "generated-47", + "identity": "c993ddc974844a909002e38ccb2b501ed84fe639fbe2b34993bed2b4f4c6f76e", + "n_tasks": 14, + "durations": [ + 2, + 7, + 5, + 7, + 5, + 5, + 2, + 2, + 2, + 8, + 4, + 4, + 7, + 3 + ], + "precedences": [ + [ + 0, + 6 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 1, + 7 + ], + [ + 2, + 4 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 4, + 10 + ], + [ + 5, + 8 + ], + [ + 6, + 9 + ], + [ + 7, + 9 + ], + [ + 8, + 12 + ], + [ + 9, + 11 + ], + [ + 9, + 13 + ], + [ + 10, + 13 + ] + ], + "cycle_time": 18 + }, + { + "name": "generated-71", + "identity": "b81fedad52094dbc6867f565bc942c46bd42ed37e76bc4d50e0d2a75275f13a3", + "n_tasks": 14, + "durations": [ + 8, + 3, + 5, + 5, + 5, + 7, + 4, + 6, + 6, + 3, + 2, + 2, + 8, + 5 + ], + "precedences": [ + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 1, + 7 + ], + [ + 2, + 4 + ], + [ + 2, + 7 + ], + [ + 3, + 6 + ], + [ + 4, + 8 + ], + [ + 5, + 10 + ], + [ + 6, + 8 + ], + [ + 6, + 9 + ], + [ + 7, + 8 + ], + [ + 7, + 9 + ], + [ + 7, + 10 + ], + [ + 8, + 11 + ], + [ + 8, + 12 + ], + [ + 10, + 12 + ], + [ + 10, + 13 + ] + ], + "cycle_time": 18 + } + ], + "joins": { + "accepted": { + "status": "comparable", + "reference": 4, + "identity": "11480c70a3adf3d41ff8ab37bcda3860bf8bc8bf318cf841a508f5254035b972" + }, + "refused": { + "status": "not_comparable", + "reason": "structural_identity_mismatch", + "reference": 2 + } + } } \ No newline at end of file diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/LICENSE b/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/LICENSE similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/LICENSE rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/LICENSE diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/SOURCE.md b/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/SOURCE.md similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/SOURCE.md rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/SOURCE.md diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/difficulty_probe.csv b/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/difficulty_probe.csv new file mode 100644 index 0000000000..7494e95776 --- /dev/null +++ b/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/difficulty_probe.csv @@ -0,0 +1,25 @@ +densite,n_modules,seed,n_burns,separations,couloirs,horizon,pond_status,pond_mk,pond_fuel,pond_wall_s,2p_status,2p_mk,2p_fuel,2p_wall_s,2p_mk_certifie,2p_certifie,audit_pond,audit_2p +0.25,16,11,32,25,6,448,OPTIMAL,121,1791,0.07,OPTIMAL/OPTIMAL,121,1791,0.11,True,True,True,True +0.25,16,22,32,24,6,448,OPTIMAL,118,1793,0.04,OPTIMAL/OPTIMAL,118,1793,0.08,True,True,True,True +0.25,16,33,32,32,6,448,OPTIMAL,121,1897,0.04,OPTIMAL/OPTIMAL,121,1897,0.07,True,True,True,True +0.25,32,11,64,109,11,800,OPTIMAL,226,3850,0.29,OPTIMAL/OPTIMAL,226,3850,0.35,True,True,True,True +0.25,32,22,64,124,11,800,OPTIMAL,202,3909,0.08,OPTIMAL/OPTIMAL,202,3909,0.22,True,True,True,True +0.25,32,33,64,116,11,800,OPTIMAL,204,3753,0.11,OPTIMAL/OPTIMAL,204,3753,0.17,True,True,True,True +0.25,64,11,128,497,22,1504,OPTIMAL,382,7346,0.22,OPTIMAL/OPTIMAL,382,7346,0.5,True,True,True,True +0.25,64,22,128,490,22,1504,OPTIMAL,383,7285,0.26,OPTIMAL/OPTIMAL,383,7285,0.38,True,True,True,True +0.25,64,33,128,514,22,1504,FEASIBLE,386,7450,10.05,OPTIMAL/FEASIBLE,386,7449,10.55,True,False,True,True +0.25,90,11,180,975,30,2076,OPTIMAL,518,10289,0.62,OPTIMAL/OPTIMAL,518,10289,1.1,True,True,True,True +0.25,90,22,180,972,30,2076,OPTIMAL,528,10548,0.91,OPTIMAL/OPTIMAL,528,10548,1.52,True,True,True,True +0.25,90,33,180,993,30,2076,OPTIMAL,526,10445,0.48,OPTIMAL/OPTIMAL,526,10445,1.16,True,True,True,True +0.6,16,11,32,63,6,448,OPTIMAL,129,1816,1.06,OPTIMAL/OPTIMAL,129,1816,1.06,True,True,True,True +0.6,16,22,32,65,6,448,OPTIMAL,118,1795,0.04,OPTIMAL/OPTIMAL,118,1795,0.09,True,True,True,True +0.6,16,33,32,76,6,448,OPTIMAL,122,1900,0.06,OPTIMAL/OPTIMAL,122,1900,0.1,True,True,True,True +0.6,32,11,64,285,11,800,FEASIBLE,245,3864,10.02,FEASIBLE/FEASIBLE,244,3867,20.05,False,False,True,True +0.6,32,22,64,274,11,800,FEASIBLE,202,3930,10.02,OPTIMAL/FEASIBLE,202,3930,10.18,True,False,True,True +0.6,32,33,64,268,11,800,OPTIMAL,204,3776,0.21,OPTIMAL/OPTIMAL,204,3776,0.37,True,True,True,True +0.6,64,11,128,1190,22,1504,OPTIMAL,384,7367,0.6,OPTIMAL/OPTIMAL,384,7367,1.15,True,True,True,True +0.6,64,22,128,1184,22,1504,FEASIBLE,383,7314,10.03,OPTIMAL/FEASIBLE,383,7316,10.74,True,False,True,True +0.6,64,33,128,1170,22,1504,FEASIBLE,411,7519,10.08,FEASIBLE/FEASIBLE,401,7425,20.07,False,False,True,True +0.6,90,11,180,2362,30,2076,FEASIBLE,521,10503,10.06,OPTIMAL/FEASIBLE,521,10498,11.6,True,False,True,True +0.6,90,22,180,2351,30,2076,OPTIMAL,531,10455,1.53,OPTIMAL/OPTIMAL,531,10455,3.23,True,True,True,True +0.6,90,33,180,2336,30,2076,OPTIMAL,529,10453,1.66,OPTIMAL/OPTIMAL,529,10453,2.14,True,True,True,True diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/exchange_fronts.json b/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/exchange_fronts.json similarity index 81% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/exchange_fronts.json rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/exchange_fronts.json index 51fd5211da..d32d450647 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/exchange_fronts.json +++ b/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/exchange_fronts.json @@ -1,614 +1,614 @@ -{ - "coursia-orbital-m6-s11": { - "digest": "9561a6bad9f3485d526b01c678090c096f2679dbc7d0055b095462536dc1c6f2", - "budget": 818, - "lexico_mk": 69, - "lexico_fuel": 789, - "repartition_mk": 75, - "repartition_fuel": 739, - "points": [ - { - "eps": 0, - "cap": 69, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 69, - "propellant": 789, - "wall_s": 0.044975499999964086, - "audit_valid": true - }, - { - "eps": 2, - "cap": 71, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 71, - "propellant": 690, - "wall_s": 0.04340200000024197, - "audit_valid": true - }, - { - "eps": 4, - "cap": 73, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 73, - "propellant": 684, - "wall_s": 0.042501399999764544, - "audit_valid": true - }, - { - "eps": 6, - "cap": 75, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 75, - "propellant": 681, - "wall_s": 0.04386419999991631, - "audit_valid": true - }, - { - "eps": 8, - "cap": 77, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 77, - "propellant": 676, - "wall_s": 0.04317959999980303, - "audit_valid": true - }, - { - "eps": 10, - "cap": 79, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 78, - "propellant": 675, - "wall_s": 0.04336940000030154, - "audit_valid": true - }, - { - "eps": 12, - "cap": 81, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 80, - "propellant": 672, - "wall_s": 0.042604799999935494, - "audit_valid": true - }, - { - "eps": 14, - "cap": 83, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 83, - "propellant": 672, - "wall_s": 0.04411619999973482, - "audit_valid": true - }, - { - "eps": 16, - "cap": 85, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 85, - "propellant": 672, - "wall_s": 0.04249070000014399, - "audit_valid": true - }, - { - "eps": 18, - "cap": 87, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 83, - "propellant": 672, - "wall_s": 0.029915000000073633, - "audit_valid": true - }, - { - "eps": 20, - "cap": 89, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 83, - "propellant": 672, - "wall_s": 0.04497480000009091, - "audit_valid": true - }, - { - "eps": 22, - "cap": 91, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 91, - "propellant": 672, - "wall_s": 0.026618300000336603, - "audit_valid": true - }, - { - "eps": 24, - "cap": 93, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 83, - "propellant": 672, - "wall_s": 0.02888940000002549, - "audit_valid": true - } - ] - }, - "coursia-orbital-m8-s22": { - "digest": "3c2fd6cd73e7e5a52a16b8e99bc47e9cf620338dde91d8a3c8e35e9bc75b91e8", - "budget": 1231, - "lexico_mk": 89, - "lexico_fuel": 1136, - "repartition_mk": 92, - "repartition_fuel": 1209, - "points": [ - { - "eps": 0, - "cap": 89, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 89, - "propellant": 1136, - "wall_s": 0.05884070000001884, - "audit_valid": true - }, - { - "eps": 2, - "cap": 91, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 91, - "propellant": 1135, - "wall_s": 0.06187559999989389, - "audit_valid": true - }, - { - "eps": 4, - "cap": 93, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 93, - "propellant": 1033, - "wall_s": 0.04992470000024696, - "audit_valid": true - }, - { - "eps": 6, - "cap": 95, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 95, - "propellant": 1032, - "wall_s": 0.0634712999999465, - "audit_valid": true - }, - { - "eps": 8, - "cap": 97, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 97, - "propellant": 1025, - "wall_s": 0.05647610000005443, - "audit_valid": true - }, - { - "eps": 10, - "cap": 99, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 98, - "propellant": 1025, - "wall_s": 0.070239500000298, - "audit_valid": true - }, - { - "eps": 12, - "cap": 101, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 101, - "propellant": 1018, - "wall_s": 0.0431456999999682, - "audit_valid": true - }, - { - "eps": 14, - "cap": 103, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 101, - "propellant": 1018, - "wall_s": 0.05779840000013792, - "audit_valid": true - }, - { - "eps": 16, - "cap": 105, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 105, - "propellant": 1012, - "wall_s": 0.04201240000020334, - "audit_valid": true - }, - { - "eps": 18, - "cap": 107, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 105, - "propellant": 1012, - "wall_s": 0.058900700000322104, - "audit_valid": true - }, - { - "eps": 20, - "cap": 109, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 105, - "propellant": 1012, - "wall_s": 0.02773059999981342, - "audit_valid": true - }, - { - "eps": 22, - "cap": 111, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 105, - "propellant": 1012, - "wall_s": 0.04593440000007831, - "audit_valid": true - }, - { - "eps": 24, - "cap": 113, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 105, - "propellant": 1012, - "wall_s": 0.05552089999991949, - "audit_valid": true - } - ] - }, - "coursia-orbital-m10-s44": { - "digest": "f051cd599c24471a6ac28b27f65e608405cb1871d534bc7256a7211e9b85eb08", - "budget": 1302, - "lexico_mk": 99, - "lexico_fuel": 1109, - "repartition_mk": 118, - "repartition_fuel": 1301, - "points": [ - { - "eps": 0, - "cap": 99, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 99, - "propellant": 1109, - "wall_s": 0.095325899999807, - "audit_valid": true - }, - { - "eps": 2, - "cap": 101, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 101, - "propellant": 1104, - "wall_s": 0.0733872999999221, - "audit_valid": true - }, - { - "eps": 4, - "cap": 103, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 103, - "propellant": 1090, - "wall_s": 0.0918509000002814, - "audit_valid": true - }, - { - "eps": 6, - "cap": 105, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 105, - "propellant": 1080, - "wall_s": 0.0729631999997764, - "audit_valid": true - }, - { - "eps": 8, - "cap": 107, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 107, - "propellant": 1074, - "wall_s": 0.08744890000025407, - "audit_valid": true - }, - { - "eps": 10, - "cap": 109, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 109, - "propellant": 1069, - "wall_s": 0.10258299999986775, - "audit_valid": true - }, - { - "eps": 12, - "cap": 111, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 111, - "propellant": 1067, - "wall_s": 0.07250639999983832, - "audit_valid": true - }, - { - "eps": 14, - "cap": 113, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 113, - "propellant": 1065, - "wall_s": 0.07324719999996887, - "audit_valid": true - }, - { - "eps": 16, - "cap": 115, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 115, - "propellant": 1064, - "wall_s": 0.07860560000017358, - "audit_valid": true - }, - { - "eps": 18, - "cap": 117, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 117, - "propellant": 1064, - "wall_s": 0.057878900000105205, - "audit_valid": true - }, - { - "eps": 20, - "cap": 119, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 117, - "propellant": 1064, - "wall_s": 0.08379239999976562, - "audit_valid": true - }, - { - "eps": 22, - "cap": 121, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 117, - "propellant": 1064, - "wall_s": 0.057560799999919254, - "audit_valid": true - }, - { - "eps": 24, - "cap": 123, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 122, - "propellant": 1064, - "wall_s": 0.08126749999973981, - "audit_valid": true - } - ] - }, - "coursia-orbital-m12-s33": { - "digest": "6dbd5ce52666769a27531ec1fe2feb99da8b7002a531569f5a2d38c036b34260", - "budget": 1661, - "lexico_mk": 114, - "lexico_fuel": 1413, - "repartition_mk": 126, - "repartition_fuel": 1661, - "points": [ - { - "eps": 0, - "cap": 114, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 114, - "propellant": 1413, - "wall_s": 0.08317660000011529, - "audit_valid": true - }, - { - "eps": 2, - "cap": 116, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 116, - "propellant": 1407, - "wall_s": 0.08903079999981856, - "audit_valid": true - }, - { - "eps": 4, - "cap": 118, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 118, - "propellant": 1396, - "wall_s": 0.10174520000009579, - "audit_valid": true - }, - { - "eps": 6, - "cap": 120, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 120, - "propellant": 1390, - "wall_s": 0.10968450000018493, - "audit_valid": true - }, - { - "eps": 8, - "cap": 122, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 122, - "propellant": 1380, - "wall_s": 0.103583499999786, - "audit_valid": true - }, - { - "eps": 10, - "cap": 124, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 122, - "propellant": 1380, - "wall_s": 0.09174809999967692, - "audit_valid": true - }, - { - "eps": 12, - "cap": 126, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 126, - "propellant": 1373, - "wall_s": 0.11641499999996086, - "audit_valid": true - }, - { - "eps": 14, - "cap": 128, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 127, - "propellant": 1373, - "wall_s": 0.08773380000002362, - "audit_valid": true - }, - { - "eps": 16, - "cap": 130, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 130, - "propellant": 1369, - "wall_s": 0.08753999999998996, - "audit_valid": true - }, - { - "eps": 18, - "cap": 132, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 132, - "propellant": 1369, - "wall_s": 0.0870399999998881, - "audit_valid": true - }, - { - "eps": 20, - "cap": 134, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 134, - "propellant": 1367, - "wall_s": 0.09870189999992363, - "audit_valid": true - }, - { - "eps": 22, - "cap": 136, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 136, - "propellant": 1365, - "wall_s": 0.08659170000009908, - "audit_valid": true - }, - { - "eps": 24, - "cap": 138, - "status": "OPTIMAL", - "feasible": true, - "certified": true, - "makespan": 137, - "propellant": 1365, - "wall_s": 0.10545259999980772, - "audit_valid": true - } - ] - } +{ + "coursia-orbital-m6-s11": { + "digest": "9561a6bad9f3485d526b01c678090c096f2679dbc7d0055b095462536dc1c6f2", + "budget": 818, + "lexico_mk": 69, + "lexico_fuel": 789, + "repartition_mk": 75, + "repartition_fuel": 739, + "points": [ + { + "eps": 0, + "cap": 69, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 69, + "propellant": 789, + "wall_s": 0.02632969999103807, + "audit_valid": true + }, + { + "eps": 2, + "cap": 71, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 71, + "propellant": 690, + "wall_s": 0.014914100000169128, + "audit_valid": true + }, + { + "eps": 4, + "cap": 73, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 73, + "propellant": 684, + "wall_s": 0.028333499998552725, + "audit_valid": true + }, + { + "eps": 6, + "cap": 75, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 75, + "propellant": 681, + "wall_s": 0.02795350001542829, + "audit_valid": true + }, + { + "eps": 8, + "cap": 77, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 77, + "propellant": 676, + "wall_s": 0.014105900016147643, + "audit_valid": true + }, + { + "eps": 10, + "cap": 79, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 78, + "propellant": 675, + "wall_s": 0.015514700004132465, + "audit_valid": true + }, + { + "eps": 12, + "cap": 81, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 80, + "propellant": 672, + "wall_s": 0.03067199999350123, + "audit_valid": true + }, + { + "eps": 14, + "cap": 83, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 83, + "propellant": 672, + "wall_s": 0.026978199981385842, + "audit_valid": true + }, + { + "eps": 16, + "cap": 85, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 83, + "propellant": 672, + "wall_s": 0.029420500010019168, + "audit_valid": true + }, + { + "eps": 18, + "cap": 87, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 87, + "propellant": 672, + "wall_s": 0.012581199989654124, + "audit_valid": true + }, + { + "eps": 20, + "cap": 89, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 89, + "propellant": 672, + "wall_s": 0.013586000015493482, + "audit_valid": true + }, + { + "eps": 22, + "cap": 91, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 91, + "propellant": 672, + "wall_s": 0.013719899987336248, + "audit_valid": true + }, + { + "eps": 24, + "cap": 93, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 83, + "propellant": 672, + "wall_s": 0.014579500013496727, + "audit_valid": true + } + ] + }, + "coursia-orbital-m8-s22": { + "digest": "3c2fd6cd73e7e5a52a16b8e99bc47e9cf620338dde91d8a3c8e35e9bc75b91e8", + "budget": 1231, + "lexico_mk": 89, + "lexico_fuel": 1136, + "repartition_mk": 92, + "repartition_fuel": 1209, + "points": [ + { + "eps": 0, + "cap": 89, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 89, + "propellant": 1136, + "wall_s": 0.030978499999037012, + "audit_valid": true + }, + { + "eps": 2, + "cap": 91, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 91, + "propellant": 1135, + "wall_s": 0.026591500005451962, + "audit_valid": true + }, + { + "eps": 4, + "cap": 93, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 93, + "propellant": 1033, + "wall_s": 0.028045599989127368, + "audit_valid": true + }, + { + "eps": 6, + "cap": 95, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 95, + "propellant": 1032, + "wall_s": 0.030196200008504093, + "audit_valid": true + }, + { + "eps": 8, + "cap": 97, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 97, + "propellant": 1025, + "wall_s": 0.028030100016621873, + "audit_valid": true + }, + { + "eps": 10, + "cap": 99, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 98, + "propellant": 1025, + "wall_s": 0.026218799990601838, + "audit_valid": true + }, + { + "eps": 12, + "cap": 101, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 101, + "propellant": 1018, + "wall_s": 0.02898750000167638, + "audit_valid": true + }, + { + "eps": 14, + "cap": 103, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 101, + "propellant": 1018, + "wall_s": 0.012585399992531165, + "audit_valid": true + }, + { + "eps": 16, + "cap": 105, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 105, + "propellant": 1012, + "wall_s": 0.014699499995913357, + "audit_valid": true + }, + { + "eps": 18, + "cap": 107, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 105, + "propellant": 1012, + "wall_s": 0.014069700002437457, + "audit_valid": true + }, + { + "eps": 20, + "cap": 109, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 105, + "propellant": 1012, + "wall_s": 0.013968200015369803, + "audit_valid": true + }, + { + "eps": 22, + "cap": 111, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 105, + "propellant": 1012, + "wall_s": 0.02888669999083504, + "audit_valid": true + }, + { + "eps": 24, + "cap": 113, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 105, + "propellant": 1012, + "wall_s": 0.013256700010970235, + "audit_valid": true + } + ] + }, + "coursia-orbital-m10-s44": { + "digest": "f051cd599c24471a6ac28b27f65e608405cb1871d534bc7256a7211e9b85eb08", + "budget": 1302, + "lexico_mk": 99, + "lexico_fuel": 1109, + "repartition_mk": 118, + "repartition_fuel": 1301, + "points": [ + { + "eps": 0, + "cap": 99, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 99, + "propellant": 1109, + "wall_s": 0.029154199990443885, + "audit_valid": true + }, + { + "eps": 2, + "cap": 101, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 101, + "propellant": 1104, + "wall_s": 0.04218920000130311, + "audit_valid": true + }, + { + "eps": 4, + "cap": 103, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 103, + "propellant": 1090, + "wall_s": 0.029528899991419166, + "audit_valid": true + }, + { + "eps": 6, + "cap": 105, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 105, + "propellant": 1080, + "wall_s": 0.02872370000113733, + "audit_valid": true + }, + { + "eps": 8, + "cap": 107, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 106, + "propellant": 1074, + "wall_s": 0.030041499994695187, + "audit_valid": true + }, + { + "eps": 10, + "cap": 109, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 109, + "propellant": 1069, + "wall_s": 0.028293100011069328, + "audit_valid": true + }, + { + "eps": 12, + "cap": 111, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 111, + "propellant": 1067, + "wall_s": 0.02923369998461567, + "audit_valid": true + }, + { + "eps": 14, + "cap": 113, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 113, + "propellant": 1065, + "wall_s": 0.028167500015115365, + "audit_valid": true + }, + { + "eps": 16, + "cap": 115, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 115, + "propellant": 1064, + "wall_s": 0.02970019998610951, + "audit_valid": true + }, + { + "eps": 18, + "cap": 117, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 117, + "propellant": 1064, + "wall_s": 0.0291000000142958, + "audit_valid": true + }, + { + "eps": 20, + "cap": 119, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 117, + "propellant": 1064, + "wall_s": 0.012678700004471466, + "audit_valid": true + }, + { + "eps": 22, + "cap": 121, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 117, + "propellant": 1064, + "wall_s": 0.028948699997272342, + "audit_valid": true + }, + { + "eps": 24, + "cap": 123, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 122, + "propellant": 1064, + "wall_s": 0.013397900009294972, + "audit_valid": true + } + ] + }, + "coursia-orbital-m12-s33": { + "digest": "6dbd5ce52666769a27531ec1fe2feb99da8b7002a531569f5a2d38c036b34260", + "budget": 1661, + "lexico_mk": 114, + "lexico_fuel": 1413, + "repartition_mk": 126, + "repartition_fuel": 1661, + "points": [ + { + "eps": 0, + "cap": 114, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 114, + "propellant": 1413, + "wall_s": 0.02677110000513494, + "audit_valid": true + }, + { + "eps": 2, + "cap": 116, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 116, + "propellant": 1407, + "wall_s": 0.045227700000396, + "audit_valid": true + }, + { + "eps": 4, + "cap": 118, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 118, + "propellant": 1396, + "wall_s": 0.050431699986802414, + "audit_valid": true + }, + { + "eps": 6, + "cap": 120, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 120, + "propellant": 1390, + "wall_s": 0.02703359999577515, + "audit_valid": true + }, + { + "eps": 8, + "cap": 122, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 122, + "propellant": 1380, + "wall_s": 0.0425186000065878, + "audit_valid": true + }, + { + "eps": 10, + "cap": 124, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 123, + "propellant": 1380, + "wall_s": 0.04240310000022873, + "audit_valid": true + }, + { + "eps": 12, + "cap": 126, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 126, + "propellant": 1373, + "wall_s": 0.028640200005611405, + "audit_valid": true + }, + { + "eps": 14, + "cap": 128, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 127, + "propellant": 1373, + "wall_s": 0.028465099981985986, + "audit_valid": true + }, + { + "eps": 16, + "cap": 130, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 130, + "propellant": 1369, + "wall_s": 0.03613900000345893, + "audit_valid": true + }, + { + "eps": 18, + "cap": 132, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 131, + "propellant": 1369, + "wall_s": 0.04424710001330823, + "audit_valid": true + }, + { + "eps": 20, + "cap": 134, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 134, + "propellant": 1367, + "wall_s": 0.029340900015085936, + "audit_valid": true + }, + { + "eps": 22, + "cap": 136, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 136, + "propellant": 1365, + "wall_s": 0.027387100009946153, + "audit_valid": true + }, + { + "eps": 24, + "cap": 138, + "status": "OPTIMAL", + "feasible": true, + "certified": true, + "makespan": 137, + "propellant": 1365, + "wall_s": 0.028716800006804988, + "audit_valid": true + } + ] + } } \ No newline at end of file diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/grid_runs.csv b/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/grid_runs.csv new file mode 100644 index 0000000000..283678ab42 --- /dev/null +++ b/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/grid_runs.csv @@ -0,0 +1,26 @@ +instance,n_modules,seed,n_burns,horizon,corridors,separations,budget,digest,pond_status,pond_mk,pond_fuel,pond_wall_s,pond_conflicts,pond_domaine_objectif,2p_status,2p_mk,2p_fuel,2p_wall_s,2p_certifie,disp_status,disp_mk,disp_fuel,disp_wall_s,audit_pond,audit_2p,audit_disp +coursia-orbital-m4-s11,4,11,8,184,2,0,464,b2ae490d34632341,OPTIMAL,51,408,0.0512,0,86024,OPTIMAL/OPTIMAL,51,408,0.0284,True,FAISABLE,52,433,0.0002,True,True,True +coursia-orbital-m4-s22,4,22,8,184,2,1,478,076b3bd96a209334,OPTIMAL,56,442,0.0108,2,88614,OPTIMAL/OPTIMAL,56,442,0.0268,True,FAISABLE,56,448,0.0001,True,True,True +coursia-orbital-m4-s33,4,33,8,184,2,1,475,4a01cc08497d2f0e,OPTIMAL,37,421,0.0139,0,88059,OPTIMAL/OPTIMAL,37,421,0.0256,True,FAISABLE,41,444,0.0001,True,True,True +coursia-orbital-m4-s44,4,44,8,184,2,0,462,63929a1ca6a9e931,OPTIMAL,59,406,0.0145,0,85654,OPTIMAL/OPTIMAL,59,406,0.0283,True,FAISABLE,59,429,0.0001,True,True,True +coursia-orbital-m4-s55,4,55,8,184,2,2,461,8e3fb414ccb77fbd,OPTIMAL,56,390,0.0135,0,85469,OPTIMAL/OPTIMAL,56,390,0.0297,True,FAISABLE,57,428,0.0001,True,True,True +coursia-orbital-m6-s11,6,11,12,228,2,4,818,9561a6bad9f3485d,OPTIMAL,69,789,0.0129,0,187550,OPTIMAL/OPTIMAL,69,789,0.0432,True,FAISABLE,75,739,0.0001,True,True,True +coursia-orbital-m6-s22,6,22,12,228,2,3,843,80cfbce022aff265,OPTIMAL,68,809,0.0141,3,193275,OPTIMAL/OPTIMAL,68,809,0.0287,True,FAISABLE,83,842,0.0001,True,True,True +coursia-orbital-m6-s33,6,33,12,228,2,2,836,0da7820663568a8d,OPTIMAL,71,810,0.0137,0,191672,OPTIMAL/OPTIMAL,71,810,0.0273,True,FAISABLE,88,836,0.0002,True,True,True +coursia-orbital-m6-s44,6,44,12,228,2,0,825,5d0af050f1f29418,OPTIMAL,72,821,0.0305,0,189153,OPTIMAL/OPTIMAL,72,821,0.043,True,FAISABLE,88,825,0.0001,True,True,True +coursia-orbital-m6-s55,6,55,12,228,2,1,816,6adc1e6e279ccddb,OPTIMAL,61,779,0.0295,0,187092,OPTIMAL/OPTIMAL,61,779,0.0286,True,FAISABLE,66,816,0.0001,True,True,True +coursia-orbital-m8-s11,8,11,16,272,3,5,1208,29361dc8b6b78a6c,OPTIMAL,74,1138,0.0308,6,330056,OPTIMAL/OPTIMAL,74,1138,0.0557,True,FAISABLE,76,1187,0.0002,True,True,True +coursia-orbital-m8-s22,8,22,16,272,3,3,1231,3c2fd6cd73e7e5a5,OPTIMAL,89,1136,0.0287,0,336335,OPTIMAL/OPTIMAL,89,1136,0.0607,True,FAISABLE,92,1209,0.0002,True,True,True +coursia-orbital-m8-s33,8,33,16,272,3,6,1228,22db3908f076aefd,OPTIMAL,66,1021,0.0125,0,335516,OPTIMAL/OPTIMAL,66,1021,0.0274,True,FAISABLE,66,1208,0.0002,True,True,True +coursia-orbital-m8-s44,8,44,16,272,3,8,1214,42e8790ce236a287,OPTIMAL,66,1036,0.0129,0,331694,OPTIMAL/OPTIMAL,66,1036,0.0277,True,FAISABLE,69,1192,0.0002,True,True,True +coursia-orbital-m8-s55,8,55,16,272,3,5,1203,33df73e03efc0780,OPTIMAL,77,1113,0.0292,0,328691,OPTIMAL/OPTIMAL,77,1113,0.0425,True,FAISABLE,86,1179,0.0002,True,True,True +coursia-orbital-m10-s11,10,11,20,316,4,9,1291,da1baffdf3d2000a,OPTIMAL,82,1075,0.0291,0,409563,OPTIMAL/OPTIMAL,82,1075,0.0576,True,FAISABLE,82,1285,0.0002,True,True,True +coursia-orbital-m10-s22,10,22,20,316,4,12,1318,e5a1544da80e6863,OPTIMAL,87,1138,0.0287,0,418122,OPTIMAL/OPTIMAL,87,1138,0.0521,True,FAISABLE,117,1318,0.0005,True,True,True +coursia-orbital-m10-s33,10,33,20,316,4,6,1305,22a14292de403280,OPTIMAL,89,1179,0.0278,0,414001,OPTIMAL/OPTIMAL,89,1179,0.0555,True,FAISABLE,93,1297,0.0003,True,True,True +coursia-orbital-m10-s44,10,44,20,316,4,11,1302,f051cd599c24471a,OPTIMAL,99,1109,0.027,0,413050,OPTIMAL/OPTIMAL,99,1109,0.056,True,FAISABLE,118,1301,0.0005,True,True,True +coursia-orbital-m10-s55,10,55,20,316,4,9,1297,57e93d6ec2629897,OPTIMAL,88,1123,0.0268,0,411465,OPTIMAL/OPTIMAL,88,1123,0.0573,True,FAISABLE,99,1287,0.0003,True,True,True +coursia-orbital-m12-s11,12,11,24,360,4,12,1657,d403e0e32448c7c0,OPTIMAL,88,1477,0.0436,0,598537,OPTIMAL/OPTIMAL,88,1477,0.0572,True,FAISABLE,103,1657,0.0005,True,True,True +coursia-orbital-m12-s22,12,22,24,360,4,7,1673,5a92c1051bba9e3b,OPTIMAL,95,1499,0.0239,0,604313,OPTIMAL/OPTIMAL,95,1499,0.0544,True,FAISABLE,102,1673,0.0003,True,True,True +coursia-orbital-m12-s33,12,33,24,360,4,15,1661,6dbd5ce52666769a,OPTIMAL,114,1413,0.0431,0,599981,OPTIMAL/OPTIMAL,114,1413,0.0716,True,FAISABLE,126,1661,0.0004,True,True,True +coursia-orbital-m12-s44,12,44,24,360,4,15,1670,fe770305c6fb5715,OPTIMAL,96,1386,0.0274,0,603230,OPTIMAL/OPTIMAL,96,1386,0.0811,True,FAISABLE,98,1669,0.0005,True,True,True +coursia-orbital-m12-s55,12,55,24,360,4,14,1658,aab6978371a29600,OPTIMAL,97,1391,0.0543,0,598898,OPTIMAL/OPTIMAL,97,1391,0.0715,True,FAISABLE,100,1654,0.0005,True,True,True diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/matched_comparison.csv b/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/matched_comparison.csv similarity index 96% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/matched_comparison.csv rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/matched_comparison.csv index 4ffd90d348..d4ac2ca5c1 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/matched_comparison.csv +++ b/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/matched_comparison.csv @@ -1,26 +1,26 @@ -instance,n_modules,seed,lex_mk,lex_fuel,disp_mk,disp_fuel,apparie_mk,apparie_fuel,apparie_status,apparie_audit,lecture_melangee_pct,lecture_appariee_pct -coursia-orbital-m4-s11,4,11,51,408,52,433,51,408,OPTIMAL,True,5.773672055427252,5.773672055427252 -coursia-orbital-m4-s22,4,22,56,442,56,448,56,442,OPTIMAL,True,1.3392857142857142,1.3392857142857142 -coursia-orbital-m4-s33,4,33,37,421,41,444,41,397,OPTIMAL,True,5.18018018018018,10.585585585585585 -coursia-orbital-m4-s44,4,44,59,406,59,429,59,406,OPTIMAL,True,5.361305361305361,5.361305361305361 -coursia-orbital-m4-s55,4,55,56,390,57,428,56,390,OPTIMAL,True,8.878504672897197,8.878504672897197 -coursia-orbital-m6-s11,6,11,69,789,75,739,75,681,OPTIMAL,True,-6.7658998646820026,7.848443843031123 -coursia-orbital-m6-s22,6,22,68,809,83,842,81,692,OPTIMAL,True,3.9192399049881237,17.81472684085511 -coursia-orbital-m6-s33,6,33,71,810,88,836,87,687,OPTIMAL,True,3.110047846889952,17.822966507177032 -coursia-orbital-m6-s44,6,44,72,821,88,825,88,676,OPTIMAL,True,0.48484848484848486,18.060606060606062 -coursia-orbital-m6-s55,6,55,61,779,66,816,66,672,OPTIMAL,True,4.534313725490196,17.647058823529413 -coursia-orbital-m8-s11,8,11,74,1138,76,1187,76,1037,OPTIMAL,True,4.128053917438922,12.636899747262005 -coursia-orbital-m8-s22,8,22,89,1136,92,1209,92,1127,OPTIMAL,True,6.038047973531844,6.782464846980976 -coursia-orbital-m8-s33,8,33,66,1021,66,1208,66,1021,OPTIMAL,True,15.480132450331126,15.480132450331126 -coursia-orbital-m8-s44,8,44,66,1036,69,1192,69,1010,OPTIMAL,True,13.087248322147651,15.268456375838927 -coursia-orbital-m8-s55,8,55,77,1113,86,1179,86,994,OPTIMAL,True,5.597964376590331,15.691263782866836 -coursia-orbital-m10-s11,10,11,82,1075,82,1285,82,1075,OPTIMAL,True,16.342412451361866,16.342412451361866 -coursia-orbital-m10-s22,10,22,87,1138,117,1318,114,1082,OPTIMAL,True,13.657056145675266,17.905918057663126 -coursia-orbital-m10-s33,10,33,89,1179,93,1297,93,1079,OPTIMAL,True,9.097918272937548,16.808018504240554 -coursia-orbital-m10-s44,10,44,99,1109,118,1301,117,1064,OPTIMAL,True,14.757878554957724,18.216756341275943 -coursia-orbital-m10-s55,10,55,88,1123,99,1287,99,1064,OPTIMAL,True,12.742812742812744,17.327117327117328 -coursia-orbital-m12-s11,12,11,88,1477,103,1657,103,1358,OPTIMAL,True,10.863005431502716,18.044659022329512 -coursia-orbital-m12-s22,12,22,95,1499,102,1673,102,1381,OPTIMAL,True,10.400478182904962,17.45367603108189 -coursia-orbital-m12-s33,12,33,114,1413,126,1661,126,1373,OPTIMAL,True,14.930764599638772,17.338952438290185 -coursia-orbital-m12-s44,12,44,96,1386,98,1669,98,1372,OPTIMAL,True,16.95626123427202,17.79508687837028 -coursia-orbital-m12-s55,12,55,97,1391,100,1654,100,1369,OPTIMAL,True,15.900846432889963,17.230955259975815 +instance,n_modules,seed,lex_mk,lex_fuel,disp_mk,disp_fuel,apparie_mk,apparie_fuel,apparie_status,apparie_audit,lecture_melangee_pct,lecture_appariee_pct +coursia-orbital-m4-s11,4,11,51,408,52,433,51,408,OPTIMAL,True,5.773672055427252,5.773672055427252 +coursia-orbital-m4-s22,4,22,56,442,56,448,56,442,OPTIMAL,True,1.3392857142857142,1.3392857142857142 +coursia-orbital-m4-s33,4,33,37,421,41,444,41,397,OPTIMAL,True,5.18018018018018,10.585585585585585 +coursia-orbital-m4-s44,4,44,59,406,59,429,59,406,OPTIMAL,True,5.361305361305361,5.361305361305361 +coursia-orbital-m4-s55,4,55,56,390,57,428,57,390,OPTIMAL,True,8.878504672897197,8.878504672897197 +coursia-orbital-m6-s11,6,11,69,789,75,739,75,681,OPTIMAL,True,-6.7658998646820026,7.848443843031123 +coursia-orbital-m6-s22,6,22,68,809,83,842,81,692,OPTIMAL,True,3.9192399049881237,17.81472684085511 +coursia-orbital-m6-s33,6,33,71,810,88,836,87,687,OPTIMAL,True,3.110047846889952,17.822966507177032 +coursia-orbital-m6-s44,6,44,72,821,88,825,88,676,OPTIMAL,True,0.48484848484848486,18.060606060606062 +coursia-orbital-m6-s55,6,55,61,779,66,816,66,672,OPTIMAL,True,4.534313725490196,17.647058823529413 +coursia-orbital-m8-s11,8,11,74,1138,76,1187,76,1037,OPTIMAL,True,4.128053917438922,12.636899747262005 +coursia-orbital-m8-s22,8,22,89,1136,92,1209,92,1127,OPTIMAL,True,6.038047973531844,6.782464846980976 +coursia-orbital-m8-s33,8,33,66,1021,66,1208,66,1021,OPTIMAL,True,15.480132450331126,15.480132450331126 +coursia-orbital-m8-s44,8,44,66,1036,69,1192,69,1010,OPTIMAL,True,13.087248322147651,15.268456375838927 +coursia-orbital-m8-s55,8,55,77,1113,86,1179,86,994,OPTIMAL,True,5.597964376590331,15.691263782866836 +coursia-orbital-m10-s11,10,11,82,1075,82,1285,82,1075,OPTIMAL,True,16.342412451361866,16.342412451361866 +coursia-orbital-m10-s22,10,22,87,1138,117,1318,114,1082,OPTIMAL,True,13.657056145675266,17.905918057663126 +coursia-orbital-m10-s33,10,33,89,1179,93,1297,93,1079,OPTIMAL,True,9.097918272937548,16.808018504240554 +coursia-orbital-m10-s44,10,44,99,1109,118,1301,117,1064,OPTIMAL,True,14.757878554957724,18.216756341275943 +coursia-orbital-m10-s55,10,55,88,1123,99,1287,99,1064,OPTIMAL,True,12.742812742812744,17.327117327117328 +coursia-orbital-m12-s11,12,11,88,1477,103,1657,103,1358,OPTIMAL,True,10.863005431502716,18.044659022329512 +coursia-orbital-m12-s22,12,22,95,1499,102,1673,102,1381,OPTIMAL,True,10.400478182904962,17.45367603108189 +coursia-orbital-m12-s33,12,33,114,1413,126,1661,126,1373,OPTIMAL,True,14.930764599638772,17.338952438290185 +coursia-orbital-m12-s44,12,44,96,1386,98,1669,98,1372,OPTIMAL,True,16.95626123427202,17.79508687837028 +coursia-orbital-m12-s55,12,55,97,1391,100,1654,100,1369,OPTIMAL,True,15.900846432889963,17.230955259975815 diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/provenance.json b/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/provenance.json similarity index 94% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/provenance.json rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/provenance.json index bbf782f5ca..2b27404ef9 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app30-orbital-assembly-audit/provenance.json +++ b/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/provenance.json @@ -1,363 +1,363 @@ -{ - "application": "App-30 — Ordonnancement d'assemblage orbital", - "distillation": { - "projet": "PrCon C4 — Orbital Assembly Scheduling", - "auteurs": [ - "Gurvan Estable", - "Joris Bely", - "Kévin Lubert" - ], - "pull_request": 53, - "commit": "e9a751bc440f1063fa36582aab8b91eec3bdfd55", - "snapshot": "b5f3f0351dbd41f3a76f047cf02e9c93e81192f3", - "licence": "MIT", - "note": "Reproduction CoursIA independante. Aucun module, texte, cellule, figure ni sortie du rendu source n'est repris. Discretisation volontairement distincte : les grandeurs ne sont pas comparables." - }, - "environnement": { - "python": "3.13.14", - "ortools": "9.15.6755", - "pandas": "2.3.3", - "matplotlib": "3.10.8", - "platform": "Windows-11-10.0.26200-SP0", - "slot_seconds": 900, - "dv_unit_mps": 5.0 - }, - "protocole": { - "grille": { - "tailles": [ - 4, - 6, - 8, - 10, - 12 - ], - "graines": [ - 11, - 22, - 33, - 44, - 55 - ], - "densite": 0.25, - "limite_s": 20.0 - }, - "sonde": { - "tailles": [ - 16, - 32, - 64, - 90 - ], - "graines": [ - 11, - 22, - 33 - ], - "densites": [ - 0.25, - 0.6 - ], - "limite_s": 10.0 - }, - "front": { - "cas": [ - "m6-s11", - "m8-s22", - "m10-s44", - "m12-s33" - ], - "relachements": [ - 0, - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24 - ] - } - }, - "instances": [ - { - "nom": "coursia-orbital-m4-s11", - "empreinte_sha256": "b2ae490d346323412aeca6a637793c8c77045bcb05037f5ac1fdd24cad70ea99", - "poussees": 8, - "horizon": 184, - "couloirs": 2, - "precedences": 7, - "separations": 0, - "budget_ergol": 464, - "capacite_debit": 91 - }, - { - "nom": "coursia-orbital-m4-s22", - "empreinte_sha256": "076b3bd96a20933423bf9f8c8756342d2dacf4767fe7f1ce9af81287866f4b15", - "poussees": 8, - "horizon": 184, - "couloirs": 2, - "precedences": 7, - "separations": 1, - "budget_ergol": 478, - "capacite_debit": 93 - }, - { - "nom": "coursia-orbital-m4-s33", - "empreinte_sha256": "4a01cc08497d2f0e4814bf2079cd2742c57a7fee740e5e250b01b1b9b735834b", - "poussees": 8, - "horizon": 184, - "couloirs": 2, - "precedences": 7, - "separations": 1, - "budget_ergol": 475, - "capacite_debit": 94 - }, - { - "nom": "coursia-orbital-m4-s44", - "empreinte_sha256": "63929a1ca6a9e931ee2b7f834d120a22535998b6a5c184efffe8695ff461187c", - "poussees": 8, - "horizon": 184, - "couloirs": 2, - "precedences": 7, - "separations": 0, - "budget_ergol": 462, - "capacite_debit": 92 - }, - { - "nom": "coursia-orbital-m4-s55", - "empreinte_sha256": "8e3fb414ccb77fbd4cea9e9a589ad4638cca282947904fb2f77b1c4a03c1e47a", - "poussees": 8, - "horizon": 184, - "couloirs": 2, - "precedences": 7, - "separations": 2, - "budget_ergol": 461, - "capacite_debit": 92 - }, - { - "nom": "coursia-orbital-m6-s11", - "empreinte_sha256": "9561a6bad9f3485d526b01c678090c096f2679dbc7d0055b095462536dc1c6f2", - "poussees": 12, - "horizon": 228, - "couloirs": 2, - "precedences": 11, - "separations": 4, - "budget_ergol": 818, - "capacite_debit": 94 - }, - { - "nom": "coursia-orbital-m6-s22", - "empreinte_sha256": "80cfbce022aff265c67398dff0348b6e3cebdc59ba0e6d635ce41c8924fac7b7", - "poussees": 12, - "horizon": 228, - "couloirs": 2, - "precedences": 11, - "separations": 3, - "budget_ergol": 843, - "capacite_debit": 96 - }, - { - "nom": "coursia-orbital-m6-s33", - "empreinte_sha256": "0da7820663568a8de4e19a7143814ac913c9fcabc9d788ca46945a7f207b0128", - "poussees": 12, - "horizon": 228, - "couloirs": 2, - "precedences": 11, - "separations": 2, - "budget_ergol": 836, - "capacite_debit": 97 - }, - { - "nom": "coursia-orbital-m6-s44", - "empreinte_sha256": "5d0af050f1f29418cf48e7c9bbffa9d43c1e6321cdd4a4658f92745e8e828648", - "poussees": 12, - "horizon": 228, - "couloirs": 2, - "precedences": 11, - "separations": 0, - "budget_ergol": 825, - "capacite_debit": 95 - }, - { - "nom": "coursia-orbital-m6-s55", - "empreinte_sha256": "6adc1e6e279ccddb15dbdb379d740a424e21e815239a309abd579bc6bdb06ba4", - "poussees": 12, - "horizon": 228, - "couloirs": 2, - "precedences": 11, - "separations": 1, - "budget_ergol": 816, - "capacite_debit": 95 - }, - { - "nom": "coursia-orbital-m8-s11", - "empreinte_sha256": "29361dc8b6b78a6cd911140c4be6a0bb00fcb21eacbaf4d3bce8484dd9cb53fd", - "poussees": 16, - "horizon": 272, - "couloirs": 3, - "precedences": 15, - "separations": 5, - "budget_ergol": 1208, - "capacite_debit": 96 - }, - { - "nom": "coursia-orbital-m8-s22", - "empreinte_sha256": "3c2fd6cd73e7e5a52a16b8e99bc47e9cf620338dde91d8a3c8e35e9bc75b91e8", - "poussees": 16, - "horizon": 272, - "couloirs": 3, - "precedences": 15, - "separations": 3, - "budget_ergol": 1231, - "capacite_debit": 98 - }, - { - "nom": "coursia-orbital-m8-s33", - "empreinte_sha256": "22db3908f076aefd8f8a7a4cc2edec14603e42d9dc29e80816f471873013011a", - "poussees": 16, - "horizon": 272, - "couloirs": 3, - "precedences": 15, - "separations": 6, - "budget_ergol": 1228, - "capacite_debit": 99 - }, - { - "nom": "coursia-orbital-m8-s44", - "empreinte_sha256": "42e8790ce236a2877b902bcf9a7afc7ca1960836147aa0210cb5b899984ac8fc", - "poussees": 16, - "horizon": 272, - "couloirs": 3, - "precedences": 15, - "separations": 8, - "budget_ergol": 1214, - "capacite_debit": 97 - }, - { - "nom": "coursia-orbital-m8-s55", - "empreinte_sha256": "33df73e03efc0780e39775c518538df45fa980d38d7d58a1fd23a679132ff574", - "poussees": 16, - "horizon": 272, - "couloirs": 3, - "precedences": 15, - "separations": 5, - "budget_ergol": 1203, - "capacite_debit": 97 - }, - { - "nom": "coursia-orbital-m10-s11", - "empreinte_sha256": "da1baffdf3d2000a84a974386f8638bb73c69d56254de6e5143048a862dbf460", - "poussees": 20, - "horizon": 316, - "couloirs": 4, - "precedences": 19, - "separations": 9, - "budget_ergol": 1291, - "capacite_debit": 93 - }, - { - "nom": "coursia-orbital-m10-s22", - "empreinte_sha256": "e5a1544da80e6863c12e183402ef6f23ee4278dc88d7234624d432ee246de5b7", - "poussees": 20, - "horizon": 316, - "couloirs": 4, - "precedences": 19, - "separations": 12, - "budget_ergol": 1318, - "capacite_debit": 95 - }, - { - "nom": "coursia-orbital-m10-s33", - "empreinte_sha256": "22a14292de4032809a76da940343178657e34ae85c35f4c4557ddf73a38e0ce7", - "poussees": 20, - "horizon": 316, - "couloirs": 4, - "precedences": 19, - "separations": 6, - "budget_ergol": 1305, - "capacite_debit": 95 - }, - { - "nom": "coursia-orbital-m10-s44", - "empreinte_sha256": "f051cd599c24471a6ac28b27f65e608405cb1871d534bc7256a7211e9b85eb08", - "poussees": 20, - "horizon": 316, - "couloirs": 4, - "precedences": 19, - "separations": 11, - "budget_ergol": 1302, - "capacite_debit": 94 - }, - { - "nom": "coursia-orbital-m10-s55", - "empreinte_sha256": "57e93d6ec26298973663f057ea717bc84ee1e60814459ca05142fb699153d91d", - "poussees": 20, - "horizon": 316, - "couloirs": 4, - "precedences": 19, - "separations": 9, - "budget_ergol": 1297, - "capacite_debit": 94 - }, - { - "nom": "coursia-orbital-m12-s11", - "empreinte_sha256": "d403e0e32448c7c0f8345d9ba9d06f4fd82021ebd5dade213e696cba935eb9e0", - "poussees": 24, - "horizon": 360, - "couloirs": 4, - "precedences": 23, - "separations": 12, - "budget_ergol": 1657, - "capacite_debit": 94 - }, - { - "nom": "coursia-orbital-m12-s22", - "empreinte_sha256": "5a92c1051bba9e3b1eb730c59a7c95abddec0b48d3e04a94f651eba2469c67b7", - "poussees": 24, - "horizon": 360, - "couloirs": 4, - "precedences": 23, - "separations": 7, - "budget_ergol": 1673, - "capacite_debit": 96 - }, - { - "nom": "coursia-orbital-m12-s33", - "empreinte_sha256": "6dbd5ce52666769a27531ec1fe2feb99da8b7002a531569f5a2d38c036b34260", - "poussees": 24, - "horizon": 360, - "couloirs": 4, - "precedences": 23, - "separations": 15, - "budget_ergol": 1661, - "capacite_debit": 96 - }, - { - "nom": "coursia-orbital-m12-s44", - "empreinte_sha256": "fe770305c6fb5715bfe89a3a45b5b4f6148d5212a52a22c72ccc05ec63b3851f", - "poussees": 24, - "horizon": 360, - "couloirs": 4, - "precedences": 23, - "separations": 15, - "budget_ergol": 1670, - "capacite_debit": 96 - }, - { - "nom": "coursia-orbital-m12-s55", - "empreinte_sha256": "aab6978371a29600c0da0f0e129cdcf80fd33426581b971de24db7555e2be35b", - "poussees": 24, - "horizon": 360, - "couloirs": 4, - "precedences": 23, - "separations": 14, - "budget_ergol": 1658, - "capacite_debit": 95 - } - ] +{ + "application": "Research-08 — Ordonnancement d'assemblage orbital", + "distillation": { + "projet": "PrCon C4 — Orbital Assembly Scheduling", + "auteurs": [ + "Gurvan Estable", + "Joris Bely", + "Kévin Lubert" + ], + "pull_request": 53, + "commit": "e9a751bc440f1063fa36582aab8b91eec3bdfd55", + "snapshot": "b5f3f0351dbd41f3a76f047cf02e9c93e81192f3", + "licence": "MIT", + "note": "Reproduction CoursIA independante. Aucun module, texte, cellule, figure ni sortie du rendu source n'est repris. Discretisation volontairement distincte : les grandeurs ne sont pas comparables." + }, + "environnement": { + "python": "3.13.15", + "ortools": "9.15.6755", + "pandas": "3.0.5", + "matplotlib": "3.11.1", + "platform": "Windows-11-10.0.26300-SP0", + "slot_seconds": 900, + "dv_unit_mps": 5.0 + }, + "protocole": { + "grille": { + "tailles": [ + 4, + 6, + 8, + 10, + 12 + ], + "graines": [ + 11, + 22, + 33, + 44, + 55 + ], + "densite": 0.25, + "limite_s": 20.0 + }, + "sonde": { + "tailles": [ + 16, + 32, + 64, + 90 + ], + "graines": [ + 11, + 22, + 33 + ], + "densites": [ + 0.25, + 0.6 + ], + "limite_s": 10.0 + }, + "front": { + "cas": [ + "m6-s11", + "m8-s22", + "m10-s44", + "m12-s33" + ], + "relachements": [ + 0, + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24 + ] + } + }, + "instances": [ + { + "nom": "coursia-orbital-m4-s11", + "empreinte_sha256": "b2ae490d346323412aeca6a637793c8c77045bcb05037f5ac1fdd24cad70ea99", + "poussees": 8, + "horizon": 184, + "couloirs": 2, + "precedences": 7, + "separations": 0, + "budget_ergol": 464, + "capacite_debit": 91 + }, + { + "nom": "coursia-orbital-m4-s22", + "empreinte_sha256": "076b3bd96a20933423bf9f8c8756342d2dacf4767fe7f1ce9af81287866f4b15", + "poussees": 8, + "horizon": 184, + "couloirs": 2, + "precedences": 7, + "separations": 1, + "budget_ergol": 478, + "capacite_debit": 93 + }, + { + "nom": "coursia-orbital-m4-s33", + "empreinte_sha256": "4a01cc08497d2f0e4814bf2079cd2742c57a7fee740e5e250b01b1b9b735834b", + "poussees": 8, + "horizon": 184, + "couloirs": 2, + "precedences": 7, + "separations": 1, + "budget_ergol": 475, + "capacite_debit": 94 + }, + { + "nom": "coursia-orbital-m4-s44", + "empreinte_sha256": "63929a1ca6a9e931ee2b7f834d120a22535998b6a5c184efffe8695ff461187c", + "poussees": 8, + "horizon": 184, + "couloirs": 2, + "precedences": 7, + "separations": 0, + "budget_ergol": 462, + "capacite_debit": 92 + }, + { + "nom": "coursia-orbital-m4-s55", + "empreinte_sha256": "8e3fb414ccb77fbd4cea9e9a589ad4638cca282947904fb2f77b1c4a03c1e47a", + "poussees": 8, + "horizon": 184, + "couloirs": 2, + "precedences": 7, + "separations": 2, + "budget_ergol": 461, + "capacite_debit": 92 + }, + { + "nom": "coursia-orbital-m6-s11", + "empreinte_sha256": "9561a6bad9f3485d526b01c678090c096f2679dbc7d0055b095462536dc1c6f2", + "poussees": 12, + "horizon": 228, + "couloirs": 2, + "precedences": 11, + "separations": 4, + "budget_ergol": 818, + "capacite_debit": 94 + }, + { + "nom": "coursia-orbital-m6-s22", + "empreinte_sha256": "80cfbce022aff265c67398dff0348b6e3cebdc59ba0e6d635ce41c8924fac7b7", + "poussees": 12, + "horizon": 228, + "couloirs": 2, + "precedences": 11, + "separations": 3, + "budget_ergol": 843, + "capacite_debit": 96 + }, + { + "nom": "coursia-orbital-m6-s33", + "empreinte_sha256": "0da7820663568a8de4e19a7143814ac913c9fcabc9d788ca46945a7f207b0128", + "poussees": 12, + "horizon": 228, + "couloirs": 2, + "precedences": 11, + "separations": 2, + "budget_ergol": 836, + "capacite_debit": 97 + }, + { + "nom": "coursia-orbital-m6-s44", + "empreinte_sha256": "5d0af050f1f29418cf48e7c9bbffa9d43c1e6321cdd4a4658f92745e8e828648", + "poussees": 12, + "horizon": 228, + "couloirs": 2, + "precedences": 11, + "separations": 0, + "budget_ergol": 825, + "capacite_debit": 95 + }, + { + "nom": "coursia-orbital-m6-s55", + "empreinte_sha256": "6adc1e6e279ccddb15dbdb379d740a424e21e815239a309abd579bc6bdb06ba4", + "poussees": 12, + "horizon": 228, + "couloirs": 2, + "precedences": 11, + "separations": 1, + "budget_ergol": 816, + "capacite_debit": 95 + }, + { + "nom": "coursia-orbital-m8-s11", + "empreinte_sha256": "29361dc8b6b78a6cd911140c4be6a0bb00fcb21eacbaf4d3bce8484dd9cb53fd", + "poussees": 16, + "horizon": 272, + "couloirs": 3, + "precedences": 15, + "separations": 5, + "budget_ergol": 1208, + "capacite_debit": 96 + }, + { + "nom": "coursia-orbital-m8-s22", + "empreinte_sha256": "3c2fd6cd73e7e5a52a16b8e99bc47e9cf620338dde91d8a3c8e35e9bc75b91e8", + "poussees": 16, + "horizon": 272, + "couloirs": 3, + "precedences": 15, + "separations": 3, + "budget_ergol": 1231, + "capacite_debit": 98 + }, + { + "nom": "coursia-orbital-m8-s33", + "empreinte_sha256": "22db3908f076aefd8f8a7a4cc2edec14603e42d9dc29e80816f471873013011a", + "poussees": 16, + "horizon": 272, + "couloirs": 3, + "precedences": 15, + "separations": 6, + "budget_ergol": 1228, + "capacite_debit": 99 + }, + { + "nom": "coursia-orbital-m8-s44", + "empreinte_sha256": "42e8790ce236a2877b902bcf9a7afc7ca1960836147aa0210cb5b899984ac8fc", + "poussees": 16, + "horizon": 272, + "couloirs": 3, + "precedences": 15, + "separations": 8, + "budget_ergol": 1214, + "capacite_debit": 97 + }, + { + "nom": "coursia-orbital-m8-s55", + "empreinte_sha256": "33df73e03efc0780e39775c518538df45fa980d38d7d58a1fd23a679132ff574", + "poussees": 16, + "horizon": 272, + "couloirs": 3, + "precedences": 15, + "separations": 5, + "budget_ergol": 1203, + "capacite_debit": 97 + }, + { + "nom": "coursia-orbital-m10-s11", + "empreinte_sha256": "da1baffdf3d2000a84a974386f8638bb73c69d56254de6e5143048a862dbf460", + "poussees": 20, + "horizon": 316, + "couloirs": 4, + "precedences": 19, + "separations": 9, + "budget_ergol": 1291, + "capacite_debit": 93 + }, + { + "nom": "coursia-orbital-m10-s22", + "empreinte_sha256": "e5a1544da80e6863c12e183402ef6f23ee4278dc88d7234624d432ee246de5b7", + "poussees": 20, + "horizon": 316, + "couloirs": 4, + "precedences": 19, + "separations": 12, + "budget_ergol": 1318, + "capacite_debit": 95 + }, + { + "nom": "coursia-orbital-m10-s33", + "empreinte_sha256": "22a14292de4032809a76da940343178657e34ae85c35f4c4557ddf73a38e0ce7", + "poussees": 20, + "horizon": 316, + "couloirs": 4, + "precedences": 19, + "separations": 6, + "budget_ergol": 1305, + "capacite_debit": 95 + }, + { + "nom": "coursia-orbital-m10-s44", + "empreinte_sha256": "f051cd599c24471a6ac28b27f65e608405cb1871d534bc7256a7211e9b85eb08", + "poussees": 20, + "horizon": 316, + "couloirs": 4, + "precedences": 19, + "separations": 11, + "budget_ergol": 1302, + "capacite_debit": 94 + }, + { + "nom": "coursia-orbital-m10-s55", + "empreinte_sha256": "57e93d6ec26298973663f057ea717bc84ee1e60814459ca05142fb699153d91d", + "poussees": 20, + "horizon": 316, + "couloirs": 4, + "precedences": 19, + "separations": 9, + "budget_ergol": 1297, + "capacite_debit": 94 + }, + { + "nom": "coursia-orbital-m12-s11", + "empreinte_sha256": "d403e0e32448c7c0f8345d9ba9d06f4fd82021ebd5dade213e696cba935eb9e0", + "poussees": 24, + "horizon": 360, + "couloirs": 4, + "precedences": 23, + "separations": 12, + "budget_ergol": 1657, + "capacite_debit": 94 + }, + { + "nom": "coursia-orbital-m12-s22", + "empreinte_sha256": "5a92c1051bba9e3b1eb730c59a7c95abddec0b48d3e04a94f651eba2469c67b7", + "poussees": 24, + "horizon": 360, + "couloirs": 4, + "precedences": 23, + "separations": 7, + "budget_ergol": 1673, + "capacite_debit": 96 + }, + { + "nom": "coursia-orbital-m12-s33", + "empreinte_sha256": "6dbd5ce52666769a27531ec1fe2feb99da8b7002a531569f5a2d38c036b34260", + "poussees": 24, + "horizon": 360, + "couloirs": 4, + "precedences": 23, + "separations": 15, + "budget_ergol": 1661, + "capacite_debit": 96 + }, + { + "nom": "coursia-orbital-m12-s44", + "empreinte_sha256": "fe770305c6fb5715bfe89a3a45b5b4f6148d5212a52a22c72ccc05ec63b3851f", + "poussees": 24, + "horizon": 360, + "couloirs": 4, + "precedences": 23, + "separations": 15, + "budget_ergol": 1670, + "capacite_debit": 96 + }, + { + "nom": "coursia-orbital-m12-s55", + "empreinte_sha256": "aab6978371a29600c0da0f0e129cdcf80fd33426581b971de24db7555e2be35b", + "poussees": 24, + "horizon": 360, + "couloirs": 4, + "precedences": 23, + "separations": 14, + "budget_ergol": 1658, + "capacite_debit": 95 + } + ] } \ No newline at end of file diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/LICENSE b/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/LICENSE similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/LICENSE rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/LICENSE diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/SOURCE.md b/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/SOURCE.md similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/SOURCE.md rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/SOURCE.md diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/bounds_ladder.json b/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/bounds_ladder.json similarity index 90% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/bounds_ladder.json rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/bounds_ladder.json index a87a577316..4ed5fb3070 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/bounds_ladder.json +++ b/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/bounds_ladder.json @@ -1,269 +1,269 @@ -{ - "definition": { - "chemin_critique": "plus long chemin, ressources ignorees", - "borne_charge": "max_r plafond(travail total sur r / capacite de r), precedences ignorees", - "borne_combinee": "max des deux ; borne inferieure valide sans reference externe" - }, - "instances": [ - { - "chemin_critique": 12, - "borne_charge": 34, - "borne_combinee": 34, - "borne_solveur": 40, - "makespan": 40, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 17.6, - "borne_active": "charge", - "secondes": 0.566, - "densite": 0.1, - "graine": 0 - }, - { - "chemin_critique": 11, - "borne_charge": 31, - "borne_combinee": 31, - "borne_solveur": 34, - "makespan": 34, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 9.7, - "borne_active": "charge", - "secondes": 0.046, - "densite": 0.1, - "graine": 1 - }, - { - "chemin_critique": 13, - "borne_charge": 31, - "borne_combinee": 31, - "borne_solveur": 38, - "makespan": 38, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 22.6, - "borne_active": "charge", - "secondes": 0.065, - "densite": 0.1, - "graine": 2 - }, - { - "chemin_critique": 13, - "borne_charge": 29, - "borne_combinee": 29, - "borne_solveur": 40, - "makespan": 40, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 37.9, - "borne_active": "charge", - "secondes": 1.965, - "densite": 0.1, - "graine": 3 - }, - { - "chemin_critique": 20, - "borne_charge": 34, - "borne_combinee": 34, - "borne_solveur": 40, - "makespan": 40, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 17.6, - "borne_active": "charge", - "secondes": 0.036, - "densite": 0.18, - "graine": 0 - }, - { - "chemin_critique": 12, - "borne_charge": 31, - "borne_combinee": 31, - "borne_solveur": 36, - "makespan": 36, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 16.1, - "borne_active": "charge", - "secondes": 0.398, - "densite": 0.18, - "graine": 1 - }, - { - "chemin_critique": 20, - "borne_charge": 31, - "borne_combinee": 31, - "borne_solveur": 38, - "makespan": 38, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 22.6, - "borne_active": "charge", - "secondes": 0.029, - "densite": 0.18, - "graine": 2 - }, - { - "chemin_critique": 20, - "borne_charge": 29, - "borne_combinee": 29, - "borne_solveur": 43, - "makespan": 43, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 48.3, - "borne_active": "charge", - "secondes": 0.581, - "densite": 0.18, - "graine": 3 - }, - { - "chemin_critique": 25, - "borne_charge": 34, - "borne_combinee": 34, - "borne_solveur": 41, - "makespan": 41, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 20.6, - "borne_active": "charge", - "secondes": 0.028, - "densite": 0.28, - "graine": 0 - }, - { - "chemin_critique": 13, - "borne_charge": 31, - "borne_combinee": 31, - "borne_solveur": 37, - "makespan": 37, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 19.4, - "borne_active": "charge", - "secondes": 0.098, - "densite": 0.28, - "graine": 1 - }, - { - "chemin_critique": 26, - "borne_charge": 31, - "borne_combinee": 31, - "borne_solveur": 39, - "makespan": 39, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 25.8, - "borne_active": "charge", - "secondes": 0.03, - "densite": 0.28, - "graine": 2 - }, - { - "chemin_critique": 22, - "borne_charge": 29, - "borne_combinee": 29, - "borne_solveur": 43, - "makespan": 43, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 48.3, - "borne_active": "charge", - "secondes": 0.216, - "densite": 0.28, - "graine": 3 - }, - { - "chemin_critique": 29, - "borne_charge": 34, - "borne_combinee": 34, - "borne_solveur": 43, - "makespan": 43, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 26.5, - "borne_active": "charge", - "secondes": 0.028, - "densite": 0.4, - "graine": 0 - }, - { - "chemin_critique": 20, - "borne_charge": 31, - "borne_combinee": 31, - "borne_solveur": 37, - "makespan": 37, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 19.4, - "borne_active": "charge", - "secondes": 0.029, - "densite": 0.4, - "graine": 1 - }, - { - "chemin_critique": 26, - "borne_charge": 31, - "borne_combinee": 31, - "borne_solveur": 42, - "makespan": 42, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 35.5, - "borne_active": "charge", - "secondes": 0.031, - "densite": 0.4, - "graine": 2 - }, - { - "chemin_critique": 33, - "borne_charge": 29, - "borne_combinee": 33, - "borne_solveur": 48, - "makespan": 48, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 45.5, - "borne_active": "chemin critique", - "secondes": 0.038, - "densite": 0.4, - "graine": 3 - }, - { - "chemin_critique": 39, - "borne_charge": 34, - "borne_combinee": 39, - "borne_solveur": 45, - "makespan": 45, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 15.4, - "borne_active": "chemin critique", - "secondes": 0.028, - "densite": 0.55, - "graine": 0 - }, - { - "chemin_critique": 30, - "borne_charge": 31, - "borne_combinee": 31, - "borne_solveur": 41, - "makespan": 41, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 32.3, - "borne_active": "charge", - "secondes": 0.014, - "densite": 0.55, - "graine": 1 - }, - { - "chemin_critique": 27, - "borne_charge": 31, - "borne_combinee": 31, - "borne_solveur": 42, - "makespan": 42, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 35.5, - "borne_active": "charge", - "secondes": 0.03, - "densite": 0.55, - "graine": 2 - }, - { - "chemin_critique": 41, - "borne_charge": 29, - "borne_combinee": 41, - "borne_solveur": 48, - "makespan": 48, - "statut": "OPTIMAL", - "ecart_borne_combinee_pct": 17.1, - "borne_active": "chemin critique", - "secondes": 0.017, - "densite": 0.55, - "graine": 3 - } - ] +{ + "definition": { + "chemin_critique": "plus long chemin, ressources ignorees", + "borne_charge": "max_r plafond(travail total sur r / capacite de r), precedences ignorees", + "borne_combinee": "max des deux ; borne inferieure valide sans reference externe" + }, + "instances": [ + { + "chemin_critique": 12, + "borne_charge": 34, + "borne_combinee": 34, + "borne_solveur": 40, + "makespan": 40, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 17.6, + "borne_active": "charge", + "secondes": 1.047, + "densite": 0.1, + "graine": 0 + }, + { + "chemin_critique": 11, + "borne_charge": 31, + "borne_combinee": 31, + "borne_solveur": 34, + "makespan": 34, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 9.7, + "borne_active": "charge", + "secondes": 0.062, + "densite": 0.1, + "graine": 1 + }, + { + "chemin_critique": 13, + "borne_charge": 31, + "borne_combinee": 31, + "borne_solveur": 38, + "makespan": 38, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 22.6, + "borne_active": "charge", + "secondes": 0.093, + "densite": 0.1, + "graine": 2 + }, + { + "chemin_critique": 13, + "borne_charge": 29, + "borne_combinee": 29, + "borne_solveur": 40, + "makespan": 40, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 37.9, + "borne_active": "charge", + "secondes": 2.481, + "densite": 0.1, + "graine": 3 + }, + { + "chemin_critique": 20, + "borne_charge": 34, + "borne_combinee": 34, + "borne_solveur": 40, + "makespan": 40, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 17.6, + "borne_active": "charge", + "secondes": 0.045, + "densite": 0.18, + "graine": 0 + }, + { + "chemin_critique": 12, + "borne_charge": 31, + "borne_combinee": 31, + "borne_solveur": 36, + "makespan": 36, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 16.1, + "borne_active": "charge", + "secondes": 0.463, + "densite": 0.18, + "graine": 1 + }, + { + "chemin_critique": 20, + "borne_charge": 31, + "borne_combinee": 31, + "borne_solveur": 38, + "makespan": 38, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 22.6, + "borne_active": "charge", + "secondes": 0.027, + "densite": 0.18, + "graine": 2 + }, + { + "chemin_critique": 20, + "borne_charge": 29, + "borne_combinee": 29, + "borne_solveur": 43, + "makespan": 43, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 48.3, + "borne_active": "charge", + "secondes": 0.764, + "densite": 0.18, + "graine": 3 + }, + { + "chemin_critique": 25, + "borne_charge": 34, + "borne_combinee": 34, + "borne_solveur": 41, + "makespan": 41, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 20.6, + "borne_active": "charge", + "secondes": 0.027, + "densite": 0.28, + "graine": 0 + }, + { + "chemin_critique": 13, + "borne_charge": 31, + "borne_combinee": 31, + "borne_solveur": 37, + "makespan": 37, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 19.4, + "borne_active": "charge", + "secondes": 0.108, + "densite": 0.28, + "graine": 1 + }, + { + "chemin_critique": 26, + "borne_charge": 31, + "borne_combinee": 31, + "borne_solveur": 39, + "makespan": 39, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 25.8, + "borne_active": "charge", + "secondes": 0.03, + "densite": 0.28, + "graine": 2 + }, + { + "chemin_critique": 22, + "borne_charge": 29, + "borne_combinee": 29, + "borne_solveur": 43, + "makespan": 43, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 48.3, + "borne_active": "charge", + "secondes": 0.253, + "densite": 0.28, + "graine": 3 + }, + { + "chemin_critique": 29, + "borne_charge": 34, + "borne_combinee": 34, + "borne_solveur": 43, + "makespan": 43, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 26.5, + "borne_active": "charge", + "secondes": 0.029, + "densite": 0.4, + "graine": 0 + }, + { + "chemin_critique": 20, + "borne_charge": 31, + "borne_combinee": 31, + "borne_solveur": 37, + "makespan": 37, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 19.4, + "borne_active": "charge", + "secondes": 0.014, + "densite": 0.4, + "graine": 1 + }, + { + "chemin_critique": 26, + "borne_charge": 31, + "borne_combinee": 31, + "borne_solveur": 42, + "makespan": 42, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 35.5, + "borne_active": "charge", + "secondes": 0.03, + "densite": 0.4, + "graine": 2 + }, + { + "chemin_critique": 33, + "borne_charge": 29, + "borne_combinee": 33, + "borne_solveur": 48, + "makespan": 48, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 45.5, + "borne_active": "chemin critique", + "secondes": 0.031, + "densite": 0.4, + "graine": 3 + }, + { + "chemin_critique": 39, + "borne_charge": 34, + "borne_combinee": 39, + "borne_solveur": 45, + "makespan": 45, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 15.4, + "borne_active": "chemin critique", + "secondes": 0.014, + "densite": 0.55, + "graine": 0 + }, + { + "chemin_critique": 30, + "borne_charge": 31, + "borne_combinee": 31, + "borne_solveur": 41, + "makespan": 41, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 32.3, + "borne_active": "charge", + "secondes": 0.014, + "densite": 0.55, + "graine": 1 + }, + { + "chemin_critique": 27, + "borne_charge": 31, + "borne_combinee": 31, + "borne_solveur": 42, + "makespan": 42, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 35.5, + "borne_active": "charge", + "secondes": 0.031, + "densite": 0.55, + "graine": 2 + }, + { + "chemin_critique": 41, + "borne_charge": 29, + "borne_combinee": 41, + "borne_solveur": 48, + "makespan": 48, + "statut": "OPTIMAL", + "ecart_borne_combinee_pct": 17.1, + "borne_active": "chemin critique", + "secondes": 0.028, + "densite": 0.55, + "graine": 3 + } + ] } \ No newline at end of file diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/provenance.json b/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/provenance.json similarity index 94% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/provenance.json rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/provenance.json index 158362b8c0..12c7735e26 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app31-rcpsp-max/provenance.json +++ b/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/provenance.json @@ -1,106 +1,106 @@ -{ - "notebook": "Research-09-RCPSP-Max-Feasibility-Bounds-Python", - "objet": "RCPSP/max : faisabilite, circuits de poids positif, hierarchie de bornes", - "source_distillee": { - "auteurs": [ - "Arthur Gallier", - "Nicolas Naegelen" - ], - "projet": "B4 - Ordonnancement industriel", - "pull_request": 51, - "commit": "8b91a736", - "snapshot": "b5f3f0351dbd41f3a76f047cf02e9c93e81192f3", - "licence": "MIT" - }, - "environnement": { - "python": "3.13.14", - "platform": "Windows", - "ortools": "9.15.6755", - "numpy": "2.4.4", - "pandas": "2.3.3" - }, - "instances": "generees dans le notebook avec des graines fixes ; aucune instance externe redistribuee", - "observations_psplib": [ - { - "instance": "j30/j3010_1", - "sha256_16": "4fae4197791f2ee8", - "chemin_critique": 41, - "optimum_recalcule": 42, - "statut": "OPTIMAL", - "temps_verification_s": 0.06 - }, - { - "instance": "j30/j3010_10", - "sha256_16": "5b704056bfd6531d", - "chemin_critique": 37, - "optimum_recalcule": 41, - "statut": "OPTIMAL", - "temps_verification_s": 0.05 - }, - { - "instance": "j30/j3010_2", - "sha256_16": "108f260686ec9353", - "chemin_critique": 52, - "optimum_recalcule": 56, - "statut": "OPTIMAL", - "temps_verification_s": 0.04 - }, - { - "instance": "j30/j3010_3", - "sha256_16": "de28125e10ed4379", - "chemin_critique": 61, - "optimum_recalcule": 62, - "statut": "OPTIMAL", - "temps_verification_s": 0.03 - }, - { - "instance": "j30/j3010_4", - "sha256_16": "5526e62c26ae880e", - "chemin_critique": 53, - "optimum_recalcule": 58, - "statut": "OPTIMAL", - "temps_verification_s": 0.05 - }, - { - "instance": "j60/j6010_1", - "sha256_16": "9c400697268fac68", - "chemin_critique": 85, - "optimum_recalcule": 85, - "statut": "OPTIMAL", - "temps_verification_s": 0.05 - }, - { - "instance": "j60/j6010_10", - "sha256_16": "11793a5c0a25c3a1", - "chemin_critique": 73, - "optimum_recalcule": 73, - "statut": "OPTIMAL", - "temps_verification_s": 0.04 - }, - { - "instance": "j60/j6010_2", - "sha256_16": "bd14308ea049193b", - "chemin_critique": 62, - "optimum_recalcule": 62, - "statut": "OPTIMAL", - "temps_verification_s": 0.04 - }, - { - "instance": "j120/j12010_1", - "sha256_16": "99dd309553f879c2", - "chemin_critique": 111, - "optimum_recalcule": 111, - "statut": "OPTIMAL", - "temps_verification_s": 0.07 - }, - { - "instance": "j120/j12010_10", - "sha256_16": "6620267bb213583b", - "chemin_critique": 66, - "optimum_recalcule": 66, - "statut": "OPTIMAL", - "temps_verification_s": 0.08 - } - ], - "verification_source": "les 10 makespans publies par le banc d'essai source ont ete recalcules avec un modele independant : les 10 concordent, tous OPTIMAL" +{ + "notebook": "Research-09-RCPSP-Max-Feasibility-Bounds-Python", + "objet": "RCPSP/max : faisabilite, circuits de poids positif, hierarchie de bornes", + "source_distillee": { + "auteurs": [ + "Arthur Gallier", + "Nicolas Naegelen" + ], + "projet": "B4 - Ordonnancement industriel", + "pull_request": 51, + "commit": "8b91a736", + "snapshot": "b5f3f0351dbd41f3a76f047cf02e9c93e81192f3", + "licence": "MIT" + }, + "environnement": { + "python": "3.13.15", + "platform": "Windows", + "ortools": "9.15.6755", + "numpy": "2.4.6", + "pandas": "3.0.5" + }, + "instances": "generees dans le notebook avec des graines fixes ; aucune instance externe redistribuee", + "observations_psplib": [ + { + "instance": "j30/j3010_1", + "sha256_16": "4fae4197791f2ee8", + "chemin_critique": 41, + "optimum_recalcule": 42, + "statut": "OPTIMAL", + "temps_verification_s": 0.06 + }, + { + "instance": "j30/j3010_10", + "sha256_16": "5b704056bfd6531d", + "chemin_critique": 37, + "optimum_recalcule": 41, + "statut": "OPTIMAL", + "temps_verification_s": 0.05 + }, + { + "instance": "j30/j3010_2", + "sha256_16": "108f260686ec9353", + "chemin_critique": 52, + "optimum_recalcule": 56, + "statut": "OPTIMAL", + "temps_verification_s": 0.04 + }, + { + "instance": "j30/j3010_3", + "sha256_16": "de28125e10ed4379", + "chemin_critique": 61, + "optimum_recalcule": 62, + "statut": "OPTIMAL", + "temps_verification_s": 0.03 + }, + { + "instance": "j30/j3010_4", + "sha256_16": "5526e62c26ae880e", + "chemin_critique": 53, + "optimum_recalcule": 58, + "statut": "OPTIMAL", + "temps_verification_s": 0.05 + }, + { + "instance": "j60/j6010_1", + "sha256_16": "9c400697268fac68", + "chemin_critique": 85, + "optimum_recalcule": 85, + "statut": "OPTIMAL", + "temps_verification_s": 0.05 + }, + { + "instance": "j60/j6010_10", + "sha256_16": "11793a5c0a25c3a1", + "chemin_critique": 73, + "optimum_recalcule": 73, + "statut": "OPTIMAL", + "temps_verification_s": 0.04 + }, + { + "instance": "j60/j6010_2", + "sha256_16": "bd14308ea049193b", + "chemin_critique": 62, + "optimum_recalcule": 62, + "statut": "OPTIMAL", + "temps_verification_s": 0.04 + }, + { + "instance": "j120/j12010_1", + "sha256_16": "99dd309553f879c2", + "chemin_critique": 111, + "optimum_recalcule": 111, + "statut": "OPTIMAL", + "temps_verification_s": 0.07 + }, + { + "instance": "j120/j12010_10", + "sha256_16": "6620267bb213583b", + "chemin_critique": 66, + "optimum_recalcule": 66, + "statut": "OPTIMAL", + "temps_verification_s": 0.08 + } + ], + "verification_source": "les 10 makespans publies par le banc d'essai source ont ete recalcules avec un modele independant : les 10 concordent, tous OPTIMAL" } \ No newline at end of file diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/temporal_regimes.csv b/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/temporal_regimes.csv new file mode 100644 index 0000000000..180ea87695 --- /dev/null +++ b/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/temporal_regimes.csv @@ -0,0 +1,217 @@ +jeu,graine,lags,regime,statut,makespan,secondes,temoin +-3,0,6,T,circuit positif,,0.0,8-10-8 +-3,1,12,T,circuit positif,,0.0,10-11-10 +-3,2,8,T,circuit positif,,0.0,10-13-10 +-3,3,12,T,circuit positif,,0.0,7-10-7 +-3,4,13,T,circuit positif,,0.0,10-11-10 +-3,5,13,T,circuit positif,,0.0,10-13-10 +-3,6,13,T,circuit positif,,0.0,11-12-11 +-3,7,13,T,circuit positif,,0.0,6-11-6 +-3,8,17,T,circuit positif,,0.0,8-12-8 +-3,9,19,T,circuit positif,,0.0,11-13-11 +-3,10,13,T,circuit positif,,0.0,8-9-8 +-3,11,21,T,circuit positif,,0.0,11-13-11 +-3,12,17,T,circuit positif,,0.0,12-13-11-12 +-3,13,15,T,circuit positif,,0.0,7-8-7 +-3,14,11,T,circuit positif,,0.0,9-11-9 +-3,15,14,T,circuit positif,,0.0,9-11-9 +-3,16,21,T,circuit positif,,0.0,10-9-10 +-3,17,12,T,circuit positif,,0.0,7-13-7 +-3,18,14,T,circuit positif,,0.0,10-12-10 +-3,19,17,T,circuit positif,,0.0,8-9-8 +-3,20,18,T,circuit positif,,0.0,8-6-8 +-3,21,13,T,circuit positif,,0.0,8-12-8 +-3,22,10,T,circuit positif,,0.0,10-13-10 +-3,23,13,T,circuit positif,,0.0,8-11-8 +-2,0,6,T,circuit positif,,0.0,8-10-8 +-2,1,12,T,circuit positif,,0.0,10-11-10 +-2,2,8,T,circuit positif,,0.0,10-13-10 +-2,3,12,T,circuit positif,,0.0,7-10-7 +-2,4,13,T,circuit positif,,0.0,10-11-10 +-2,5,13,T,circuit positif,,0.0,10-13-10 +-2,6,13,T,circuit positif,,0.0,11-12-11 +-2,7,13,T,circuit positif,,0.0,6-11-6 +-2,8,17,T,circuit positif,,0.0,8-12-8 +-2,9,19,T,circuit positif,,0.0,11-13-11 +-2,10,13,T,circuit positif,,0.0,8-9-8 +-2,11,21,T,circuit positif,,0.0,11-13-11 +-2,12,17,T,circuit positif,,0.0,12-13-11-12 +-2,13,15,T,circuit positif,,0.0,7-8-7 +-2,14,11,T,circuit positif,,0.0,9-11-9 +-2,15,14,T,circuit positif,,0.0,9-11-9 +-2,16,21,T,circuit positif,,0.0,10-9-10 +-2,17,12,T,circuit positif,,0.0,7-13-7 +-2,18,14,T,circuit positif,,0.0,10-12-10 +-2,19,17,T,circuit positif,,0.0,8-9-8 +-2,20,18,T,circuit positif,,0.0,8-6-8 +-2,21,13,T,circuit positif,,0.0,8-12-8 +-2,22,10,T,circuit positif,,0.0,10-13-10 +-2,23,13,T,circuit positif,,0.0,8-11-8 +-1,0,6,T,circuit positif,,0.0,8-10-8 +-1,1,12,T,circuit positif,,0.0,10-11-10 +-1,2,8,T,circuit positif,,0.0,10-13-10 +-1,3,12,T,circuit positif,,0.0,7-10-7 +-1,4,13,T,circuit positif,,0.0,10-11-10 +-1,5,13,T,circuit positif,,0.0,10-13-10 +-1,6,13,T,circuit positif,,0.0,11-12-11 +-1,7,13,T,circuit positif,,0.0,6-11-6 +-1,8,17,T,circuit positif,,0.0,8-12-8 +-1,9,19,T,circuit positif,,0.0,11-13-11 +-1,10,13,T,circuit positif,,0.0,8-9-8 +-1,11,21,T,circuit positif,,0.0,11-13-11 +-1,12,17,T,circuit positif,,0.0,12-13-11-12 +-1,13,15,T,circuit positif,,0.0,7-8-7 +-1,14,11,T,circuit positif,,0.0,9-11-9 +-1,15,14,T,circuit positif,,0.0,9-11-9 +-1,16,21,T,circuit positif,,0.0,10-9-10 +-1,17,12,T,circuit positif,,0.0,7-13-7 +-1,18,14,T,circuit positif,,0.0,10-12-10 +-1,19,17,T,circuit positif,,0.0,8-9-8 +-1,20,18,T,circuit positif,,0.0,8-6-8 +-1,21,13,T,circuit positif,,0.0,8-12-8 +-1,22,10,T,circuit positif,,0.0,10-13-10 +-1,23,13,T,circuit positif,,0.0,8-11-8 +0,0,6,R,INFEASIBLE,,0.004877800005488098, +0,1,12,R,INFEASIBLE,,0.0020114000071771443, +0,2,8,R,INFEASIBLE,,0.0025470999826211482, +0,3,12,R,INFEASIBLE,,0.002203500014729798, +0,4,13,R,INFEASIBLE,,0.002130400011083111, +0,5,13,R,INFEASIBLE,,0.0030553000106010586, +0,6,13,R,INFEASIBLE,,0.0026282000180799514, +0,7,13,R,INFEASIBLE,,0.0025000000023283064, +0,8,17,R,INFEASIBLE,,0.0029725000204052776, +0,9,19,R,INFEASIBLE,,0.02789840000332333, +0,10,13,R,INFEASIBLE,,0.0023286000068765134, +0,11,21,R,INFEASIBLE,,0.0023318999737966806, +0,12,17,R,INFEASIBLE,,0.0024981999886222184, +0,13,15,R,INFEASIBLE,,0.0020985000010114163, +0,14,11,R,INFEASIBLE,,0.0024321999808307737, +0,15,14,R,INFEASIBLE,,0.0032282999891322106, +0,16,21,R,INFEASIBLE,,0.002691500005312264, +0,17,12,R,INFEASIBLE,,0.002427600004011765, +0,18,14,R,INFEASIBLE,,0.0023560000117868185, +0,19,17,R,INFEASIBLE,,0.0025338999985251576, +0,20,18,R,INFEASIBLE,,0.0024098000139929354, +0,21,13,R,INFEASIBLE,,0.0024630000116303563, +0,22,10,R,INFEASIBLE,,0.02153359999647364, +0,23,13,R,INFEASIBLE,,0.0023108999885153025, +1,0,6,R,INFEASIBLE,,0.002523500006645918, +1,1,12,R,INFEASIBLE,,0.0022702999995090067, +1,2,8,R,INFEASIBLE,,0.02110850001918152, +1,3,12,R,INFEASIBLE,,0.00237800000468269, +1,4,13,R,INFEASIBLE,,0.0022567000123672187, +1,5,13,R,INFEASIBLE,,0.026266400003805757, +1,6,13,R,INFEASIBLE,,0.0034576000180095434, +1,7,13,F,OPTIMAL,26.0,0.009286399988923222, +1,8,17,R,INFEASIBLE,,0.0021526000055018812, +1,9,19,R,INFEASIBLE,,0.02799199998844415, +1,10,13,R,INFEASIBLE,,0.003484000015305355, +1,11,21,R,INFEASIBLE,,0.0027116000128444284, +1,12,17,R,INFEASIBLE,,0.002673999988473952, +1,13,15,R,INFEASIBLE,,0.0017813000013120472, +1,14,11,R,INFEASIBLE,,0.0018274000030942261, +1,15,14,R,INFEASIBLE,,0.013239799998700619, +1,16,21,R,INFEASIBLE,,0.0023991999914869666, +1,17,12,R,INFEASIBLE,,0.0019899999897461385, +1,18,14,R,INFEASIBLE,,0.002109199995175004, +1,19,17,R,INFEASIBLE,,0.002273499994771555, +1,20,18,R,INFEASIBLE,,0.0023862999805714935, +1,21,13,R,INFEASIBLE,,0.0027076999831479043, +1,22,10,R,INFEASIBLE,,0.0280170000041835, +1,23,13,R,INFEASIBLE,,0.0027267000114079565, +2,0,6,F,OPTIMAL,41.0,0.01076689999899827, +2,1,12,R,INFEASIBLE,,0.014849099999992177, +2,2,8,R,INFEASIBLE,,0.03040700001292862, +2,3,12,R,INFEASIBLE,,0.002546600007917732, +2,4,13,R,INFEASIBLE,,0.002555500017479062, +2,5,13,R,INFEASIBLE,,0.1171502000070177, +2,6,13,R,INFEASIBLE,,0.0031968999828677624, +2,7,13,F,OPTIMAL,26.0,0.026086099998792633, +2,8,17,R,INFEASIBLE,,0.002491599996574223, +2,9,19,R,INFEASIBLE,,0.02800849999766797, +2,10,13,R,INFEASIBLE,,0.004099400015547872, +2,11,21,R,INFEASIBLE,,0.0032368999964091927, +2,12,17,R,INFEASIBLE,,0.01898950000759214, +2,13,15,R,INFEASIBLE,,0.00217349999002181, +2,14,11,R,INFEASIBLE,,0.002365699998335913, +2,15,14,R,INFEASIBLE,,0.02488530002301559, +2,16,21,R,INFEASIBLE,,0.003424299997277558, +2,17,12,R,INFEASIBLE,,0.002330999996047467, +2,18,14,R,INFEASIBLE,,0.0024081000010482967, +2,19,17,R,INFEASIBLE,,0.002963100007036701, +2,20,18,R,INFEASIBLE,,0.002510200021788478, +2,21,13,R,INFEASIBLE,,0.002522900002077222, +2,22,10,R,INFEASIBLE,,0.024620499985758215, +2,23,13,R,INFEASIBLE,,0.004011499986518174, +3,0,6,F,OPTIMAL,41.0,0.025123100000200793, +3,1,12,R,INFEASIBLE,,0.012895499996375293, +3,2,8,R,INFEASIBLE,,0.03085889999056235, +3,3,12,R,INFEASIBLE,,0.004120600002352148, +3,4,13,R,INFEASIBLE,,0.02506109999376349, +3,5,13,R,INFEASIBLE,,0.02873289998387918, +3,6,13,R,INFEASIBLE,,0.005003800004487857, +3,7,13,F,OPTIMAL,26.0,0.024654200009535998, +3,8,17,R,INFEASIBLE,,0.0040157999901566654, +3,9,19,R,INFEASIBLE,,0.0402200999960769, +3,10,13,R,INFEASIBLE,,0.013661300006788224, +3,11,21,R,INFEASIBLE,,0.0022547999978996813, +3,12,17,R,INFEASIBLE,,0.011067799990996718, +3,13,15,R,INFEASIBLE,,0.0019676000229083, +3,14,11,R,INFEASIBLE,,0.0026864000246860087, +3,15,14,R,INFEASIBLE,,0.040971800015540794, +3,16,21,R,INFEASIBLE,,0.0030414000211749226, +3,17,12,R,INFEASIBLE,,0.0019256000232417136, +3,18,14,R,INFEASIBLE,,0.002665499981958419, +3,19,17,R,INFEASIBLE,,0.03698229999281466, +3,20,18,R,INFEASIBLE,,0.003273800015449524, +3,21,13,R,INFEASIBLE,,0.002871899981983006, +3,22,10,R,INFEASIBLE,,0.02058689997647889, +3,23,13,R,INFEASIBLE,,0.0025400000158697367, +5,0,6,F,OPTIMAL,41.0,0.02744819998042658, +5,1,12,R,INFEASIBLE,,0.02969710002071224, +5,2,8,F,OPTIMAL,34.0,0.014154599979519844, +5,3,12,R,INFEASIBLE,,0.0025221999967470765, +5,4,13,R,INFEASIBLE,,0.028699200018309057, +5,5,13,R,INFEASIBLE,,0.03091639999183826, +5,6,13,F,OPTIMAL,37.0,0.02888980001443997, +5,7,13,F,OPTIMAL,25.0,0.02969450000091456, +5,8,17,R,INFEASIBLE,,0.03018639999208972, +5,9,19,R,INFEASIBLE,,0.07914070002152584, +5,10,13,R,INFEASIBLE,,0.04707349999807775, +5,11,21,R,INFEASIBLE,,0.004245099989930168, +5,12,17,R,INFEASIBLE,,0.03892910000286065, +5,13,15,R,INFEASIBLE,,0.007151199999498203, +5,14,11,R,INFEASIBLE,,0.11265890000504442, +5,15,14,R,INFEASIBLE,,0.18712419999064878, +5,16,21,R,INFEASIBLE,,0.04452259998652153, +5,17,12,R,INFEASIBLE,,0.002723800018429756, +5,18,14,R,INFEASIBLE,,0.02704089999315329, +5,19,17,F,OPTIMAL,35.0,0.02958020000369288, +5,20,18,R,INFEASIBLE,,0.004687599983299151, +5,21,13,R,INFEASIBLE,,0.02401839999947697, +5,22,10,R,INFEASIBLE,,0.029342499998165295, +5,23,13,R,INFEASIBLE,,0.0301270000054501, +8,0,6,F,OPTIMAL,40.0,0.04612280000583269, +8,1,12,F,OPTIMAL,36.0,0.026668100006645545, +8,2,8,F,OPTIMAL,34.0,0.030189599987352267, +8,3,12,R,INFEASIBLE,,0.030416199995670468, +8,4,13,F,OPTIMAL,32.0,0.030379100004211068, +8,5,13,F,OPTIMAL,42.0,0.012948300020070747, +8,6,13,F,OPTIMAL,33.0,0.030540600011590868, +8,7,13,F,OPTIMAL,23.0,0.03137759998207912, +8,8,17,F,OPTIMAL,32.0,0.029062099987640977, +8,9,19,F,OPTIMAL,34.0,0.02860839999630116, +8,10,13,F,OPTIMAL,36.0,0.014885000011418015, +8,11,21,R,INFEASIBLE,,0.0027874000079464167, +8,12,17,F,OPTIMAL,40.0,0.027725599997211248, +8,13,15,R,INFEASIBLE,,0.04519910001545213, +8,14,11,F,OPTIMAL,35.0,0.029204399994341657, +8,15,14,F,OPTIMAL,34.0,0.03076680001686327, +8,16,21,F,OPTIMAL,41.0,0.013430599996354431, +8,17,12,F,OPTIMAL,35.0,0.014206899999408051, +8,18,14,F,OPTIMAL,38.0,0.030891800008248538, +8,19,17,F,OPTIMAL,31.0,0.0283828999963589, +8,20,18,F,OPTIMAL,37.0,0.014562399999704212, +8,21,13,R,INFEASIBLE,,0.0629876000166405, +8,22,10,F,OPTIMAL,32.0,0.028490299999248236, +8,23,13,F,OPTIMAL,41.0,0.014253400004236028, diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app33-neural-diving/SOURCE.md b/MyIA.AI.Notebooks/Search/Applications/Research/data/app33-neural-diving/SOURCE.md similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app33-neural-diving/SOURCE.md rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app33-neural-diving/SOURCE.md diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app33-neural-diving/diving_results.csv b/MyIA.AI.Notebooks/Search/Applications/Research/data/app33-neural-diving/diving_results.csv similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Hybrid/data/app33-neural-diving/diving_results.csv rename to MyIA.AI.Notebooks/Search/Applications/Research/data/app33-neural-diving/diving_results.csv diff --git a/MyIA.AI.Notebooks/Search/README.md b/MyIA.AI.Notebooks/Search/README.md index 2fbd72841e..d06d099ccb 100644 --- a/MyIA.AI.Notebooks/Search/README.md +++ b/MyIA.AI.Notebooks/Search/README.md @@ -147,7 +147,7 @@ Problèmes du monde réel adaptés de projets étudiants. Chaque application est | 12 (C#) | [App-19-ProceduralGeneration-WFC-CSharp](Applications/CSP/App-19-ProceduralGeneration-WFC-CSharp.ipynb) | ~45 min | Twin C# du 12 : WFC from-scratch (entropie de Shannon + propagation AC-3 + backtracking) (See #4956) | Marathon | | 13 | [App-20-SudokuBenchmark-Python](Applications/CSP/App-20-SudokuBenchmark-Python.html) | ~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](Applications/CSP/App-20b-SudokuBenchmark-CSharp.html) | ~50 min | Twin C# du 13 : mêmes solveurs from-scratch en .NET, comparaison des écosystèmes | Jumeau .NET | -| 16 | [Research-05-CoveringArrays-Guarantee-Audit-Python](Applications/CSP/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb) | ~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) | +| 16 | [Research-05-CoveringArrays-Guarantee-Audit-Python](Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb) | ~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). @@ -209,7 +209,7 @@ CSP-8 Temporal ───> Temporal Planning, STP ## 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](Part4-Metaheuristics/README.md) comme territoire .NET natif (au-dessus de MetaGeneticSharp). Le **marathon parité [EPIC #4956](https://github.com/jsboige/CoursIA/issues/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. +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](Part4-Metaheuristics/README.md) comme territoire .NET natif (au-dessus de MetaGeneticSharp). Le **marathon parité [EPIC #4956](https://github.com/jsboige/CoursIA/issues/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-33 ont enrichi le dossier Applications — la galerie pédagogique (App-21 à App-27) et la sous-série de recherche ([`Research/`](Applications/README.md#applications-research-research), audits de garanties et distillations de preprints) ; le tableau distingue donc le cœur en binômes de l'inventaire actuel, dont les volumes sont portés par le catalogue (`CATALOG-STATUS`). ### Couverture actuelle @@ -218,7 +218,7 @@ Cette série est née **Python d'abord** pour son cœur pédagogique (recherche, | [Part1-Foundations](Part1-Foundations/) | 24 (Search-1 à Search-11, Search-2b, Search-2c, Search-03b à Search-03e, Search-09b à Search-09d, Search-11c, Search-11d, Search-12a, Search-13a) | Python (22) + Lean (Search-09d) + 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) | | [Part2-CSP](Part2-CSP/) | 9 (CSP-1 à CSP-9) | Python + .NET | **9 binômes complets** — marathon achevé, voir [bilan final](#marathon-epic-4956) | | [Part4-Metaheuristics](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](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 | +| [Applications](Applications/) | 20 cas cœur (App-1 à App-20) + galerie App-21–27 + sous-série Research (11 audits de garanties, volumes au catalogue) | Python + .NET | **20 binômes complets** + compagnons et audits App-21 à App-33 | | Racine | 0 | — | (aucun — voir [_archive/](_archive/) pour les anciens notebooks racine) | La série a atteint la **parité `Python ⇄ C#` complète** en juillet 2026 : le marathon [EPIC #4956](https://github.com/jsboige/CoursIA/issues/4956) a livré les jumeaux des trois parties curriculaires et des 20 applications, tous mergés sur `main`. Seule la [Partie 4](Part4-Metaheuristics/) reste mono-langage — par conception, puisqu'elle démontre l'ingénierie .NET native au-dessus de GeneticSharp. @@ -364,7 +364,7 @@ Search/ │ │ ├── App-14-ConnectFour-Adversarial.ipynb │ │ └── App-14-ConnectFour-Adversarial-CSharp.ipynb │ │ -│ ├── CSP/ # Applications CSP (31 notebooks : sélection ci-dessous, 18 Python + 13 C#) +│ ├── CSP/ # Applications CSP (28 notebooks : sélection ci-dessous, 15 Python + 13 C#) │ │ ├── App-1-NQueens.ipynb │ │ ├── App-2-GraphColoring.ipynb │ │ ├── App-3-NurseScheduling.ipynb @@ -384,7 +384,7 @@ Search/ │ │ ├── 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#) +│ ├── Hybrid/ # Métaheuristiques (16 notebooks : sélection ci-dessous, 11 Python + 5 C#) │ ├── App-9-EdgeDetection.ipynb │ ├── App-9b-EdgeDetection-CSharp.ipynb │ ├── App-10-Portfolio.ipynb @@ -399,6 +399,8 @@ Search/ │ ├── 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) │ +│ └── Research/ # Recherche : audits de garanties et distillations de preprints (11 notebooks Research-01..11, numérotation propre modèle Discrepancy/, arbitrage #17802) +│ ├── 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 │ diff --git a/MyIA.AI.Notebooks/Search/requirements.txt b/MyIA.AI.Notebooks/Search/requirements.txt index b34c677510..70c8d97e6b 100644 --- a/MyIA.AI.Notebooks/Search/requirements.txt +++ b/MyIA.AI.Notebooks/Search/requirements.txt @@ -34,7 +34,7 @@ optuna>=3.0 # Optimisation bayesienne d'hyperparametres (App-18 rustuna>=0.1.0 # Portage Rust officiel d'Optuna (App-18c ; statut experimental, bug best_trial connu — cf notebook) # Linear Programming -pulp>=2.8.0 # Linear programming with CBC, HiGHS solvers +pulp>=2.8.0,<4.0 # Linear programming with CBC, HiGHS solvers (<4.0 : LpVariable.dicts retiree en 4.0, consomme par Search-09 et Research-07) # Jupyter ipywidgets>=8.1 diff --git a/MyIA.AI.Notebooks/Search/search_lean/README.md b/MyIA.AI.Notebooks/Search/search_lean/README.md index 6eadca6af1..9436a06961 100644 --- a/MyIA.AI.Notebooks/Search/search_lean/README.md +++ b/MyIA.AI.Notebooks/Search/search_lean/README.md @@ -193,7 +193,7 @@ flowchart TD Le module [`Szpiro.lean`](Szpiro.lean) (miroir EN : [`Szpiro_en.lean`](Szpiro_en.lean)) est le sibling Lean du carnet -[`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Search/Research-10-Szpiro-Pasten-2026-Python.ipynb) : +[`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb) : Pasten 2026, *Improved Bounds for Szpiro's Conjecture* (arXiv 2609.17390) rend la borne `h(E) ≪ N·log log N` **inconditionnelle** — elle était connue sous GRH — et prouve `h(E) ≪_S N` pour les courbes semistables hors d'un ensemble fini. @@ -242,6 +242,6 @@ Phases suivantes (suivi #4048) : of Minimum Cost Paths*, IEEE Trans. Syst. Sci. Cybern. **4**(2), 1968. - H. Pasten, *Improved Bounds for Szpiro's Conjecture*, arXiv 2609.17390 (2026), archivé `G:\Mon Drive\MyIA\IA\Bibliographie IA\NumberTheory\` — carnet compagnon - [`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Search/Research-10-Szpiro-Pasten-2026-Python.ipynb). + [`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb). - S. Russell, P. Norvig, *Artificial Intelligence: A Modern Approach*, §3.5 (A* Search). - Notebooks compagnons : [`Search-02-Uninformed.ipynb`](../Part1-Foundations/Search-02-Uninformed.html), [`Search-03-Informed.ipynb`](../Part1-Foundations/Search-03-Informed.ipynb) (le notebook historique [`Exploration_non_informée_et_informée_intro.ipynb`](../_archive/Exploration_non_informée_et_informée_intro.ipynb) est archivé depuis 2026-07-03). diff --git a/MyIA.AI.Notebooks/Search/search_lean/Szpiro.lean b/MyIA.AI.Notebooks/Search/search_lean/Szpiro.lean index f8d1a9bd9e..55b86eb1e0 100644 --- a/MyIA.AI.Notebooks/Search/search_lean/Szpiro.lean +++ b/MyIA.AI.Notebooks/Search/search_lean/Szpiro.lean @@ -4,7 +4,7 @@ import Mathlib # Szpiro — ancrage Mathlib des bornes de Pasten 2026 (hommage à Serre) Sibling Lean du carnet -[`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Search/Research-10-Szpiro-Pasten-2026-Python.ipynb) +[`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb) (issue #16549, option A) : Pasten 2026, *Improved Bounds for Szpiro's Conjecture*, arXiv 2609.17390 (preprint, 261 Ko, archivé `Bibliographie IA\NumberTheory`). diff --git a/MyIA.AI.Notebooks/Search/search_lean/Szpiro_en.lean b/MyIA.AI.Notebooks/Search/search_lean/Szpiro_en.lean index c8b8097f0d..5d6aeddfc0 100644 --- a/MyIA.AI.Notebooks/Search/search_lean/Szpiro_en.lean +++ b/MyIA.AI.Notebooks/Search/search_lean/Szpiro_en.lean @@ -10,7 +10,7 @@ EN sibling files, both compile; namespace `Szpiro_en` (anti-collision with FR docstrings manually translated. Companion Lean file of the notebook -[`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Search/Research-10-Szpiro-Pasten-2026-Python.ipynb): +[`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb): Pasten 2026, *Improved Bounds for Szpiro's Conjecture*, arXiv 2609.17390 (preprint, archived under `Bibliographie IA\NumberTheory`). diff --git a/MyIA.AI.Notebooks/SymbolicAI/Lean/Langlands/02-monstrous-moonshine-invariant-j.ipynb b/MyIA.AI.Notebooks/SymbolicAI/Lean/Langlands/02-monstrous-moonshine-invariant-j.ipynb index f946b591b7..51934cad88 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/Lean/Langlands/02-monstrous-moonshine-invariant-j.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/Lean/Langlands/02-monstrous-moonshine-invariant-j.ipynb @@ -929,7 +929,7 @@ "- 01 — Formes modulaires : de $SL_2(\\mathbb{Z})$ aux opérateurs de Hecke (notebook 01, PR #17972) — le socle calculatoire ;\n", "- [Lean-16a — Conway: Man and Work](../Lean-16a-Conway-Man-and-Work.ipynb) — le contexte biographique (Conway a co-signé la conjecture et nommé « moonshine ») ;\n", "- [Serre100 — 07 : zéros de fonctions $L$, gaps GUE](../Serre100/07-zeros-fonctions-l-gaps-gue.ipynb) — la face analytique ;\n", - "- [App-32 : Szpiro–Pasten 2026](../../../Search/Applications/Search/Research-10-Szpiro-Pasten-2026-Python.ipynb) — une correspondance de Jacquet–Langlands qui contraint un invariant calculable.\n", + "- [Research-10 : Szpiro–Pasten 2026](../../../Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb) — une correspondance de Jacquet–Langlands qui contraint un invariant calculable.\n", "\n", "**Sources** : Conway & Norton, *Monstrous Moonshine*, Bull. LMS **11** (1979) ; Borcherds, *Monstrous moonshine and monstrous Lie superalgebras*, Invent. Math. **109** (1992) ; Frenkel, Lepowsky & Meurman, *Vertex Operator Algebras and the Monster*, Academic Press (1988) ; Diamond & Shurman, *A First Course in Modular Forms* (ch. 1) ; Serre, *A Course in Arithmetic* (ch. VII). Récit : Margaret Wertheim, « Hunting a Mathematical Snark: The sublime symmetry of the Monster », *Cabinet Magazine* n° 34 (2009), [cabinetmagazine.org/issues/34/wertheim.php](https://www.cabinetmagazine.org/issues/34/wertheim.php) ; Adam Goucher, « An attempt to understand the Monster group », *cp4space* (29/11/2020), [cp4space.hatsya.com](https://cp4space.hatsya.com/2020/11/29/an-attempt-to-understand-the-monster-group/)\n", "\n", diff --git a/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-27-EdgeColoring-Tutte-Companion.ipynb b/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-27-EdgeColoring-Tutte-Companion.ipynb index 2c6814ce1f..2d32a40c08 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-27-EdgeColoring-Tutte-Companion.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-27-EdgeColoring-Tutte-Companion.ipynb @@ -16,7 +16,7 @@ "source": [ "# Lean-27 : coloration d'arêtes et conjecture de Tutte — compagnon formel\n", "\n", - "Compagnon **formel** du notebook Python [`Research-01-EdgeColoring-Tutte-Python`](../../Search/Applications/CSP/Research-01-EdgeColoring-Tutte-Python.ipynb) (même mandat, issue #13031) : ici, les définitions sont écrites **en Lean 4 sur `Mathlib.Combinatorics.SimpleGraph`** et interrogées par le compilateur (`#check`, `#eval`, `decide`). Les sorties de ce notebook sont des sorties du compilateur Lean, pas de la prose à propos de Lean.\n", + "Compagnon **formel** du notebook Python [`Research-01-EdgeColoring-Tutte-Python`](../../Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb) (même mandat, issue #13031) : ici, les définitions sont écrites **en Lean 4 sur `Mathlib.Combinatorics.SimpleGraph`** et interrogées par le compilateur (`#check`, `#eval`, `decide`). Les sorties de ce notebook sont des sorties du compilateur Lean, pas de la prose à propos de Lean.\n", "\n", "**Navigation** : [<< Lean-26 Munkres](Lean-26-Munkres-Tribute.ipynb) | [Index](README.md)\n", "\n", @@ -903,7 +903,7 @@ "1. **La planarité n'est pas dans Mathlib.** Notre `IsApexRelativeTo` prend le prédicat de planarité comme **paramètre** `P` — honnête, mais tant que `P` n'est pas instancié, l'énoncé « cubique + sans pont + apex ⇒ 3-colorable » reste un schéma. Formaliser la planarité (via les embeddings combinatoires ou les matroïdes graphiques) est un sous-projet en soi.\n", "2. **La preuve est un programme, pas un lemme.** Même avec la planarité, la preuve du papier combine un ensemble de réductibilité vérifié par ordinateur et une phase de déchargement — exactement la structure de la preuve des quatre couleurs, dont la formalisation (Gonthier, 2005) a pris des années-homme.\n", "\n", - "Ce que ce compagnon laisse au lecteur est donc la **grammaire** du théorème : `IsCubic`, `Edge3Colorable`, `IsApexRelativeTo`, un Petersen exécutable, et l'équivalence de Tutte (`SimpleGraph.tutte`) comme racine Mathlib du fil couplages. Le notebook Python compagnon ([App-22](../../Search/Applications/CSP/Research-01-EdgeColoring-Tutte-Python.ipynb)) porte, lui, la vérification empirique à large échantillon (48 graphes, 0 violation).\n", + "Ce que ce compagnon laisse au lecteur est donc la **grammaire** du théorème : `IsCubic`, `Edge3Colorable`, `IsApexRelativeTo`, un Petersen exécutable, et l'équivalence de Tutte (`SimpleGraph.tutte`) comme racine Mathlib du fil couplages. Le notebook Python compagnon ([Research-01](../../Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb)) porte, lui, la vérification empirique à large échantillon (48 graphes, 0 violation).\n", "\n", "## Exercices\n", "\n", diff --git a/MyIA.AI.Notebooks/SymbolicAI/Lean/README.md b/MyIA.AI.Notebooks/SymbolicAI/Lean/README.md index 88ecee5365..5737890ca7 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/Lean/README.md +++ b/MyIA.AI.Notebooks/SymbolicAI/Lean/README.md @@ -159,7 +159,7 @@ Tous les notebooks incluent une **barre de navigation** en haut et en bas permet | 24b | [Lean-24b-Confiance-Preuves-Native](Lean-24b-Confiance-Preuves-Native.ipynb) | Compagnon **natif** (kernel `lean4-wsl`, lake `mathlib_examples`) sur la fiabilité d'un certificat formel, piste Dougherty/von Hippel 2026 (*Lies, Damned Lies, and Proofs* — « ce qui rend une preuve formelle fiable ») : mis-définition rendant la preuve trivialement vraie (`DivPar` → `True` vs la vraie divisibilité avec témoin), axiomes de secours mesurés par `#print axioms` (`sorryAx` transitif, `native_decide`, `Classical.choice` whitelisté par nom), implosion depuis `False` (0 axiome), et orthogonalité certificat-vs-headline (mêmes axiomes, fidélités opposées) — cellules code exécutées sans erreur, 3 exercices | 30 min | | 25 | [Lean-25-Coherence-et-Temoin](Lean-25-Coherence-et-Temoin.ipynb) | Cohérence de de Finetti et témoin (Dutch book) : miroir Python **exact** (`fractions.Fraction`) du lake `decision_theory_lean` — un livret (+1,+1,−1,−1) encaisse l'écart d'inclusion-exclusion uniformément dans les 4 états, balayage borné exhaustif (390 625 combinaisons) qui certifie l'absence de livre sur le système réparé, stabilité affine vNM mesurée (0 divergence pour 3u+2 contre 124 pour u² sur les 2145 paires de 66 loteries du simplexe) | 40 min | | 26 | [Lean-26-Munkres-Tribute](Lean-26-Munkres-Tribute.ipynb) | Hommage à James R. Munkres (1930-2026), le cours 18.901 dans Mathlib en kernel **natif** `lean4-wsl`, exécuté sur le lake `mathlib_examples` (environnement d'exécution Mathlib, cf. [`mathlib_examples/`](mathlib_examples/)) : les cinq chapitres du manuel *Topology* — axiomes (`IsOpen`), adhérence/intérieur (`nhds`, dualités §17 ex. 6), continuité (`continuous_def` = Munkres §18.1), T2/compacité, connexité — chaque notion interrogée par `#check`/`example`/`#print axioms` (0 axiome), 3 exercices `sorry` | 30 min | -| 27 | [Lean-27-EdgeColoring-Tutte-Companion](Lean-27-EdgeColoring-Tutte-Companion.ipynb) | Compagnon **natif** (kernel `lean4-wsl`) du notebook [App-22](../../Search/Applications/CSP/Research-01-EdgeColoring-Tutte-Python.ipynb) (théorème apex arXiv 2608.22870, #13031) : définitions `IsCubic`/`Edge3Colorable`/`IsApexRelativeTo` posées sur `SimpleGraph` (absentes de Mathlib, vérifié), Petersen = Kneser KG(5,2) via `SimpleGraph.mk'` — 10 sommets, 15 arêtes, cubique prouvés par `decide`, backtracking `#eval` qui certifie l'absence de toute 3-coloration d'arêtes (`0`) avec contrôle positif K4 (`6`), ancrage `SimpleGraph.tutte` | 35 min | +| 27 | [Lean-27-EdgeColoring-Tutte-Companion](Lean-27-EdgeColoring-Tutte-Companion.ipynb) | Compagnon **natif** (kernel `lean4-wsl`) du notebook [Research-01](../../Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb) (théorème apex arXiv 2608.22870, #13031) : définitions `IsCubic`/`Edge3Colorable`/`IsApexRelativeTo` posées sur `SimpleGraph` (absentes de Mathlib, vérifié), Petersen = Kneser KG(5,2) via `SimpleGraph.mk'` — 10 sommets, 15 arêtes, cubique prouvés par `decide`, backtracking `#eval` qui certifie l'absence de toute 3-coloration d'arêtes (`0`) avec contrôle positif K4 (`6`), ancrage `SimpleGraph.tutte` | 35 min | | 28 | [Lean-28-Complex-Structure-S6](Lean-28-Complex-Structure-S6.ipynb) | Le problème de Hopf résolu : une structure complexe intégrable sur S⁶ (énoncé `Mathoverflow1973` de Formal Conjectures) — digestion du fil constructif (triangle (3,4,∞), accouplement de Shioda ⟨P,P⟩=1/6 calculé, transformations logarithmiques 3 et 4, remplissage de Mumford dP₆, reconnaissance Hurewicz→Smale→Kervaire–Milnor) avec deux invariants **calculés** (\|π₁\| = \|4m+3n\| par forme normale de Smith, χ = 2), reproduction **réelle** du dépôt piné `plby/HopfProblem` via `hopf_s6_reproduction.py` (248 818 lignes compilées en 1154 s, 0 sorry/0 axiom, comparator double kernel Lean+nanoda : *« Your solution is okay! »*, axiomes [propext, Classical.choice, Quot.sound]) et attribution différenciée (manuscrit écrit par Claude/communiqué par Alpöge, exposition Engel avec caveat, code Lean majoritairement Codex) | 45 min | | 29 | [Lean-29-Hecke-Operators-Native](Lean-29-Hecke-Operators-Native.ipynb) | Compagnon **natif** (kernel `lean4-wsl`) du lake `hecke_lean` (port pédagogique de `anthropics/fermats-last-theorem`, Apache-2.0, toolchain pinée `leanprover/lean4:v4.33.0`) : les opérateurs de Hecke T_p et U_p sur le demi-plan supérieur — représentants γ_{p,j} et partie diagonale, action de slash et ses deux comportements opposés, formule des coefficients a(np) + p^{k−1}·a(n/p) portée par `coeffHeckeT` — chaque déclaration interrogée par `#check`/`#print axioms` exécutés in-kernel (0 erreur), 3 exercices | 40 min | | 30 | [Lean-30-FormalGroups-Native](Lean-30-FormalGroups-Native.ipynb) | Compagnon **natif** (kernel `lean4-wsl`) du lake `formal_groups_lean` (port de `anthropics/fermats-last-theorem`, Apache-2.0, toolchain pinée `leanprover/lean4:v4.33.0`) : les groupes formels multivariés à travers les quatre modules `Basic`/`Hom`/`Additive`/`Iterates` — structure `MvFormalGroup` (neutre, partie linéaire, associativité), commutativité et substitution sûre, morphismes `Hom` et changement d'anneau, loi additive `addMv`, itérés `nthSeries`/`linearPart`/`FiniteHeight` — `#check`/`#print axioms` exécutés in-kernel (0 erreur), 3 exercices | 40 min | diff --git a/scripts/tests/baseline_nb_nav_chain.json b/scripts/tests/baseline_nb_nav_chain.json index 01137e7a3f..e42a0bf52b 100644 --- a/scripts/tests/baseline_nb_nav_chain.json +++ b/scripts/tests/baseline_nb_nav_chain.json @@ -1223,7 +1223,7 @@ { "kind": "orphan_entry", "notebook": "MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb", - "series": "MyIA.AI.Notebooks/Search/Applications/CSP" + "series": "MyIA.AI.Notebooks/Search/Applications/Research" }, { "kind": "orphan_entry", @@ -1268,7 +1268,7 @@ { "kind": "orphan_entry", "notebook": "MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb", - "series": "MyIA.AI.Notebooks/Search/Applications/Hybrid" + "series": "MyIA.AI.Notebooks/Search/Applications/Research" }, { "kind": "orphan_entry", @@ -1278,17 +1278,17 @@ { "kind": "orphan_entry", "notebook": "MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb", - "series": "MyIA.AI.Notebooks/Search/Applications/Hybrid" + "series": "MyIA.AI.Notebooks/Search/Applications/Research" }, { "kind": "orphan_entry", "notebook": "MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb", - "series": "MyIA.AI.Notebooks/Search/Applications/Hybrid" + "series": "MyIA.AI.Notebooks/Search/Applications/Research" }, { "kind": "orphan_entry", "notebook": "MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb", - "series": "MyIA.AI.Notebooks/Search/Applications/Hybrid" + "series": "MyIA.AI.Notebooks/Search/Applications/Research" }, { "kind": "orphan_entry", @@ -1303,7 +1303,7 @@ { "kind": "orphan_entry", "notebook": "MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb", - "series": "MyIA.AI.Notebooks/Search/Applications/Search" + "series": "MyIA.AI.Notebooks/Search/Applications/Research" }, { "kind": "orphan_entry", From 018712181c8077314c35e4910b2432a296bfb810 Mon Sep 17 00:00:00 2001 From: jsboige Date: Mon, 5 Oct 2026 02:33:05 +0200 Subject: [PATCH 4/8] rename(#16231): nav-chain reaparee + compteurs prose delegues R02 prev/next memes-dossier (2 link_404), aretes galerie App-20->App-21 et App-22-Algo->App-23-PRESENT (la queue partie vers Research laissait les queues galerie non couvertes par BFS), compteurs notebooks retires de l'arbre README (#9377 : supprimer la mesure, garder le predicat). nav-chain --check rc=0. See #17802 Co-Authored-By: Claude Sonnet 5.5 --- .../Applications/CSP/App-20-SudokuBenchmark-Python.ipynb | 2 +- .../Hybrid/App-22-AlgorithmSelection-Python.ipynb | 2 +- .../Research/Research-02-Factorio-Balancer-Python.ipynb | 2 +- MyIA.AI.Notebooks/Search/README.md | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/MyIA.AI.Notebooks/Search/Applications/CSP/App-20-SudokuBenchmark-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/CSP/App-20-SudokuBenchmark-Python.ipynb index c060aca55c..be1db1d06e 100644 --- a/MyIA.AI.Notebooks/Search/Applications/CSP/App-20-SudokuBenchmark-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/CSP/App-20-SudokuBenchmark-Python.ipynb @@ -16,7 +16,7 @@ "source": [ "# App-20 — Benchmark comparatif des solveurs Sudoku Python\n", "\n", - "[← Recherche](../README.md) | [↑ Search/Applications](../README.md)\n", + "[← Recherche](../README.md) | [↑ Search/Applications](../README.md) | [App-21 VoiceLeading >>](App-21-VoiceLeading.ipynb)\n", "\n", "Quatre solveurs, un même problème NP-complet, des compromis différents. Ce notebook deplace le curseur de la serie *Search* : on ne presente plus un solveur a la fois, on les **fait courir ensemble** sur un banc commun (Easy / Medium / Hard) pour faire apparaitre ce que chaque algorithme optimise reellement.\n", "\n", diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-22-AlgorithmSelection-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-22-AlgorithmSelection-Python.ipynb index 4242e2b985..1c1d11c716 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-22-AlgorithmSelection-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-22-AlgorithmSelection-Python.ipynb @@ -16,7 +16,7 @@ "source": [ "# App-22 — Sélection empirique d'algorithmes : trois jeux, 13 familles conceptuelles, 14 étiquettes mesurées\n", "\n", - "[← Search](../../README.md) | [↑ Applications](../README.md) | [<< App-21 VoiceLeading](../CSP/App-21-VoiceLeading.ipynb)\n", + "[← Search](../../README.md) | [↑ Applications](../README.md) | [<< App-21 VoiceLeading](../CSP/App-21-VoiceLeading.ipynb) | [App-23 PRESENT >>](App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb)\n", "\n", "## Hommage à un travail étudiant\n", "\n", diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb index c6b361fa27..21e33a4681 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb @@ -52,7 +52,7 @@ "source": [ "# Research-02 - Factorio Belt Balancer (CP-SAT borne)\n", "\n", - "**Navigation** : [<< App-22 EdgeColoring Tutte](../CSP/Research-01-EdgeColoring-Tutte-Python.ipynb) | [Index](../README.md) | [App-26 Covering Arrays >>](../CSP/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb)\n", + "**Navigation** : [<< Research-01 EdgeColoring Tutte](Research-01-EdgeColoring-Tutte-Python.ipynb) | [Index](../README.md) | [Research-05 Covering Arrays >>](Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb)\n", "\n", "## Belt balancer Factorio : MIP continu vs CP-SAT discret sur cas borne\n", "\n", diff --git a/MyIA.AI.Notebooks/Search/README.md b/MyIA.AI.Notebooks/Search/README.md index d06d099ccb..d62d98c39d 100644 --- a/MyIA.AI.Notebooks/Search/README.md +++ b/MyIA.AI.Notebooks/Search/README.md @@ -218,7 +218,7 @@ Cette série est née **Python d'abord** pour son cœur pédagogique (recherche, | [Part1-Foundations](Part1-Foundations/) | 24 (Search-1 à Search-11, Search-2b, Search-2c, Search-03b à Search-03e, Search-09b à Search-09d, Search-11c, Search-11d, Search-12a, Search-13a) | Python (22) + Lean (Search-09d) + 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) | | [Part2-CSP](Part2-CSP/) | 9 (CSP-1 à CSP-9) | Python + .NET | **9 binômes complets** — marathon achevé, voir [bilan final](#marathon-epic-4956) | | [Part4-Metaheuristics](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](Applications/) | 20 cas cœur (App-1 à App-20) + galerie App-21–27 + sous-série Research (11 audits de garanties, volumes au catalogue) | Python + .NET | **20 binômes complets** + compagnons et audits App-21 à App-33 | +| [Applications](Applications/) | 20 cas cœur (App-1 à App-20) + galerie App-21–27 + sous-série Research (audits de garanties, volumes au catalogue) | Python + .NET | **20 binômes complets** + compagnons et audits App-21 à App-33 | | Racine | 0 | — | (aucun — voir [_archive/](_archive/) pour les anciens notebooks racine) | La série a atteint la **parité `Python ⇄ C#` complète** en juillet 2026 : le marathon [EPIC #4956](https://github.com/jsboige/CoursIA/issues/4956) a livré les jumeaux des trois parties curriculaires et des 20 applications, tous mergés sur `main`. Seule la [Partie 4](Part4-Metaheuristics/) reste mono-langage — par conception, puisqu'elle démontre l'ingénierie .NET native au-dessus de GeneticSharp. @@ -364,7 +364,7 @@ Search/ │ │ ├── App-14-ConnectFour-Adversarial.ipynb │ │ └── App-14-ConnectFour-Adversarial-CSharp.ipynb │ │ -│ ├── CSP/ # Applications CSP (28 notebooks : sélection ci-dessous, 15 Python + 13 C#) +│ ├── CSP/ # Applications CSP (sélection ci-dessous, Python + jumeaux C#) │ │ ├── App-1-NQueens.ipynb │ │ ├── App-2-GraphColoring.ipynb │ │ ├── App-3-NurseScheduling.ipynb @@ -384,7 +384,7 @@ Search/ │ │ ├── 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 (16 notebooks : sélection ci-dessous, 11 Python + 5 C#) +│ ├── Hybrid/ # Métaheuristiques (sélection ci-dessous, Python + jumeaux C#) │ ├── App-9-EdgeDetection.ipynb │ ├── App-9b-EdgeDetection-CSharp.ipynb │ ├── App-10-Portfolio.ipynb @@ -399,7 +399,7 @@ Search/ │ ├── 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) │ -│ └── Research/ # Recherche : audits de garanties et distillations de preprints (11 notebooks Research-01..11, numérotation propre modèle Discrepancy/, arbitrage #17802) +│ └── Research/ # Recherche : audits de garanties et distillations de preprints (numérotation propre Research-01..NN, modèle Discrepancy/, arbitrage #17802) │ ├── 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 From 4f7dcf513c26cbc49b33fac62ea9fa89d5985cf3 Mon Sep 17 00:00:00 2001 From: jsboige Date: Mon, 5 Oct 2026 02:54:21 +0200 Subject: [PATCH 5/8] rename(#16231): attestation twin App-20 apres arete nav markdown-only Co-Authored-By: Claude Sonnet 5.5 --- ...5-po-2027-markdown-only-nav-edge-App-20-App-21-des.yaml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 scripts/notebook_tools/twin_pairs.d/app-20-sudokubenchmark/0014-2026-10-05-po-2027-markdown-only-nav-edge-App-20-App-21-des.yaml diff --git a/scripts/notebook_tools/twin_pairs.d/app-20-sudokubenchmark/0014-2026-10-05-po-2027-markdown-only-nav-edge-App-20-App-21-des.yaml b/scripts/notebook_tools/twin_pairs.d/app-20-sudokubenchmark/0014-2026-10-05-po-2027-markdown-only-nav-edge-App-20-App-21-des.yaml new file mode 100644 index 0000000000..0e8660e7d4 --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/app-20-sudokubenchmark/0014-2026-10-05-po-2027-markdown-only-nav-edge-App-20-App-21-des.yaml @@ -0,0 +1,7 @@ +date: '2026-10-05' +by: 'po-2027 markdown-only nav edge App-20->App-21 (descente Research #17802), contenu + pedagogique inchang' +python_sha: be1db1d06effbbe51045cc5958f3e43711dc3e1b +csharp_sha: 57e00928c0f5574396e391c52a016c1900e44209 +content_python_sha: dcae1990b2f60196ff384b412f73eb19191b9a6d1bdbb938d4158742fc7e791f +content_csharp_sha: 7887bee7640cab42ac3f89db451e31732ec74c586150c0eaa9bdce6ce6ed79e6 From 243c8634c189978616c04095c7e90a80adc3fa64 Mon Sep 17 00:00:00 2001 From: jsboige Date: Mon, 5 Oct 2026 03:28:56 +0200 Subject: [PATCH 6/8] fix(search,#17802): liens README vers les carnets Research rendus (.ipynb -> .html) La descente a place les 11 carnets sous `Search/Applications/Research/`, subtree rendu par Quarto (`_quarto.yml`). Les README qui les lient en `.ipynb` produisent donc une page brute 404 sur Pages : l'organe `readme-ipynb-links-guard` rougit sur 14 violations NOUVELLES (comparaison base vs tete). Correction chirurgicale : seules les 14 cibles introduites par la descente sont converties (23 occurrences, 4 README), jamais le backlog historique de 1752 violations -- celui-la reste du sweep par famille en aval (#18911, acceptance 2). Co-Authored-By: Claude Sonnet 5.5 --- .../Search/Applications/README.md | 38 +++++++++---------- MyIA.AI.Notebooks/Search/README.md | 2 +- .../Search/search_lean/README.md | 4 +- MyIA.AI.Notebooks/SymbolicAI/Lean/README.md | 2 +- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/MyIA.AI.Notebooks/Search/Applications/README.md b/MyIA.AI.Notebooks/Search/Applications/README.md index 35971ba32d..eb36349442 100644 --- a/MyIA.AI.Notebooks/Search/Applications/README.md +++ b/MyIA.AI.Notebooks/Search/Applications/README.md @@ -165,17 +165,17 @@ La queue du dossier, et sa frontière avec la recherche : onze carnets qui ne tr | # | Notebook | Durée | Contenu | Source | |---|----------|-------|---------|--------| -| 1 | [Research-01-EdgeColoring-Tutte-Python](Research/Research-01-EdgeColoring-Tutte-Python.ipynb) | ~45 min | Coloration d'arêtes cubiques : Vizing, Petersen, ponts, graphes apex et CP-SAT — vérification empirique d'un théorème récent (arXiv 2608.22870) | Nouveau | -| 2 | [Research-02-Factorio-Balancer-Python](Research/Research-02-Factorio-Balancer-Python.ipynb) | ~35 min | Belt balancer Factorio : MIP continu vs CP-SAT discret sur cas borné, N×N throughput-unlimited | Distillation Venturini 2024 | -| 3 | [Research-03-MAPF-Guarantee-Audit-Python](Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb) | ~60 min | MAPF : validateur indépendant, oracle CP-SAT time-expanded, réfutation OD-A*, arrêt CBS au but, audit des garanties ECBS — distillation PrCon G3 (Matteo Atkinson, Paul Witkowski) | Projet étudiant (PrCon PRs #33/#36/#42) | -| 4 | [Research-04-CombinatorialAuctions-WDP-VCG-Python](Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb) | ~60 min | Enchères combinatoires : WDP exact CP-SAT vs force brute, langage XOR, budget global, paiements VCG et audit de leurs garanties, contre-exemple de manipulation sous budget matérialisé, forensics `PRICE_SCALE` sur 18 instances CATS — distillation PrCon J2 (Majerczyk, Chartouni, Wangon-Zekou) | Projet étudiant (PrCon PR #26) | -| 5 | [Research-05-CoveringArrays-Guarantee-Audit-Python](Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb) | ~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) | -| 6 | [Research-06-LearningToBranch-Generalization-Audit-Python](Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb) | ~75 min | Learning to branch : dérivation de dom/wdeg, splits groupés, transfert inter-familles, performance intégrée, coût d'inférence et seuil d'amortissement — distillation PrCon G4 (Simon Naulet, Matis Codjia) | Projet étudiant (PrCon PR #46) | -| 7 | [Research-07-SALBP-AssemblyLineBalancing-Audit-Python](Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb) | ~70 min | SALBP-1/2 : CP-SAT, PuLP/CBC et RPW, statuts/incumbents/bornes, identité de benchmark, front Pareto certifié et MMALBP robuste/pondéré — distillation PrCon B1 (Ilias Kalalou, Kaelan Grall) | Projet étudiant (PrCon PR #57) | -| 8 | [Research-08-OrbitalAssembly-Certificate-Audit-Python](Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb) | ~70 min | Assemblage orbital : physique de Hohmann dans le modèle, auditeur externe, preuve que la scalarisation est exactement lexicographique, comparaison à makespan égal, front d'échange ε-contrainte et sonde en taille **et** en densité — distillation PrCon C4 (Gurvan Estable, Joris Bely, Kévin Lubert) | Projet étudiant (PrCon PR #53) | -| 9 | [Research-09-RCPSP-Max-Feasibility-Bounds-Python](Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb) | ~65 min | RCPSP/max : le lag maximal comme arc inverse, faisabilité NP-difficile et son témoin de circuit positif, balayage des trois régimes temporel/ressource/réalisable, échelle de bornes certifiées et repli explicite quand la référence externe manque — distillation PrCon B4 (Arthur Gallier, Nicolas Naegelen) | Projet étudiant (PrCon PR #51) | -| 10 | [Research-10-Szpiro-Pasten-2026-Python](Research/Research-10-Szpiro-Pasten-2026-Python.ipynb) | ~25 min | Szpiro rendu opérable : factorisations admissibles `N=DM` (parité paire de `D`), balayage de `M·φ(D)` sur N = 6…30030, proxy `log\|Δ\|/log rad(\|Δ\|)` des courbes `y²=x³+ax+b` — théorème 1.1 et corollaires 1.2/1.3 rendus calculables, 3 exercices | Distillation arXiv 2609.17390 (Pasten 2026, #16549) | -| 11 | [Research-11-NeuralDiving-Coloration-Python](Research/Research-11-NeuralDiving-Coloration-Python.ipynb) | ~60 min | Neural diving : un plongeur MLP prédit une affectation partielle, injectée comme hint réparable dans CP-SAT ; la médiane des branches recule (2829 → 2325, 25/25 instances améliorées) alors que ≈ 49 % des arêtes du hint violent l'adjacence — cohérence du hint avec les contraintes, pas précision par bit — hommage Nair et al. 2021 | Recherche (Nair et al. 2021) | +| 1 | [Research-01-EdgeColoring-Tutte-Python](Research/Research-01-EdgeColoring-Tutte-Python.html) | ~45 min | Coloration d'arêtes cubiques : Vizing, Petersen, ponts, graphes apex et CP-SAT — vérification empirique d'un théorème récent (arXiv 2608.22870) | Nouveau | +| 2 | [Research-02-Factorio-Balancer-Python](Research/Research-02-Factorio-Balancer-Python.html) | ~35 min | Belt balancer Factorio : MIP continu vs CP-SAT discret sur cas borné, N×N throughput-unlimited | Distillation Venturini 2024 | +| 3 | [Research-03-MAPF-Guarantee-Audit-Python](Research/Research-03-MAPF-Guarantee-Audit-Python.html) | ~60 min | MAPF : validateur indépendant, oracle CP-SAT time-expanded, réfutation OD-A*, arrêt CBS au but, audit des garanties ECBS — distillation PrCon G3 (Matteo Atkinson, Paul Witkowski) | Projet étudiant (PrCon PRs #33/#36/#42) | +| 4 | [Research-04-CombinatorialAuctions-WDP-VCG-Python](Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.html) | ~60 min | Enchères combinatoires : WDP exact CP-SAT vs force brute, langage XOR, budget global, paiements VCG et audit de leurs garanties, contre-exemple de manipulation sous budget matérialisé, forensics `PRICE_SCALE` sur 18 instances CATS — distillation PrCon J2 (Majerczyk, Chartouni, Wangon-Zekou) | Projet étudiant (PrCon PR #26) | +| 5 | [Research-05-CoveringArrays-Guarantee-Audit-Python](Research/Research-05-CoveringArrays-Guarantee-Audit-Python.html) | ~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) | +| 6 | [Research-06-LearningToBranch-Generalization-Audit-Python](Research/Research-06-LearningToBranch-Generalization-Audit-Python.html) | ~75 min | Learning to branch : dérivation de dom/wdeg, splits groupés, transfert inter-familles, performance intégrée, coût d'inférence et seuil d'amortissement — distillation PrCon G4 (Simon Naulet, Matis Codjia) | Projet étudiant (PrCon PR #46) | +| 7 | [Research-07-SALBP-AssemblyLineBalancing-Audit-Python](Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.html) | ~70 min | SALBP-1/2 : CP-SAT, PuLP/CBC et RPW, statuts/incumbents/bornes, identité de benchmark, front Pareto certifié et MMALBP robuste/pondéré — distillation PrCon B1 (Ilias Kalalou, Kaelan Grall) | Projet étudiant (PrCon PR #57) | +| 8 | [Research-08-OrbitalAssembly-Certificate-Audit-Python](Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.html) | ~70 min | Assemblage orbital : physique de Hohmann dans le modèle, auditeur externe, preuve que la scalarisation est exactement lexicographique, comparaison à makespan égal, front d'échange ε-contrainte et sonde en taille **et** en densité — distillation PrCon C4 (Gurvan Estable, Joris Bely, Kévin Lubert) | Projet étudiant (PrCon PR #53) | +| 9 | [Research-09-RCPSP-Max-Feasibility-Bounds-Python](Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.html) | ~65 min | RCPSP/max : le lag maximal comme arc inverse, faisabilité NP-difficile et son témoin de circuit positif, balayage des trois régimes temporel/ressource/réalisable, échelle de bornes certifiées et repli explicite quand la référence externe manque — distillation PrCon B4 (Arthur Gallier, Nicolas Naegelen) | Projet étudiant (PrCon PR #51) | +| 10 | [Research-10-Szpiro-Pasten-2026-Python](Research/Research-10-Szpiro-Pasten-2026-Python.html) | ~25 min | Szpiro rendu opérable : factorisations admissibles `N=DM` (parité paire de `D`), balayage de `M·φ(D)` sur N = 6…30030, proxy `log\|Δ\|/log rad(\|Δ\|)` des courbes `y²=x³+ax+b` — théorème 1.1 et corollaires 1.2/1.3 rendus calculables, 3 exercices | Distillation arXiv 2609.17390 (Pasten 2026, #16549) | +| 11 | [Research-11-NeuralDiving-Coloration-Python](Research/Research-11-NeuralDiving-Coloration-Python.html) | ~60 min | Neural diving : un plongeur MLP prédit une affectation partielle, injectée comme hint réparable dans CP-SAT ; la médiane des branches recule (2829 → 2325, 25/25 instances améliorées) alors que ≈ 49 % des arêtes du hint violent l'adjacence — cohérence du hint avec les contraintes, pas précision par bit — hommage Nair et al. 2021 | Recherche (Nair et al. 2021) | --- @@ -270,23 +270,23 @@ Le [App-22-AlgorithmSelection-Python](Hybrid/App-22-AlgorithmSelection-Python.ht Le [App-23-PRESENT-Differential-Cryptanalysis-SAT](Hybrid/App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb) distille le projet PrCon F2 de **Théodore Deguest**, *« Cryptanalyse différentielle de PRESENT via SAT »*, PR [PrCon #49](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/49). Le notebook reconstruit l'expérience de façon autonome, reproduit la DDT et les frontières SAT/UNSAT, corrige le seuil documentaire à R=15/W=66 et distingue explicitement trail, cluster et niveau de preuve. -Le [Research-03-MAPF-Guarantee-Audit-Python](Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb) distille le projet PrCon G3 de **Matteo Atkinson** et **Paul Witkowski**, *« Coordination de drones par Multi-Agent Path Finding »*, PRs [PrCon #33](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/33), [#36](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/36) et [#42](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/42). Un rerun frais alimente un validateur et un oracle CP-SAT indépendants ; le notebook distingue trajectoire valide, optimum observé et garantie réellement établie, avec provenance détaillée dans [`Research/data/app24-mapf-audit/SOURCE.md`](Research/data/app24-mapf-audit/SOURCE.md). +Le [Research-03-MAPF-Guarantee-Audit-Python](Research/Research-03-MAPF-Guarantee-Audit-Python.html) distille le projet PrCon G3 de **Matteo Atkinson** et **Paul Witkowski**, *« Coordination de drones par Multi-Agent Path Finding »*, PRs [PrCon #33](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/33), [#36](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/36) et [#42](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/42). Un rerun frais alimente un validateur et un oracle CP-SAT indépendants ; le notebook distingue trajectoire valide, optimum observé et garantie réellement établie, avec provenance détaillée dans [`Research/data/app24-mapf-audit/SOURCE.md`](Research/data/app24-mapf-audit/SOURCE.md). -Le [Research-04-CombinatorialAuctions-WDP-VCG-Python](Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb) distille le projet PrCon J2 de **Lucas Majerczyk**, **Nabil Chartouni** et **Wilfrid Wangon-Zekou**, *« Enchères combinatoires et Winner Determination »*, PR [PrCon #26](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/26). Le notebook ré-écrit le solveur WDP (CP-SAT, prix entiers milli-unités bout-en-bout) sans importer le package `wdp/` des étudiants ; il re-résout les 18 instances CATS, **matérialise en exécutable** le contre-exemple de manipulation sous budget documenté mais jamais testé dans la source, et audite honnêtement l'écart `PRICE_SCALE` entre les outputs committés et le code au commit source. Données et provenance : [`data/app25-wdp-vcg-audit`](Research/data/app25-wdp-vcg-audit/). +Le [Research-04-CombinatorialAuctions-WDP-VCG-Python](Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.html) distille le projet PrCon J2 de **Lucas Majerczyk**, **Nabil Chartouni** et **Wilfrid Wangon-Zekou**, *« Enchères combinatoires et Winner Determination »*, PR [PrCon #26](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/26). Le notebook ré-écrit le solveur WDP (CP-SAT, prix entiers milli-unités bout-en-bout) sans importer le package `wdp/` des étudiants ; il re-résout les 18 instances CATS, **matérialise en exécutable** le contre-exemple de manipulation sous budget documenté mais jamais testé dans la source, et audite honnêtement l'écart `PRICE_SCALE` entre les outputs committés et le code au commit source. Données et provenance : [`data/app25-wdp-vcg-audit`](Research/data/app25-wdp-vcg-audit/). -Le [Research-05-CoveringArrays-Guarantee-Audit-Python](Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb) distille le projet PrCon H4 de **Valérian Pichot**, *« Covering Arrays »*, PR [PrCon #58](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/58). Sans recopier le générateur étudiant, le notebook reconstruit un oracle indépendant, un set cover CP-SAT exact et deux baselines approchées ; il reproduit surtout le faux verdict d'un validateur qui exige des interactions sémantiquement impossibles, puis le répare par un univers constraint-aware. Provenance : [`Research/data/app26-covering-arrays-audit/SOURCE.md`](Research/data/app26-covering-arrays-audit/SOURCE.md). +Le [Research-05-CoveringArrays-Guarantee-Audit-Python](Research/Research-05-CoveringArrays-Guarantee-Audit-Python.html) distille le projet PrCon H4 de **Valérian Pichot**, *« Covering Arrays »*, PR [PrCon #58](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/58). Sans recopier le générateur étudiant, le notebook reconstruit un oracle indépendant, un set cover CP-SAT exact et deux baselines approchées ; il reproduit surtout le faux verdict d'un validateur qui exige des interactions sémantiquement impossibles, puis le répare par un univers constraint-aware. Provenance : [`Research/data/app26-covering-arrays-audit/SOURCE.md`](Research/data/app26-covering-arrays-audit/SOURCE.md). Le [App-27-Sparse-Index-Tracking-Walk-Forward](Hybrid/App-27-Sparse-Index-Tracking-Walk-Forward.ipynb) distille le projet PrCon M2 de **Godric Bouteloup**, *« Sparse Index Tracking »*, PR [PrCon #52](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/52). Le notebook conserve la modélisation CP-SAT en lots entiers, mais reconstruit l'expérience sur un marché synthétique seedé : cardinalité exacte, turnover entre rebalancements consécutifs, validation indépendante, choix de K avant le test et statut/borne/gap explicites. Il matérialise aussi un protocole contaminé pour montrer qu'un score obtenu après consultation du test est ininterprétable, qu'il paraisse meilleur ou moins bon. Cette lecture de méthode reprend ensuite, sans relancer de recherche de marché, les résultats autoritatifs du projet [Sparse-Index-Tracking-QC](../../QuantConnect/projects/Sparse-Index-Tracking-QC/README.md) intégré par la PR CoursIA [#14068](https://github.com/jsboige/CoursIA/pull/14068) : 703 contre 1 414 ordres, mais pas de domination sparse sur les performances ni sur le turnover. **Une recherche, deux lectures.** Provenance : [`Hybrid/data/app27-sparse-index-tracking/SOURCE.md`](Hybrid/data/app27-sparse-index-tracking/SOURCE.md). -Le [Research-06-LearningToBranch-Generalization-Audit-Python](Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb) distille le projet PrCon G4 de **Simon Naulet** et **Matis Codjia**, *« Apprentissage d'heuristiques de branchement pour solveur CP »*, PR [PrCon #46](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/46). La reproduction est entièrement réécrite : elle remplace le split par lignes par des instances disjointes, ajoute trois transferts leave-one-family-out et compare l'arbre, le temps total et le coût d'inférence à une baseline choisie sur le train uniquement. Elle établit un résultat négatif utile : une imitation locale fidèle ne garantit ni un arbre plus petit ni un solveur plus rapide. Provenance : [`Research/data/app28-learning-to-branch-audit/SOURCE.md`](Research/data/app28-learning-to-branch-audit/SOURCE.md). +Le [Research-06-LearningToBranch-Generalization-Audit-Python](Research/Research-06-LearningToBranch-Generalization-Audit-Python.html) distille le projet PrCon G4 de **Simon Naulet** et **Matis Codjia**, *« Apprentissage d'heuristiques de branchement pour solveur CP »*, PR [PrCon #46](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/46). La reproduction est entièrement réécrite : elle remplace le split par lignes par des instances disjointes, ajoute trois transferts leave-one-family-out et compare l'arbre, le temps total et le coût d'inférence à une baseline choisie sur le train uniquement. Elle établit un résultat négatif utile : une imitation locale fidèle ne garantit ni un arbre plus petit ni un solveur plus rapide. Provenance : [`Research/data/app28-learning-to-branch-audit/SOURCE.md`](Research/data/app28-learning-to-branch-audit/SOURCE.md). -Le [Research-07-SALBP-AssemblyLineBalancing-Audit-Python](Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb) rend hommage au projet PrCon B1 d'**Ilias Kalalou** et **Kaelan Grall**, *« Équilibrage de chaîne d'assemblage (SALBP) »*, PR [PrCon #57](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/57). Le notebook préserve leur geste central — SALBP-1/2, comparaison CP-SAT/PuLP/RPW, Pareto et multi-modèles — dans une réécriture CoursIA indépendante qui publie statuts, incumbents, bornes, gaps, identité structurelle des instances et validation hors solveur. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Research/data/app29-salbp-audit/SOURCE.md`](Research/data/app29-salbp-audit/SOURCE.md). +Le [Research-07-SALBP-AssemblyLineBalancing-Audit-Python](Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.html) rend hommage au projet PrCon B1 d'**Ilias Kalalou** et **Kaelan Grall**, *« Équilibrage de chaîne d'assemblage (SALBP) »*, PR [PrCon #57](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/57). Le notebook préserve leur geste central — SALBP-1/2, comparaison CP-SAT/PuLP/RPW, Pareto et multi-modèles — dans une réécriture CoursIA indépendante qui publie statuts, incumbents, bornes, gaps, identité structurelle des instances et validation hors solveur. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Research/data/app29-salbp-audit/SOURCE.md`](Research/data/app29-salbp-audit/SOURCE.md). -Le [Research-08-OrbitalAssembly-Certificate-Audit-Python](Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb) rend hommage au projet PrCon C4 de **Gurvan Estable**, **Joris Bely** et **Kévin Lubert**, *« Assemblage orbital de satellites »*, PR [PrCon #53](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/53). Le geste distillé est une décision de modélisation : faire descendre la physique dans le modèle, durées issues d'un temps de vol de Hohmann calculé et coûts d'un Δv calculé, les deux contraignant les mêmes intervalles CP-SAT. La reproduction CoursIA est indépendante et volontairement discrétisée autrement, donc non comparable chiffre à chiffre : elle ajoute un auditeur externe qui ne partage aucun état avec les solveurs, la preuve que l'objectif scalarisé `makespan × (B+1) + ergol` est *exactement* lexicographique dès que le budget borne l'ergol — ce que le rapport source qualifiait prudemment d'« approximation » —, une comparaison à makespan égal qui sépare l'inefficacité en ergol d'une heuristique de son retard d'échéancier, un front d'échange ε-contrainte dont chaque point porte son statut, et une sonde qui montre que la taille est un mauvais prédicteur de difficulté. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Research/data/app30-orbital-assembly-audit/SOURCE.md`](Research/data/app30-orbital-assembly-audit/SOURCE.md). +Le [Research-08-OrbitalAssembly-Certificate-Audit-Python](Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.html) rend hommage au projet PrCon C4 de **Gurvan Estable**, **Joris Bely** et **Kévin Lubert**, *« Assemblage orbital de satellites »*, PR [PrCon #53](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/53). Le geste distillé est une décision de modélisation : faire descendre la physique dans le modèle, durées issues d'un temps de vol de Hohmann calculé et coûts d'un Δv calculé, les deux contraignant les mêmes intervalles CP-SAT. La reproduction CoursIA est indépendante et volontairement discrétisée autrement, donc non comparable chiffre à chiffre : elle ajoute un auditeur externe qui ne partage aucun état avec les solveurs, la preuve que l'objectif scalarisé `makespan × (B+1) + ergol` est *exactement* lexicographique dès que le budget borne l'ergol — ce que le rapport source qualifiait prudemment d'« approximation » —, une comparaison à makespan égal qui sépare l'inefficacité en ergol d'une heuristique de son retard d'échéancier, un front d'échange ε-contrainte dont chaque point porte son statut, et une sonde qui montre que la taille est un mauvais prédicteur de difficulté. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Research/data/app30-orbital-assembly-audit/SOURCE.md`](Research/data/app30-orbital-assembly-audit/SOURCE.md). -Le [Research-09-RCPSP-Max-Feasibility-Bounds-Python](Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb) rend hommage au projet PrCon B4 d'**Arthur Gallier** et **Nicolas Naegelen**, *« RCPSP — ordonnancement de projet sous contraintes de ressources »*, PR [PrCon #51](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/51). Leur rendu a fait ce que [Planners-8-Temporal](../../SymbolicAI/Planners/03-Advanced/Planners-8-Temporal-Csharp.ipynb) laissait explicitement « en exercice » : confronter un solveur à un benchmark public d'ordonnancement. La vérification indépendante conduite pour cette distillation confirme leurs dix makespans, tous recalculés `OPTIMAL` par un modèle réécrit de zéro. Le prolongement CoursIA porte sur ce que leur section RCPSP/max rendait possible sans l'exercer : un lag maximal s'encode par un **arc inverse** qui referme un circuit, la faisabilité elle-même devient NP-difficile (Bartusch, Möhring, Radermacher, 1988), et un circuit de poids strictement positif en est le témoin vérifiable à la main. Le notebook balaye les trois régimes — infaisable temporellement, infaisable par les ressources, réalisable —, mesure que le diagnostic polynomial épargne au solveur le tiers gauche du domaine, et propose une échelle de bornes certifiées comme repli explicite lorsqu'aucune référence externe n'est disponible : le champ `niveau_de_preuve` interdit de confondre un écart à une borne calculée avec un écart à un optimum connu. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Research/data/app31-rcpsp-max/SOURCE.md`](Research/data/app31-rcpsp-max/SOURCE.md). +Le [Research-09-RCPSP-Max-Feasibility-Bounds-Python](Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.html) rend hommage au projet PrCon B4 d'**Arthur Gallier** et **Nicolas Naegelen**, *« RCPSP — ordonnancement de projet sous contraintes de ressources »*, PR [PrCon #51](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/51). Leur rendu a fait ce que [Planners-8-Temporal](../../SymbolicAI/Planners/03-Advanced/Planners-8-Temporal-Csharp.ipynb) laissait explicitement « en exercice » : confronter un solveur à un benchmark public d'ordonnancement. La vérification indépendante conduite pour cette distillation confirme leurs dix makespans, tous recalculés `OPTIMAL` par un modèle réécrit de zéro. Le prolongement CoursIA porte sur ce que leur section RCPSP/max rendait possible sans l'exercer : un lag maximal s'encode par un **arc inverse** qui referme un circuit, la faisabilité elle-même devient NP-difficile (Bartusch, Möhring, Radermacher, 1988), et un circuit de poids strictement positif en est le témoin vérifiable à la main. Le notebook balaye les trois régimes — infaisable temporellement, infaisable par les ressources, réalisable —, mesure que le diagnostic polynomial épargne au solveur le tiers gauche du domaine, et propose une échelle de bornes certifiées comme repli explicite lorsqu'aucune référence externe n'est disponible : le champ `niveau_de_preuve` interdit de confondre un écart à une borne calculée avec un écart à un optimum connu. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Research/data/app31-rcpsp-max/SOURCE.md`](Research/data/app31-rcpsp-max/SOURCE.md). -Le [Research-11-NeuralDiving-Coloration-Python](Research/Research-11-NeuralDiving-Coloration-Python.ipynb) rend hommage au second geste de l'article de Nair et al. (2021), *« Solving Mixed Integer Programs Using Neural Networks »* (arXiv:2012.13349) : le **diving**, qui apprend une solution partielle pour guider un solveur MIP. Research-06 a audité la composante *branching* (politique de branchement apprise) ; Research-11 enchaîne sur l'autre composante : un plongeur MLP prédit une affectation des 60 sommets d'une coloration de graphe, injectée comme `hint` réparable dans OR-Tools CP-SAT, et l'on mesure l'effet sur les branches de preuve. La famille est calibrée pour qu'une fenêtre existe : les set-cover denses s'effondrent au presolve (`nodes = 0`) et les knapsack corrélés ne se prouvent pas en fenêtre notebook ; la coloration 60 sommets / 3 arêtes branche (médiane 2742, 2303-3799 sur les 60 instances d'entraînement) et se prouve (< 0,1 s). Verdict mesuré sur 25 instances de test, sur un run déterministe (`num_workers = 1`) : la médiane des branches recule (2829 → 2325, ≈ −18 %), les 25 instances s'améliorent (gain relatif médian ≈ 15 %, de 8 % à 28 %), et ≈ 49 % des arêtes du hint (44 sur ~90) sont en conflit avec l'adjacence — la cohérence, pas la précision par bit, détermine l'effet du hint. Le notebook ne copie aucun code, donnée, figure ou prose de l'article, archivé au gisement `G:\Mon Drive\MyIA\IA\Bibliographie IA\Search\`. Provenance : [`Research/data/app33-neural-diving/SOURCE.md`](Research/data/app33-neural-diving/SOURCE.md). +Le [Research-11-NeuralDiving-Coloration-Python](Research/Research-11-NeuralDiving-Coloration-Python.html) rend hommage au second geste de l'article de Nair et al. (2021), *« Solving Mixed Integer Programs Using Neural Networks »* (arXiv:2012.13349) : le **diving**, qui apprend une solution partielle pour guider un solveur MIP. Research-06 a audité la composante *branching* (politique de branchement apprise) ; Research-11 enchaîne sur l'autre composante : un plongeur MLP prédit une affectation des 60 sommets d'une coloration de graphe, injectée comme `hint` réparable dans OR-Tools CP-SAT, et l'on mesure l'effet sur les branches de preuve. La famille est calibrée pour qu'une fenêtre existe : les set-cover denses s'effondrent au presolve (`nodes = 0`) et les knapsack corrélés ne se prouvent pas en fenêtre notebook ; la coloration 60 sommets / 3 arêtes branche (médiane 2742, 2303-3799 sur les 60 instances d'entraînement) et se prouve (< 0,1 s). Verdict mesuré sur 25 instances de test, sur un run déterministe (`num_workers = 1`) : la médiane des branches recule (2829 → 2325, ≈ −18 %), les 25 instances s'améliorent (gain relatif médian ≈ 15 %, de 8 % à 28 %), et ≈ 49 % des arêtes du hint (44 sur ~90) sont en conflit avec l'adjacence — la cohérence, pas la précision par bit, détermine l'effet du hint. Le notebook ne copie aucun code, donnée, figure ou prose de l'article, archivé au gisement `G:\Mon Drive\MyIA\IA\Bibliographie IA\Search\`. Provenance : [`Research/data/app33-neural-diving/SOURCE.md`](Research/data/app33-neural-diving/SOURCE.md). --- diff --git a/MyIA.AI.Notebooks/Search/README.md b/MyIA.AI.Notebooks/Search/README.md index d62d98c39d..805b9a2aaf 100644 --- a/MyIA.AI.Notebooks/Search/README.md +++ b/MyIA.AI.Notebooks/Search/README.md @@ -147,7 +147,7 @@ Problèmes du monde réel adaptés de projets étudiants. Chaque application est | 12 (C#) | [App-19-ProceduralGeneration-WFC-CSharp](Applications/CSP/App-19-ProceduralGeneration-WFC-CSharp.ipynb) | ~45 min | Twin C# du 12 : WFC from-scratch (entropie de Shannon + propagation AC-3 + backtracking) (See #4956) | Marathon | | 13 | [App-20-SudokuBenchmark-Python](Applications/CSP/App-20-SudokuBenchmark-Python.html) | ~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](Applications/CSP/App-20b-SudokuBenchmark-CSharp.html) | ~50 min | Twin C# du 13 : mêmes solveurs from-scratch en .NET, comparaison des écosystèmes | Jumeau .NET | -| 16 | [Research-05-CoveringArrays-Guarantee-Audit-Python](Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb) | ~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) | +| 16 | [Research-05-CoveringArrays-Guarantee-Audit-Python](Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.html) | ~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). diff --git a/MyIA.AI.Notebooks/Search/search_lean/README.md b/MyIA.AI.Notebooks/Search/search_lean/README.md index 9436a06961..04be4ed076 100644 --- a/MyIA.AI.Notebooks/Search/search_lean/README.md +++ b/MyIA.AI.Notebooks/Search/search_lean/README.md @@ -193,7 +193,7 @@ flowchart TD Le module [`Szpiro.lean`](Szpiro.lean) (miroir EN : [`Szpiro_en.lean`](Szpiro_en.lean)) est le sibling Lean du carnet -[`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb) : +[`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Research/Research-10-Szpiro-Pasten-2026-Python.html) : Pasten 2026, *Improved Bounds for Szpiro's Conjecture* (arXiv 2609.17390) rend la borne `h(E) ≪ N·log log N` **inconditionnelle** — elle était connue sous GRH — et prouve `h(E) ≪_S N` pour les courbes semistables hors d'un ensemble fini. @@ -242,6 +242,6 @@ Phases suivantes (suivi #4048) : of Minimum Cost Paths*, IEEE Trans. Syst. Sci. Cybern. **4**(2), 1968. - H. Pasten, *Improved Bounds for Szpiro's Conjecture*, arXiv 2609.17390 (2026), archivé `G:\Mon Drive\MyIA\IA\Bibliographie IA\NumberTheory\` — carnet compagnon - [`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb). + [`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Research/Research-10-Szpiro-Pasten-2026-Python.html). - S. Russell, P. Norvig, *Artificial Intelligence: A Modern Approach*, §3.5 (A* Search). - Notebooks compagnons : [`Search-02-Uninformed.ipynb`](../Part1-Foundations/Search-02-Uninformed.html), [`Search-03-Informed.ipynb`](../Part1-Foundations/Search-03-Informed.ipynb) (le notebook historique [`Exploration_non_informée_et_informée_intro.ipynb`](../_archive/Exploration_non_informée_et_informée_intro.ipynb) est archivé depuis 2026-07-03). diff --git a/MyIA.AI.Notebooks/SymbolicAI/Lean/README.md b/MyIA.AI.Notebooks/SymbolicAI/Lean/README.md index 5737890ca7..94ee028cf4 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/Lean/README.md +++ b/MyIA.AI.Notebooks/SymbolicAI/Lean/README.md @@ -159,7 +159,7 @@ Tous les notebooks incluent une **barre de navigation** en haut et en bas permet | 24b | [Lean-24b-Confiance-Preuves-Native](Lean-24b-Confiance-Preuves-Native.ipynb) | Compagnon **natif** (kernel `lean4-wsl`, lake `mathlib_examples`) sur la fiabilité d'un certificat formel, piste Dougherty/von Hippel 2026 (*Lies, Damned Lies, and Proofs* — « ce qui rend une preuve formelle fiable ») : mis-définition rendant la preuve trivialement vraie (`DivPar` → `True` vs la vraie divisibilité avec témoin), axiomes de secours mesurés par `#print axioms` (`sorryAx` transitif, `native_decide`, `Classical.choice` whitelisté par nom), implosion depuis `False` (0 axiome), et orthogonalité certificat-vs-headline (mêmes axiomes, fidélités opposées) — cellules code exécutées sans erreur, 3 exercices | 30 min | | 25 | [Lean-25-Coherence-et-Temoin](Lean-25-Coherence-et-Temoin.ipynb) | Cohérence de de Finetti et témoin (Dutch book) : miroir Python **exact** (`fractions.Fraction`) du lake `decision_theory_lean` — un livret (+1,+1,−1,−1) encaisse l'écart d'inclusion-exclusion uniformément dans les 4 états, balayage borné exhaustif (390 625 combinaisons) qui certifie l'absence de livre sur le système réparé, stabilité affine vNM mesurée (0 divergence pour 3u+2 contre 124 pour u² sur les 2145 paires de 66 loteries du simplexe) | 40 min | | 26 | [Lean-26-Munkres-Tribute](Lean-26-Munkres-Tribute.ipynb) | Hommage à James R. Munkres (1930-2026), le cours 18.901 dans Mathlib en kernel **natif** `lean4-wsl`, exécuté sur le lake `mathlib_examples` (environnement d'exécution Mathlib, cf. [`mathlib_examples/`](mathlib_examples/)) : les cinq chapitres du manuel *Topology* — axiomes (`IsOpen`), adhérence/intérieur (`nhds`, dualités §17 ex. 6), continuité (`continuous_def` = Munkres §18.1), T2/compacité, connexité — chaque notion interrogée par `#check`/`example`/`#print axioms` (0 axiome), 3 exercices `sorry` | 30 min | -| 27 | [Lean-27-EdgeColoring-Tutte-Companion](Lean-27-EdgeColoring-Tutte-Companion.ipynb) | Compagnon **natif** (kernel `lean4-wsl`) du notebook [Research-01](../../Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb) (théorème apex arXiv 2608.22870, #13031) : définitions `IsCubic`/`Edge3Colorable`/`IsApexRelativeTo` posées sur `SimpleGraph` (absentes de Mathlib, vérifié), Petersen = Kneser KG(5,2) via `SimpleGraph.mk'` — 10 sommets, 15 arêtes, cubique prouvés par `decide`, backtracking `#eval` qui certifie l'absence de toute 3-coloration d'arêtes (`0`) avec contrôle positif K4 (`6`), ancrage `SimpleGraph.tutte` | 35 min | +| 27 | [Lean-27-EdgeColoring-Tutte-Companion](Lean-27-EdgeColoring-Tutte-Companion.ipynb) | Compagnon **natif** (kernel `lean4-wsl`) du notebook [Research-01](../../Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.html) (théorème apex arXiv 2608.22870, #13031) : définitions `IsCubic`/`Edge3Colorable`/`IsApexRelativeTo` posées sur `SimpleGraph` (absentes de Mathlib, vérifié), Petersen = Kneser KG(5,2) via `SimpleGraph.mk'` — 10 sommets, 15 arêtes, cubique prouvés par `decide`, backtracking `#eval` qui certifie l'absence de toute 3-coloration d'arêtes (`0`) avec contrôle positif K4 (`6`), ancrage `SimpleGraph.tutte` | 35 min | | 28 | [Lean-28-Complex-Structure-S6](Lean-28-Complex-Structure-S6.ipynb) | Le problème de Hopf résolu : une structure complexe intégrable sur S⁶ (énoncé `Mathoverflow1973` de Formal Conjectures) — digestion du fil constructif (triangle (3,4,∞), accouplement de Shioda ⟨P,P⟩=1/6 calculé, transformations logarithmiques 3 et 4, remplissage de Mumford dP₆, reconnaissance Hurewicz→Smale→Kervaire–Milnor) avec deux invariants **calculés** (\|π₁\| = \|4m+3n\| par forme normale de Smith, χ = 2), reproduction **réelle** du dépôt piné `plby/HopfProblem` via `hopf_s6_reproduction.py` (248 818 lignes compilées en 1154 s, 0 sorry/0 axiom, comparator double kernel Lean+nanoda : *« Your solution is okay! »*, axiomes [propext, Classical.choice, Quot.sound]) et attribution différenciée (manuscrit écrit par Claude/communiqué par Alpöge, exposition Engel avec caveat, code Lean majoritairement Codex) | 45 min | | 29 | [Lean-29-Hecke-Operators-Native](Lean-29-Hecke-Operators-Native.ipynb) | Compagnon **natif** (kernel `lean4-wsl`) du lake `hecke_lean` (port pédagogique de `anthropics/fermats-last-theorem`, Apache-2.0, toolchain pinée `leanprover/lean4:v4.33.0`) : les opérateurs de Hecke T_p et U_p sur le demi-plan supérieur — représentants γ_{p,j} et partie diagonale, action de slash et ses deux comportements opposés, formule des coefficients a(np) + p^{k−1}·a(n/p) portée par `coeffHeckeT` — chaque déclaration interrogée par `#check`/`#print axioms` exécutés in-kernel (0 erreur), 3 exercices | 40 min | | 30 | [Lean-30-FormalGroups-Native](Lean-30-FormalGroups-Native.ipynb) | Compagnon **natif** (kernel `lean4-wsl`) du lake `formal_groups_lean` (port de `anthropics/fermats-last-theorem`, Apache-2.0, toolchain pinée `leanprover/lean4:v4.33.0`) : les groupes formels multivariés à travers les quatre modules `Basic`/`Hom`/`Additive`/`Iterates` — structure `MvFormalGroup` (neutre, partie linéaire, associativité), commutativité et substitution sûre, morphismes `Hom` et changement d'anneau, loi additive `addMv`, itérés `nthSeries`/`linearPart`/`FiniteHeight` — `#check`/`#print axioms` exécutés in-kernel (0 erreur), 3 exercices | 40 min | From 9469f2488f0d0a847cc461169871725528c5024b Mon Sep 17 00:00:00 2001 From: jsboige Date: Mon, 5 Oct 2026 18:00:11 +0200 Subject: [PATCH 7/8] refactor(search,#19189): partie 5 Frontieres -- 10 carnets d'audits sortent de Applications/Research Reecriture de la PR #19189 sur la carte validee (#19253) : les carnets "Recherche" deviennent la Partie 5 de la serie Search, sous MyIA.AI.Notebooks/Search/Part5-Frontieres/, au lieu du sous-dossier Applications/Research/ que la PR creait. - 10 carnets renommes Research-01..11 -> Frontieres-01..10 (modele Discrepancy : prefixe de dossier + numero, suffixe -Python conserve) ; titres, barres de navigation et liens relatifs reecrits (../CSP -> ../Applications/CSP, ../GameTheory -> ../../GameTheory). - App-32-Szpiro-Pasten-2026 exclu de la partie (hors perimetre "audits") : restaure byte-identique a main dans Applications/Search/, sa sortie vers Langlands reste la PR dediee. - Part5-Frontieres/README.md cree au gabarit (pitch, critere d'entree, objectifs, table, prerequis, origine, ponts, references). - Applications/README.md : section Research retiree, mentions structurelles (categorie, arbre, mermaid) nettoyees, presentation Szpiro restauree depuis main (prose, rang 3, prerequis, noeud mermaid). - Search/README.md : prose, table de couverture et arbre mis a jour. - Referents : rename-ledger.tsv, _quarto.yml (regen organe), baseline nav chain (regen organe, 0 NEW), requirements.txt, README Lean, curriculum, SOURCE.md des 4 data dirs, liens Langlands/02 et Lean-27. - C.2 : Frontieres-07/08/09 re-executes (cellules code modifiees) -- execution_count complets, 0 erreur, provenance.json regenere par l'execution ; les 7 autres sont markdown-only. Co-Authored-By: Claude Sonnet 5.5 --- .../Search/Applications/README.md | 75 +-- .../difficulty_probe.csv | 25 - .../data/app31-rcpsp-max/temporal_regimes.csv | 217 -------- .../App-32-Szpiro-Pasten-2026.ipynb} | 6 +- ...tieres-01-EdgeColoring-Tutte-Python.ipynb} | 12 +- ...ntieres-02-Factorio-Balancer-Python.ipynb} | 8 +- ...eres-03-MAPF-Guarantee-Audit-Python.ipynb} | 8 +- ...ombinatorialAuctions-WDP-VCG-Python.ipynb} | 26 +- ...veringArrays-Guarantee-Audit-Python.ipynb} | 18 +- ...oBranch-Generalization-Audit-Python.ipynb} | 14 +- ...-AssemblyLineBalancing-Audit-Python.ipynb} | 310 +++++------ ...alAssembly-Certificate-Audit-Python.ipynb} | 480 +++++++++--------- ...RCPSP-Max-Feasibility-Bounds-Python.ipynb} | 418 +++++++-------- ...s-10-NeuralDiving-Coloration-Python.ipynb} | 14 +- .../Search/Part5-Frontieres/README.md | 97 ++++ .../data/app24-mapf-audit/SOURCE.md | 0 .../data/app24-mapf-audit/fresh_runs.json | 0 .../data/app25-wdp-vcg-audit/LICENSE | 0 .../data/app25-wdp-vcg-audit/SOURCE.md | 0 .../cats/matching_g32_b100_s10000.txt | 0 .../cats/paths_g30_b100_s10000.txt | 0 .../cats/regions_g30_b100_s10000.txt | 0 .../app25-wdp-vcg-audit/cats_snapshot.json | 0 .../app26-covering-arrays-audit/SOURCE.md | 2 +- .../app28-learning-to-branch-audit/LICENSE | 0 .../app28-learning-to-branch-audit/SOURCE.md | 0 .../baseline_runs.csv | 0 .../evaluation_runs.csv | 0 .../maturation_report.json | 0 .../oracle_trace.csv | 0 .../data/app29-salbp-audit/LICENSE | 0 .../data/app29-salbp-audit/SOURCE.md | 2 +- .../data/app29-salbp-audit/benchmark_runs.csv | 20 +- .../data/app29-salbp-audit/mmalbp_runs.json | 4 +- .../data/app29-salbp-audit/pareto_fronts.json | 8 +- .../data/app29-salbp-audit/provenance.json | 0 .../data/app30-orbital-assembly-audit/LICENSE | 0 .../app30-orbital-assembly-audit/SOURCE.md | 2 +- .../difficulty_probe.csv | 25 + .../exchange_fronts.json | 112 ++-- .../grid_runs.csv | 50 +- .../matched_comparison.csv | 2 +- .../provenance.json | 2 +- .../data/app31-rcpsp-max/LICENSE | 0 .../data/app31-rcpsp-max/SOURCE.md | 2 +- .../data/app31-rcpsp-max/bounds_ladder.json | 36 +- .../data/app31-rcpsp-max/provenance.json | 2 +- .../data/app31-rcpsp-max/temporal_regimes.csv | 217 ++++++++ .../data/app33-neural-diving/SOURCE.md | 0 .../app33-neural-diving/diving_results.csv | 0 MyIA.AI.Notebooks/Search/README.md | 12 +- MyIA.AI.Notebooks/Search/requirements.txt | 2 +- .../Search/search_lean/README.md | 4 +- .../Search/search_lean/Szpiro.lean | 2 +- .../Search/search_lean/Szpiro_en.lean | 2 +- .../02-monstrous-moonshine-invariant-j.ipynb | 2 +- ...Lean-27-EdgeColoring-Tutte-Companion.ipynb | 4 +- MyIA.AI.Notebooks/SymbolicAI/Lean/README.md | 2 +- _quarto.yml | 66 ++- docs/curriculum/ia-classique.md | 22 +- docs/reference/rename-ledger.tsv | 23 +- scripts/tests/baseline_nb_nav_chain.json | 59 +-- 62 files changed, 1239 insertions(+), 1175 deletions(-) delete mode 100644 MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/difficulty_probe.csv delete mode 100644 MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/temporal_regimes.csv rename MyIA.AI.Notebooks/Search/Applications/{Research/Research-10-Szpiro-Pasten-2026-Python.ipynb => Search/App-32-Szpiro-Pasten-2026.ipynb} (98%) rename MyIA.AI.Notebooks/Search/{Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb => Part5-Frontieres/Frontieres-01-EdgeColoring-Tutte-Python.ipynb} (99%) rename MyIA.AI.Notebooks/Search/{Applications/Research/Research-02-Factorio-Balancer-Python.ipynb => Part5-Frontieres/Frontieres-02-Factorio-Balancer-Python.ipynb} (99%) rename MyIA.AI.Notebooks/Search/{Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb => Part5-Frontieres/Frontieres-03-MAPF-Guarantee-Audit-Python.ipynb} (99%) rename MyIA.AI.Notebooks/Search/{Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb => Part5-Frontieres/Frontieres-04-CombinatorialAuctions-WDP-VCG-Python.ipynb} (98%) rename MyIA.AI.Notebooks/Search/{Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb => Part5-Frontieres/Frontieres-05-CoveringArrays-Guarantee-Audit-Python.ipynb} (98%) rename MyIA.AI.Notebooks/Search/{Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb => Part5-Frontieres/Frontieres-06-LearningToBranch-Generalization-Audit-Python.ipynb} (99%) rename MyIA.AI.Notebooks/Search/{Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb => Part5-Frontieres/Frontieres-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb} (92%) rename MyIA.AI.Notebooks/Search/{Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb => Part5-Frontieres/Frontieres-08-OrbitalAssembly-Certificate-Audit-Python.ipynb} (94%) rename MyIA.AI.Notebooks/Search/{Applications/Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb => Part5-Frontieres/Frontieres-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb} (54%) rename MyIA.AI.Notebooks/Search/{Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb => Part5-Frontieres/Frontieres-10-NeuralDiving-Coloration-Python.ipynb} (96%) create mode 100644 MyIA.AI.Notebooks/Search/Part5-Frontieres/README.md rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app24-mapf-audit/SOURCE.md (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app24-mapf-audit/fresh_runs.json (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app25-wdp-vcg-audit/LICENSE (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app25-wdp-vcg-audit/SOURCE.md (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app25-wdp-vcg-audit/cats/matching_g32_b100_s10000.txt (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app25-wdp-vcg-audit/cats/paths_g30_b100_s10000.txt (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app25-wdp-vcg-audit/cats/regions_g30_b100_s10000.txt (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app25-wdp-vcg-audit/cats_snapshot.json (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app26-covering-arrays-audit/SOURCE.md (97%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app28-learning-to-branch-audit/LICENSE (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app28-learning-to-branch-audit/SOURCE.md (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app28-learning-to-branch-audit/baseline_runs.csv (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app28-learning-to-branch-audit/evaluation_runs.csv (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app28-learning-to-branch-audit/maturation_report.json (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app28-learning-to-branch-audit/oracle_trace.csv (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app29-salbp-audit/LICENSE (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app29-salbp-audit/SOURCE.md (96%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app29-salbp-audit/benchmark_runs.csv (61%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app29-salbp-audit/mmalbp_runs.json (84%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app29-salbp-audit/pareto_fronts.json (85%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app29-salbp-audit/provenance.json (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app30-orbital-assembly-audit/LICENSE (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app30-orbital-assembly-audit/SOURCE.md (98%) create mode 100644 MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/difficulty_probe.csv rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app30-orbital-assembly-audit/exchange_fronts.json (81%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app30-orbital-assembly-audit/grid_runs.csv (52%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app30-orbital-assembly-audit/matched_comparison.csv (96%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app30-orbital-assembly-audit/provenance.json (95%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app31-rcpsp-max/LICENSE (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app31-rcpsp-max/SOURCE.md (98%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app31-rcpsp-max/bounds_ladder.json (89%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app31-rcpsp-max/provenance.json (94%) create mode 100644 MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app31-rcpsp-max/temporal_regimes.csv rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app33-neural-diving/SOURCE.md (100%) rename MyIA.AI.Notebooks/Search/{Applications/Research => Part5-Frontieres}/data/app33-neural-diving/diving_results.csv (100%) diff --git a/MyIA.AI.Notebooks/Search/Applications/README.md b/MyIA.AI.Notebooks/Search/Applications/README.md index eb36349442..a4bf260ae4 100644 --- a/MyIA.AI.Notebooks/Search/Applications/README.md +++ b/MyIA.AI.Notebooks/Search/Applications/README.md @@ -1,6 +1,6 @@ # Search - Applications -C'est ici que la série Search se confronte au réel. Les notebooks d'application, pour la plupart adaptés de projets étudiants, prennent les algorithmes des Parties 1 et 2 et les mettent face à des problèmes qui ne se laissent pas faire : planifier les gardes d'un service hospitalier, ordonnancer un atelier, construire un calendrier sportif équitable, router une flotte de véhicules. Quatre catégories les organisent — **Search pur** (jeux combinatoires), **CSP** (satisfaction de contraintes), **Hybride** (combinaisons de solveurs, modèles exacts et métaheuristiques) et **Recherche** (audits de garanties et distillations de preprints, sous-série `Research/` à numérotation propre) — et la plupart sont autonomes, avec des pointeurs vers les prérequis pertinents. À cela s'ajoutent les **jumeaux C#** (App-1b, App-2b, App-3b, App-4b, App-5b, App-6-CSharp, App-7b, App-8-CSharp, App-9b, App-10b, App-11b, App-13b, App-14-CSharp, App-14c, App-15b, App-16-CSharp, App-17b, App-18b, App-19-CSharp, App-20b) qui déroulent les mêmes algorithmes *from-scratch* en .NET, en complément des versions Python qui invoquent des solveurs industriels. +C'est ici que la série Search se confronte au réel. Les notebooks d'application, pour la plupart adaptés de projets étudiants, prennent les algorithmes des Parties 1 et 2 et les mettent face à des problèmes qui ne se laissent pas faire : planifier les gardes d'un service hospitalier, ordonnancer un atelier, construire un calendrier sportif équitable, router une flotte de véhicules. Trois catégories les organisent — **Search pur** (jeux combinatoires), **CSP** (satisfaction de contraintes) et **Hybride** (combinaisons de solveurs, modèles exacts et métaheuristiques) — et la plupart sont autonomes, avec des pointeurs vers les prérequis pertinents. À cela s'ajoutent les **jumeaux C#** (App-1b, App-2b, App-3b, App-4b, App-5b, App-6-CSharp, App-7b, App-8-CSharp, App-9b, App-10b, App-11b, App-13b, App-14-CSharp, App-14c, App-15b, App-16-CSharp, App-17b, App-18b, App-19-CSharp, App-20b) qui déroulent les mêmes algorithmes *from-scratch* en .NET, en complément des versions Python qui invoquent des solveurs industriels. Sous-série d'applications | Python 3.10+ (`ortools`, `python-sat`, `deap`, `mealpy`, `minizinc`, `optuna`, `rustuna`) ; .NET 9 (`dotnet-interactive`) pour les jumeaux C#. Les volumes (notebooks par sous-série, maturité) sont portés par le marqueur `CATALOG-STATUS` du [README de la série](../README.md) — aucun chiffre n'est maintenu ici en prose. @@ -33,8 +33,7 @@ Un algorithme compris sur un exemple jouet n'est pas encore un algorithme maîtr Applications/ ├── Search/ # Applications purement Search (Puissance 4 + jumeaux C#) ├── CSP/ # Applications CSP (problèmes classiques + jumeaux C#) -├── Hybrid/ # Méthodes hybrides / métaheuristiques (+ jumeaux C#) -└── Research/ # Audits de garanties et distillations de preprints (numérotation propre Research-01..) +└── Hybrid/ # Méthodes hybrides / métaheuristiques (+ jumeaux C#) ``` ```mermaid @@ -42,10 +41,9 @@ flowchart LR P1["Partie 1 — Search
exploration, jeux adversariaux"] P2["Partie 2 — CSP
modélisation déclarative
(X, D, C) + propagation"] P4["Partie 4 — Métaheuristiques
SA, GA, ACO, recuit"] - S["Applications Search
ConnectFour, Minimax,
MCTS, AIMA"] + S["Applications Search (5)
3 Python + 2 C# :
ConnectFour, Minimax, MCTS, AIMA,
distillation Szpiro (arithmétique)"] C["Applications CSP
N-Queens, GraphColoring,
Nurse/JobShop, Minesweeper,
Wordle, Picross, WFC..."] H["Applications Hybrides
EdgeDetection, Portfolio,
TSP, VRP, Hyperparameter,
AlgorithmSelection, PRESENT/SAT..."] - R["Applications Research
audits de garanties, distillations
de preprints : EdgeColoring/Tutte,
Factorio, MAPF, VCG, SALBP,
RCPSP/max, Szpiro, neural diving"] P1 --> S P2 --> C P4 --> H @@ -53,14 +51,13 @@ flowchart LR P4 --> R S -.->|"benchmark croisé"| H C -.->|"quand l'espace explose"| H - H -.->|"quand la garantie compte"| R ``` --- ## Applications Search (`Search/`) -Quatre notebooks autour du Puissance 4 — deux Python et deux C# — forment un banc d'essai de la recherche adversariale : assez simple pour être résolu, assez riche pour départager les approches. Un premier binôme construit les joueurs (aléatoire, Minimax α-β, MCTS, glouton, puis le framework AIMA de Russell & Norvig) ; le second compare systématiquement Minimax, Alpha-Beta et MCTS. La distillation de théorie algorithmique des nombres qui les accompagnait (Szpiro/Pasten) a rejoint la sous-série [Research](#applications-research-research) — c'est une distillation de preprint. +Quatre notebooks autour du Puissance 4 — deux Python et deux C# — forment un banc d'essai de la recherche adversariale : assez simple pour être résolu, assez riche pour départager les approches. Un premier binôme construit les joueurs (aléatoire, Minimax α-β, MCTS, glouton, puis le framework AIMA de Russell & Norvig) ; le second compare systématiquement Minimax, Alpha-Beta et MCTS. S'y ajoute une distillation de théorie algorithmique des nombres : le théorème de Szpiro rendu opérable, où le « solveur » est le choix combinatoire optimal d'une factorisation admissible. | # | Notebook | Durée | Contenu | Source | |---|----------|-------|---------|--------| @@ -68,6 +65,7 @@ Quatre notebooks autour du Puissance 4 — deux Python et deux C# — forment un | 1b | [App-14c-ConnectFour-CSharp](Search/App-14c-ConnectFour-CSharp.ipynb) | ~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](Search/App-14-ConnectFour-Adversarial.ipynb) | ~45 min | Benchmark adversarial : Minimax, Alpha-Beta, MCTS | Projet étudiant | | 2b | [App-14-ConnectFour-Adversarial-CSharp](Search/App-14-ConnectFour-Adversarial-CSharp.ipynb) | ~40 min | **Jumeau C#** — Minimax + Alpha-Beta (élagage) + MCTS (UCB1) from-scratch, benchmark nœuds + tournoi round-robin, parité #4956 | Jumeau .NET | +| 3 | [App-32-Szpiro-Pasten-2026](Search/App-32-Szpiro-Pasten-2026.ipynb) | ~25 min | Szpiro rendu opérable : factorisations admissibles `N=DM` (parité paire de `D`), balayage de `M·φ(D)` sur N = 6…30030, proxy `log\|Δ\|/log rad(\|Δ\|)` des courbes `y²=x³+ax+b` — théorème 1.1 et corollaires 1.2/1.3 rendus calculables, 3 exercices | Distillation arXiv 2609.17390 (Pasten 2026, #16549) | --- @@ -159,26 +157,6 @@ Quand l'espace est trop vaste ou l'objectif trop irrégulier pour les méthodes --- -## Applications Research (`Research/`) - -La queue du dossier, et sa frontière avec la recherche : onze carnets qui ne traitent pas un problème classique pour l'apprendre — ils **auditent une garantie** (vérifier empiriquement ce qu'un solveur ou un théorème récent autorise réellement à affirmer) ou **distillent un preprint** (rendre opérable un résultat publié). Chaque carnet confronte une affirmation récente — théorème arXiv, preprint de conception de solveurs, garanties d'un mécanisme d'enchère — à un oracle indépendant, un certificat ou un témoin vérifiable à la main. La sous-série porte sa propre numérotation (`Research-01..11`, modèle `Discrepancy/`) ; les critères d'entrée et la délimitation galerie/recherche sont fixés par l'arbitrage coordinateur du 2026-10-05 ([#17802](https://github.com/jsboige/CoursIA/issues/17802)) : la clause « audite une garantie » porte sur ce que le carnet déclare vouloir établir ; l'hommage commémoratif et l'hommage à un travail étudiant restent en galerie. - -| # | Notebook | Durée | Contenu | Source | -|---|----------|-------|---------|--------| -| 1 | [Research-01-EdgeColoring-Tutte-Python](Research/Research-01-EdgeColoring-Tutte-Python.html) | ~45 min | Coloration d'arêtes cubiques : Vizing, Petersen, ponts, graphes apex et CP-SAT — vérification empirique d'un théorème récent (arXiv 2608.22870) | Nouveau | -| 2 | [Research-02-Factorio-Balancer-Python](Research/Research-02-Factorio-Balancer-Python.html) | ~35 min | Belt balancer Factorio : MIP continu vs CP-SAT discret sur cas borné, N×N throughput-unlimited | Distillation Venturini 2024 | -| 3 | [Research-03-MAPF-Guarantee-Audit-Python](Research/Research-03-MAPF-Guarantee-Audit-Python.html) | ~60 min | MAPF : validateur indépendant, oracle CP-SAT time-expanded, réfutation OD-A*, arrêt CBS au but, audit des garanties ECBS — distillation PrCon G3 (Matteo Atkinson, Paul Witkowski) | Projet étudiant (PrCon PRs #33/#36/#42) | -| 4 | [Research-04-CombinatorialAuctions-WDP-VCG-Python](Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.html) | ~60 min | Enchères combinatoires : WDP exact CP-SAT vs force brute, langage XOR, budget global, paiements VCG et audit de leurs garanties, contre-exemple de manipulation sous budget matérialisé, forensics `PRICE_SCALE` sur 18 instances CATS — distillation PrCon J2 (Majerczyk, Chartouni, Wangon-Zekou) | Projet étudiant (PrCon PR #26) | -| 5 | [Research-05-CoveringArrays-Guarantee-Audit-Python](Research/Research-05-CoveringArrays-Guarantee-Audit-Python.html) | ~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) | -| 6 | [Research-06-LearningToBranch-Generalization-Audit-Python](Research/Research-06-LearningToBranch-Generalization-Audit-Python.html) | ~75 min | Learning to branch : dérivation de dom/wdeg, splits groupés, transfert inter-familles, performance intégrée, coût d'inférence et seuil d'amortissement — distillation PrCon G4 (Simon Naulet, Matis Codjia) | Projet étudiant (PrCon PR #46) | -| 7 | [Research-07-SALBP-AssemblyLineBalancing-Audit-Python](Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.html) | ~70 min | SALBP-1/2 : CP-SAT, PuLP/CBC et RPW, statuts/incumbents/bornes, identité de benchmark, front Pareto certifié et MMALBP robuste/pondéré — distillation PrCon B1 (Ilias Kalalou, Kaelan Grall) | Projet étudiant (PrCon PR #57) | -| 8 | [Research-08-OrbitalAssembly-Certificate-Audit-Python](Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.html) | ~70 min | Assemblage orbital : physique de Hohmann dans le modèle, auditeur externe, preuve que la scalarisation est exactement lexicographique, comparaison à makespan égal, front d'échange ε-contrainte et sonde en taille **et** en densité — distillation PrCon C4 (Gurvan Estable, Joris Bely, Kévin Lubert) | Projet étudiant (PrCon PR #53) | -| 9 | [Research-09-RCPSP-Max-Feasibility-Bounds-Python](Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.html) | ~65 min | RCPSP/max : le lag maximal comme arc inverse, faisabilité NP-difficile et son témoin de circuit positif, balayage des trois régimes temporel/ressource/réalisable, échelle de bornes certifiées et repli explicite quand la référence externe manque — distillation PrCon B4 (Arthur Gallier, Nicolas Naegelen) | Projet étudiant (PrCon PR #51) | -| 10 | [Research-10-Szpiro-Pasten-2026-Python](Research/Research-10-Szpiro-Pasten-2026-Python.html) | ~25 min | Szpiro rendu opérable : factorisations admissibles `N=DM` (parité paire de `D`), balayage de `M·φ(D)` sur N = 6…30030, proxy `log\|Δ\|/log rad(\|Δ\|)` des courbes `y²=x³+ax+b` — théorème 1.1 et corollaires 1.2/1.3 rendus calculables, 3 exercices | Distillation arXiv 2609.17390 (Pasten 2026, #16549) | -| 11 | [Research-11-NeuralDiving-Coloration-Python](Research/Research-11-NeuralDiving-Coloration-Python.html) | ~60 min | Neural diving : un plongeur MLP prédit une affectation partielle, injectée comme hint réparable dans CP-SAT ; la médiane des branches recule (2829 → 2325, 25/25 instances améliorées) alors que ≈ 49 % des arêtes du hint violent l'adjacence — cohérence du hint avec les contraintes, pas précision par bit — hommage Nair et al. 2021 | Recherche (Nair et al. 2021) | - ---- - ## Prérequis par notebook ### Applications Search @@ -189,6 +167,7 @@ La queue du dossier, et sa frontière avec la recherche : onze carnets qui ne tr | App-14 ConnectFour-Adversarial | Search-3 (Heuristiques), Search-6 (AdversarialSearch) | | App-14-CSharp | Search-3 (Heuristiques), Search-6 (AdversarialSearch) | | App-14c-CSharp | Search-6 (AdversarialSearch), Search-7 (MCTS) | +| App-32 Szpiro-Pasten-2026 | Aucun prérequis Search — arithmétique des hauteurs (niveau M1) | ### Applications CSP @@ -244,24 +223,6 @@ La queue du dossier, et sa frontière avec la recherche : onze carnets qui ne tr | App-23 PRESENT Differential Cryptanalysis | SAT, CNF, bit-vectors | python-sat, numpy, matplotlib | | App-27 Sparse Index Tracking Walk-Forward | CSP-3 (CP-SAT), CSP-5 (optimisation), App-10 (portefeuille) | ortools, pandas, numpy | -### Applications Research - -| Notebook | Fondations requises | Dépendances | -|----------|--------------------|-------------| -| Research-01 EdgeColoring-Tutte | coloration de graphes, CSP-3 | networkx, ortools | -| Research-02 Factorio-Balancer | CSP-3 (CP-SAT), CSP-4 | ortools (SCIP + CP-SAT), numpy, matplotlib | -| Research-03 MAPF Guarantee Audit | Search-3 (A*), CSP-3/CSP-4, heuristiques admissibles | ortools, pandas, matplotlib | -| Research-04 CombinatorialAuctions-WDP-VCG | CSP-3 (CP-SAT), CSP-5 (optimisation), GameTheory-16 (VCG) | ortools, pandas, matplotlib | -| Research-05 CoveringArrays Guarantee Audit | CSP-3, CSP-5 | ortools, pandas, matplotlib | -| Research-06 LearningToBranch Generalization Audit | CSP-6 (heuristiques), MGS-16 (sélection d'algorithmes) | numpy, pandas, scikit-learn | -| Research-07 SALBP AssemblyLineBalancing Audit | CSP-3 (CP-SAT), CSP-4 (scheduling), CSP-5 (optimisation) | ortools, pulp, pandas, numpy, matplotlib | -| Research-08 OrbitalAssembly Certificate Audit | CSP-3 (CP-SAT), CSP-4 (scheduling), CSP-5 (optimisation) | ortools, pandas, matplotlib | -| Research-09 RCPSP Max Feasibility Bounds | CSP-4 (scheduling), CSP-3 (CP-SAT), Planners-8 (temporel) | ortools, pandas, numpy, matplotlib | -| Research-10 Szpiro-Pasten-2026 | Aucun prérequis Search — arithmétique des hauteurs (niveau M1) | — | -| Research-11 NeuralDiving Coloration | Research-06 (composante branchement), CSP-3 (CP-SAT), MGS-16 (sélection d'algorithmes) | ortools, scikit-learn, numpy, pandas | - ---- - ## Origine des projets La plupart des notebooks d'application sont adaptés de projets étudiants réalisés dans le cadre de cours d'IA. Les références spécifiques sont indiquées dans chaque notebook. @@ -270,24 +231,8 @@ Le [App-22-AlgorithmSelection-Python](Hybrid/App-22-AlgorithmSelection-Python.ht Le [App-23-PRESENT-Differential-Cryptanalysis-SAT](Hybrid/App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb) distille le projet PrCon F2 de **Théodore Deguest**, *« Cryptanalyse différentielle de PRESENT via SAT »*, PR [PrCon #49](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/49). Le notebook reconstruit l'expérience de façon autonome, reproduit la DDT et les frontières SAT/UNSAT, corrige le seuil documentaire à R=15/W=66 et distingue explicitement trail, cluster et niveau de preuve. -Le [Research-03-MAPF-Guarantee-Audit-Python](Research/Research-03-MAPF-Guarantee-Audit-Python.html) distille le projet PrCon G3 de **Matteo Atkinson** et **Paul Witkowski**, *« Coordination de drones par Multi-Agent Path Finding »*, PRs [PrCon #33](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/33), [#36](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/36) et [#42](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/42). Un rerun frais alimente un validateur et un oracle CP-SAT indépendants ; le notebook distingue trajectoire valide, optimum observé et garantie réellement établie, avec provenance détaillée dans [`Research/data/app24-mapf-audit/SOURCE.md`](Research/data/app24-mapf-audit/SOURCE.md). - -Le [Research-04-CombinatorialAuctions-WDP-VCG-Python](Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.html) distille le projet PrCon J2 de **Lucas Majerczyk**, **Nabil Chartouni** et **Wilfrid Wangon-Zekou**, *« Enchères combinatoires et Winner Determination »*, PR [PrCon #26](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/26). Le notebook ré-écrit le solveur WDP (CP-SAT, prix entiers milli-unités bout-en-bout) sans importer le package `wdp/` des étudiants ; il re-résout les 18 instances CATS, **matérialise en exécutable** le contre-exemple de manipulation sous budget documenté mais jamais testé dans la source, et audite honnêtement l'écart `PRICE_SCALE` entre les outputs committés et le code au commit source. Données et provenance : [`data/app25-wdp-vcg-audit`](Research/data/app25-wdp-vcg-audit/). - -Le [Research-05-CoveringArrays-Guarantee-Audit-Python](Research/Research-05-CoveringArrays-Guarantee-Audit-Python.html) distille le projet PrCon H4 de **Valérian Pichot**, *« Covering Arrays »*, PR [PrCon #58](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/58). Sans recopier le générateur étudiant, le notebook reconstruit un oracle indépendant, un set cover CP-SAT exact et deux baselines approchées ; il reproduit surtout le faux verdict d'un validateur qui exige des interactions sémantiquement impossibles, puis le répare par un univers constraint-aware. Provenance : [`Research/data/app26-covering-arrays-audit/SOURCE.md`](Research/data/app26-covering-arrays-audit/SOURCE.md). - Le [App-27-Sparse-Index-Tracking-Walk-Forward](Hybrid/App-27-Sparse-Index-Tracking-Walk-Forward.ipynb) distille le projet PrCon M2 de **Godric Bouteloup**, *« Sparse Index Tracking »*, PR [PrCon #52](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/52). Le notebook conserve la modélisation CP-SAT en lots entiers, mais reconstruit l'expérience sur un marché synthétique seedé : cardinalité exacte, turnover entre rebalancements consécutifs, validation indépendante, choix de K avant le test et statut/borne/gap explicites. Il matérialise aussi un protocole contaminé pour montrer qu'un score obtenu après consultation du test est ininterprétable, qu'il paraisse meilleur ou moins bon. Cette lecture de méthode reprend ensuite, sans relancer de recherche de marché, les résultats autoritatifs du projet [Sparse-Index-Tracking-QC](../../QuantConnect/projects/Sparse-Index-Tracking-QC/README.md) intégré par la PR CoursIA [#14068](https://github.com/jsboige/CoursIA/pull/14068) : 703 contre 1 414 ordres, mais pas de domination sparse sur les performances ni sur le turnover. **Une recherche, deux lectures.** Provenance : [`Hybrid/data/app27-sparse-index-tracking/SOURCE.md`](Hybrid/data/app27-sparse-index-tracking/SOURCE.md). -Le [Research-06-LearningToBranch-Generalization-Audit-Python](Research/Research-06-LearningToBranch-Generalization-Audit-Python.html) distille le projet PrCon G4 de **Simon Naulet** et **Matis Codjia**, *« Apprentissage d'heuristiques de branchement pour solveur CP »*, PR [PrCon #46](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/46). La reproduction est entièrement réécrite : elle remplace le split par lignes par des instances disjointes, ajoute trois transferts leave-one-family-out et compare l'arbre, le temps total et le coût d'inférence à une baseline choisie sur le train uniquement. Elle établit un résultat négatif utile : une imitation locale fidèle ne garantit ni un arbre plus petit ni un solveur plus rapide. Provenance : [`Research/data/app28-learning-to-branch-audit/SOURCE.md`](Research/data/app28-learning-to-branch-audit/SOURCE.md). - -Le [Research-07-SALBP-AssemblyLineBalancing-Audit-Python](Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.html) rend hommage au projet PrCon B1 d'**Ilias Kalalou** et **Kaelan Grall**, *« Équilibrage de chaîne d'assemblage (SALBP) »*, PR [PrCon #57](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/57). Le notebook préserve leur geste central — SALBP-1/2, comparaison CP-SAT/PuLP/RPW, Pareto et multi-modèles — dans une réécriture CoursIA indépendante qui publie statuts, incumbents, bornes, gaps, identité structurelle des instances et validation hors solveur. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Research/data/app29-salbp-audit/SOURCE.md`](Research/data/app29-salbp-audit/SOURCE.md). - -Le [Research-08-OrbitalAssembly-Certificate-Audit-Python](Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.html) rend hommage au projet PrCon C4 de **Gurvan Estable**, **Joris Bely** et **Kévin Lubert**, *« Assemblage orbital de satellites »*, PR [PrCon #53](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/53). Le geste distillé est une décision de modélisation : faire descendre la physique dans le modèle, durées issues d'un temps de vol de Hohmann calculé et coûts d'un Δv calculé, les deux contraignant les mêmes intervalles CP-SAT. La reproduction CoursIA est indépendante et volontairement discrétisée autrement, donc non comparable chiffre à chiffre : elle ajoute un auditeur externe qui ne partage aucun état avec les solveurs, la preuve que l'objectif scalarisé `makespan × (B+1) + ergol` est *exactement* lexicographique dès que le budget borne l'ergol — ce que le rapport source qualifiait prudemment d'« approximation » —, une comparaison à makespan égal qui sépare l'inefficacité en ergol d'une heuristique de son retard d'échéancier, un front d'échange ε-contrainte dont chaque point porte son statut, et une sonde qui montre que la taille est un mauvais prédicteur de difficulté. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Research/data/app30-orbital-assembly-audit/SOURCE.md`](Research/data/app30-orbital-assembly-audit/SOURCE.md). - -Le [Research-09-RCPSP-Max-Feasibility-Bounds-Python](Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.html) rend hommage au projet PrCon B4 d'**Arthur Gallier** et **Nicolas Naegelen**, *« RCPSP — ordonnancement de projet sous contraintes de ressources »*, PR [PrCon #51](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/51). Leur rendu a fait ce que [Planners-8-Temporal](../../SymbolicAI/Planners/03-Advanced/Planners-8-Temporal-Csharp.ipynb) laissait explicitement « en exercice » : confronter un solveur à un benchmark public d'ordonnancement. La vérification indépendante conduite pour cette distillation confirme leurs dix makespans, tous recalculés `OPTIMAL` par un modèle réécrit de zéro. Le prolongement CoursIA porte sur ce que leur section RCPSP/max rendait possible sans l'exercer : un lag maximal s'encode par un **arc inverse** qui referme un circuit, la faisabilité elle-même devient NP-difficile (Bartusch, Möhring, Radermacher, 1988), et un circuit de poids strictement positif en est le témoin vérifiable à la main. Le notebook balaye les trois régimes — infaisable temporellement, infaisable par les ressources, réalisable —, mesure que le diagnostic polynomial épargne au solveur le tiers gauche du domaine, et propose une échelle de bornes certifiées comme repli explicite lorsqu'aucune référence externe n'est disponible : le champ `niveau_de_preuve` interdit de confondre un écart à une borne calculée avec un écart à un optimum connu. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`Research/data/app31-rcpsp-max/SOURCE.md`](Research/data/app31-rcpsp-max/SOURCE.md). - -Le [Research-11-NeuralDiving-Coloration-Python](Research/Research-11-NeuralDiving-Coloration-Python.html) rend hommage au second geste de l'article de Nair et al. (2021), *« Solving Mixed Integer Programs Using Neural Networks »* (arXiv:2012.13349) : le **diving**, qui apprend une solution partielle pour guider un solveur MIP. Research-06 a audité la composante *branching* (politique de branchement apprise) ; Research-11 enchaîne sur l'autre composante : un plongeur MLP prédit une affectation des 60 sommets d'une coloration de graphe, injectée comme `hint` réparable dans OR-Tools CP-SAT, et l'on mesure l'effet sur les branches de preuve. La famille est calibrée pour qu'une fenêtre existe : les set-cover denses s'effondrent au presolve (`nodes = 0`) et les knapsack corrélés ne se prouvent pas en fenêtre notebook ; la coloration 60 sommets / 3 arêtes branche (médiane 2742, 2303-3799 sur les 60 instances d'entraînement) et se prouve (< 0,1 s). Verdict mesuré sur 25 instances de test, sur un run déterministe (`num_workers = 1`) : la médiane des branches recule (2829 → 2325, ≈ −18 %), les 25 instances s'améliorent (gain relatif médian ≈ 15 %, de 8 % à 28 %), et ≈ 49 % des arêtes du hint (44 sur ~90) sont en conflit avec l'adjacence — la cohérence, pas la précision par bit, détermine l'effet du hint. Le notebook ne copie aucun code, donnée, figure ou prose de l'article, archivé au gisement `G:\Mon Drive\MyIA\IA\Bibliographie IA\Search\`. Provenance : [`Research/data/app33-neural-diving/SOURCE.md`](Research/data/app33-neural-diving/SOURCE.md). - --- ## Ponts inter-séries @@ -321,15 +266,7 @@ Couverture par application des sources fondatrices mobilisées dans cette sous-s | App-22 (AlgorithmSelection-Python) | Rice, J. R. (1976) — « The Algorithm Selection Problem », *Advances in Computers* 15, pp. 65-118 ; et Wolpert, D. H., & Macready, W. G. (1997) — « No Free Lunch Theorems for Optimization », *IEEE Trans. on Evolutionary Computation* 1(1), pp. 67-82. | | App-23 (PRESENT Differential Cryptanalysis SAT) | Bogdanov, A., et al. (2007) — « PRESENT: An Ultra-Lightweight Block Cipher », *CHES 2007* ; Tseitin, G. S. (1968) — transformations CNF ; Eén, N., & Sörensson, N. (2006) — « Translating Pseudo-Boolean Constraints into SAT ». | | App-19 (ProceduralGeneration-WFC) | Gumin, M. (2016) — *WaveFunctionCollapse*, github.com/mxgmn/WaveFunctionCollapse. Génération procédurale de niveaux par propagation de contraintes. | -| Research-03 (MAPF Guarantee Audit) | Stern, R., et al. (2019) — « Multi-Agent Pathfinding: Definitions, Variants, and Benchmarks », *SoCS* ; Sharon, G., et al. (2015) — « Conflict-Based Search for Optimal Multi-Agent Path Finding », *Artificial Intelligence* 219 ; Standley, T. (2010) — « Finding Optimal Solutions to Cooperative Pathfinding Problems », *AAAI* ; Barer, M., et al. (2014) — « Suboptimal Variants of the Conflict-Based Search Algorithm for the Multi-Agent Pathfinding Problem », *SoCS*. | -| Research-04 (CombinatorialAuctions-WDP-VCG) | Rothkopf, M. H., Pekeč, A., & Harstad, R. M. (1998) — « Computationally Combinatorial Auction Design », *Management Science* 44(8) ; Sandholm, T. (2002) — « Algorithm for Optimal Winner Determination in Combinatorial Auctions », *Artificial Intelligence* 135 ; Leyton-Brown, K., Pearson, M., & Shoham, Y. (2000) — « Towards a Universal Test Suite for Combinatorial Auction Design », *EC 2000* (générateur CATS) ; Nisan, N. (2000) — « Bidding and Allocation in Combinatorial Auctions », *EC 2000* (langage XOR) ; Lehmann, D., O'Callaghan, L., & Shoham, Y. (2002) — « Truth Revelation in Approximately Efficient Combinatorial Auctions », *JACM* 49(5) (glouton √m, enchérisseurs single-minded). | -| Research-05 (CoveringArrays Guarantee Audit) | Cohen, D. M., Dalal, S. R., Fredman, M. L., & Patton, G. C. (1997) — « The AETG System: An Approach to Testing Based on Combinatorial Design », *IEEE TSE* 23(7) ; Lei, Y., Kacker, R., Kuhn, D. R., Okun, V., & Lawrence, J. (2007) — « IPOG: A General Strategy for T-Way Software Testing », *ECBS 2007*. | | App-27 (Sparse Index Tracking Walk-Forward) | Beasley, J. E., Meade, N., & Chang, T.-J. (2003) — « An Evolutionary Heuristic for the Index Tracking Problem », *European Journal of Operational Research* 148(3) ; Bailey, D. H., Borwein, J. M., López de Prado, M., & Zhu, Q. J. (2014) — « Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance », *Notices of the AMS* 61(5). | -| Research-06 (LearningToBranch Generalization Audit) | Boussemart, F., Hemery, F., Lecoutre, C., & Sais, L. (2004) — « Boosting Systematic Search by Weighting Constraints », *ECAI* (dom/wdeg) ; Kotthoff, L. (2014) — « Algorithm Selection for Combinatorial Search Problems: A Survey », *AI Magazine* 35(3) ; Bengio, Y., Lodi, A., & Prouvost, A. (2021) — « Machine Learning for Combinatorial Optimization: a Methodological Tour d'Horizon », *European Journal of Operational Research* 290(2) ; Balcan, M.-F., Dick, T., Sandholm, T., & Vitercik, E. (2020) — « Learning to Branch: Generalization Guarantees and Limits of Data-Independent Discretization », *JACM* 67(6). | -| Research-07 (SALBP Assembly Line Balancing Audit) | Salveson, M. E. (1955) — « The Assembly Line Balancing Problem », *Journal of Industrial Engineering* 6(3) ; Helgeson, W. B., & Birnie, D. P. (1961) — « Assembly Line Balancing Using the Ranked Positional Weight Technique », *Journal of Industrial Engineering* 12(6) ; Scholl, A. (1999) — *Balancing and Sequencing of Assembly Lines*, Physica-Verlag. | -| Research-08 (OrbitalAssembly Certificate Audit) | Hohmann, W. (1925) — *Die Erreichbarkeit der Himmelskörper*, Oldenbourg ; Vallado, D. A. (2013) — *Fundamentals of Astrodynamics and Applications*, 4e éd., Microcosm Press ; Haimes, Y. Y., Lasdon, L. S., & Wismer, D. A. (1971) — « On a Bicriterion Formulation of the Problems of Integrated System Identification and System Optimization », *IEEE Transactions on Systems, Man, and Cybernetics* 1(3) (ε-contrainte) ; Wilcoxon, F. (1945) — « Individual Comparisons by Ranking Methods », *Biometrics Bulletin* 1(6). | -| Research-09 (RCPSP Max Feasibility Bounds) | Bartusch, M., Möhring, R. H., & Radermacher, F. J. (1988) — « Scheduling Project Networks with Resource Constraints and Time Windows », *Annals of Operations Research* 16(1) ; Kolisch, R., & Sprecher, A. (1997) — « PSPLIB — A Project Scheduling Problem Library », *European Journal of Operational Research* 96(1) ; Neumann, K., Schwindt, C., & Zimmermann, J. (2003) — *Project Scheduling with Time Windows and Scarce Resources*, Springer ; Bellman, R. (1958) — « On a Routing Problem », *Quarterly of Applied Mathematics* 16(1) (relaxation et détection de circuit). | -| Research-11 (Neural Diving Coloration) | Nair, V., Bartunov, S., Gimeno, F., et al. (2021) — « Solving Mixed Integer Programs Using Neural Networks », arXiv:2012.13349 (v3, juillet 2021) ; Bengio, Y., Lodi, A., & Prouvost, A. (2021) — « Machine Learning for Combinatorial Optimization: a Methodological Tour d'Horizon », *European Journal of Operational Research* 290(2). | ## Conclusion / Prochaines étapes diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/difficulty_probe.csv b/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/difficulty_probe.csv deleted file mode 100644 index 7494e95776..0000000000 --- a/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/difficulty_probe.csv +++ /dev/null @@ -1,25 +0,0 @@ -densite,n_modules,seed,n_burns,separations,couloirs,horizon,pond_status,pond_mk,pond_fuel,pond_wall_s,2p_status,2p_mk,2p_fuel,2p_wall_s,2p_mk_certifie,2p_certifie,audit_pond,audit_2p -0.25,16,11,32,25,6,448,OPTIMAL,121,1791,0.07,OPTIMAL/OPTIMAL,121,1791,0.11,True,True,True,True -0.25,16,22,32,24,6,448,OPTIMAL,118,1793,0.04,OPTIMAL/OPTIMAL,118,1793,0.08,True,True,True,True -0.25,16,33,32,32,6,448,OPTIMAL,121,1897,0.04,OPTIMAL/OPTIMAL,121,1897,0.07,True,True,True,True -0.25,32,11,64,109,11,800,OPTIMAL,226,3850,0.29,OPTIMAL/OPTIMAL,226,3850,0.35,True,True,True,True -0.25,32,22,64,124,11,800,OPTIMAL,202,3909,0.08,OPTIMAL/OPTIMAL,202,3909,0.22,True,True,True,True -0.25,32,33,64,116,11,800,OPTIMAL,204,3753,0.11,OPTIMAL/OPTIMAL,204,3753,0.17,True,True,True,True -0.25,64,11,128,497,22,1504,OPTIMAL,382,7346,0.22,OPTIMAL/OPTIMAL,382,7346,0.5,True,True,True,True -0.25,64,22,128,490,22,1504,OPTIMAL,383,7285,0.26,OPTIMAL/OPTIMAL,383,7285,0.38,True,True,True,True -0.25,64,33,128,514,22,1504,FEASIBLE,386,7450,10.05,OPTIMAL/FEASIBLE,386,7449,10.55,True,False,True,True -0.25,90,11,180,975,30,2076,OPTIMAL,518,10289,0.62,OPTIMAL/OPTIMAL,518,10289,1.1,True,True,True,True -0.25,90,22,180,972,30,2076,OPTIMAL,528,10548,0.91,OPTIMAL/OPTIMAL,528,10548,1.52,True,True,True,True -0.25,90,33,180,993,30,2076,OPTIMAL,526,10445,0.48,OPTIMAL/OPTIMAL,526,10445,1.16,True,True,True,True -0.6,16,11,32,63,6,448,OPTIMAL,129,1816,1.06,OPTIMAL/OPTIMAL,129,1816,1.06,True,True,True,True -0.6,16,22,32,65,6,448,OPTIMAL,118,1795,0.04,OPTIMAL/OPTIMAL,118,1795,0.09,True,True,True,True -0.6,16,33,32,76,6,448,OPTIMAL,122,1900,0.06,OPTIMAL/OPTIMAL,122,1900,0.1,True,True,True,True -0.6,32,11,64,285,11,800,FEASIBLE,245,3864,10.02,FEASIBLE/FEASIBLE,244,3867,20.05,False,False,True,True -0.6,32,22,64,274,11,800,FEASIBLE,202,3930,10.02,OPTIMAL/FEASIBLE,202,3930,10.18,True,False,True,True -0.6,32,33,64,268,11,800,OPTIMAL,204,3776,0.21,OPTIMAL/OPTIMAL,204,3776,0.37,True,True,True,True -0.6,64,11,128,1190,22,1504,OPTIMAL,384,7367,0.6,OPTIMAL/OPTIMAL,384,7367,1.15,True,True,True,True -0.6,64,22,128,1184,22,1504,FEASIBLE,383,7314,10.03,OPTIMAL/FEASIBLE,383,7316,10.74,True,False,True,True -0.6,64,33,128,1170,22,1504,FEASIBLE,411,7519,10.08,FEASIBLE/FEASIBLE,401,7425,20.07,False,False,True,True -0.6,90,11,180,2362,30,2076,FEASIBLE,521,10503,10.06,OPTIMAL/FEASIBLE,521,10498,11.6,True,False,True,True -0.6,90,22,180,2351,30,2076,OPTIMAL,531,10455,1.53,OPTIMAL/OPTIMAL,531,10455,3.23,True,True,True,True -0.6,90,33,180,2336,30,2076,OPTIMAL,529,10453,1.66,OPTIMAL/OPTIMAL,529,10453,2.14,True,True,True,True diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/temporal_regimes.csv b/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/temporal_regimes.csv deleted file mode 100644 index 180ea87695..0000000000 --- a/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/temporal_regimes.csv +++ /dev/null @@ -1,217 +0,0 @@ -jeu,graine,lags,regime,statut,makespan,secondes,temoin --3,0,6,T,circuit positif,,0.0,8-10-8 --3,1,12,T,circuit positif,,0.0,10-11-10 --3,2,8,T,circuit positif,,0.0,10-13-10 --3,3,12,T,circuit positif,,0.0,7-10-7 --3,4,13,T,circuit positif,,0.0,10-11-10 --3,5,13,T,circuit positif,,0.0,10-13-10 --3,6,13,T,circuit positif,,0.0,11-12-11 --3,7,13,T,circuit positif,,0.0,6-11-6 --3,8,17,T,circuit positif,,0.0,8-12-8 --3,9,19,T,circuit positif,,0.0,11-13-11 --3,10,13,T,circuit positif,,0.0,8-9-8 --3,11,21,T,circuit positif,,0.0,11-13-11 --3,12,17,T,circuit positif,,0.0,12-13-11-12 --3,13,15,T,circuit positif,,0.0,7-8-7 --3,14,11,T,circuit positif,,0.0,9-11-9 --3,15,14,T,circuit positif,,0.0,9-11-9 --3,16,21,T,circuit positif,,0.0,10-9-10 --3,17,12,T,circuit positif,,0.0,7-13-7 --3,18,14,T,circuit positif,,0.0,10-12-10 --3,19,17,T,circuit positif,,0.0,8-9-8 --3,20,18,T,circuit positif,,0.0,8-6-8 --3,21,13,T,circuit positif,,0.0,8-12-8 --3,22,10,T,circuit positif,,0.0,10-13-10 --3,23,13,T,circuit positif,,0.0,8-11-8 --2,0,6,T,circuit positif,,0.0,8-10-8 --2,1,12,T,circuit positif,,0.0,10-11-10 --2,2,8,T,circuit positif,,0.0,10-13-10 --2,3,12,T,circuit positif,,0.0,7-10-7 --2,4,13,T,circuit positif,,0.0,10-11-10 --2,5,13,T,circuit positif,,0.0,10-13-10 --2,6,13,T,circuit positif,,0.0,11-12-11 --2,7,13,T,circuit positif,,0.0,6-11-6 --2,8,17,T,circuit positif,,0.0,8-12-8 --2,9,19,T,circuit positif,,0.0,11-13-11 --2,10,13,T,circuit positif,,0.0,8-9-8 --2,11,21,T,circuit positif,,0.0,11-13-11 --2,12,17,T,circuit positif,,0.0,12-13-11-12 --2,13,15,T,circuit positif,,0.0,7-8-7 --2,14,11,T,circuit positif,,0.0,9-11-9 --2,15,14,T,circuit positif,,0.0,9-11-9 --2,16,21,T,circuit positif,,0.0,10-9-10 --2,17,12,T,circuit positif,,0.0,7-13-7 --2,18,14,T,circuit positif,,0.0,10-12-10 --2,19,17,T,circuit positif,,0.0,8-9-8 --2,20,18,T,circuit positif,,0.0,8-6-8 --2,21,13,T,circuit positif,,0.0,8-12-8 --2,22,10,T,circuit positif,,0.0,10-13-10 --2,23,13,T,circuit positif,,0.0,8-11-8 --1,0,6,T,circuit positif,,0.0,8-10-8 --1,1,12,T,circuit positif,,0.0,10-11-10 --1,2,8,T,circuit positif,,0.0,10-13-10 --1,3,12,T,circuit positif,,0.0,7-10-7 --1,4,13,T,circuit positif,,0.0,10-11-10 --1,5,13,T,circuit positif,,0.0,10-13-10 --1,6,13,T,circuit positif,,0.0,11-12-11 --1,7,13,T,circuit positif,,0.0,6-11-6 --1,8,17,T,circuit positif,,0.0,8-12-8 --1,9,19,T,circuit positif,,0.0,11-13-11 --1,10,13,T,circuit positif,,0.0,8-9-8 --1,11,21,T,circuit positif,,0.0,11-13-11 --1,12,17,T,circuit positif,,0.0,12-13-11-12 --1,13,15,T,circuit positif,,0.0,7-8-7 --1,14,11,T,circuit positif,,0.0,9-11-9 --1,15,14,T,circuit positif,,0.0,9-11-9 --1,16,21,T,circuit positif,,0.0,10-9-10 --1,17,12,T,circuit positif,,0.0,7-13-7 --1,18,14,T,circuit positif,,0.0,10-12-10 --1,19,17,T,circuit positif,,0.0,8-9-8 --1,20,18,T,circuit positif,,0.0,8-6-8 --1,21,13,T,circuit positif,,0.0,8-12-8 --1,22,10,T,circuit positif,,0.0,10-13-10 --1,23,13,T,circuit positif,,0.0,8-11-8 -0,0,6,R,INFEASIBLE,,0.004877800005488098, -0,1,12,R,INFEASIBLE,,0.0020114000071771443, -0,2,8,R,INFEASIBLE,,0.0025470999826211482, -0,3,12,R,INFEASIBLE,,0.002203500014729798, -0,4,13,R,INFEASIBLE,,0.002130400011083111, -0,5,13,R,INFEASIBLE,,0.0030553000106010586, -0,6,13,R,INFEASIBLE,,0.0026282000180799514, -0,7,13,R,INFEASIBLE,,0.0025000000023283064, -0,8,17,R,INFEASIBLE,,0.0029725000204052776, -0,9,19,R,INFEASIBLE,,0.02789840000332333, -0,10,13,R,INFEASIBLE,,0.0023286000068765134, -0,11,21,R,INFEASIBLE,,0.0023318999737966806, -0,12,17,R,INFEASIBLE,,0.0024981999886222184, -0,13,15,R,INFEASIBLE,,0.0020985000010114163, -0,14,11,R,INFEASIBLE,,0.0024321999808307737, -0,15,14,R,INFEASIBLE,,0.0032282999891322106, -0,16,21,R,INFEASIBLE,,0.002691500005312264, -0,17,12,R,INFEASIBLE,,0.002427600004011765, -0,18,14,R,INFEASIBLE,,0.0023560000117868185, -0,19,17,R,INFEASIBLE,,0.0025338999985251576, -0,20,18,R,INFEASIBLE,,0.0024098000139929354, -0,21,13,R,INFEASIBLE,,0.0024630000116303563, -0,22,10,R,INFEASIBLE,,0.02153359999647364, -0,23,13,R,INFEASIBLE,,0.0023108999885153025, -1,0,6,R,INFEASIBLE,,0.002523500006645918, -1,1,12,R,INFEASIBLE,,0.0022702999995090067, -1,2,8,R,INFEASIBLE,,0.02110850001918152, -1,3,12,R,INFEASIBLE,,0.00237800000468269, -1,4,13,R,INFEASIBLE,,0.0022567000123672187, -1,5,13,R,INFEASIBLE,,0.026266400003805757, -1,6,13,R,INFEASIBLE,,0.0034576000180095434, -1,7,13,F,OPTIMAL,26.0,0.009286399988923222, -1,8,17,R,INFEASIBLE,,0.0021526000055018812, -1,9,19,R,INFEASIBLE,,0.02799199998844415, -1,10,13,R,INFEASIBLE,,0.003484000015305355, -1,11,21,R,INFEASIBLE,,0.0027116000128444284, -1,12,17,R,INFEASIBLE,,0.002673999988473952, -1,13,15,R,INFEASIBLE,,0.0017813000013120472, -1,14,11,R,INFEASIBLE,,0.0018274000030942261, -1,15,14,R,INFEASIBLE,,0.013239799998700619, -1,16,21,R,INFEASIBLE,,0.0023991999914869666, -1,17,12,R,INFEASIBLE,,0.0019899999897461385, -1,18,14,R,INFEASIBLE,,0.002109199995175004, -1,19,17,R,INFEASIBLE,,0.002273499994771555, -1,20,18,R,INFEASIBLE,,0.0023862999805714935, -1,21,13,R,INFEASIBLE,,0.0027076999831479043, -1,22,10,R,INFEASIBLE,,0.0280170000041835, -1,23,13,R,INFEASIBLE,,0.0027267000114079565, -2,0,6,F,OPTIMAL,41.0,0.01076689999899827, -2,1,12,R,INFEASIBLE,,0.014849099999992177, -2,2,8,R,INFEASIBLE,,0.03040700001292862, -2,3,12,R,INFEASIBLE,,0.002546600007917732, -2,4,13,R,INFEASIBLE,,0.002555500017479062, -2,5,13,R,INFEASIBLE,,0.1171502000070177, -2,6,13,R,INFEASIBLE,,0.0031968999828677624, -2,7,13,F,OPTIMAL,26.0,0.026086099998792633, -2,8,17,R,INFEASIBLE,,0.002491599996574223, -2,9,19,R,INFEASIBLE,,0.02800849999766797, -2,10,13,R,INFEASIBLE,,0.004099400015547872, -2,11,21,R,INFEASIBLE,,0.0032368999964091927, -2,12,17,R,INFEASIBLE,,0.01898950000759214, -2,13,15,R,INFEASIBLE,,0.00217349999002181, -2,14,11,R,INFEASIBLE,,0.002365699998335913, -2,15,14,R,INFEASIBLE,,0.02488530002301559, -2,16,21,R,INFEASIBLE,,0.003424299997277558, -2,17,12,R,INFEASIBLE,,0.002330999996047467, -2,18,14,R,INFEASIBLE,,0.0024081000010482967, -2,19,17,R,INFEASIBLE,,0.002963100007036701, -2,20,18,R,INFEASIBLE,,0.002510200021788478, -2,21,13,R,INFEASIBLE,,0.002522900002077222, -2,22,10,R,INFEASIBLE,,0.024620499985758215, -2,23,13,R,INFEASIBLE,,0.004011499986518174, -3,0,6,F,OPTIMAL,41.0,0.025123100000200793, -3,1,12,R,INFEASIBLE,,0.012895499996375293, -3,2,8,R,INFEASIBLE,,0.03085889999056235, -3,3,12,R,INFEASIBLE,,0.004120600002352148, -3,4,13,R,INFEASIBLE,,0.02506109999376349, -3,5,13,R,INFEASIBLE,,0.02873289998387918, -3,6,13,R,INFEASIBLE,,0.005003800004487857, -3,7,13,F,OPTIMAL,26.0,0.024654200009535998, -3,8,17,R,INFEASIBLE,,0.0040157999901566654, -3,9,19,R,INFEASIBLE,,0.0402200999960769, -3,10,13,R,INFEASIBLE,,0.013661300006788224, -3,11,21,R,INFEASIBLE,,0.0022547999978996813, -3,12,17,R,INFEASIBLE,,0.011067799990996718, -3,13,15,R,INFEASIBLE,,0.0019676000229083, -3,14,11,R,INFEASIBLE,,0.0026864000246860087, -3,15,14,R,INFEASIBLE,,0.040971800015540794, -3,16,21,R,INFEASIBLE,,0.0030414000211749226, -3,17,12,R,INFEASIBLE,,0.0019256000232417136, -3,18,14,R,INFEASIBLE,,0.002665499981958419, -3,19,17,R,INFEASIBLE,,0.03698229999281466, -3,20,18,R,INFEASIBLE,,0.003273800015449524, -3,21,13,R,INFEASIBLE,,0.002871899981983006, -3,22,10,R,INFEASIBLE,,0.02058689997647889, -3,23,13,R,INFEASIBLE,,0.0025400000158697367, -5,0,6,F,OPTIMAL,41.0,0.02744819998042658, -5,1,12,R,INFEASIBLE,,0.02969710002071224, -5,2,8,F,OPTIMAL,34.0,0.014154599979519844, -5,3,12,R,INFEASIBLE,,0.0025221999967470765, -5,4,13,R,INFEASIBLE,,0.028699200018309057, -5,5,13,R,INFEASIBLE,,0.03091639999183826, -5,6,13,F,OPTIMAL,37.0,0.02888980001443997, -5,7,13,F,OPTIMAL,25.0,0.02969450000091456, -5,8,17,R,INFEASIBLE,,0.03018639999208972, -5,9,19,R,INFEASIBLE,,0.07914070002152584, -5,10,13,R,INFEASIBLE,,0.04707349999807775, -5,11,21,R,INFEASIBLE,,0.004245099989930168, -5,12,17,R,INFEASIBLE,,0.03892910000286065, -5,13,15,R,INFEASIBLE,,0.007151199999498203, -5,14,11,R,INFEASIBLE,,0.11265890000504442, -5,15,14,R,INFEASIBLE,,0.18712419999064878, -5,16,21,R,INFEASIBLE,,0.04452259998652153, -5,17,12,R,INFEASIBLE,,0.002723800018429756, -5,18,14,R,INFEASIBLE,,0.02704089999315329, -5,19,17,F,OPTIMAL,35.0,0.02958020000369288, -5,20,18,R,INFEASIBLE,,0.004687599983299151, -5,21,13,R,INFEASIBLE,,0.02401839999947697, -5,22,10,R,INFEASIBLE,,0.029342499998165295, -5,23,13,R,INFEASIBLE,,0.0301270000054501, -8,0,6,F,OPTIMAL,40.0,0.04612280000583269, -8,1,12,F,OPTIMAL,36.0,0.026668100006645545, -8,2,8,F,OPTIMAL,34.0,0.030189599987352267, -8,3,12,R,INFEASIBLE,,0.030416199995670468, -8,4,13,F,OPTIMAL,32.0,0.030379100004211068, -8,5,13,F,OPTIMAL,42.0,0.012948300020070747, -8,6,13,F,OPTIMAL,33.0,0.030540600011590868, -8,7,13,F,OPTIMAL,23.0,0.03137759998207912, -8,8,17,F,OPTIMAL,32.0,0.029062099987640977, -8,9,19,F,OPTIMAL,34.0,0.02860839999630116, -8,10,13,F,OPTIMAL,36.0,0.014885000011418015, -8,11,21,R,INFEASIBLE,,0.0027874000079464167, -8,12,17,F,OPTIMAL,40.0,0.027725599997211248, -8,13,15,R,INFEASIBLE,,0.04519910001545213, -8,14,11,F,OPTIMAL,35.0,0.029204399994341657, -8,15,14,F,OPTIMAL,34.0,0.03076680001686327, -8,16,21,F,OPTIMAL,41.0,0.013430599996354431, -8,17,12,F,OPTIMAL,35.0,0.014206899999408051, -8,18,14,F,OPTIMAL,38.0,0.030891800008248538, -8,19,17,F,OPTIMAL,31.0,0.0283828999963589, -8,20,18,F,OPTIMAL,37.0,0.014562399999704212, -8,21,13,R,INFEASIBLE,,0.0629876000166405, -8,22,10,F,OPTIMAL,32.0,0.028490299999248236, -8,23,13,F,OPTIMAL,41.0,0.014253400004236028, diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb similarity index 98% rename from MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb rename to MyIA.AI.Notebooks/Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb index 718407a2e7..38d7f5f02e 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb @@ -14,7 +14,7 @@ "tags": [] }, "source": [ - "# Research-10 — Szpiro : Pasten 2026 rend `N log log N` inconditionnel\n", + "# App-32 — Szpiro : Pasten 2026 rend `N log log N` inconditionnel\n", "\n", "[← Applications Search](../../README.md) | [Série Search](../../../README.md)\n", "\n", @@ -659,8 +659,8 @@ "end_time": "2026-09-18T13:24:28.095906", "environment_variables": {}, "exception": null, - "input_path": "MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb", - "output_path": "MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb", + "input_path": "MyIA.AI.Notebooks/Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb", + "output_path": "MyIA.AI.Notebooks/Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb", "parameters": {}, "start_time": "2026-09-18T13:24:25.798720", "version": "2.6.0" diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-01-EdgeColoring-Tutte-Python.ipynb similarity index 99% rename from MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-01-EdgeColoring-Tutte-Python.ipynb index 5e5fe0f823..ff5e3744e1 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-01-EdgeColoring-Tutte-Python.ipynb @@ -57,9 +57,9 @@ "tags": [] }, "source": [ - "# Research-01 : Coloration d'arêtes et conjecture de Tutte\n", + "# Frontieres-01 : Coloration d'arêtes et conjecture de Tutte\n", "\n", - "**Navigation** : [<< App-21 VoiceLeading](../CSP/App-21-VoiceLeading.ipynb) | [Index](../../README.md)\n", + "**Navigation** : [<< App-21 VoiceLeading](../Applications/CSP/App-21-VoiceLeading.ipynb) | [Série Search](../README.md)\n", "\n", "## Objectifs d'apprentissage\n", "\n", @@ -70,7 +70,7 @@ "3. **Construire** des familles témoins : le graphe de Petersen (plus petit snark), un graphe cubique à pont, les échelles de Möbius (non planaires mais apex)\n", "4. **Vérifier empiriquement** un théorème récent (arXiv 2608.22870, 2026) : tout graphe cubique **sans pont et apex** admet une 3-coloration d'arêtes\n", "\n", - "Ce notebook prolonge [App-2 : Coloration de Graphes](../CSP/App-2-GraphColoring.ipynb), qui traitait la coloration de **sommets** — ici, ce sont les **arêtes** que l'on colore." + "Ce notebook prolonge [App-2 : Coloration de Graphes](../Applications/CSP/App-2-GraphColoring.ipynb), qui traitait la coloration de **sommets** — ici, ce sont les **arêtes** que l'on colore." ] }, { @@ -1481,7 +1481,7 @@ "**Perspectives** : un compagnon Lean (tranche B de l'issue #13031) formalisera les définitions (cubique, sans pont, apex, 3-arête-colorable) sur `Mathlib.Combinatorics.SimpleGraph` et vérifiera exécutivement que le Petersen n'est pas 3-arête-colorable. La formalisation de la preuve complète (réductibilité + déchargement) est explicitement hors périmètre : c'est l'échelle du théorème des quatre couleurs (années-homme, cf. Gonthier).\n", "\n", "**Références** :\n", - "- [App-2 : Coloration de Graphes](../CSP/App-2-GraphColoring.ipynb) — coloration de sommets\n", + "- [App-2 : Coloration de Graphes](../Applications/CSP/App-2-GraphColoring.ipynb) — coloration de sommets\n", "- Vizing (1964), *On an estimate of the chromatic class of a p-graph*\n", "- Tutte (1966), *On the algebraic characterization of some graph classes*\n", "- arXiv 2608.22870 (2026), *Three-edge-coloring apex cubic graphs* — preuve assistée par ordinateur, algorithme $O(n^2)$\n", @@ -1513,8 +1513,8 @@ "end_time": "2026-08-26T07:09:59.851046+00:00", "environment_variables": {}, "exception": null, - "input_path": "Research-01-EdgeColoring-Tutte-Python.ipynb", - "output_path": "Research-01-EdgeColoring-Tutte-Python.ipynb", + "input_path": "Frontieres-01-EdgeColoring-Tutte-Python.ipynb", + "output_path": "Frontieres-01-EdgeColoring-Tutte-Python.ipynb", "parameters": {}, "start_time": "2026-08-26T07:09:53.031757+00:00", "version": "2.7.0" diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-02-Factorio-Balancer-Python.ipynb similarity index 99% rename from MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-02-Factorio-Balancer-Python.ipynb index 21e33a4681..3b110d1b62 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-02-Factorio-Balancer-Python.ipynb @@ -50,9 +50,9 @@ "tags": [] }, "source": [ - "# Research-02 - Factorio Belt Balancer (CP-SAT borne)\n", + "# Frontieres-02 - Factorio Belt Balancer (CP-SAT borne)\n", "\n", - "**Navigation** : [<< Research-01 EdgeColoring Tutte](Research-01-EdgeColoring-Tutte-Python.ipynb) | [Index](../README.md) | [Research-05 Covering Arrays >>](Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb)\n", + "**Navigation** : [<< Frontieres-01 EdgeColoring Tutte](Frontieres-01-EdgeColoring-Tutte-Python.ipynb) | [Partie 5](README.md) | [Frontieres-05 Covering Arrays >>](Frontieres-05-CoveringArrays-Guarantee-Audit-Python.ipynb)\n", "\n", "## Belt balancer Factorio : MIP continu vs CP-SAT discret sur cas borne\n", "\n", @@ -2467,8 +2467,8 @@ "end_time": "2026-09-12T19:01:31.739521", "environment_variables": {}, "exception": null, - "input_path": "MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb", - "output_path": "MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb", + "input_path": "MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-02-Factorio-Balancer-Python.ipynb", + "output_path": "MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-02-Factorio-Balancer-Python.ipynb", "parameters": {}, "start_time": "2026-09-12T19:00:34.530542", "version": "2.6.0" diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-03-MAPF-Guarantee-Audit-Python.ipynb similarity index 99% rename from MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-03-MAPF-Guarantee-Audit-Python.ipynb index 6d6266cd31..9d1faae04b 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-03-MAPF-Guarantee-Audit-Python.ipynb @@ -14,9 +14,9 @@ "tags": [] }, "source": [ - "# Research-03 — MAPF : auditer les garanties des solveurs\n", + "# Frontieres-03 — MAPF : auditer les garanties des solveurs\n", "\n", - "> **Navigation** : [Applications Search](../README.md) · [App-23 PRESENT/SAT](../Hybrid/App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb) · [Search-3 A*](../../Part1-Foundations/Search-03-Informed.ipynb) · [CSP-4 Scheduling](../../Part2-CSP/CSP-4-Scheduling.ipynb)\n", + "> **Navigation** : [Partie 5](README.md) · [App-23 PRESENT/SAT](../Applications/Hybrid/App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb) · [Search-3 A*](../Part1-Foundations/Search-03-Informed.ipynb) · [CSP-4 Scheduling](../Part2-CSP/CSP-4-Scheduling.ipynb)\n", "\n", "## Objectifs d'apprentissage\n", "\n", @@ -1310,8 +1310,8 @@ "end_time": "2026-08-28T14:57:47.128348+00:00", "environment_variables": {}, "exception": null, - "input_path": "Research-03-MAPF-Guarantee-Audit-Python.ipynb", - "output_path": "Research-03-MAPF-Guarantee-Audit-Python.ipynb", + "input_path": "Frontieres-03-MAPF-Guarantee-Audit-Python.ipynb", + "output_path": "Frontieres-03-MAPF-Guarantee-Audit-Python.ipynb", "parameters": {}, "start_time": "2026-08-28T14:57:43.006649+00:00", "version": "2.7.0" diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-04-CombinatorialAuctions-WDP-VCG-Python.ipynb similarity index 98% rename from MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-04-CombinatorialAuctions-WDP-VCG-Python.ipynb index 8c2aa82aa8..dcb29219bc 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-04-CombinatorialAuctions-WDP-VCG-Python.ipynb @@ -14,9 +14,9 @@ "tags": [] }, "source": [ - "# Research-04 — Enchères combinatoires : Winner Determination à grande échelle et audit des garanties VCG\n", + "# Frontieres-04 — Enchères combinatoires : Winner Determination à grande échelle et audit des garanties VCG\n", "\n", - "> **Navigation** : [Applications Search](../README.md) · [GameTheory — théorie des mécanismes](../../../GameTheory/README.md) · [CSP-3 (CP-SAT avancé)](../../Part2-CSP/CSP-3-Advanced.ipynb)\n", + "> **Navigation** : [Partie 5](README.md) · [GameTheory — théorie des mécanismes](../../GameTheory/README.md) · [CSP-3 (CP-SAT avancé)](../Part2-CSP/CSP-3-Advanced.ipynb)\n", "\n", "## Objectifs d'apprentissage\n", "\n", @@ -29,7 +29,7 @@ "5. **matérialiser un contre-exemple documenté** : VCG avec contrainte de budget n'est pas truthful (surplus 7 contre 0), alors que trois propriétés survivent mécaniquement ;\n", "6. lire un artefact numérique avec un œil forensique : le mismatch `PRICE_SCALE`/`bid_alpha` des outputs étudiants.\n", "\n", - "**Prérequis** : [CSP-3 (CP-SAT)](../../Part2-CSP/CSP-3-Advanced.ipynb), bases de théorie des mécanismes ([GameTheory-16](../../../GameTheory/GameTheory-16-MechanismDesign-Python.ipynb)). **Durée estimée** : 60 min.\n", + "**Prérequis** : [CSP-3 (CP-SAT)](../Part2-CSP/CSP-3-Advanced.ipynb), bases de théorie des mécanismes ([GameTheory-16](../../GameTheory/GameTheory-16-MechanismDesign-Python.ipynb)). **Durée estimée** : 60 min.\n", "\n", "## Hommage à un travail étudiant\n", "\n", @@ -162,7 +162,7 @@ "\n", "Le **Winner Determination Problem** : étant donné $m$ items et $n$ offres (l'offre $j$ porte sur un bundle $S_j$ au prix $p_j$), choisir l'ensemble d'offres gagnantes qui **maximise le revenu** $\\sum_j p_j x_j$ sous exclusivité d'item — chaque item va à au plus un gagnant (hypothèse de *free disposal* côté vendeur, Cramton-Shoham-Steinberg 2006 ch. 1 : un item peut rester invendu). C'est un **set packing pondéré**, NP-difficile (Rothkopf-Pekeč-Harstad 1998 ; Sandholm 2002).\n", "\n", - "CoursIA résout déjà le VCG combinatoire **par énumération exhaustive des allocations** — [`examples/vcg_auction.py`](../../../GameTheory/examples/vcg_auction.py) parcourt le powerset des bundles, et [GameTheory-16 §4.5](../../../GameTheory/GameTheory-16-MechanismDesign-Python.ipynb) énumère les affectations d'objets à la main pour 2 objets. Ce notebook montre où cette approche meurt, et ce qui la remplace." + "CoursIA résout déjà le VCG combinatoire **par énumération exhaustive des allocations** — [`examples/vcg_auction.py`](../../GameTheory/examples/vcg_auction.py) parcourt le powerset des bundles, et [GameTheory-16 §4.5](../../GameTheory/GameTheory-16-MechanismDesign-Python.ipynb) énumère les affectations d'objets à la main pour 2 objets. Ce notebook montre où cette approche meurt, et ce qui la remplace." ] }, { @@ -312,7 +312,7 @@ "source": [ "### 2.2 Le modèle CP-SAT : set packing pondéré\n", "\n", - "Variables $x_j \\in \\{0,1\\}$, objectif $\\max \\sum_j p_j x_j$, contraintes : (1) exclusivité d'item $\\sum_{j \\ni i} x_j \\le 1$ ; (2) budget global optionnel $\\sum_j p_j x_j \\le C$ — exprimé **en prix déclarés** (ce point deviendra central au §6) ; (3) groupes XOR optionnels $\\sum_{j \\in G} x_j \\le 1$. C'est la même famille de modèles que [CSP-3](../../Part2-CSP/CSP-3-Advanced.ipynb) et [CSP-5](../../Part2-CSP/CSP-5-Optimization.ipynb)." + "Variables $x_j \\in \\{0,1\\}$, objectif $\\max \\sum_j p_j x_j$, contraintes : (1) exclusivité d'item $\\sum_{j \\ni i} x_j \\le 1$ ; (2) budget global optionnel $\\sum_j p_j x_j \\le C$ — exprimé **en prix déclarés** (ce point deviendra central au §6) ; (3) groupes XOR optionnels $\\sum_{j \\in G} x_j \\le 1$. C'est la même famille de modèles que [CSP-3](../Part2-CSP/CSP-3-Advanced.ipynb) et [CSP-5](../Part2-CSP/CSP-5-Optimization.ipynb)." ] }, { @@ -2040,7 +2040,7 @@ "tags": [] }, "source": [ - "**Interprétation.** L'audit passe à l'échelle réelle : `optimal_solves` confirme que **toutes** les sous-résolutions (6 au total) ont prouvé l'optimalité — sans quoi les paiements seraient faussés silencieusement (c'est le garde-fou de Nisan-Ronen 2007 repris par le projet J2). Sur cette instance, le vendeur capte **70.3 %** du welfare (628.991 unités laissées aux gagnants) — mais rien ne généralise : le revenu VCG dépend des externalités croisées, et la littérature documente les pathologies inverses (revenu faible ou nul, non-monotonie à l'ajout d'un enchérisseur — Ausubel-Milgrom 2006, Conitzer-Sandholm 2006, démontrée dans [GameTheory-16 §4.5-4.6](../../../GameTheory/GameTheory-16-MechanismDesign-Python.ipynb))." + "**Interprétation.** L'audit passe à l'échelle réelle : `optimal_solves` confirme que **toutes** les sous-résolutions (6 au total) ont prouvé l'optimalité — sans quoi les paiements seraient faussés silencieusement (c'est le garde-fou de Nisan-Ronen 2007 repris par le projet J2). Sur cette instance, le vendeur capte **70.3 %** du welfare (628.991 unités laissées aux gagnants) — mais rien ne généralise : le revenu VCG dépend des externalités croisées, et la littérature documente les pathologies inverses (revenu faible ou nul, non-monotonie à l'ajout d'un enchérisseur — Ausubel-Milgrom 2006, Conitzer-Sandholm 2006, démontrée dans [GameTheory-16 §4.5-4.6](../../GameTheory/GameTheory-16-MechanismDesign-Python.ipynb))." ] }, { @@ -2822,11 +2822,11 @@ "source": [ "## 10. Ponts avec le reste de CoursIA\n", "\n", - "- [GameTheory-16 — Mechanism Design](../../../GameTheory/GameTheory-16-MechanismDesign-Python.ipynb) : le principe de révélation, VCG additif, la non-monotonie de revenu (Conitzer-Sandholm) — prouvée formellement dans [`game_theory_lean/SocialChoice/MechanismDesign.lean`](../../../GameTheory/game_theory_lean/SocialChoice/MechanismDesign.lean) ;\n", - "- [GameTheory-16c — Extraction de revenu DSIC+IR](../../../GameTheory/GameTheory-16c-Extraction-de-Revenu-DSIC-IR-Python.ipynb) : l'autre face du trade-off revenu/incitation ;\n", - "- [`examples/vcg_auction.py`](../../../GameTheory/examples/vcg_auction.py) : l'énumération brute dont le §2 mesure le mur ;\n", - "- [CSP-3](../../Part2-CSP/CSP-3-Advanced.ipynb) et [CSP-5](../../Part2-CSP/CSP-5-Optimization.ipynb) : la boîte à outils CP-SAT (`AddAtMostOne`, `Maximize`) mobilisée ici ;\n", - "- [App-23 — PRESENT par SAT](../Hybrid/App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb) : même discipline de niveaux de preuve — exécution finie, certification bornée, théorème.\n", + "- [GameTheory-16 — Mechanism Design](../../GameTheory/GameTheory-16-MechanismDesign-Python.ipynb) : le principe de révélation, VCG additif, la non-monotonie de revenu (Conitzer-Sandholm) — prouvée formellement dans [`game_theory_lean/SocialChoice/MechanismDesign.lean`](../../GameTheory/game_theory_lean/SocialChoice/MechanismDesign.lean) ;\n", + "- [GameTheory-16c — Extraction de revenu DSIC+IR](../../GameTheory/GameTheory-16c-Extraction-de-Revenu-DSIC-IR-Python.ipynb) : l'autre face du trade-off revenu/incitation ;\n", + "- [`examples/vcg_auction.py`](../../GameTheory/examples/vcg_auction.py) : l'énumération brute dont le §2 mesure le mur ;\n", + "- [CSP-3](../Part2-CSP/CSP-3-Advanced.ipynb) et [CSP-5](../Part2-CSP/CSP-5-Optimization.ipynb) : la boîte à outils CP-SAT (`AddAtMostOne`, `Maximize`) mobilisée ici ;\n", + "- [App-23 — PRESENT par SAT](../Applications/Hybrid/App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb) : même discipline de niveaux de preuve — exécution finie, certification bornée, théorème.\n", "\n", "Le projet J2 reste la source : [dépôt](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/tree/main/Groupe-J2-Enchere_combinatoire_et_Winner_Determination) (MIT), notes de recherche 01-04, package `wdp/` et 44 tests — non recopiés ici, conformément à la licence et à la politique de distillation." ] @@ -2879,8 +2879,8 @@ "end_time": "2026-08-28T19:47:01.780333+00:00", "environment_variables": {}, "exception": null, - "input_path": "Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb", - "output_path": "Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb", + "input_path": "Frontieres-04-CombinatorialAuctions-WDP-VCG-Python.ipynb", + "output_path": "Frontieres-04-CombinatorialAuctions-WDP-VCG-Python.ipynb", "parameters": {}, "start_time": "2026-08-28T19:46:53.676049+00:00", "version": "2.7.0" diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-05-CoveringArrays-Guarantee-Audit-Python.ipynb similarity index 98% rename from MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-05-CoveringArrays-Guarantee-Audit-Python.ipynb index d2460753aa..ce8237ec67 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-05-CoveringArrays-Guarantee-Audit-Python.ipynb @@ -14,9 +14,9 @@ "tags": [] }, "source": [ - "# Research-05 — Covering Arrays : tester les interactions possibles, auditer les garanties\n", + "# Frontieres-05 — Covering Arrays : tester les interactions possibles, auditer les garanties\n", "\n", - "> **Navigation** : [Applications Search](../README.md) · [CSP-3 (CP-SAT avancé)](../../Part2-CSP/CSP-3-Advanced.ipynb) · [CSP-5 (optimisation)](../../Part2-CSP/CSP-5-Optimization.ipynb)\n", + "> **Navigation** : [Partie 5](README.md) · [CSP-3 (CP-SAT avancé)](../Part2-CSP/CSP-3-Advanced.ipynb) · [CSP-5 (optimisation)](../Part2-CSP/CSP-5-Optimization.ipynb)\n", "\n", "## Objectifs d'apprentissage\n", "\n", @@ -28,7 +28,7 @@ "4. comparer cette référence à deux constructions approchées : une extension **IPOG-like** déterministe et une recherche **AETG-like** semée ;\n", "5. auditer les limites d'une garantie expérimentale : borne inférieure, time-out, reproductibilité et validation.\n", "\n", - "**Prérequis** : combinatoire élémentaire, [CSP-3](../../Part2-CSP/CSP-3-Advanced.ipynb). **Durée estimée** : 55 min.\n", + "**Prérequis** : combinatoire élémentaire, [CSP-3](../Part2-CSP/CSP-3-Advanced.ipynb). **Durée estimée** : 55 min.\n", "\n", "## Hommage à un travail étudiant\n", "\n", @@ -1232,10 +1232,10 @@ "source": [ "## 8. Ponts avec CoursIA\n", "\n", - "- [CSP-3 — CP-SAT avancé](../../Part2-CSP/CSP-3-Advanced.ipynb) : variables booléennes, contraintes réifiées et lecture des statuts ;\n", - "- [CSP-5 — Optimisation](../../Part2-CSP/CSP-5-Optimization.ipynb) : incumbent, borne et différence entre faisabilité et optimalité ;\n", - "- [App-20 — Sudoku Benchmark](../CSP/App-20-SudokuBenchmark-Python.ipynb) : autre comparaison d'algorithmes sous oracle commun ;\n", - "- [Research-03 — MAPF Guarantee Audit](Research-03-MAPF-Guarantee-Audit-Python.ipynb) : même discipline, séparer solution valide, optimum observé et garantie prouvée.\n", + "- [CSP-3 — CP-SAT avancé](../Part2-CSP/CSP-3-Advanced.ipynb) : variables booléennes, contraintes réifiées et lecture des statuts ;\n", + "- [CSP-5 — Optimisation](../Part2-CSP/CSP-5-Optimization.ipynb) : incumbent, borne et différence entre faisabilité et optimalité ;\n", + "- [App-20 — Sudoku Benchmark](../Applications/CSP/App-20-SudokuBenchmark-Python.ipynb) : autre comparaison d'algorithmes sous oracle commun ;\n", + "- [Frontieres-03 — MAPF Guarantee Audit](Frontieres-03-MAPF-Guarantee-Audit-Python.ipynb) : même discipline, séparer solution valide, optimum observé et garantie prouvée.\n", "\n", "Le projet H4 reste la source du geste et de la question : [dépôt](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/tree/main/H4-Covering-Arrays) (MIT), notebook, solveur CP-SAT, IPOG, AETG et slides — non recopiés ici." ] @@ -1286,8 +1286,8 @@ "end_time": "2026-08-29T14:51:34.342781+00:00", "environment_variables": {}, "exception": null, - "input_path": "Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb", - "output_path": "Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb", + "input_path": "Frontieres-05-CoveringArrays-Guarantee-Audit-Python.ipynb", + "output_path": "Frontieres-05-CoveringArrays-Guarantee-Audit-Python.ipynb", "parameters": {}, "start_time": "2026-08-29T14:51:13.448983+00:00", "version": "2.7.0" diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-06-LearningToBranch-Generalization-Audit-Python.ipynb similarity index 99% rename from MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-06-LearningToBranch-Generalization-Audit-Python.ipynb index bf1bb58a40..4b0c4b35ed 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-06-LearningToBranch-Generalization-Audit-Python.ipynb @@ -14,10 +14,10 @@ "tags": [] }, "source": [ - "# Research-06 — Learning to branch\n", + "# Frontieres-06 — Learning to branch\n", "## Auditer la généralisation avant d'annoncer un gain\n", "\n", - "[← Applications](../README.md) | [↑ Search](../../README.md) | [<< App-25 Enchères WDP/VCG](Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb)\n", + "[← Partie 5](README.md) | [↑ Search](../README.md) | [<< App-25 Enchères WDP/VCG](Frontieres-04-CombinatorialAuctions-WDP-VCG-Python.ipynb)\n", "\n", "> **Durée estimée : 75 minutes**\n", "\n", @@ -42,8 +42,8 @@ "\n", "### Prérequis\n", "\n", - "- [CSP-6 Hybridation](../../Part2-CSP/CSP-6-Hybridization.ipynb)\n", - "- [MGS-16 Sélection d'algorithmes](../../Part4-Metaheuristics/MGS-16-AlgorithmSelection.ipynb)\n", + "- [CSP-6 Hybridation](../Part2-CSP/CSP-6-Hybridization.ipynb)\n", + "- [MGS-16 Sélection d'algorithmes](../Part4-Metaheuristics/MGS-16-AlgorithmSelection.ipynb)\n", "- Python 3.10+ ; `numpy`, `pandas`, `scikit-learn`, `matplotlib`" ] }, @@ -1979,7 +1979,7 @@ "source": [ "## 10. Bilan critique — ce que la garantie apporte et ce qu'elle coûte\n", "\n", - "| Claim | Preuve dans Research-06 | Coût de la garantie | Limite |\n", + "| Claim | Preuve dans Frontieres-06 | Coût de la garantie | Limite |\n", "|---|---|---|---|\n", "| Pas de fuite par instance | identifiants train/test disjoints | moins de lignes corrélées disponibles pour entraîner | seulement 36 instances |\n", "| Transfert inter-familles | trois leave-one-family-out | trois entraînements et évaluations supplémentaires | familles synthétiques seulement |\n", @@ -2042,8 +2042,8 @@ "end_time": "2026-09-01T20:07:18.549523+00:00", "environment_variables": {}, "exception": null, - "input_path": "Research-06-LearningToBranch-Generalization-Audit-Python.ipynb", - "output_path": "Research-06-LearningToBranch-Generalization-Audit-Python.ipynb", + "input_path": "Frontieres-06-LearningToBranch-Generalization-Audit-Python.ipynb", + "output_path": "Frontieres-06-LearningToBranch-Generalization-Audit-Python.ipynb", "parameters": {}, "start_time": "2026-09-01T20:05:11.740318+00:00", "version": "2.7.0" diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb similarity index 92% rename from MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb index ffe775b114..705df18da6 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb @@ -5,19 +5,19 @@ "id": "12174e35", "metadata": { "papermill": { - "duration": 0.004078, - "end_time": "2026-10-05T00:05:19.258164+00:00", + "duration": 0.002779, + "end_time": "2026-10-05T15:45:25.803164+00:00", "exception": false, - "start_time": "2026-10-05T00:05:19.254086+00:00", + "start_time": "2026-10-05T15:45:25.800385+00:00", "status": "completed" }, "tags": [] }, "source": [ - "# Research-07 — Équilibrage de chaîne d'assemblage (SALBP)\n", + "# Frontieres-07 — Équilibrage de chaîne d'assemblage (SALBP)\n", "## De l'affectation au certificat : statut, borne, provenance\n", "\n", - "**Navigation** : [Index Applications](../README.md) | [Série Search](../../README.md) | [CSP-4 Scheduling](../../Part2-CSP/CSP-4-Scheduling.ipynb)\n", + "**Navigation** : [Partie 5](README.md) | [Série Search](../README.md) | [CSP-4 Scheduling](../Part2-CSP/CSP-4-Scheduling.ipynb)\n", "\n", "> **Hommage à Ilias Kalalou et Kaelan Grall — projet B1, EPITA SCIA 2026.** Leur projet ne s'est pas contenté d'écrire un modèle : il a réuni dans un même appareil **SALBP-1**, **SALBP-2**, CP-SAT, PuLP/CBC, l'heuristique historique **Ranked Positional Weight**, 25 instances, 57 tests, une application Streamlit, une variante multi-modèles et une exploration bi-objectif. Cette volonté de faire dialoguer modèle exact, formulation indépendante, heuristique de métier et interface est le geste central de cette distillation.\n", "\n", @@ -42,10 +42,10 @@ "id": "a88b6c09", "metadata": { "papermill": { - "duration": 0.003054, - "end_time": "2026-10-05T00:05:19.265110+00:00", + "duration": 0.002162, + "end_time": "2026-10-05T15:45:25.807927+00:00", "exception": false, - "start_time": "2026-10-05T00:05:19.262056+00:00", + "start_time": "2026-10-05T15:45:25.805765+00:00", "status": "completed" }, "tags": [] @@ -81,16 +81,16 @@ "id": "3d54fb54", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:05:19.274415Z", - "iopub.status.busy": "2026-10-05T00:05:19.274103Z", - "iopub.status.idle": "2026-10-05T00:05:19.971239Z", - "shell.execute_reply": "2026-10-05T00:05:19.970608Z" + "iopub.execute_input": "2026-10-05T15:45:25.813753Z", + "iopub.status.busy": "2026-10-05T15:45:25.813533Z", + "iopub.status.idle": "2026-10-05T15:45:32.100653Z", + "shell.execute_reply": "2026-10-05T15:45:32.099508Z" }, "papermill": { - "duration": 0.703248, - "end_time": "2026-10-05T00:05:19.971855+00:00", + "duration": 6.291271, + "end_time": "2026-10-05T15:45:32.101600+00:00", "exception": false, - "start_time": "2026-10-05T00:05:19.268607+00:00", + "start_time": "2026-10-05T15:45:25.810329+00:00", "status": "completed" }, "tags": [] @@ -121,7 +121,7 @@ "\n", "DATA_DIR = Path(\"data/app29-salbp-audit\")\n", "if not DATA_DIR.exists():\n", - " DATA_DIR = Path(\"MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit\")\n", + " DATA_DIR = Path(\"MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app29-salbp-audit\")\n", "DATA_DIR.mkdir(parents=True, exist_ok=True)\n", "\n", "@dataclass(frozen=True)\n", @@ -165,10 +165,10 @@ "id": "80df9c3d", "metadata": { "papermill": { - "duration": 0.00196, - "end_time": "2026-10-05T00:05:19.976222+00:00", + "duration": 0.003236, + "end_time": "2026-10-05T15:45:32.108063+00:00", "exception": false, - "start_time": "2026-10-05T00:05:19.974262+00:00", + "start_time": "2026-10-05T15:45:32.104827+00:00", "status": "completed" }, "tags": [] @@ -197,10 +197,10 @@ "id": "5fbc5132", "metadata": { "papermill": { - "duration": 0.00167, - "end_time": "2026-10-05T00:05:19.979803+00:00", + "duration": 0.003086, + "end_time": "2026-10-05T15:45:32.114519+00:00", "exception": false, - "start_time": "2026-10-05T00:05:19.978133+00:00", + "start_time": "2026-10-05T15:45:32.111433+00:00", "status": "completed" }, "tags": [] @@ -229,16 +229,16 @@ "id": "cbd49f0e", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:05:19.984585Z", - "iopub.status.busy": "2026-10-05T00:05:19.984343Z", - "iopub.status.idle": "2026-10-05T00:05:19.989928Z", - "shell.execute_reply": "2026-10-05T00:05:19.989469Z" + "iopub.execute_input": "2026-10-05T15:45:32.122508Z", + "iopub.status.busy": "2026-10-05T15:45:32.122005Z", + "iopub.status.idle": "2026-10-05T15:45:32.131715Z", + "shell.execute_reply": "2026-10-05T15:45:32.130516Z" }, "papermill": { - "duration": 0.00867, - "end_time": "2026-10-05T00:05:19.990411+00:00", + "duration": 0.015013, + "end_time": "2026-10-05T15:45:32.132522+00:00", "exception": false, - "start_time": "2026-10-05T00:05:19.981741+00:00", + "start_time": "2026-10-05T15:45:32.117509+00:00", "status": "completed" }, "tags": [] @@ -297,10 +297,10 @@ "id": "9f6e0190", "metadata": { "papermill": { - "duration": 0.001647, - "end_time": "2026-10-05T00:05:19.993885+00:00", + "duration": 0.00279, + "end_time": "2026-10-05T15:45:32.138099+00:00", "exception": false, - "start_time": "2026-10-05T00:05:19.992238+00:00", + "start_time": "2026-10-05T15:45:32.135309+00:00", "status": "completed" }, "tags": [] @@ -326,10 +326,10 @@ "id": "cbcbc322", "metadata": { "papermill": { - "duration": 0.001634, - "end_time": "2026-10-05T00:05:19.997244+00:00", + "duration": 0.002786, + "end_time": "2026-10-05T15:45:32.143764+00:00", "exception": false, - "start_time": "2026-10-05T00:05:19.995610+00:00", + "start_time": "2026-10-05T15:45:32.140978+00:00", "status": "completed" }, "tags": [] @@ -356,16 +356,16 @@ "id": "6f0e2831", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:05:20.001812Z", - "iopub.status.busy": "2026-10-05T00:05:20.001647Z", - "iopub.status.idle": "2026-10-05T00:05:20.046284Z", - "shell.execute_reply": "2026-10-05T00:05:20.045732Z" + "iopub.execute_input": "2026-10-05T15:45:32.150841Z", + "iopub.status.busy": "2026-10-05T15:45:32.150585Z", + "iopub.status.idle": "2026-10-05T15:45:32.219119Z", + "shell.execute_reply": "2026-10-05T15:45:32.218370Z" }, "papermill": { - "duration": 0.047637, - "end_time": "2026-10-05T00:05:20.046857+00:00", + "duration": 0.073731, + "end_time": "2026-10-05T15:45:32.220397+00:00", "exception": false, - "start_time": "2026-10-05T00:05:19.999220+00:00", + "start_time": "2026-10-05T15:45:32.146666+00:00", "status": "completed" }, "tags": [] @@ -376,8 +376,8 @@ "output_type": "stream", "text": [ " method status objective best_bound gap wall_time valid\n", - "CP-SAT SALBP-1 OPTIMAL 4.0 4.0 0.0 0.012198 True\n", - "CP-SAT SALBP-2 OPTIMAL 11.0 11.0 0.0 0.014527 True\n", + "CP-SAT SALBP-1 OPTIMAL 4.0 4.0 0.0 0.017310 True\n", + "CP-SAT SALBP-2 OPTIMAL 11.0 11.0 0.0 0.023967 True\n", "(True, {'loads': {1: 14, 0: 4, 2: 11, 3: 11}, 'stations': 4, 'cycle': 14})\n" ] } @@ -442,10 +442,10 @@ "id": "09671fa7", "metadata": { "papermill": { - "duration": 0.002195, - "end_time": "2026-10-05T00:05:20.053864+00:00", + "duration": 0.003187, + "end_time": "2026-10-05T15:45:32.226911+00:00", "exception": false, - "start_time": "2026-10-05T00:05:20.051669+00:00", + "start_time": "2026-10-05T15:45:32.223724+00:00", "status": "completed" }, "tags": [] @@ -467,10 +467,10 @@ "id": "0a6c1ee4", "metadata": { "papermill": { - "duration": 0.001711, - "end_time": "2026-10-05T00:05:20.057443+00:00", + "duration": 0.002865, + "end_time": "2026-10-05T15:45:32.232877+00:00", "exception": false, - "start_time": "2026-10-05T00:05:20.055732+00:00", + "start_time": "2026-10-05T15:45:32.230012+00:00", "status": "completed" }, "tags": [] @@ -500,16 +500,16 @@ "id": "d862b45c", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:05:20.061852Z", - "iopub.status.busy": "2026-10-05T00:05:20.061688Z", - "iopub.status.idle": "2026-10-05T00:05:20.353372Z", - "shell.execute_reply": "2026-10-05T00:05:20.352869Z" + "iopub.execute_input": "2026-10-05T15:45:32.239788Z", + "iopub.status.busy": "2026-10-05T15:45:32.239508Z", + "iopub.status.idle": "2026-10-05T15:45:32.946590Z", + "shell.execute_reply": "2026-10-05T15:45:32.945304Z" }, "papermill": { - "duration": 0.294503, - "end_time": "2026-10-05T00:05:20.353810+00:00", + "duration": 0.712298, + "end_time": "2026-10-05T15:45:32.948109+00:00", "exception": false, - "start_time": "2026-10-05T00:05:20.059307+00:00", + "start_time": "2026-10-05T15:45:32.235811+00:00", "status": "completed" }, "tags": [] @@ -520,8 +520,8 @@ "output_type": "stream", "text": [ " method status objective best_bound gap wall_time valid\n", - " CP-SAT SALBP-1 OPTIMAL 4.0 4.0 0.0 0.012198 True\n", - "PuLP/CBC SALBP-1 OPTIMAL 4.0 4.0 0.0 0.280259 True\n", + " CP-SAT SALBP-1 OPTIMAL 4.0 4.0 0.0 0.017310 True\n", + "PuLP/CBC SALBP-1 OPTIMAL 4.0 4.0 0.0 0.688554 True\n", " RPW HEURISTIC 4.0 NaN NaN 0.000000 True\n" ] } @@ -583,10 +583,10 @@ "id": "d8bff220", "metadata": { "papermill": { - "duration": 0.002048, - "end_time": "2026-10-05T00:05:20.357847+00:00", + "duration": 0.003975, + "end_time": "2026-10-05T15:45:32.956853+00:00", "exception": false, - "start_time": "2026-10-05T00:05:20.355799+00:00", + "start_time": "2026-10-05T15:45:32.952878+00:00", "status": "completed" }, "tags": [] @@ -612,10 +612,10 @@ "id": "b847952b", "metadata": { "papermill": { - "duration": 0.001805, - "end_time": "2026-10-05T00:05:20.361983+00:00", + "duration": 0.004246, + "end_time": "2026-10-05T15:45:32.965084+00:00", "exception": false, - "start_time": "2026-10-05T00:05:20.360178+00:00", + "start_time": "2026-10-05T15:45:32.960838+00:00", "status": "completed" }, "tags": [] @@ -644,16 +644,16 @@ "id": "2e5d16be", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:05:20.367260Z", - "iopub.status.busy": "2026-10-05T00:05:20.367060Z", - "iopub.status.idle": "2026-10-05T00:05:21.872392Z", - "shell.execute_reply": "2026-10-05T00:05:21.871546Z" + "iopub.execute_input": "2026-10-05T15:45:32.973018Z", + "iopub.status.busy": "2026-10-05T15:45:32.972730Z", + "iopub.status.idle": "2026-10-05T15:45:35.093946Z", + "shell.execute_reply": "2026-10-05T15:45:35.093072Z" }, "papermill": { - "duration": 1.508724, - "end_time": "2026-10-05T00:05:21.873099+00:00", + "duration": 2.126029, + "end_time": "2026-10-05T15:45:35.094571+00:00", "exception": false, - "start_time": "2026-10-05T00:05:20.364375+00:00", + "start_time": "2026-10-05T15:45:32.968542+00:00", "status": "completed" }, "tags": [] @@ -708,10 +708,10 @@ "id": "7c83da19", "metadata": { "papermill": { - "duration": 0.001916, - "end_time": "2026-10-05T00:05:21.877268+00:00", + "duration": 0.002515, + "end_time": "2026-10-05T15:45:35.099851+00:00", "exception": false, - "start_time": "2026-10-05T00:05:21.875352+00:00", + "start_time": "2026-10-05T15:45:35.097336+00:00", "status": "completed" }, "tags": [] @@ -740,10 +740,10 @@ "id": "d31c19eb", "metadata": { "papermill": { - "duration": 0.00195, - "end_time": "2026-10-05T00:05:21.881201+00:00", + "duration": 0.002474, + "end_time": "2026-10-05T15:45:35.104906+00:00", "exception": false, - "start_time": "2026-10-05T00:05:21.879251+00:00", + "start_time": "2026-10-05T15:45:35.102432+00:00", "status": "completed" }, "tags": [] @@ -770,16 +770,16 @@ "id": "b8f0aa8b", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:05:21.887144Z", - "iopub.status.busy": "2026-10-05T00:05:21.886713Z", - "iopub.status.idle": "2026-10-05T00:05:21.893883Z", - "shell.execute_reply": "2026-10-05T00:05:21.892577Z" + "iopub.execute_input": "2026-10-05T15:45:35.111997Z", + "iopub.status.busy": "2026-10-05T15:45:35.111673Z", + "iopub.status.idle": "2026-10-05T15:45:35.117944Z", + "shell.execute_reply": "2026-10-05T15:45:35.117179Z" }, "papermill": { - "duration": 0.011531, - "end_time": "2026-10-05T00:05:21.894927+00:00", + "duration": 0.011596, + "end_time": "2026-10-05T15:45:35.118983+00:00", "exception": false, - "start_time": "2026-10-05T00:05:21.883396+00:00", + "start_time": "2026-10-05T15:45:35.107387+00:00", "status": "completed" }, "tags": [] @@ -828,10 +828,10 @@ "id": "95a6237e", "metadata": { "papermill": { - "duration": 0.002383, - "end_time": "2026-10-05T00:05:21.900083+00:00", + "duration": 0.002674, + "end_time": "2026-10-05T15:45:35.124484+00:00", "exception": false, - "start_time": "2026-10-05T00:05:21.897700+00:00", + "start_time": "2026-10-05T15:45:35.121810+00:00", "status": "completed" }, "tags": [] @@ -853,10 +853,10 @@ "id": "e48be873", "metadata": { "papermill": { - "duration": 0.002308, - "end_time": "2026-10-05T00:05:21.904767+00:00", + "duration": 0.002621, + "end_time": "2026-10-05T15:45:35.129909+00:00", "exception": false, - "start_time": "2026-10-05T00:05:21.902459+00:00", + "start_time": "2026-10-05T15:45:35.127288+00:00", "status": "completed" }, "tags": [] @@ -884,16 +884,16 @@ "id": "ed284baf", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:05:21.911777Z", - "iopub.status.busy": "2026-10-05T00:05:21.911369Z", - "iopub.status.idle": "2026-10-05T00:05:22.272329Z", - "shell.execute_reply": "2026-10-05T00:05:22.271722Z" + "iopub.execute_input": "2026-10-05T15:45:35.136793Z", + "iopub.status.busy": "2026-10-05T15:45:35.136548Z", + "iopub.status.idle": "2026-10-05T15:45:35.700823Z", + "shell.execute_reply": "2026-10-05T15:45:35.699981Z" }, "papermill": { - "duration": 0.365121, - "end_time": "2026-10-05T00:05:22.272971+00:00", + "duration": 0.56869, + "end_time": "2026-10-05T15:45:35.701416+00:00", "exception": false, - "start_time": "2026-10-05T00:05:21.907850+00:00", + "start_time": "2026-10-05T15:45:35.132726+00:00", "status": "completed" }, "tags": [] @@ -960,10 +960,10 @@ "id": "8e4bf7c5", "metadata": { "papermill": { - "duration": 0.002026, - "end_time": "2026-10-05T00:05:22.277314+00:00", + "duration": 0.002796, + "end_time": "2026-10-05T15:45:35.707180+00:00", "exception": false, - "start_time": "2026-10-05T00:05:22.275288+00:00", + "start_time": "2026-10-05T15:45:35.704384+00:00", "status": "completed" }, "tags": [] @@ -990,10 +990,10 @@ "id": "995aefa8", "metadata": { "papermill": { - "duration": 0.002056, - "end_time": "2026-10-05T00:05:22.281420+00:00", + "duration": 0.00517, + "end_time": "2026-10-05T15:45:35.715264+00:00", "exception": false, - "start_time": "2026-10-05T00:05:22.279364+00:00", + "start_time": "2026-10-05T15:45:35.710094+00:00", "status": "completed" }, "tags": [] @@ -1030,16 +1030,16 @@ "id": "f617b8f5", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:05:22.286648Z", - "iopub.status.busy": "2026-10-05T00:05:22.286386Z", - "iopub.status.idle": "2026-10-05T00:05:22.324461Z", - "shell.execute_reply": "2026-10-05T00:05:22.323780Z" + "iopub.execute_input": "2026-10-05T15:45:35.721735Z", + "iopub.status.busy": "2026-10-05T15:45:35.721515Z", + "iopub.status.idle": "2026-10-05T15:45:35.764270Z", + "shell.execute_reply": "2026-10-05T15:45:35.763377Z" }, "papermill": { - "duration": 0.041812, - "end_time": "2026-10-05T00:05:22.325236+00:00", + "duration": 0.047074, + "end_time": "2026-10-05T15:45:35.765030+00:00", "exception": false, - "start_time": "2026-10-05T00:05:22.283424+00:00", + "start_time": "2026-10-05T15:45:35.717956+00:00", "status": "completed" }, "tags": [] @@ -1122,10 +1122,10 @@ "id": "3c1e5f8b", "metadata": { "papermill": { - "duration": 0.002088, - "end_time": "2026-10-05T00:05:22.329642+00:00", + "duration": 0.003575, + "end_time": "2026-10-05T15:45:35.771794+00:00", "exception": false, - "start_time": "2026-10-05T00:05:22.327554+00:00", + "start_time": "2026-10-05T15:45:35.768219+00:00", "status": "completed" }, "tags": [] @@ -1150,10 +1150,10 @@ "id": "a6f3e1ca", "metadata": { "papermill": { - "duration": 0.002866, - "end_time": "2026-10-05T00:05:22.334599+00:00", + "duration": 0.004625, + "end_time": "2026-10-05T15:45:35.780364+00:00", "exception": false, - "start_time": "2026-10-05T00:05:22.331733+00:00", + "start_time": "2026-10-05T15:45:35.775739+00:00", "status": "completed" }, "tags": [] @@ -1182,16 +1182,16 @@ "id": "8ed7e849", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:05:22.339701Z", - "iopub.status.busy": "2026-10-05T00:05:22.339465Z", - "iopub.status.idle": "2026-10-05T00:05:22.342326Z", - "shell.execute_reply": "2026-10-05T00:05:22.341865Z" + "iopub.execute_input": "2026-10-05T15:45:35.791848Z", + "iopub.status.busy": "2026-10-05T15:45:35.791510Z", + "iopub.status.idle": "2026-10-05T15:45:35.797358Z", + "shell.execute_reply": "2026-10-05T15:45:35.795886Z" }, "papermill": { - "duration": 0.006222, - "end_time": "2026-10-05T00:05:22.342916+00:00", + "duration": 0.013074, + "end_time": "2026-10-05T15:45:35.798607+00:00", "exception": false, - "start_time": "2026-10-05T00:05:22.336694+00:00", + "start_time": "2026-10-05T15:45:35.785533+00:00", "status": "completed" }, "tags": [] @@ -1219,10 +1219,10 @@ "id": "e1735a96", "metadata": { "papermill": { - "duration": 0.002037, - "end_time": "2026-10-05T00:05:22.347061+00:00", + "duration": 0.00371, + "end_time": "2026-10-05T15:45:35.806303+00:00", "exception": false, - "start_time": "2026-10-05T00:05:22.345024+00:00", + "start_time": "2026-10-05T15:45:35.802593+00:00", "status": "completed" }, "tags": [] @@ -1253,16 +1253,16 @@ "id": "f6127e7f", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:05:22.352132Z", - "iopub.status.busy": "2026-10-05T00:05:22.351933Z", - "iopub.status.idle": "2026-10-05T00:05:22.355919Z", - "shell.execute_reply": "2026-10-05T00:05:22.355318Z" + "iopub.execute_input": "2026-10-05T15:45:35.814990Z", + "iopub.status.busy": "2026-10-05T15:45:35.814742Z", + "iopub.status.idle": "2026-10-05T15:45:35.818976Z", + "shell.execute_reply": "2026-10-05T15:45:35.818123Z" }, "papermill": { - "duration": 0.00705, - "end_time": "2026-10-05T00:05:22.356387+00:00", + "duration": 0.00954, + "end_time": "2026-10-05T15:45:35.819743+00:00", "exception": false, - "start_time": "2026-10-05T00:05:22.349337+00:00", + "start_time": "2026-10-05T15:45:35.810203+00:00", "status": "completed" }, "tags": [] @@ -1290,10 +1290,10 @@ "id": "7bd8b295", "metadata": { "papermill": { - "duration": 0.00213, - "end_time": "2026-10-05T00:05:22.360715+00:00", + "duration": 0.002831, + "end_time": "2026-10-05T15:45:35.825605+00:00", "exception": false, - "start_time": "2026-10-05T00:05:22.358585+00:00", + "start_time": "2026-10-05T15:45:35.822774+00:00", "status": "completed" }, "tags": [] @@ -1324,16 +1324,16 @@ "id": "6a95135e", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:05:22.366508Z", - "iopub.status.busy": "2026-10-05T00:05:22.366324Z", - "iopub.status.idle": "2026-10-05T00:05:22.369320Z", - "shell.execute_reply": "2026-10-05T00:05:22.368749Z" + "iopub.execute_input": "2026-10-05T15:45:35.832880Z", + "iopub.status.busy": "2026-10-05T15:45:35.832535Z", + "iopub.status.idle": "2026-10-05T15:45:35.836361Z", + "shell.execute_reply": "2026-10-05T15:45:35.835715Z" }, "papermill": { - "duration": 0.006703, - "end_time": "2026-10-05T00:05:22.369833+00:00", + "duration": 0.008199, + "end_time": "2026-10-05T15:45:35.836905+00:00", "exception": false, - "start_time": "2026-10-05T00:05:22.363130+00:00", + "start_time": "2026-10-05T15:45:35.828706+00:00", "status": "completed" }, "tags": [] @@ -1360,10 +1360,10 @@ "id": "0558298f", "metadata": { "papermill": { - "duration": 0.002423, - "end_time": "2026-10-05T00:05:22.374788+00:00", + "duration": 0.002806, + "end_time": "2026-10-05T15:45:35.842484+00:00", "exception": false, - "start_time": "2026-10-05T00:05:22.372365+00:00", + "start_time": "2026-10-05T15:45:35.839678+00:00", "status": "completed" }, "tags": [] @@ -1383,10 +1383,10 @@ "id": "6eba71e6", "metadata": { "papermill": { - "duration": 0.002434, - "end_time": "2026-10-05T00:05:22.379756+00:00", + "duration": 0.003437, + "end_time": "2026-10-05T15:45:35.848996+00:00", "exception": false, - "start_time": "2026-10-05T00:05:22.377322+00:00", + "start_time": "2026-10-05T15:45:35.845559+00:00", "status": "completed" }, "tags": [] @@ -1450,14 +1450,14 @@ }, "papermill": { "default_parameters": {}, - "duration": 4.533459, - "end_time": "2026-10-05T00:05:22.615022+00:00", + "duration": 12.290784, + "end_time": "2026-10-05T15:45:36.194895+00:00", "environment_variables": {}, "exception": null, - "input_path": "Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb", - "output_path": "Research-07-SALBP-AssemblyLineBalancing-Audit-Python_output.ipynb", + "input_path": "Frontieres-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb", + "output_path": "Frontieres-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb", "parameters": {}, - "start_time": "2026-10-05T00:05:18.081563+00:00", + "start_time": "2026-10-05T15:45:23.904111+00:00", "version": "2.7.0" } }, diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-08-OrbitalAssembly-Certificate-Audit-Python.ipynb similarity index 94% rename from MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-08-OrbitalAssembly-Certificate-Audit-Python.ipynb index edc30c1484..079e0d269a 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-08-OrbitalAssembly-Certificate-Audit-Python.ipynb @@ -5,19 +5,19 @@ "id": "1e92f55a", "metadata": { "papermill": { - "duration": 0.006523, - "end_time": "2026-10-04T23:59:54.321310+00:00", + "duration": 0.004517, + "end_time": "2026-10-05T15:45:44.287343+00:00", "exception": false, - "start_time": "2026-10-04T23:59:54.314787+00:00", + "start_time": "2026-10-05T15:45:44.282826+00:00", "status": "completed" }, "tags": [] }, "source": [ - "# Research-08 — Ordonnancement d'assemblage orbital\n", + "# Frontieres-08 — Ordonnancement d'assemblage orbital\n", "## Le certificat, pas seulement le chiffre : encodage lexicographique, comparaison appariée, front d'échange\n", "\n", - "**Navigation** : [Index Applications](../README.md) | [Série Search](../../README.md) | [CSP-4 Scheduling](../../Part2-CSP/CSP-4-Scheduling.ipynb) | [Research-07 SALBP](Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb)\n", + "**Navigation** : [Partie 5](README.md) | [Série Search](../README.md) | [CSP-4 Scheduling](../Part2-CSP/CSP-4-Scheduling.ipynb) | [Frontieres-07 SALBP](Frontieres-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb)\n", "\n", "> **Hommage à Gurvan Estable, Joris Bely et Kévin Lubert — projet C4, EPITA SCIA 2026.** Leur projet n'a pas traité l'assemblage orbital comme un ordonnancement d'atelier déguisé. Il a fait descendre la physique dans le modèle : les durées de manœuvre viennent d'un temps de vol de Hohmann réellement calculé, les coûts viennent d'un Δv réellement calculé, et le budget d'ergol contraint les mêmes intervalles que les couloirs orbitaux. Coupler ainsi la décision temporelle et la décision énergétique dans un unique modèle CP-SAT — au lieu de fixer des durées arbitraires — est le geste central de cette distillation.\n", "\n", @@ -44,10 +44,10 @@ "id": "2c2d88fb", "metadata": { "papermill": { - "duration": 0.005559, - "end_time": "2026-10-04T23:59:54.336275+00:00", + "duration": 0.004691, + "end_time": "2026-10-05T15:45:44.296899+00:00", "exception": false, - "start_time": "2026-10-04T23:59:54.330716+00:00", + "start_time": "2026-10-05T15:45:44.292208+00:00", "status": "completed" }, "tags": [] @@ -71,16 +71,16 @@ "id": "9c98b8a8", "metadata": { "execution": { - "iopub.execute_input": "2026-10-04T23:59:54.349880Z", - "iopub.status.busy": "2026-10-04T23:59:54.349603Z", - "iopub.status.idle": "2026-10-04T23:59:57.466476Z", - "shell.execute_reply": "2026-10-04T23:59:57.465911Z" + "iopub.execute_input": "2026-10-05T15:45:44.309239Z", + "iopub.status.busy": "2026-10-05T15:45:44.308828Z", + "iopub.status.idle": "2026-10-05T15:45:45.409091Z", + "shell.execute_reply": "2026-10-05T15:45:45.407941Z" }, "papermill": { - "duration": 3.126981, - "end_time": "2026-10-04T23:59:57.466922+00:00", + "duration": 1.108127, + "end_time": "2026-10-05T15:45:45.409953+00:00", "exception": false, - "start_time": "2026-10-04T23:59:54.339941+00:00", + "start_time": "2026-10-05T15:45:44.301826+00:00", "status": "completed" }, "tags": [] @@ -130,7 +130,7 @@ "\n", "DATA_DIR = Path(\"data/app30-orbital-assembly-audit\")\n", "if not DATA_DIR.exists():\n", - " DATA_DIR = Path(\"MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit\")\n", + " DATA_DIR = Path(\"MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit\")\n", "DATA_DIR.mkdir(parents=True, exist_ok=True)\n", "\n", "# --- Constantes canoniques a deux corps ---\n", @@ -206,10 +206,10 @@ "id": "47717d26", "metadata": { "papermill": { - "duration": 0.002563, - "end_time": "2026-10-04T23:59:57.471977+00:00", + "duration": 0.004261, + "end_time": "2026-10-05T15:45:45.418652+00:00", "exception": false, - "start_time": "2026-10-04T23:59:57.469414+00:00", + "start_time": "2026-10-05T15:45:45.414391+00:00", "status": "completed" }, "tags": [] @@ -229,10 +229,10 @@ "id": "ce48f286", "metadata": { "papermill": { - "duration": 0.003796, - "end_time": "2026-10-04T23:59:57.478881+00:00", + "duration": 0.004103, + "end_time": "2026-10-05T15:45:45.426990+00:00", "exception": false, - "start_time": "2026-10-04T23:59:57.475085+00:00", + "start_time": "2026-10-05T15:45:45.422887+00:00", "status": "completed" }, "tags": [] @@ -258,16 +258,16 @@ "id": "560b3f01", "metadata": { "execution": { - "iopub.execute_input": "2026-10-04T23:59:57.487228Z", - "iopub.status.busy": "2026-10-04T23:59:57.486984Z", - "iopub.status.idle": "2026-10-04T23:59:57.498758Z", - "shell.execute_reply": "2026-10-04T23:59:57.497883Z" + "iopub.execute_input": "2026-10-05T15:45:45.437393Z", + "iopub.status.busy": "2026-10-05T15:45:45.436958Z", + "iopub.status.idle": "2026-10-05T15:45:45.450668Z", + "shell.execute_reply": "2026-10-05T15:45:45.449343Z" }, "papermill": { - "duration": 0.016746, - "end_time": "2026-10-04T23:59:57.499426+00:00", + "duration": 0.020848, + "end_time": "2026-10-05T15:45:45.452085+00:00", "exception": false, - "start_time": "2026-10-04T23:59:57.482680+00:00", + "start_time": "2026-10-05T15:45:45.431237+00:00", "status": "completed" }, "tags": [] @@ -374,10 +374,10 @@ "id": "28bcdd40", "metadata": { "papermill": { - "duration": 0.002722, - "end_time": "2026-10-04T23:59:57.505656+00:00", + "duration": 0.004831, + "end_time": "2026-10-05T15:45:45.461394+00:00", "exception": false, - "start_time": "2026-10-04T23:59:57.502934+00:00", + "start_time": "2026-10-05T15:45:45.456563+00:00", "status": "completed" }, "tags": [] @@ -397,10 +397,10 @@ "id": "5b89a9f4", "metadata": { "papermill": { - "duration": 0.0022, - "end_time": "2026-10-04T23:59:57.510296+00:00", + "duration": 0.005493, + "end_time": "2026-10-05T15:45:45.471938+00:00", "exception": false, - "start_time": "2026-10-04T23:59:57.508096+00:00", + "start_time": "2026-10-05T15:45:45.466445+00:00", "status": "completed" }, "tags": [] @@ -427,16 +427,16 @@ "id": "40f809a3", "metadata": { "execution": { - "iopub.execute_input": "2026-10-04T23:59:57.515545Z", - "iopub.status.busy": "2026-10-04T23:59:57.515295Z", - "iopub.status.idle": "2026-10-04T23:59:57.528662Z", - "shell.execute_reply": "2026-10-04T23:59:57.528132Z" + "iopub.execute_input": "2026-10-05T15:45:45.483600Z", + "iopub.status.busy": "2026-10-05T15:45:45.483295Z", + "iopub.status.idle": "2026-10-05T15:45:45.504819Z", + "shell.execute_reply": "2026-10-05T15:45:45.503588Z" }, "papermill": { - "duration": 0.016807, - "end_time": "2026-10-04T23:59:57.529268+00:00", + "duration": 0.028984, + "end_time": "2026-10-05T15:45:45.506157+00:00", "exception": false, - "start_time": "2026-10-04T23:59:57.512461+00:00", + "start_time": "2026-10-05T15:45:45.477173+00:00", "status": "completed" }, "tags": [] @@ -576,10 +576,10 @@ "id": "8d88a1c7", "metadata": { "papermill": { - "duration": 0.002183, - "end_time": "2026-10-04T23:59:57.534165+00:00", + "duration": 0.004189, + "end_time": "2026-10-05T15:45:45.514426+00:00", "exception": false, - "start_time": "2026-10-04T23:59:57.531982+00:00", + "start_time": "2026-10-05T15:45:45.510237+00:00", "status": "completed" }, "tags": [] @@ -597,10 +597,10 @@ "id": "a9b6052d", "metadata": { "papermill": { - "duration": 0.002098, - "end_time": "2026-10-04T23:59:57.538415+00:00", + "duration": 0.005213, + "end_time": "2026-10-05T15:45:45.524681+00:00", "exception": false, - "start_time": "2026-10-04T23:59:57.536317+00:00", + "start_time": "2026-10-05T15:45:45.519468+00:00", "status": "completed" }, "tags": [] @@ -626,16 +626,16 @@ "id": "69a33792", "metadata": { "execution": { - "iopub.execute_input": "2026-10-04T23:59:57.543615Z", - "iopub.status.busy": "2026-10-04T23:59:57.543449Z", - "iopub.status.idle": "2026-10-04T23:59:57.552078Z", - "shell.execute_reply": "2026-10-04T23:59:57.551593Z" + "iopub.execute_input": "2026-10-05T15:45:45.538963Z", + "iopub.status.busy": "2026-10-05T15:45:45.538293Z", + "iopub.status.idle": "2026-10-05T15:45:45.556497Z", + "shell.execute_reply": "2026-10-05T15:45:45.555489Z" }, "papermill": { - "duration": 0.012153, - "end_time": "2026-10-04T23:59:57.552737+00:00", + "duration": 0.02742, + "end_time": "2026-10-05T15:45:45.557477+00:00", "exception": false, - "start_time": "2026-10-04T23:59:57.540584+00:00", + "start_time": "2026-10-05T15:45:45.530057+00:00", "status": "completed" }, "tags": [] @@ -764,10 +764,10 @@ "id": "f93f9639", "metadata": { "papermill": { - "duration": 0.002757, - "end_time": "2026-10-04T23:59:57.558080+00:00", + "duration": 0.003882, + "end_time": "2026-10-05T15:45:45.566142+00:00", "exception": false, - "start_time": "2026-10-04T23:59:57.555323+00:00", + "start_time": "2026-10-05T15:45:45.562260+00:00", "status": "completed" }, "tags": [] @@ -787,10 +787,10 @@ "id": "f7dd28f2", "metadata": { "papermill": { - "duration": 0.002218, - "end_time": "2026-10-04T23:59:57.562785+00:00", + "duration": 0.003352, + "end_time": "2026-10-05T15:45:45.573222+00:00", "exception": false, - "start_time": "2026-10-04T23:59:57.560567+00:00", + "start_time": "2026-10-05T15:45:45.569870+00:00", "status": "completed" }, "tags": [] @@ -817,16 +817,16 @@ "id": "77045a29", "metadata": { "execution": { - "iopub.execute_input": "2026-10-04T23:59:57.568694Z", - "iopub.status.busy": "2026-10-04T23:59:57.568517Z", - "iopub.status.idle": "2026-10-04T23:59:57.581996Z", - "shell.execute_reply": "2026-10-04T23:59:57.581317Z" + "iopub.execute_input": "2026-10-05T15:45:45.580540Z", + "iopub.status.busy": "2026-10-05T15:45:45.580323Z", + "iopub.status.idle": "2026-10-05T15:45:45.595813Z", + "shell.execute_reply": "2026-10-05T15:45:45.595212Z" }, "papermill": { - "duration": 0.01735, - "end_time": "2026-10-04T23:59:57.582587+00:00", + "duration": 0.020179, + "end_time": "2026-10-05T15:45:45.596559+00:00", "exception": false, - "start_time": "2026-10-04T23:59:57.565237+00:00", + "start_time": "2026-10-05T15:45:45.576380+00:00", "status": "completed" }, "tags": [] @@ -1021,10 +1021,10 @@ "id": "192ff934", "metadata": { "papermill": { - "duration": 0.002604, - "end_time": "2026-10-04T23:59:57.587994+00:00", + "duration": 0.003252, + "end_time": "2026-10-05T15:45:45.603160+00:00", "exception": false, - "start_time": "2026-10-04T23:59:57.585390+00:00", + "start_time": "2026-10-05T15:45:45.599908+00:00", "status": "completed" }, "tags": [] @@ -1050,10 +1050,10 @@ "id": "28bf5522", "metadata": { "papermill": { - "duration": 0.002534, - "end_time": "2026-10-04T23:59:57.593315+00:00", + "duration": 0.003429, + "end_time": "2026-10-05T15:45:45.611961+00:00", "exception": false, - "start_time": "2026-10-04T23:59:57.590781+00:00", + "start_time": "2026-10-05T15:45:45.608532+00:00", "status": "completed" }, "tags": [] @@ -1072,16 +1072,16 @@ "id": "55254d17", "metadata": { "execution": { - "iopub.execute_input": "2026-10-04T23:59:57.599544Z", - "iopub.status.busy": "2026-10-04T23:59:57.599374Z", - "iopub.status.idle": "2026-10-04T23:59:59.615005Z", - "shell.execute_reply": "2026-10-04T23:59:59.614433Z" + "iopub.execute_input": "2026-10-05T15:45:45.620451Z", + "iopub.status.busy": "2026-10-05T15:45:45.620095Z", + "iopub.status.idle": "2026-10-05T15:45:47.865601Z", + "shell.execute_reply": "2026-10-05T15:45:47.864852Z" }, "papermill": { - "duration": 2.019564, - "end_time": "2026-10-04T23:59:59.615551+00:00", + "duration": 2.251085, + "end_time": "2026-10-05T15:45:47.866391+00:00", "exception": false, - "start_time": "2026-10-04T23:59:57.595987+00:00", + "start_time": "2026-10-05T15:45:45.615306+00:00", "status": "completed" }, "tags": [] @@ -1097,7 +1097,7 @@ "Statuts ponderes OPTIMAL : 25/25\n", "\n", "Domaine de l'objectif scalarise : 85469 a 604313\n", - "Temps total pondere 0.650 s | deux passes 1.138 s (x1.75)\n", + "Temps total pondere 0.676 s | deux passes 1.329 s (x1.97)\n", "Audits externes en echec : 0\n", "\n", "Extrait :\n", @@ -1264,10 +1264,10 @@ "id": "067f347b", "metadata": { "papermill": { - "duration": 0.002308, - "end_time": "2026-10-04T23:59:59.620507+00:00", + "duration": 0.003394, + "end_time": "2026-10-05T15:45:47.873396+00:00", "exception": false, - "start_time": "2026-10-04T23:59:59.618199+00:00", + "start_time": "2026-10-05T15:45:47.870002+00:00", "status": "completed" }, "tags": [] @@ -1291,10 +1291,10 @@ "id": "da693543", "metadata": { "papermill": { - "duration": 0.002422, - "end_time": "2026-10-04T23:59:59.625372+00:00", + "duration": 0.003847, + "end_time": "2026-10-05T15:45:47.880899+00:00", "exception": false, - "start_time": "2026-10-04T23:59:59.622950+00:00", + "start_time": "2026-10-05T15:45:47.877052+00:00", "status": "completed" }, "tags": [] @@ -1317,16 +1317,16 @@ "id": "c3c33969", "metadata": { "execution": { - "iopub.execute_input": "2026-10-04T23:59:59.631782Z", - "iopub.status.busy": "2026-10-04T23:59:59.631582Z", - "iopub.status.idle": "2026-10-04T23:59:59.644456Z", - "shell.execute_reply": "2026-10-04T23:59:59.643865Z" + "iopub.execute_input": "2026-10-05T15:45:47.891442Z", + "iopub.status.busy": "2026-10-05T15:45:47.891150Z", + "iopub.status.idle": "2026-10-05T15:45:47.908039Z", + "shell.execute_reply": "2026-10-05T15:45:47.907212Z" }, "papermill": { - "duration": 0.017091, - "end_time": "2026-10-04T23:59:59.645001+00:00", + "duration": 0.023815, + "end_time": "2026-10-05T15:45:47.909189+00:00", "exception": false, - "start_time": "2026-10-04T23:59:59.627910+00:00", + "start_time": "2026-10-05T15:45:47.885374+00:00", "status": "completed" }, "tags": [] @@ -1449,10 +1449,10 @@ "id": "d1b9ff67", "metadata": { "papermill": { - "duration": 0.002876, - "end_time": "2026-10-04T23:59:59.651058+00:00", + "duration": 0.005126, + "end_time": "2026-10-05T15:45:47.919124+00:00", "exception": false, - "start_time": "2026-10-04T23:59:59.648182+00:00", + "start_time": "2026-10-05T15:45:47.913998+00:00", "status": "completed" }, "tags": [] @@ -1478,10 +1478,10 @@ "id": "3283b6b1", "metadata": { "papermill": { - "duration": 0.002989, - "end_time": "2026-10-04T23:59:59.657088+00:00", + "duration": 0.005563, + "end_time": "2026-10-05T15:45:47.930793+00:00", "exception": false, - "start_time": "2026-10-04T23:59:59.654099+00:00", + "start_time": "2026-10-05T15:45:47.925230+00:00", "status": "completed" }, "tags": [] @@ -1504,16 +1504,16 @@ "id": "c03869ac", "metadata": { "execution": { - "iopub.execute_input": "2026-10-04T23:59:59.665068Z", - "iopub.status.busy": "2026-10-04T23:59:59.664808Z", - "iopub.status.idle": "2026-10-05T00:00:00.281894Z", - "shell.execute_reply": "2026-10-05T00:00:00.280650Z" + "iopub.execute_input": "2026-10-05T15:45:47.944550Z", + "iopub.status.busy": "2026-10-05T15:45:47.944192Z", + "iopub.status.idle": "2026-10-05T15:45:48.701107Z", + "shell.execute_reply": "2026-10-05T15:45:48.700296Z" }, "papermill": { - "duration": 0.623302, - "end_time": "2026-10-05T00:00:00.283258+00:00", + "duration": 0.766036, + "end_time": "2026-10-05T15:45:48.702325+00:00", "exception": false, - "start_time": "2026-10-04T23:59:59.659956+00:00", + "start_time": "2026-10-05T15:45:47.936289+00:00", "status": "completed" }, "tags": [] @@ -1605,10 +1605,10 @@ "id": "7ca479c2", "metadata": { "papermill": { - "duration": 0.003983, - "end_time": "2026-10-05T00:00:00.290311+00:00", + "duration": 0.003413, + "end_time": "2026-10-05T15:45:48.709966+00:00", "exception": false, - "start_time": "2026-10-05T00:00:00.286328+00:00", + "start_time": "2026-10-05T15:45:48.706553+00:00", "status": "completed" }, "tags": [] @@ -1639,10 +1639,10 @@ "id": "2f68f37c", "metadata": { "papermill": { - "duration": 0.009907, - "end_time": "2026-10-05T00:00:00.303086+00:00", + "duration": 0.005306, + "end_time": "2026-10-05T15:45:48.719355+00:00", "exception": false, - "start_time": "2026-10-05T00:00:00.293179+00:00", + "start_time": "2026-10-05T15:45:48.714049+00:00", "status": "completed" }, "tags": [] @@ -1663,16 +1663,16 @@ "id": "1d45d450", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:00:00.320489Z", - "iopub.status.busy": "2026-10-05T00:00:00.319834Z", - "iopub.status.idle": "2026-10-05T00:00:01.978101Z", - "shell.execute_reply": "2026-10-05T00:00:01.976909Z" + "iopub.execute_input": "2026-10-05T15:45:48.731932Z", + "iopub.status.busy": "2026-10-05T15:45:48.731601Z", + "iopub.status.idle": "2026-10-05T15:45:50.683969Z", + "shell.execute_reply": "2026-10-05T15:45:50.682884Z" }, "papermill": { - "duration": 1.667898, - "end_time": "2026-10-05T00:00:01.979357+00:00", + "duration": 1.959931, + "end_time": "2026-10-05T15:45:50.684866+00:00", "exception": false, - "start_time": "2026-10-05T00:00:00.311459+00:00", + "start_time": "2026-10-05T15:45:48.724935+00:00", "status": "completed" }, "tags": [] @@ -1715,10 +1715,10 @@ " 10 79 78 675 14.45 OPTIMAL True True\n", " 12 81 80 672 14.83 OPTIMAL True True\n", " 14 83 83 672 14.83 OPTIMAL True True\n", - " 16 85 83 672 14.83 OPTIMAL True True\n", + " 16 85 85 672 14.83 OPTIMAL True True\n", " 18 87 87 672 14.83 OPTIMAL True True\n", - " 20 89 89 672 14.83 OPTIMAL True True\n", - " 22 91 91 672 14.83 OPTIMAL True True\n", + " 20 89 83 672 14.83 OPTIMAL True True\n", + " 22 91 83 672 14.83 OPTIMAL True True\n", " 24 93 83 672 14.83 OPTIMAL True True\n" ] } @@ -1770,16 +1770,16 @@ "id": "dc888f31", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:00:01.989469Z", - "iopub.status.busy": "2026-10-05T00:00:01.989261Z", - "iopub.status.idle": "2026-10-05T00:00:02.253643Z", - "shell.execute_reply": "2026-10-05T00:00:02.252973Z" + "iopub.execute_input": "2026-10-05T15:45:50.696575Z", + "iopub.status.busy": "2026-10-05T15:45:50.696293Z", + "iopub.status.idle": "2026-10-05T15:45:50.944966Z", + "shell.execute_reply": "2026-10-05T15:45:50.944254Z" }, "papermill": { - "duration": 0.269504, - "end_time": "2026-10-05T00:00:02.254397+00:00", + "duration": 0.255233, + "end_time": "2026-10-05T15:45:50.945639+00:00", "exception": false, - "start_time": "2026-10-05T00:00:01.984893+00:00", + "start_time": "2026-10-05T15:45:50.690406+00:00", "status": "completed" }, "tags": [] @@ -1848,10 +1848,10 @@ "id": "5a4ac59f", "metadata": { "papermill": { - "duration": 0.004006, - "end_time": "2026-10-05T00:00:02.262579+00:00", + "duration": 0.004549, + "end_time": "2026-10-05T15:45:50.954839+00:00", "exception": false, - "start_time": "2026-10-05T00:00:02.258573+00:00", + "start_time": "2026-10-05T15:45:50.950290+00:00", "status": "completed" }, "tags": [] @@ -1882,10 +1882,10 @@ "id": "c6908ea8", "metadata": { "papermill": { - "duration": 0.003755, - "end_time": "2026-10-05T00:00:02.270188+00:00", + "duration": 0.004055, + "end_time": "2026-10-05T15:45:50.963369+00:00", "exception": false, - "start_time": "2026-10-05T00:00:02.266433+00:00", + "start_time": "2026-10-05T15:45:50.959314+00:00", "status": "completed" }, "tags": [] @@ -1909,16 +1909,16 @@ "id": "f8440694", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:00:02.279201Z", - "iopub.status.busy": "2026-10-05T00:00:02.278979Z", - "iopub.status.idle": "2026-10-05T00:02:49.802597Z", - "shell.execute_reply": "2026-10-05T00:02:49.801288Z" + "iopub.execute_input": "2026-10-05T15:45:50.972834Z", + "iopub.status.busy": "2026-10-05T15:45:50.972588Z", + "iopub.status.idle": "2026-10-05T15:48:51.344927Z", + "shell.execute_reply": "2026-10-05T15:48:51.343758Z" }, "papermill": { - "duration": 167.529278, - "end_time": "2026-10-05T00:02:49.803406+00:00", + "duration": 180.379026, + "end_time": "2026-10-05T15:48:51.346309+00:00", "exception": false, - "start_time": "2026-10-05T00:00:02.274128+00:00", + "start_time": "2026-10-05T15:45:50.967283+00:00", "status": "completed" }, "tags": [] @@ -1928,168 +1928,168 @@ "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 16 s=11 poussees= 32 separations= 25 | pond OPTIMAL 0.07s | 2p OPTIMAL/OPTIMAL 0.11s\n" + " d=0.25 n= 16 s=11 poussees= 32 separations= 25 | pond OPTIMAL 0.08s | 2p OPTIMAL/OPTIMAL 0.12s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 16 s=22 poussees= 32 separations= 24 | pond OPTIMAL 0.04s | 2p OPTIMAL/OPTIMAL 0.08s\n" + " d=0.25 n= 16 s=22 poussees= 32 separations= 24 | pond OPTIMAL 0.04s | 2p OPTIMAL/OPTIMAL 0.09s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 16 s=33 poussees= 32 separations= 32 | pond OPTIMAL 0.04s | 2p OPTIMAL/OPTIMAL 0.07s\n" + " d=0.25 n= 16 s=33 poussees= 32 separations= 32 | pond OPTIMAL 0.06s | 2p OPTIMAL/OPTIMAL 0.09s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 32 s=11 poussees= 64 separations= 109 | pond OPTIMAL 0.29s | 2p OPTIMAL/OPTIMAL 0.35s\n" + " d=0.25 n= 32 s=11 poussees= 64 separations= 109 | pond OPTIMAL 0.42s | 2p OPTIMAL/OPTIMAL 0.55s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 32 s=22 poussees= 64 separations= 124 | pond OPTIMAL 0.08s | 2p OPTIMAL/OPTIMAL 0.22s\n" + " d=0.25 n= 32 s=22 poussees= 64 separations= 124 | pond OPTIMAL 0.14s | 2p OPTIMAL/OPTIMAL 0.27s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 32 s=33 poussees= 64 separations= 116 | pond OPTIMAL 0.11s | 2p OPTIMAL/OPTIMAL 0.17s\n" + " d=0.25 n= 32 s=33 poussees= 64 separations= 116 | pond OPTIMAL 0.12s | 2p OPTIMAL/OPTIMAL 0.23s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 64 s=11 poussees=128 separations= 497 | pond OPTIMAL 0.22s | 2p OPTIMAL/OPTIMAL 0.50s\n" + " d=0.25 n= 64 s=11 poussees=128 separations= 497 | pond OPTIMAL 0.42s | 2p OPTIMAL/OPTIMAL 0.64s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 64 s=22 poussees=128 separations= 490 | pond OPTIMAL 0.26s | 2p OPTIMAL/OPTIMAL 0.38s\n" + " d=0.25 n= 64 s=22 poussees=128 separations= 490 | pond OPTIMAL 0.37s | 2p OPTIMAL/OPTIMAL 0.58s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 64 s=33 poussees=128 separations= 514 | pond FEASIBLE 10.05s | 2p OPTIMAL/FEASIBLE 10.55s\n" + " d=0.25 n= 64 s=33 poussees=128 separations= 514 | pond FEASIBLE 10.04s | 2p OPTIMAL/FEASIBLE 10.60s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 90 s=11 poussees=180 separations= 975 | pond OPTIMAL 0.62s | 2p OPTIMAL/OPTIMAL 1.10s\n" + " d=0.25 n= 90 s=11 poussees=180 separations= 975 | pond OPTIMAL 0.75s | 2p OPTIMAL/OPTIMAL 1.40s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 90 s=22 poussees=180 separations= 972 | pond OPTIMAL 0.91s | 2p OPTIMAL/OPTIMAL 1.52s\n" + " d=0.25 n= 90 s=22 poussees=180 separations= 972 | pond OPTIMAL 1.19s | 2p OPTIMAL/OPTIMAL 2.57s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.25 n= 90 s=33 poussees=180 separations= 993 | pond OPTIMAL 0.48s | 2p OPTIMAL/OPTIMAL 1.16s\n" + " d=0.25 n= 90 s=33 poussees=180 separations= 993 | pond OPTIMAL 0.83s | 2p OPTIMAL/OPTIMAL 1.77s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 16 s=11 poussees= 32 separations= 63 | pond OPTIMAL 1.06s | 2p OPTIMAL/OPTIMAL 1.06s\n" + " d=0.6 n= 16 s=11 poussees= 32 separations= 63 | pond OPTIMAL 1.24s | 2p OPTIMAL/OPTIMAL 1.32s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 16 s=22 poussees= 32 separations= 65 | pond OPTIMAL 0.04s | 2p OPTIMAL/OPTIMAL 0.09s\n" + " d=0.6 n= 16 s=22 poussees= 32 separations= 65 | pond OPTIMAL 0.05s | 2p OPTIMAL/OPTIMAL 0.12s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 16 s=33 poussees= 32 separations= 76 | pond OPTIMAL 0.06s | 2p OPTIMAL/OPTIMAL 0.10s\n" + " d=0.6 n= 16 s=33 poussees= 32 separations= 76 | pond OPTIMAL 0.07s | 2p OPTIMAL/OPTIMAL 0.12s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 32 s=11 poussees= 64 separations= 285 | pond FEASIBLE 10.02s | 2p FEASIBLE/FEASIBLE 20.05s\n" + " d=0.6 n= 32 s=11 poussees= 64 separations= 285 | pond FEASIBLE 10.03s | 2p FEASIBLE/FEASIBLE 20.04s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 32 s=22 poussees= 64 separations= 274 | pond FEASIBLE 10.02s | 2p OPTIMAL/FEASIBLE 10.18s\n" + " d=0.6 n= 32 s=22 poussees= 64 separations= 274 | pond FEASIBLE 10.02s | 2p OPTIMAL/FEASIBLE 10.20s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 32 s=33 poussees= 64 separations= 268 | pond OPTIMAL 0.21s | 2p OPTIMAL/OPTIMAL 0.37s\n" + " d=0.6 n= 32 s=33 poussees= 64 separations= 268 | pond OPTIMAL 0.19s | 2p OPTIMAL/OPTIMAL 0.61s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 64 s=11 poussees=128 separations=1190 | pond OPTIMAL 0.60s | 2p OPTIMAL/OPTIMAL 1.15s\n" + " d=0.6 n= 64 s=11 poussees=128 separations=1190 | pond OPTIMAL 1.25s | 2p OPTIMAL/OPTIMAL 2.28s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 64 s=22 poussees=128 separations=1184 | pond FEASIBLE 10.03s | 2p OPTIMAL/FEASIBLE 10.74s\n" + " d=0.6 n= 64 s=22 poussees=128 separations=1184 | pond FEASIBLE 10.10s | 2p OPTIMAL/FEASIBLE 11.09s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 64 s=33 poussees=128 separations=1170 | pond FEASIBLE 10.08s | 2p FEASIBLE/FEASIBLE 20.07s\n" + " d=0.6 n= 64 s=33 poussees=128 separations=1170 | pond FEASIBLE 10.04s | 2p FEASIBLE/FEASIBLE 20.08s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 90 s=11 poussees=180 separations=2362 | pond FEASIBLE 10.06s | 2p OPTIMAL/FEASIBLE 11.60s\n" + " d=0.6 n= 90 s=11 poussees=180 separations=2362 | pond FEASIBLE 10.07s | 2p OPTIMAL/FEASIBLE 12.02s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 90 s=22 poussees=180 separations=2351 | pond OPTIMAL 1.53s | 2p OPTIMAL/OPTIMAL 3.23s\n" + " d=0.6 n= 90 s=22 poussees=180 separations=2351 | pond OPTIMAL 2.60s | 2p OPTIMAL/OPTIMAL 5.32s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " d=0.6 n= 90 s=33 poussees=180 separations=2336 | pond OPTIMAL 1.66s | 2p OPTIMAL/OPTIMAL 2.14s\n" + " d=0.6 n= 90 s=33 poussees=180 separations=2336 | pond OPTIMAL 2.36s | 2p OPTIMAL/OPTIMAL 2.93s\n" ] }, { @@ -2100,16 +2100,16 @@ "=== Certification par densite et par taille ===\n", "\n", "densite 0.25 : pondere OPTIMAL 11/12 | makespan certifie par les deux passes 12/12\n", - " n= 16 ( 32 poussees, ~ 27 separations) : pondere 3/3 OPTIMAL, pire temps 0.07s | makespan certifie 3/3\n", - " n= 32 ( 64 poussees, ~ 116 separations) : pondere 3/3 OPTIMAL, pire temps 0.29s | makespan certifie 3/3\n", - " n= 64 (128 poussees, ~ 500 separations) : pondere 2/3 OPTIMAL, pire temps 10.05s | makespan certifie 3/3\n", - " n= 90 (180 poussees, ~ 980 separations) : pondere 3/3 OPTIMAL, pire temps 0.91s | makespan certifie 3/3\n", + " n= 16 ( 32 poussees, ~ 27 separations) : pondere 3/3 OPTIMAL, pire temps 0.08s | makespan certifie 3/3\n", + " n= 32 ( 64 poussees, ~ 116 separations) : pondere 3/3 OPTIMAL, pire temps 0.42s | makespan certifie 3/3\n", + " n= 64 (128 poussees, ~ 500 separations) : pondere 2/3 OPTIMAL, pire temps 10.04s | makespan certifie 3/3\n", + " n= 90 (180 poussees, ~ 980 separations) : pondere 3/3 OPTIMAL, pire temps 1.19s | makespan certifie 3/3\n", "\n", "densite 0.6 : pondere OPTIMAL 7/12 | makespan certifie par les deux passes 10/12\n", - " n= 16 ( 32 poussees, ~ 68 separations) : pondere 3/3 OPTIMAL, pire temps 1.06s | makespan certifie 3/3\n", - " n= 32 ( 64 poussees, ~ 275 separations) : pondere 1/3 OPTIMAL, pire temps 10.02s | makespan certifie 2/3\n", - " n= 64 (128 poussees, ~1181 separations) : pondere 1/3 OPTIMAL, pire temps 10.08s | makespan certifie 2/3\n", - " n= 90 (180 poussees, ~2349 separations) : pondere 2/3 OPTIMAL, pire temps 10.06s | makespan certifie 3/3\n", + " n= 16 ( 32 poussees, ~ 68 separations) : pondere 3/3 OPTIMAL, pire temps 1.24s | makespan certifie 3/3\n", + " n= 32 ( 64 poussees, ~ 275 separations) : pondere 1/3 OPTIMAL, pire temps 10.03s | makespan certifie 2/3\n", + " n= 64 (128 poussees, ~1181 separations) : pondere 1/3 OPTIMAL, pire temps 10.10s | makespan certifie 2/3\n", + " n= 90 (180 poussees, ~2349 separations) : pondere 2/3 OPTIMAL, pire temps 10.07s | makespan certifie 3/3\n", "\n", "=== Instances ou l'encodage pondere rend un FEASIBLE indistinct alors que les deux passes CERTIFIENT le makespan : 4/24 ===\n", " densite n_modules seed pond_status 2p_status\n", @@ -2118,7 +2118,7 @@ " 0.60 64 22 FEASIBLE OPTIMAL/FEASIBLE\n", " 0.60 90 11 FEASIBLE OPTIMAL/FEASIBLE\n", "\n", - "Cout du second encodage : 68.5 s contre 97.0 s (x1.42)\n", + "Cout du second encodage : 72.5 s contre 105.0 s (x1.45)\n", "Audits externes en echec sur la sonde : 0\n" ] } @@ -2183,10 +2183,10 @@ "id": "bb1f6872", "metadata": { "papermill": { - "duration": 0.00618, - "end_time": "2026-10-05T00:02:49.816193+00:00", + "duration": 0.006488, + "end_time": "2026-10-05T15:48:51.360174+00:00", "exception": false, - "start_time": "2026-10-05T00:02:49.810013+00:00", + "start_time": "2026-10-05T15:48:51.353686+00:00", "status": "completed" }, "tags": [] @@ -2224,16 +2224,16 @@ "id": "824a04a6", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:02:49.826144Z", - "iopub.status.busy": "2026-10-05T00:02:49.825883Z", - "iopub.status.idle": "2026-10-05T00:02:49.834990Z", - "shell.execute_reply": "2026-10-05T00:02:49.834414Z" + "iopub.execute_input": "2026-10-05T15:48:51.376315Z", + "iopub.status.busy": "2026-10-05T15:48:51.375639Z", + "iopub.status.idle": "2026-10-05T15:48:51.393599Z", + "shell.execute_reply": "2026-10-05T15:48:51.392464Z" }, "papermill": { - "duration": 0.014522, - "end_time": "2026-10-05T00:02:49.835595+00:00", + "duration": 0.028416, + "end_time": "2026-10-05T15:48:51.395107+00:00", "exception": false, - "start_time": "2026-10-05T00:02:49.821073+00:00", + "start_time": "2026-10-05T15:48:51.366691+00:00", "status": "completed" }, "tags": [] @@ -2247,18 +2247,18 @@ "\n", "Artefacts publies dans data\\app30-orbital-assembly-audit\n", " difficulty_probe.csv 2,583 octets\n", - " exchange_fronts.json 15,031 octets\n", - " grid_runs.csv 4,481 octets\n", + " exchange_fronts.json 15,034 octets\n", + " grid_runs.csv 4,477 octets\n", " LICENSE 1,129 octets\n", " matched_comparison.csv 2,738 octets\n", - " provenance.json 9,895 octets\n", - " SOURCE.md 6,865 octets\n" + " provenance.json 9,897 octets\n", + " SOURCE.md 6,862 octets\n" ] } ], "source": [ "provenance = {\n", - " \"application\": \"Research-08 — Ordonnancement d'assemblage orbital\",\n", + " \"application\": \"Frontieres-08 — Ordonnancement d'assemblage orbital\",\n", " \"distillation\": {\n", " \"projet\": \"PrCon C4 — Orbital Assembly Scheduling\",\n", " \"auteurs\": [\"Gurvan Estable\", \"Joris Bely\", \"Kévin Lubert\"],\n", @@ -2305,10 +2305,10 @@ "id": "9562692c", "metadata": { "papermill": { - "duration": 0.004661, - "end_time": "2026-10-05T00:02:49.844760+00:00", + "duration": 0.006425, + "end_time": "2026-10-05T15:48:51.408127+00:00", "exception": false, - "start_time": "2026-10-05T00:02:49.840099+00:00", + "start_time": "2026-10-05T15:48:51.401702+00:00", "status": "completed" }, "tags": [] @@ -2325,16 +2325,16 @@ "id": "10e749ec", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:02:49.858250Z", - "iopub.status.busy": "2026-10-05T00:02:49.857922Z", - "iopub.status.idle": "2026-10-05T00:02:49.865970Z", - "shell.execute_reply": "2026-10-05T00:02:49.864837Z" + "iopub.execute_input": "2026-10-05T15:48:51.421486Z", + "iopub.status.busy": "2026-10-05T15:48:51.421210Z", + "iopub.status.idle": "2026-10-05T15:48:51.427811Z", + "shell.execute_reply": "2026-10-05T15:48:51.426862Z" }, "papermill": { - "duration": 0.017014, - "end_time": "2026-10-05T00:02:49.866936+00:00", + "duration": 0.014631, + "end_time": "2026-10-05T15:48:51.428755+00:00", "exception": false, - "start_time": "2026-10-05T00:02:49.849922+00:00", + "start_time": "2026-10-05T15:48:51.414124+00:00", "status": "completed" }, "tags": [] @@ -2385,10 +2385,10 @@ "id": "ded4bf55", "metadata": { "papermill": { - "duration": 0.005265, - "end_time": "2026-10-05T00:02:49.878537+00:00", + "duration": 0.00559, + "end_time": "2026-10-05T15:48:51.439740+00:00", "exception": false, - "start_time": "2026-10-05T00:02:49.873272+00:00", + "start_time": "2026-10-05T15:48:51.434150+00:00", "status": "completed" }, "tags": [] @@ -2407,16 +2407,16 @@ "id": "677a9a93", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:02:49.890215Z", - "iopub.status.busy": "2026-10-05T00:02:49.890003Z", - "iopub.status.idle": "2026-10-05T00:02:49.923796Z", - "shell.execute_reply": "2026-10-05T00:02:49.922669Z" + "iopub.execute_input": "2026-10-05T15:48:51.453442Z", + "iopub.status.busy": "2026-10-05T15:48:51.453013Z", + "iopub.status.idle": "2026-10-05T15:48:51.494135Z", + "shell.execute_reply": "2026-10-05T15:48:51.493190Z" }, "papermill": { - "duration": 0.04036, - "end_time": "2026-10-05T00:02:49.924778+00:00", + "duration": 0.049553, + "end_time": "2026-10-05T15:48:51.495228+00:00", "exception": false, - "start_time": "2026-10-05T00:02:49.884418+00:00", + "start_time": "2026-10-05T15:48:51.445675+00:00", "status": "completed" }, "tags": [] @@ -2467,10 +2467,10 @@ "id": "ee1d988f", "metadata": { "papermill": { - "duration": 0.006167, - "end_time": "2026-10-05T00:02:49.937516+00:00", + "duration": 0.007947, + "end_time": "2026-10-05T15:48:51.510415+00:00", "exception": false, - "start_time": "2026-10-05T00:02:49.931349+00:00", + "start_time": "2026-10-05T15:48:51.502468+00:00", "status": "completed" }, "tags": [] @@ -2491,16 +2491,16 @@ "id": "f821dfe4", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:02:49.946707Z", - "iopub.status.busy": "2026-10-05T00:02:49.946515Z", - "iopub.status.idle": "2026-10-05T00:02:49.951712Z", - "shell.execute_reply": "2026-10-05T00:02:49.951130Z" + "iopub.execute_input": "2026-10-05T15:48:51.529786Z", + "iopub.status.busy": "2026-10-05T15:48:51.529350Z", + "iopub.status.idle": "2026-10-05T15:48:51.539585Z", + "shell.execute_reply": "2026-10-05T15:48:51.537951Z" }, "papermill": { - "duration": 0.009955, - "end_time": "2026-10-05T00:02:49.952175+00:00", + "duration": 0.022367, + "end_time": "2026-10-05T15:48:51.541070+00:00", "exception": false, - "start_time": "2026-10-05T00:02:49.942220+00:00", + "start_time": "2026-10-05T15:48:51.518703+00:00", "status": "completed" }, "tags": [] @@ -2550,10 +2550,10 @@ "id": "dec4aa40", "metadata": { "papermill": { - "duration": 0.003386, - "end_time": "2026-10-05T00:02:49.959248+00:00", + "duration": 0.007405, + "end_time": "2026-10-05T15:48:51.556283+00:00", "exception": false, - "start_time": "2026-10-05T00:02:49.955862+00:00", + "start_time": "2026-10-05T15:48:51.548878+00:00", "status": "completed" }, "tags": [] @@ -2573,10 +2573,10 @@ "id": "8cd7a398", "metadata": { "papermill": { - "duration": 0.004538, - "end_time": "2026-10-05T00:02:49.967763+00:00", + "duration": 0.0068, + "end_time": "2026-10-05T15:48:51.570303+00:00", "exception": false, - "start_time": "2026-10-05T00:02:49.963225+00:00", + "start_time": "2026-10-05T15:48:51.563503+00:00", "status": "completed" }, "tags": [] @@ -2607,10 +2607,10 @@ "id": "f75dddcf", "metadata": { "papermill": { - "duration": 0.004085, - "end_time": "2026-10-05T00:02:49.976142+00:00", + "duration": 0.010102, + "end_time": "2026-10-05T15:48:51.588454+00:00", "exception": false, - "start_time": "2026-10-05T00:02:49.972057+00:00", + "start_time": "2026-10-05T15:48:51.578352+00:00", "status": "completed" }, "tags": [] @@ -2647,10 +2647,10 @@ "\n", "### Pour aller plus loin\n", "\n", - "- [CSP-4 Scheduling](../../Part2-CSP/CSP-4-Scheduling.ipynb) — les primitives d'intervalles, `NoOverlap` et `Cumulative` en contexte.\n", - "- [CSP-5 Optimisation](../../Part2-CSP/CSP-5-Optimization.ipynb) — objectifs, bornes et lecture des statuts.\n", - "- [Research-07 SALBP](Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb) — même exigence de certificats et de provenance sur l'équilibrage de ligne.\n", - "- [App-24 MAPF](Research-03-MAPF-Guarantee-Audit-Python.ipynb) — l'audit de garanties appliqué au *pathfinding* multi-agent." + "- [CSP-4 Scheduling](../Part2-CSP/CSP-4-Scheduling.ipynb) — les primitives d'intervalles, `NoOverlap` et `Cumulative` en contexte.\n", + "- [CSP-5 Optimisation](../Part2-CSP/CSP-5-Optimization.ipynb) — objectifs, bornes et lecture des statuts.\n", + "- [Frontieres-07 SALBP](Frontieres-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb) — même exigence de certificats et de provenance sur l'équilibrage de ligne.\n", + "- [App-24 MAPF](Frontieres-03-MAPF-Guarantee-Audit-Python.ipynb) — l'audit de garanties appliqué au *pathfinding* multi-agent." ] } ], @@ -2674,14 +2674,14 @@ }, "papermill": { "default_parameters": {}, - "duration": 177.576558, - "end_time": "2026-10-05T00:02:50.318673+00:00", + "duration": 189.631657, + "end_time": "2026-10-05T15:48:52.027858+00:00", "environment_variables": {}, "exception": null, - "input_path": "Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb", - "output_path": "Research-08-OrbitalAssembly-Certificate-Audit-Python_output.ipynb", + "input_path": "Frontieres-08-OrbitalAssembly-Certificate-Audit-Python.ipynb", + "output_path": "Frontieres-08-OrbitalAssembly-Certificate-Audit-Python.ipynb", "parameters": {}, - "start_time": "2026-10-04T23:59:52.742115+00:00", + "start_time": "2026-10-05T15:45:42.396201+00:00", "version": "2.7.0" } }, diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb similarity index 54% rename from MyIA.AI.Notebooks/Search/Applications/Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb index 82ee78724a..fedcd6e411 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb @@ -5,16 +5,16 @@ "id": "bd00bbaf", "metadata": { "papermill": { - "duration": 0.004328, - "end_time": "2026-10-05T00:02:54.367313+00:00", + "duration": 0.004381, + "end_time": "2026-10-05T15:49:01.352549+00:00", "exception": false, - "start_time": "2026-10-05T00:02:54.362985+00:00", + "start_time": "2026-10-05T15:49:01.348168+00:00", "status": "completed" }, "tags": [] }, "source": [ - "# Research-09 — RCPSP/max : quand la faisabilité devient le problème\n", + "# Frontieres-09 — RCPSP/max : quand la faisabilité devient le problème\n", "\n", "## Décalages généralisés, circuits de poids positif, et ce qu'une borne gratuite dit d'un banc d'essai\n", "\n", @@ -65,10 +65,10 @@ "id": "ac3a6c1b", "metadata": { "papermill": { - "duration": 0.004063, - "end_time": "2026-10-05T00:02:54.379153+00:00", + "duration": 0.003557, + "end_time": "2026-10-05T15:49:01.360310+00:00", "exception": false, - "start_time": "2026-10-05T00:02:54.375090+00:00", + "start_time": "2026-10-05T15:49:01.356753+00:00", "status": "completed" }, "tags": [] @@ -96,16 +96,16 @@ "id": "f37cf19b", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:02:54.388718Z", - "iopub.status.busy": "2026-10-05T00:02:54.388404Z", - "iopub.status.idle": "2026-10-05T00:02:55.020624Z", - "shell.execute_reply": "2026-10-05T00:02:55.019983Z" + "iopub.execute_input": "2026-10-05T15:49:01.369756Z", + "iopub.status.busy": "2026-10-05T15:49:01.369301Z", + "iopub.status.idle": "2026-10-05T15:49:02.639659Z", + "shell.execute_reply": "2026-10-05T15:49:02.638738Z" }, "papermill": { - "duration": 0.637968, - "end_time": "2026-10-05T00:02:55.021276+00:00", + "duration": 1.276531, + "end_time": "2026-10-05T15:49:02.640422+00:00", "exception": false, - "start_time": "2026-10-05T00:02:54.383308+00:00", + "start_time": "2026-10-05T15:49:01.363891+00:00", "status": "completed" }, "tags": [] @@ -168,10 +168,10 @@ "id": "221e195d", "metadata": { "papermill": { - "duration": 0.002477, - "end_time": "2026-10-05T00:02:55.026447+00:00", + "duration": 0.00322, + "end_time": "2026-10-05T15:49:02.646974+00:00", "exception": false, - "start_time": "2026-10-05T00:02:55.023970+00:00", + "start_time": "2026-10-05T15:49:02.643754+00:00", "status": "completed" }, "tags": [] @@ -187,10 +187,10 @@ "id": "15cc83bc", "metadata": { "papermill": { - "duration": 0.002208, - "end_time": "2026-10-05T00:02:55.030969+00:00", + "duration": 0.003838, + "end_time": "2026-10-05T15:49:02.654436+00:00", "exception": false, - "start_time": "2026-10-05T00:02:55.028761+00:00", + "start_time": "2026-10-05T15:49:02.650598+00:00", "status": "completed" }, "tags": [] @@ -227,16 +227,16 @@ "id": "f7c357f5", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:02:55.036807Z", - "iopub.status.busy": "2026-10-05T00:02:55.036535Z", - "iopub.status.idle": "2026-10-05T00:02:55.042572Z", - "shell.execute_reply": "2026-10-05T00:02:55.042183Z" + "iopub.execute_input": "2026-10-05T15:49:02.665406Z", + "iopub.status.busy": "2026-10-05T15:49:02.664577Z", + "iopub.status.idle": "2026-10-05T15:49:02.677547Z", + "shell.execute_reply": "2026-10-05T15:49:02.676394Z" }, "papermill": { - "duration": 0.009826, - "end_time": "2026-10-05T00:02:55.043265+00:00", + "duration": 0.020301, + "end_time": "2026-10-05T15:49:02.678741+00:00", "exception": false, - "start_time": "2026-10-05T00:02:55.033439+00:00", + "start_time": "2026-10-05T15:49:02.658440+00:00", "status": "completed" }, "tags": [] @@ -322,10 +322,10 @@ "id": "a33e2281", "metadata": { "papermill": { - "duration": 0.002245, - "end_time": "2026-10-05T00:02:55.047754+00:00", + "duration": 0.004942, + "end_time": "2026-10-05T15:49:02.688914+00:00", "exception": false, - "start_time": "2026-10-05T00:02:55.045509+00:00", + "start_time": "2026-10-05T15:49:02.683972+00:00", "status": "completed" }, "tags": [] @@ -346,10 +346,10 @@ "id": "34acfb2f", "metadata": { "papermill": { - "duration": 0.002074, - "end_time": "2026-10-05T00:02:55.051939+00:00", + "duration": 0.005203, + "end_time": "2026-10-05T15:49:02.698892+00:00", "exception": false, - "start_time": "2026-10-05T00:02:55.049865+00:00", + "start_time": "2026-10-05T15:49:02.693689+00:00", "status": "completed" }, "tags": [] @@ -381,16 +381,16 @@ "id": "4a390a79", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:02:55.057077Z", - "iopub.status.busy": "2026-10-05T00:02:55.056915Z", - "iopub.status.idle": "2026-10-05T00:02:55.062881Z", - "shell.execute_reply": "2026-10-05T00:02:55.062197Z" + "iopub.execute_input": "2026-10-05T15:49:02.710282Z", + "iopub.status.busy": "2026-10-05T15:49:02.709913Z", + "iopub.status.idle": "2026-10-05T15:49:02.720875Z", + "shell.execute_reply": "2026-10-05T15:49:02.719389Z" }, "papermill": { - "duration": 0.009533, - "end_time": "2026-10-05T00:02:55.063567+00:00", + "duration": 0.018513, + "end_time": "2026-10-05T15:49:02.722063+00:00", "exception": false, - "start_time": "2026-10-05T00:02:55.054034+00:00", + "start_time": "2026-10-05T15:49:02.703550+00:00", "status": "completed" }, "tags": [] @@ -469,10 +469,10 @@ "id": "5388605f", "metadata": { "papermill": { - "duration": 0.002251, - "end_time": "2026-10-05T00:02:55.068429+00:00", + "duration": 0.00576, + "end_time": "2026-10-05T15:49:02.732326+00:00", "exception": false, - "start_time": "2026-10-05T00:02:55.066178+00:00", + "start_time": "2026-10-05T15:49:02.726566+00:00", "status": "completed" }, "tags": [] @@ -493,10 +493,10 @@ "id": "f88231f3", "metadata": { "papermill": { - "duration": 0.002111, - "end_time": "2026-10-05T00:02:55.072879+00:00", + "duration": 0.00391, + "end_time": "2026-10-05T15:49:02.741583+00:00", "exception": false, - "start_time": "2026-10-05T00:02:55.070768+00:00", + "start_time": "2026-10-05T15:49:02.737673+00:00", "status": "completed" }, "tags": [] @@ -528,16 +528,16 @@ "id": "40eb6f0d", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:02:55.078996Z", - "iopub.status.busy": "2026-10-05T00:02:55.078791Z", - "iopub.status.idle": "2026-10-05T00:02:55.107254Z", - "shell.execute_reply": "2026-10-05T00:02:55.106644Z" + "iopub.execute_input": "2026-10-05T15:49:02.751895Z", + "iopub.status.busy": "2026-10-05T15:49:02.751499Z", + "iopub.status.idle": "2026-10-05T15:49:02.796745Z", + "shell.execute_reply": "2026-10-05T15:49:02.795685Z" }, "papermill": { - "duration": 0.032557, - "end_time": "2026-10-05T00:02:55.107823+00:00", + "duration": 0.051645, + "end_time": "2026-10-05T15:49:02.797656+00:00", "exception": false, - "start_time": "2026-10-05T00:02:55.075266+00:00", + "start_time": "2026-10-05T15:49:02.746011+00:00", "status": "completed" }, "tags": [] @@ -616,10 +616,10 @@ "id": "351f4321", "metadata": { "papermill": { - "duration": 0.002178, - "end_time": "2026-10-05T00:02:55.112392+00:00", + "duration": 0.00378, + "end_time": "2026-10-05T15:49:02.805702+00:00", "exception": false, - "start_time": "2026-10-05T00:02:55.110214+00:00", + "start_time": "2026-10-05T15:49:02.801922+00:00", "status": "completed" }, "tags": [] @@ -637,10 +637,10 @@ "id": "68a8ebb6", "metadata": { "papermill": { - "duration": 0.00226, - "end_time": "2026-10-05T00:02:55.116975+00:00", + "duration": 0.00353, + "end_time": "2026-10-05T15:49:02.812928+00:00", "exception": false, - "start_time": "2026-10-05T00:02:55.114715+00:00", + "start_time": "2026-10-05T15:49:02.809398+00:00", "status": "completed" }, "tags": [] @@ -676,16 +676,16 @@ "id": "75af690f", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:02:55.122926Z", - "iopub.status.busy": "2026-10-05T00:02:55.122729Z", - "iopub.status.idle": "2026-10-05T00:02:55.129704Z", - "shell.execute_reply": "2026-10-05T00:02:55.129146Z" + "iopub.execute_input": "2026-10-05T15:49:02.821591Z", + "iopub.status.busy": "2026-10-05T15:49:02.821334Z", + "iopub.status.idle": "2026-10-05T15:49:02.830784Z", + "shell.execute_reply": "2026-10-05T15:49:02.829848Z" }, "papermill": { - "duration": 0.0107, - "end_time": "2026-10-05T00:02:55.130166+00:00", + "duration": 0.015092, + "end_time": "2026-10-05T15:49:02.831613+00:00", "exception": false, - "start_time": "2026-10-05T00:02:55.119466+00:00", + "start_time": "2026-10-05T15:49:02.816521+00:00", "status": "completed" }, "tags": [] @@ -768,10 +768,10 @@ "id": "22a08eda", "metadata": { "papermill": { - "duration": 0.002341, - "end_time": "2026-10-05T00:02:55.135151+00:00", + "duration": 0.003437, + "end_time": "2026-10-05T15:49:02.839101+00:00", "exception": false, - "start_time": "2026-10-05T00:02:55.132810+00:00", + "start_time": "2026-10-05T15:49:02.835664+00:00", "status": "completed" }, "tags": [] @@ -791,10 +791,10 @@ "id": "e04a8a98", "metadata": { "papermill": { - "duration": 0.002383, - "end_time": "2026-10-05T00:02:55.140214+00:00", + "duration": 0.003338, + "end_time": "2026-10-05T15:49:02.847864+00:00", "exception": false, - "start_time": "2026-10-05T00:02:55.137831+00:00", + "start_time": "2026-10-05T15:49:02.844526+00:00", "status": "completed" }, "tags": [] @@ -813,16 +813,16 @@ "id": "ffd644b0", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:02:55.146932Z", - "iopub.status.busy": "2026-10-05T00:02:55.146712Z", - "iopub.status.idle": "2026-10-05T00:02:57.825997Z", - "shell.execute_reply": "2026-10-05T00:02:57.825301Z" + "iopub.execute_input": "2026-10-05T15:49:02.859963Z", + "iopub.status.busy": "2026-10-05T15:49:02.859585Z", + "iopub.status.idle": "2026-10-05T15:49:07.341243Z", + "shell.execute_reply": "2026-10-05T15:49:07.340449Z" }, "papermill": { - "duration": 2.683692, - "end_time": "2026-10-05T00:02:57.826642+00:00", + "duration": 4.490435, + "end_time": "2026-10-05T15:49:07.342336+00:00", "exception": false, - "start_time": "2026-10-05T00:02:55.142950+00:00", + "start_time": "2026-10-05T15:49:02.851901+00:00", "status": "completed" }, "tags": [] @@ -839,12 +839,12 @@ "-3 24 0 0 0 0.00\n", "-2 24 0 0 0 0.00\n", "-1 24 0 0 0 0.00\n", - " 0 0 24 0 0 0.11\n", - " 1 0 23 1 0 0.17\n", - " 2 0 22 2 0 0.34\n", - " 3 0 22 2 0 0.35\n", - " 5 0 19 5 0 0.89\n", - " 8 0 4 20 0 0.65\n" + " 0 0 24 0 0 0.18\n", + " 1 0 23 1 0 0.52\n", + " 2 0 22 2 0 0.51\n", + " 3 0 22 2 0 0.63\n", + " 5 0 19 5 0 1.55\n", + " 8 0 4 20 0 0.83\n" ] } ], @@ -891,10 +891,10 @@ "id": "d9e1e915", "metadata": { "papermill": { - "duration": 0.002784, - "end_time": "2026-10-05T00:02:57.832498+00:00", + "duration": 0.003772, + "end_time": "2026-10-05T15:49:07.350135+00:00", "exception": false, - "start_time": "2026-10-05T00:02:57.829714+00:00", + "start_time": "2026-10-05T15:49:07.346363+00:00", "status": "completed" }, "tags": [] @@ -927,16 +927,16 @@ "id": "547a1187", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:02:57.839558Z", - "iopub.status.busy": "2026-10-05T00:02:57.839333Z", - "iopub.status.idle": "2026-10-05T00:02:58.033594Z", - "shell.execute_reply": "2026-10-05T00:02:58.033076Z" + "iopub.execute_input": "2026-10-05T15:49:07.360710Z", + "iopub.status.busy": "2026-10-05T15:49:07.360296Z", + "iopub.status.idle": "2026-10-05T15:49:07.743321Z", + "shell.execute_reply": "2026-10-05T15:49:07.742438Z" }, "papermill": { - "duration": 0.19902, - "end_time": "2026-10-05T00:02:58.034364+00:00", + "duration": 0.390406, + "end_time": "2026-10-05T15:49:07.744292+00:00", "exception": false, - "start_time": "2026-10-05T00:02:57.835344+00:00", + "start_time": "2026-10-05T15:49:07.353886+00:00", "status": "completed" }, "tags": [] @@ -944,7 +944,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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gZaI7ZVi6VJnyhTba259S0RExEAWERFRGJqAAAQGBiIkNBR2/yt4TSRCQkLUZyNRokTsECOQgErdKkXVxdzaKyv+mXLxYXPrWyIism4MZBEREYXhf+0y/LPmwL0nT1SR64hs376LU3+FBgWabH/ztX2ZBLGkrlSSJEkS6B0hIiIiIosOZMmqKqtXr8bBgwfV2dKmTZuiTJkyxm4WERGZkcC7t/F+63o4584HG2fnSMdTFisVp8d/dfEcTBVf25fJ2EKCWB4eHgn0jhARERGRRQeyunXrppaJ7tevH169eoWKFSti8eLFaNmypbGbRkREZhbMkktUyjZvHafHvjWkN0wVXxsRERERmTqLCWRdvHgRc+bMwYEDB1C5cmW1T6aESLFSycyyt7eYl0pEREREREREZJUsport9u3bkTx5clSqVEm3r3nz5nj58iVOnz5t1LYREREREREREVHcWUya0t27d5EhQwbY2Njo9mXMmFF3rHTp0lHez8fHR120Hj16pH4+e/Ys3tr63vcTTNnjx49jfV++NvN83177fbLI1yX42oyD71v0+Jk0z8/kl2jHDFIInv6/H+JzLGVuvL294evra+xmWCT2LfvWHPFzy741R97x+F0W07GUxQSyPn36BDc3t3D7tNflWHQmT56MkSNHRtpfokQJWKvRC9PDUvG1maH0lvt55GszU/xMmqcEeN+kPmemTJlg7aQfrH0sRURERPE3lrKYQJasIHTlypVw+969+7xE+pdWF5LC8J07d9Zd9/f3V1lZmTNnNou6WhK5lIHiqVOnkDp1algSvjbzxPfNPPF9M0+W+r6Z2+uSs4cy8MqfP7+xm2ISpB/kvZOSD+Ywlopv5vZ5NifsW/atOeLnln1rjp7F83dZTMdSFjO6kBcsKxRKIMr5f8ulX758WXcsOu7u7uoSVrZs2WBu5MOULl06WCK+NvPE98088X0zT5b6vpnT62Im1v+TcVjx4sWN+G6YJnP6PJsb9i371hzxc8u+NUep4/G7LCZjKYsp9t6wYUNoNBrMnTtXXZftqVOnonDhwsiVK5exm0dERERERERERHFkMRlZqVKlwpw5c9C1a1ds3LgRb968Ualpu3btMnbTiIiIiIiIiIjIACwmkCVat26NatWq4cSJE0iUKBEqVKgAV1dXWDKZFjlixIhI0yMtAV+beeL7Zp74vpkn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j2/X/zdj2GutvdaznvfU+z/P+zzPW6OGU7JkyYS+xY9Lly61f3N9ZmamU61aNXu2x08//eR88sknTps2bfxjR44csZLPpk2bWlCG9+FYo0aN/GsoB2WMsrKynGLFiiW0IaodHjt27HC+/vpr80HZsmWdFStW+HYAfsX/lFzWqlUrocA5dOiQlVq0aNHCMqNY0atcubI9G7Zt2+bs2rXLqV69eszPVxRbk/mjVKlSTpcuXfyxSaUtBTF+Qggh/r/p0KFDNv1DWR3z5YEDB2zuqFixYlw9Epx3Vq9e7VSoUMGpUqVK3OesXbvW2bdvn81DfA8tFW/Rhmdv3rzZ5qjatWs7pUuXztX5o0eP2tyFpsLG8HlP8zHHbdy40SlTpoxpAi8resuWLRbYS6QJad+AlkLToaWSBUuYi5mTCxcu7GRkZJhu498ewXmeAEw8vYrm432bNWvmfw9f4tPGjRubdkhGMjs80BRffvml+QDtsHjx4hjdjG3Yc/DgQXt//BePoJ44fPiw+RXd6ul2ylnRbNgR/vlKZmsyfzC2aCm0YKptKajxEyKluEKIAuWss85yZ86c6X/etGmTW7VqVffCCy90mzRp4pYqVcrt37+/f/733393+U911apVMfepVKmS+8ILLyR8Tvfu3d3WrVu7LVu2dC+44AI3MzPTXb9+fcw1GzdudM8//3z37LPPdhs3buyee+657oIFCyKfX7lypVumTBn3oosuci+77DK3ZMmS7uzZs2Oecdppp7k33HCDW7FiRffaa691p02bZsdHjBjhnnrqqW7Dhg3djIwM9+abb7b33LJli//d1157zS1durRbr149u+6MM86wY4nAV7wzf5o3b+6WL1/evfLKK90DBw7416xYscKeE+S7776LefaHH37onnzyye4777xjn48ePerWqVPHbd++fdznfvXVV/b9b775JrIdMHDgQLdIkSIJfbBjxw63SpUqNgZNmzY1H06ePDmuDRs2bLDvtmrVysab5xUqVMh94okn3A4dOtjPF88pVqyYu3jx4lz5LJk/wu+fSltSMX5CCCHSi+rVq7vjx4/3P2/fvt2tWbOmzZnMl+iFBx54wP37779j9Mj8+fNj7sPcMGrUqITPGTBggM1JzGc8k3mJOSYIc2CtWrXccuXKuVdddZV7zjnnuNOnT498ft26dTa/owXr1q3rFi9e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", "text/plain": [ "
" ] @@ -984,10 +984,10 @@ "id": "f1dc8c22", "metadata": { "papermill": { - "duration": 0.002842, - "end_time": "2026-10-05T00:02:58.040281+00:00", + "duration": 0.005749, + "end_time": "2026-10-05T15:49:07.754982+00:00", "exception": false, - "start_time": "2026-10-05T00:02:58.037439+00:00", + "start_time": "2026-10-05T15:49:07.749233+00:00", "status": "completed" }, "tags": [] @@ -1015,10 +1015,10 @@ "id": "267ce175", "metadata": { "papermill": { - "duration": 0.002547, - "end_time": "2026-10-05T00:02:58.045540+00:00", + "duration": 0.005699, + "end_time": "2026-10-05T15:49:07.766486+00:00", "exception": false, - "start_time": "2026-10-05T00:02:58.042993+00:00", + "start_time": "2026-10-05T15:49:07.760787+00:00", "status": "completed" }, "tags": [] @@ -1047,16 +1047,16 @@ "id": "6acd6465", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:02:58.051545Z", - "iopub.status.busy": "2026-10-05T00:02:58.051292Z", - "iopub.status.idle": "2026-10-05T00:03:03.694039Z", - "shell.execute_reply": "2026-10-05T00:03:03.693018Z" + "iopub.execute_input": "2026-10-05T15:49:07.780974Z", + "iopub.status.busy": "2026-10-05T15:49:07.780377Z", + "iopub.status.idle": "2026-10-05T15:49:15.260551Z", + "shell.execute_reply": "2026-10-05T15:49:15.259644Z" }, "papermill": { - "duration": 5.64699, - "end_time": "2026-10-05T00:03:03.695059+00:00", + "duration": 7.488875, + "end_time": "2026-10-05T15:49:15.261590+00:00", "exception": false, - "start_time": "2026-10-05T00:02:58.048069+00:00", + "start_time": "2026-10-05T15:49:07.772715+00:00", "status": "completed" }, "tags": [] @@ -1166,10 +1166,10 @@ "id": "8bfcee9c", "metadata": { "papermill": { - "duration": 0.003046, - "end_time": "2026-10-05T00:03:03.702512+00:00", + "duration": 0.004573, + "end_time": "2026-10-05T15:49:15.270716+00:00", "exception": false, - "start_time": "2026-10-05T00:03:03.699466+00:00", + "start_time": "2026-10-05T15:49:15.266143+00:00", "status": "completed" }, "tags": [] @@ -1201,10 +1201,10 @@ "id": "2f823c5d", "metadata": { "papermill": { - "duration": 0.00298, - "end_time": "2026-10-05T00:03:03.708580+00:00", + "duration": 0.004532, + "end_time": "2026-10-05T15:49:15.279735+00:00", "exception": false, - "start_time": "2026-10-05T00:03:03.705600+00:00", + "start_time": "2026-10-05T15:49:15.275203+00:00", "status": "completed" }, "tags": [] @@ -1231,16 +1231,16 @@ "id": "3ec86fe4", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:03:03.717922Z", - "iopub.status.busy": "2026-10-05T00:03:03.717648Z", - "iopub.status.idle": "2026-10-05T00:03:03.723909Z", - "shell.execute_reply": "2026-10-05T00:03:03.723350Z" + "iopub.execute_input": "2026-10-05T15:49:15.291052Z", + "iopub.status.busy": "2026-10-05T15:49:15.290762Z", + "iopub.status.idle": "2026-10-05T15:49:15.299702Z", + "shell.execute_reply": "2026-10-05T15:49:15.298876Z" }, "papermill": { - "duration": 0.01095, - "end_time": "2026-10-05T00:03:03.724502+00:00", + "duration": 0.015993, + "end_time": "2026-10-05T15:49:15.300842+00:00", "exception": false, - "start_time": "2026-10-05T00:03:03.713552+00:00", + "start_time": "2026-10-05T15:49:15.284849+00:00", "status": "completed" }, "tags": [] @@ -1309,10 +1309,10 @@ "id": "e3162d60", "metadata": { "papermill": { - "duration": 0.002965, - "end_time": "2026-10-05T00:03:03.730582+00:00", + "duration": 0.004422, + "end_time": "2026-10-05T15:49:15.309931+00:00", "exception": false, - "start_time": "2026-10-05T00:03:03.727617+00:00", + "start_time": "2026-10-05T15:49:15.305509+00:00", "status": "completed" }, "tags": [] @@ -1327,7 +1327,7 @@ "`OPTIMAL`. Ce qui manque n'est pas un résultat, c'est la garantie qu'une comparaison manquée\n", "se signale.\n", "\n", - "Research-07 a déjà doté CoursIA du premier volet : **refuser** une jointure dont l'identité\n", + "Frontieres-07 a déjà doté CoursIA du premier volet : **refuser** une jointure dont l'identité\n", "structurelle ne correspond pas. Le volet complémentaire est celui-ci : **sur quoi se rabattre\n", "quand la référence manque légitimement ?**" ] @@ -1338,16 +1338,16 @@ "id": "95505aae", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:03:03.737999Z", - "iopub.status.busy": "2026-10-05T00:03:03.737807Z", - "iopub.status.idle": "2026-10-05T00:03:04.594194Z", - "shell.execute_reply": "2026-10-05T00:03:04.593119Z" + "iopub.execute_input": "2026-10-05T15:49:15.320253Z", + "iopub.status.busy": "2026-10-05T15:49:15.319956Z", + "iopub.status.idle": "2026-10-05T15:49:16.403521Z", + "shell.execute_reply": "2026-10-05T15:49:16.401992Z" }, "papermill": { - "duration": 0.861505, - "end_time": "2026-10-05T00:03:04.595318+00:00", + "duration": 1.091199, + "end_time": "2026-10-05T15:49:16.405584+00:00", "exception": false, - "start_time": "2026-10-05T00:03:03.733813+00:00", + "start_time": "2026-10-05T15:49:15.314385+00:00", "status": "completed" }, "tags": [] @@ -1416,10 +1416,10 @@ "id": "0033a454", "metadata": { "papermill": { - "duration": 0.00549, - "end_time": "2026-10-05T00:03:04.605341+00:00", + "duration": 0.005073, + "end_time": "2026-10-05T15:49:16.416453+00:00", "exception": false, - "start_time": "2026-10-05T00:03:04.599851+00:00", + "start_time": "2026-10-05T15:49:16.411380+00:00", "status": "completed" }, "tags": [] @@ -1442,10 +1442,10 @@ "id": "9fc991e4", "metadata": { "papermill": { - "duration": 0.006532, - "end_time": "2026-10-05T00:03:04.618697+00:00", + "duration": 0.004139, + "end_time": "2026-10-05T15:49:16.425028+00:00", "exception": false, - "start_time": "2026-10-05T00:03:04.612165+00:00", + "start_time": "2026-10-05T15:49:16.420889+00:00", "status": "completed" }, "tags": [] @@ -1475,16 +1475,16 @@ "id": "eabc81c3", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:03:04.632456Z", - "iopub.status.busy": "2026-10-05T00:03:04.632207Z", - "iopub.status.idle": "2026-10-05T00:03:04.645196Z", - "shell.execute_reply": "2026-10-05T00:03:04.644418Z" + "iopub.execute_input": "2026-10-05T15:49:16.435641Z", + "iopub.status.busy": "2026-10-05T15:49:16.435363Z", + "iopub.status.idle": "2026-10-05T15:49:16.449506Z", + "shell.execute_reply": "2026-10-05T15:49:16.448685Z" }, "papermill": { - "duration": 0.019911, - "end_time": "2026-10-05T00:03:04.646118+00:00", + "duration": 0.021165, + "end_time": "2026-10-05T15:49:16.450916+00:00", "exception": false, - "start_time": "2026-10-05T00:03:04.626207+00:00", + "start_time": "2026-10-05T15:49:16.429751+00:00", "status": "completed" }, "tags": [] @@ -1547,10 +1547,10 @@ "id": "bc86e52c", "metadata": { "papermill": { - "duration": 0.0031, - "end_time": "2026-10-05T00:03:04.652857+00:00", + "duration": 0.006136, + "end_time": "2026-10-05T15:49:16.462976+00:00", "exception": false, - "start_time": "2026-10-05T00:03:04.649757+00:00", + "start_time": "2026-10-05T15:49:16.456840+00:00", "status": "completed" }, "tags": [] @@ -1582,10 +1582,10 @@ "id": "d228babc", "metadata": { "papermill": { - "duration": 0.004132, - "end_time": "2026-10-05T00:03:04.660956+00:00", + "duration": 0.005524, + "end_time": "2026-10-05T15:49:16.474319+00:00", "exception": false, - "start_time": "2026-10-05T00:03:04.656824+00:00", + "start_time": "2026-10-05T15:49:16.468795+00:00", "status": "completed" }, "tags": [] @@ -1614,16 +1614,16 @@ "id": "575b9ed7", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:03:04.671520Z", - "iopub.status.busy": "2026-10-05T00:03:04.671312Z", - "iopub.status.idle": "2026-10-05T00:03:04.676724Z", - "shell.execute_reply": "2026-10-05T00:03:04.675952Z" + "iopub.execute_input": "2026-10-05T15:49:16.485616Z", + "iopub.status.busy": "2026-10-05T15:49:16.485341Z", + "iopub.status.idle": "2026-10-05T15:49:16.491414Z", + "shell.execute_reply": "2026-10-05T15:49:16.490597Z" }, "papermill": { - "duration": 0.011542, - "end_time": "2026-10-05T00:03:04.677725+00:00", + "duration": 0.012907, + "end_time": "2026-10-05T15:49:16.492384+00:00", "exception": false, - "start_time": "2026-10-05T00:03:04.666183+00:00", + "start_time": "2026-10-05T15:49:16.479477+00:00", "status": "completed" }, "tags": [] @@ -1678,10 +1678,10 @@ "id": "598eca40", "metadata": { "papermill": { - "duration": 0.004637, - "end_time": "2026-10-05T00:03:04.687261+00:00", + "duration": 0.003959, + "end_time": "2026-10-05T15:49:16.501459+00:00", "exception": false, - "start_time": "2026-10-05T00:03:04.682624+00:00", + "start_time": "2026-10-05T15:49:16.497500+00:00", "status": "completed" }, "tags": [] @@ -1701,16 +1701,16 @@ "id": "4f4394fa", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:03:04.698681Z", - "iopub.status.busy": "2026-10-05T00:03:04.698347Z", - "iopub.status.idle": "2026-10-05T00:03:04.705706Z", - "shell.execute_reply": "2026-10-05T00:03:04.704657Z" + "iopub.execute_input": "2026-10-05T15:49:16.511573Z", + "iopub.status.busy": "2026-10-05T15:49:16.511243Z", + "iopub.status.idle": "2026-10-05T15:49:16.518307Z", + "shell.execute_reply": "2026-10-05T15:49:16.517349Z" }, "papermill": { - "duration": 0.014885, - "end_time": "2026-10-05T00:03:04.706854+00:00", + "duration": 0.014485, + "end_time": "2026-10-05T15:49:16.519863+00:00", "exception": false, - "start_time": "2026-10-05T00:03:04.691969+00:00", + "start_time": "2026-10-05T15:49:16.505378+00:00", "status": "completed" }, "tags": [] @@ -1764,10 +1764,10 @@ "id": "acd15410", "metadata": { "papermill": { - "duration": 0.005195, - "end_time": "2026-10-05T00:03:04.717499+00:00", + "duration": 0.004858, + "end_time": "2026-10-05T15:49:16.530208+00:00", "exception": false, - "start_time": "2026-10-05T00:03:04.712304+00:00", + "start_time": "2026-10-05T15:49:16.525350+00:00", "status": "completed" }, "tags": [] @@ -1787,16 +1787,16 @@ "id": "88594468", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:03:04.727298Z", - "iopub.status.busy": "2026-10-05T00:03:04.727076Z", - "iopub.status.idle": "2026-10-05T00:03:04.732377Z", - "shell.execute_reply": "2026-10-05T00:03:04.731644Z" + "iopub.execute_input": "2026-10-05T15:49:16.541253Z", + "iopub.status.busy": "2026-10-05T15:49:16.540873Z", + "iopub.status.idle": "2026-10-05T15:49:16.548159Z", + "shell.execute_reply": "2026-10-05T15:49:16.547354Z" }, "papermill": { - "duration": 0.010106, - "end_time": "2026-10-05T00:03:04.732938+00:00", + "duration": 0.014198, + "end_time": "2026-10-05T15:49:16.549096+00:00", "exception": false, - "start_time": "2026-10-05T00:03:04.722832+00:00", + "start_time": "2026-10-05T15:49:16.534898+00:00", "status": "completed" }, "tags": [] @@ -1846,10 +1846,10 @@ "id": "dd2f5993", "metadata": { "papermill": { - "duration": 0.003114, - "end_time": "2026-10-05T00:03:04.739463+00:00", + "duration": 0.004684, + "end_time": "2026-10-05T15:49:16.558095+00:00", "exception": false, - "start_time": "2026-10-05T00:03:04.736349+00:00", + "start_time": "2026-10-05T15:49:16.553411+00:00", "status": "completed" }, "tags": [] @@ -1868,16 +1868,16 @@ "id": "cefd65b2", "metadata": { "execution": { - "iopub.execute_input": "2026-10-05T00:03:04.746968Z", - "iopub.status.busy": "2026-10-05T00:03:04.746772Z", - "iopub.status.idle": "2026-10-05T00:03:04.759194Z", - "shell.execute_reply": "2026-10-05T00:03:04.758489Z" + "iopub.execute_input": "2026-10-05T15:49:16.569213Z", + "iopub.status.busy": "2026-10-05T15:49:16.568908Z", + "iopub.status.idle": "2026-10-05T15:49:16.583573Z", + "shell.execute_reply": "2026-10-05T15:49:16.582270Z" }, "papermill": { - "duration": 0.017008, - "end_time": "2026-10-05T00:03:04.759736+00:00", + "duration": 0.021728, + "end_time": "2026-10-05T15:49:16.584644+00:00", "exception": false, - "start_time": "2026-10-05T00:03:04.742728+00:00", + "start_time": "2026-10-05T15:49:16.562916+00:00", "status": "completed" }, "tags": [] @@ -1887,17 +1887,17 @@ "name": "stdout", "output_type": "stream", "text": [ - " bounds_ladder.json 6776 octets\n", + " bounds_ladder.json 6777 octets\n", " LICENSE 1129 octets\n", - " provenance.json 3066 octets\n", - " SOURCE.md 7988 octets\n", - " temporal_regimes.csv 9388 octets\n" + " provenance.json 3068 octets\n", + " SOURCE.md 7985 octets\n", + " temporal_regimes.csv 9350 octets\n" ] } ], "source": [ "provenance = {\n", - " \"notebook\": \"Research-09-RCPSP-Max-Feasibility-Bounds-Python\",\n", + " \"notebook\": \"Frontieres-09-RCPSP-Max-Feasibility-Bounds-Python\",\n", " \"objet\": \"RCPSP/max : faisabilite, circuits de poids positif, hierarchie de bornes\",\n", " \"source_distillee\": {\n", " \"auteurs\": [\"Arthur Gallier\", \"Nicolas Naegelen\"],\n", @@ -1942,10 +1942,10 @@ "id": "ffb8ae4e", "metadata": { "papermill": { - "duration": 0.002802, - "end_time": "2026-10-05T00:03:04.765566+00:00", + "duration": 0.004861, + "end_time": "2026-10-05T15:49:16.594873+00:00", "exception": false, - "start_time": "2026-10-05T00:03:04.762764+00:00", + "start_time": "2026-10-05T15:49:16.590012+00:00", "status": "completed" }, "tags": [] @@ -1963,10 +1963,10 @@ "id": "6b424dd2", "metadata": { "papermill": { - "duration": 0.003352, - "end_time": "2026-10-05T00:03:04.772286+00:00", + "duration": 0.004702, + "end_time": "2026-10-05T15:49:16.604436+00:00", "exception": false, - "start_time": "2026-10-05T00:03:04.768934+00:00", + "start_time": "2026-10-05T15:49:16.599734+00:00", "status": "completed" }, "tags": [] @@ -1991,7 +1991,7 @@ "visibles :\n", "\n", "- leur section RCPSP/max pose le **bon modèle général**, capable de porter des lags maximaux ;\n", - " Research-09 exerce ce que ce modèle rend possible et que la formulation seule ne montre pas — le\n", + " Frontieres-09 exerce ce que ce modèle rend possible et que la formulation seule ne montre pas — le\n", " circuit, le témoin, la bascule de complexité ;\n", "- leur banc d'essai fait reposer sa colonne d'écart sur une jointure par nom ; App-31 en tire\n", " la question de protocole, non pour corriger un chiffre, mais pour que l'absence de référence\n", @@ -2008,10 +2008,10 @@ "id": "dd398fd4", "metadata": { "papermill": { - "duration": 0.003459, - "end_time": "2026-10-05T00:03:04.779573+00:00", + "duration": 0.004968, + "end_time": "2026-10-05T15:49:16.614270+00:00", "exception": false, - "start_time": "2026-10-05T00:03:04.776114+00:00", + "start_time": "2026-10-05T15:49:16.609302+00:00", "status": "completed" }, "tags": [] @@ -2079,14 +2079,14 @@ }, "papermill": { "default_parameters": {}, - "duration": 12.328766, - "end_time": "2026-10-05T00:03:05.131878+00:00", + "duration": 18.031087, + "end_time": "2026-10-05T15:49:17.062241+00:00", "environment_variables": {}, "exception": null, - "input_path": "Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb", - "output_path": "Research-09-RCPSP-Max-Feasibility-Bounds-Python_output.ipynb", + "input_path": "Frontieres-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb", + "output_path": "Frontieres-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb", "parameters": {}, - "start_time": "2026-10-05T00:02:52.803112+00:00", + "start_time": "2026-10-05T15:48:59.031154+00:00", "version": "2.7.0" } }, diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-10-NeuralDiving-Coloration-Python.ipynb similarity index 96% rename from MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-10-NeuralDiving-Coloration-Python.ipynb index d7026fba7d..e91d740167 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-10-NeuralDiving-Coloration-Python.ipynb @@ -14,17 +14,17 @@ "tags": [] }, "source": [ - "# Research-11 — Neural diving : un plongeur appris pour CP-SAT\n", + "# Frontieres-10 — Neural diving : un plongeur appris pour CP-SAT\n", "\n", "## Du conseil aux valeurs aux branches prouvées : ce que le diving apporte, mesure à l'appui\n", "\n", - "[← Applications](../README.md) | [↑ Search](../../README.md) | [<< App-31 Bornes RCPSP](Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb)\n", + "[← Partie 5](README.md) | [↑ Search](../README.md) | [<< App-31 Bornes RCPSP](Frontieres-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb)\n", "\n", "> **Durée estimée : 60 minutes**\n", "\n", "## Hommage et question scientifique\n", "\n", - "Une branche de la recherche « machine learning for combinatorial optimization » promet d'apprendre une **solution initiale** pour accélérer le solveur : c'est le **diving** de Nair et al. (2021), *« Solving Mixed Integer Programs Using Neural Networks »* (arXiv:2012.13349, v3, juillet 2021). Leur apport se compose de deux gestes distincts : la **priorité de branchement** (choisir quelle variable contribuer en premier, à chaque nœud) et le **plongement** (apprendre quel *sous-ensemble de variables fixer tout de suite*). La composante branchement a déjà été auditée dans ce dépôt : [App-28 Learning to Branch](Research-06-LearningToBranch-Generalization-Audit-Python.ipynb) y mesure qu'une politique locale fidèle ne garantit ni un arbre plus petit ni un solveur plus rapide. Ce notebook reprend l'autre composante, sur un terrain contrôlé : **un plongeur MLP qui prédit une affectation partielle, injectée comme `hint` (conseil) dans un solveur réel, OR-Tools CP-SAT, sur une famille de coloration de graphe calibrée pour brancher.**\n", + "Une branche de la recherche « machine learning for combinatorial optimization » promet d'apprendre une **solution initiale** pour accélérer le solveur : c'est le **diving** de Nair et al. (2021), *« Solving Mixed Integer Programs Using Neural Networks »* (arXiv:2012.13349, v3, juillet 2021). Leur apport se compose de deux gestes distincts : la **priorité de branchement** (choisir quelle variable contribuer en premier, à chaque nœud) et le **plongement** (apprendre quel *sous-ensemble de variables fixer tout de suite*). La composante branchement a déjà été auditée dans ce dépôt : [App-28 Learning to Branch](Frontieres-06-LearningToBranch-Generalization-Audit-Python.ipynb) y mesure qu'une politique locale fidèle ne garantit ni un arbre plus petit ni un solveur plus rapide. Ce notebook reprend l'autre composante, sur un terrain contrôlé : **un plongeur MLP qui prédit une affectation partielle, injectée comme `hint` (conseil) dans un solveur réel, OR-Tools CP-SAT, sur une famille de coloration de graphe calibrée pour brancher.**\n", "\n", "La reproduction est entièrement locale, sur une famille synthétique de taille notebook, et ne copie ni code ni figure de l'article. Le but n'est pas de « refaire l'article », mais de mesurer sur un cas où la recherche travaille vraiment ce que le mécanisme promet : moins de nœuds, ou une recherche plus stable. Verdict au programme : **deux nombres ensemble** — la médiane des branches, et la queue de distribution.\n", "\n", @@ -53,7 +53,7 @@ "\n", "| Levier | Portée | Effet documenté |\n", "|---|---|---|\n", - "| **Branching appris** | une décision à *chaque nœud* (quelle variable) | imité localement, ne garantit pas un arbre plus petit (Research-06) |\n", + "| **Branching appris** | une décision à *chaque nœud* (quelle variable) | imité localement, ne garantit pas un arbre plus petit (Frontieres-06) |\n", "| **Diving appris** | une décision *une fois* (quelles valeurs suggérer) | donne un point de départ : la recherche contient-elle des mauvaises décisions précoces ? |\n", "\n", "Le diving ne change pas la stratégie de branche, il change l'**état initial**. Dans CP-SAT, il se traduit par `AddHint(var, valeur)` : le solveur reçoit un conseil, s'en sert pour diriger sa recherche, et le **corrige** si le conseil contredit les contraintes. Cette correction est mesurable : quand un hint viole des arêtes d'adjacence, on dit qu'il porte des **conflits**." @@ -859,7 +859,7 @@ "source": [ "## 6. Pour aller plus loin et bibliographie\n", "\n", - "- **Research-06 Learning to Branch** ([Recherche](Research-06-LearningToBranch-Generalization-Audit-Python.ipynb)) : l'autre moitié du geste Nair — la priorité de branchement apprise, auditée sur la même famille de questions (arbre × temps × coût d'inférence). La complémentarité des deux verdicts : aucune source d'amélioration locale ne se transforme en gain global sans mesure intégrée.\n", + "- **Frontieres-06 Learning to Branch** ([Recherche](Frontieres-06-LearningToBranch-Generalization-Audit-Python.ipynb)) : l'autre moitié du geste Nair — la priorité de branchement apprise, auditée sur la même famille de questions (arbre × temps × coût d'inférence). La complémentarité des deux verdicts : aucune source d'amélioration locale ne se transforme en gain global sans mesure intégrée.\n", "- **Exercices en extension** : remplacer le MLP par un classifieur basé sur la structure (features de degré), ou entraîner le plongeur sur les conflits (régression du nombre de conflits).\n", "\n", "Bibliographie :\n", @@ -896,8 +896,8 @@ "end_time": "2026-09-23T13:42:30.790789", "environment_variables": {}, "exception": null, - "input_path": "Research-11-NeuralDiving-Coloration-Python.ipynb", - "output_path": "Research-11-NeuralDiving-Coloration-Python.ipynb", + "input_path": "Frontieres-10-NeuralDiving-Coloration-Python.ipynb", + "output_path": "Frontieres-10-NeuralDiving-Coloration-Python.ipynb", "parameters": {}, "start_time": "2026-09-23T13:42:07.654200", "version": "2.6.0" diff --git a/MyIA.AI.Notebooks/Search/Part5-Frontieres/README.md b/MyIA.AI.Notebooks/Search/Part5-Frontieres/README.md new file mode 100644 index 0000000000..e4c7bc6a34 --- /dev/null +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/README.md @@ -0,0 +1,97 @@ +# Search — Partie 5 : Frontières + +[<- Applications (cas pratiques)](../Applications/README.md) | [Partie 4 : Métaheuristiques](../Part4-Metaheuristics/README.md) | [Retour à la série Search](../README.md) + +La frontière entre le cours et la recherche : des carnets qui ne traitent pas un problème classique pour l'apprendre — ils **auditent une garantie** (vérifier empiriquement ce qu'un solveur ou un théorème récent autorise réellement à affirmer) ou **distillent un preprint** (rendre opérable un résultat publié). Chaque carnet confronte une affirmation récente à un oracle indépendant, un certificat ou un témoin vérifiable à la main. + +Sous-série d'audits et de distillations | Python 3.10+ (`ortools`, `pulp`, `scikit-learn`, `pandas`, `matplotlib`). Les volumes sont portés par le marqueur `CATALOG-STATUS` du [README de la série](../README.md). + +## Pourquoi cette partie + +Dix carnets qui ne traitent pas un problème classique pour l'apprendre — ils **auditent une garantie** (vérifier empiriquement ce qu'un solveur ou un théorème récent autorise réellement à affirmer) ou **distillent un preprint** (rendre opérable un résultat publié). Chaque carnet confronte une affirmation récente — théorème arXiv, preprint de conception de solveurs, garanties d'un mécanisme d'enchère — à un oracle indépendant, un certificat ou un témoin vérifiable à la main. La partie porte sa propre numérotation (`Frontieres-01..10`) ; les critères d'entrée et la délimitation galerie/frontières sont fixés par la carte du 2026-10-05 ([#19253](https://github.com/jsboige/CoursIA/issues/19253), arbitrée sur [#17802](https://github.com/jsboige/CoursIA/issues/17802)) : la clause « audite une garantie » porte sur ce que le carnet déclare vouloir établir ; l'hommage commémoratif et l'hommage à un travail étudiant restent en galerie. + +**Critère d'entrée** (carte [#19253](https://github.com/jsboige/CoursIA/issues/19253)) : le carnet vérifie empiriquement un résultat récent — théorème arXiv, preprint de conception de solveurs, garantie d'un mécanisme — avec les outils de la série, et confronte la claim à un oracle indépendant, un certificat ou un témoin vérifiable à la main. La date d'arrivée n'est pas un critère. + +## Objectifs d'apprentissage + +1. **Techniques** — construire un oracle indépendant (validateur, certificateur) qui ne partage aucun état avec le solveur audité ; distinguer statut, borne et optimum ; matérialiser un contre-exemple documenté en exécutable. +2. **Méthodologiques** — lire un preprint récent et en extraire la claim testable ; choisir le témoin (certificat, circuit, front de Pareto) qui prouve ou réfute ; rapporter un verdict honnête : garantie établie, écart mesuré, ou non comparable. +3. **Applicatifs** — prolonger un projet étudiant sans le recopier ; articuler preuve formelle et vérification empirique ; replacer un audit dans le parcours (fondements, CSP, métaheuristiques). + +## Notebooks + +| # | Notebook | Durée | Contenu | Source | +|---|----------|-------|---------|--------| +| 1 | [Frontieres-01-EdgeColoring-Tutte-Python](Frontieres-01-EdgeColoring-Tutte-Python.html) | ~45 min | Coloration d'arêtes cubiques : Vizing, Petersen, ponts, graphes apex et CP-SAT — vérification empirique d'un théorème récent (arXiv 2608.22870) | Nouveau | +| 2 | [Frontieres-02-Factorio-Balancer-Python](Frontieres-02-Factorio-Balancer-Python.html) | ~35 min | Belt balancer Factorio : MIP continu vs CP-SAT discret sur cas borné, N×N throughput-unlimited | Distillation Venturini 2024 | +| 3 | [Frontieres-03-MAPF-Guarantee-Audit-Python](Frontieres-03-MAPF-Guarantee-Audit-Python.html) | ~60 min | MAPF : validateur indépendant, oracle CP-SAT time-expanded, réfutation OD-A*, arrêt CBS au but, audit des garanties ECBS — distillation PrCon G3 (Matteo Atkinson, Paul Witkowski) | Projet étudiant (PrCon PRs #33/#36/#42) | +| 4 | [Frontieres-04-CombinatorialAuctions-WDP-VCG-Python](Frontieres-04-CombinatorialAuctions-WDP-VCG-Python.html) | ~60 min | Enchères combinatoires : WDP exact CP-SAT vs force brute, langage XOR, budget global, paiements VCG et audit de leurs garanties, contre-exemple de manipulation sous budget matérialisé, forensics `PRICE_SCALE` sur 18 instances CATS — distillation PrCon J2 (Majerczyk, Chartouni, Wangon-Zekou) | Projet étudiant (PrCon PR #26) | +| 5 | [Frontieres-05-CoveringArrays-Guarantee-Audit-Python](Frontieres-05-CoveringArrays-Guarantee-Audit-Python.html) | ~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) | +| 6 | [Frontieres-06-LearningToBranch-Generalization-Audit-Python](Frontieres-06-LearningToBranch-Generalization-Audit-Python.html) | ~75 min | Learning to branch : dérivation de dom/wdeg, splits groupés, transfert inter-familles, performance intégrée, coût d'inférence et seuil d'amortissement — distillation PrCon G4 (Simon Naulet, Matis Codjia) | Projet étudiant (PrCon PR #46) | +| 7 | [Frontieres-07-SALBP-AssemblyLineBalancing-Audit-Python](Frontieres-07-SALBP-AssemblyLineBalancing-Audit-Python.html) | ~70 min | SALBP-1/2 : CP-SAT, PuLP/CBC et RPW, statuts/incumbents/bornes, identité de benchmark, front Pareto certifié et MMALBP robuste/pondéré — distillation PrCon B1 (Ilias Kalalou, Kaelan Grall) | Projet étudiant (PrCon PR #57) | +| 8 | [Frontieres-08-OrbitalAssembly-Certificate-Audit-Python](Frontieres-08-OrbitalAssembly-Certificate-Audit-Python.html) | ~70 min | Assemblage orbital : physique de Hohmann dans le modèle, auditeur externe, preuve que la scalarisation est exactement lexicographique, comparaison à makespan égal, front d'échange ε-contrainte et sonde en taille **et** en densité — distillation PrCon C4 (Gurvan Estable, Joris Bely, Kévin Lubert) | Projet étudiant (PrCon PR #53) | +| 9 | [Frontieres-09-RCPSP-Max-Feasibility-Bounds-Python](Frontieres-09-RCPSP-Max-Feasibility-Bounds-Python.html) | ~65 min | RCPSP/max : le lag maximal comme arc inverse, faisabilité NP-difficile et son témoin de circuit positif, balayage des trois régimes temporel/ressource/réalisable, échelle de bornes certifiées et repli explicite quand la référence externe manque — distillation PrCon B4 (Arthur Gallier, Nicolas Naegelen) | Projet étudiant (PrCon PR #51) | +| 10 | [Frontieres-10-NeuralDiving-Coloration-Python](Frontieres-10-NeuralDiving-Coloration-Python.html) | ~60 min | Neural diving : un plongeur MLP prédit une affectation partielle, injectée comme hint réparable dans CP-SAT ; la médiane des branches recule (2829 → 2325, 25/25 instances améliorées) alors que ≈ 49 % des arêtes du hint violent l'adjacence — cohérence du hint avec les contraintes, pas précision par bit — hommage Nair et al. 2021 | Recherche (Nair et al. 2021) | + +## Prérequis par notebook + +| Notebook | Fondations requises | Dépendances | +|----------|--------------------|-------------| +| Frontieres-01 EdgeColoring-Tutte | coloration de graphes, CSP-3 | networkx, ortools | +| Frontieres-02 Factorio-Balancer | CSP-3 (CP-SAT), CSP-4 | ortools (SCIP + CP-SAT), numpy, matplotlib | +| Frontieres-03 MAPF Guarantee Audit | Search-3 (A*), CSP-3/CSP-4, heuristiques admissibles | ortools, pandas, matplotlib | +| Frontieres-04 CombinatorialAuctions-WDP-VCG | CSP-3 (CP-SAT), CSP-5 (optimisation), GameTheory-16 (VCG) | ortools, pandas, matplotlib | +| Frontieres-05 CoveringArrays Guarantee Audit | CSP-3, CSP-5 | ortools, pandas, matplotlib | +| Frontieres-06 LearningToBranch Generalization Audit | CSP-6 (heuristiques), MGS-16 (sélection d'algorithmes) | numpy, pandas, scikit-learn | +| Frontieres-07 SALBP AssemblyLineBalancing Audit | CSP-3 (CP-SAT), CSP-4 (scheduling), CSP-5 (optimisation) | ortools, pulp, pandas, numpy, matplotlib | +| Frontieres-08 OrbitalAssembly Certificate Audit | CSP-3 (CP-SAT), CSP-4 (scheduling), CSP-5 (optimisation) | ortools, pandas, matplotlib | +| Frontieres-09 RCPSP Max Feasibility Bounds | CSP-4 (scheduling), CSP-3 (CP-SAT), Planners-8 (temporel) | ortools, pandas, numpy, matplotlib | +| Frontieres-10 NeuralDiving Coloration | Frontieres-06 (composante branchement), CSP-3 (CP-SAT), MGS-16 (sélection d'algorithmes) | ortools, scikit-learn, numpy, pandas | + +## Origine des projets + +La plupart des carnets prolongent des projets étudiants réalisés dans le cadre de cours d'IA, sans en recopier le code : les références spécifiques sont indiquées dans chaque carnet. + +Le [Frontieres-03-MAPF-Guarantee-Audit-Python](Frontieres-03-MAPF-Guarantee-Audit-Python.html) distille le projet PrCon G3 de **Matteo Atkinson** et **Paul Witkowski**, *« Coordination de drones par Multi-Agent Path Finding »*, PRs [PrCon #33](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/33), [#36](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/36) et [#42](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/42). Un rerun frais alimente un validateur et un oracle CP-SAT indépendants ; le notebook distingue trajectoire valide, optimum observé et garantie réellement établie, avec provenance détaillée dans [`data/app24-mapf-audit/SOURCE.md`](data/app24-mapf-audit/SOURCE.md). + +Le [Frontieres-04-CombinatorialAuctions-WDP-VCG-Python](Frontieres-04-CombinatorialAuctions-WDP-VCG-Python.html) distille le projet PrCon J2 de **Lucas Majerczyk**, **Nabil Chartouni** et **Wilfrid Wangon-Zekou**, *« Enchères combinatoires et Winner Determination »*, PR [PrCon #26](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/26). Le notebook ré-écrit le solveur WDP (CP-SAT, prix entiers milli-unités bout-en-bout) sans importer le package `wdp/` des étudiants ; il re-résout les 18 instances CATS, **matérialise en exécutable** le contre-exemple de manipulation sous budget documenté mais jamais testé dans la source, et audite honnêtement l'écart `PRICE_SCALE` entre les outputs committés et le code au commit source. Données et provenance : [`data/app25-wdp-vcg-audit`](data/app25-wdp-vcg-audit/). + +Le [Frontieres-05-CoveringArrays-Guarantee-Audit-Python](Frontieres-05-CoveringArrays-Guarantee-Audit-Python.html) distille le projet PrCon H4 de **Valérian Pichot**, *« Covering Arrays »*, PR [PrCon #58](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/58). Sans recopier le générateur étudiant, le notebook reconstruit un oracle indépendant, un set cover CP-SAT exact et deux baselines approchées ; il reproduit surtout le faux verdict d'un validateur qui exige des interactions sémantiquement impossibles, puis le répare par un univers constraint-aware. Provenance : [`data/app26-covering-arrays-audit/SOURCE.md`](data/app26-covering-arrays-audit/SOURCE.md). + +Le [Frontieres-06-LearningToBranch-Generalization-Audit-Python](Frontieres-06-LearningToBranch-Generalization-Audit-Python.html) distille le projet PrCon G4 de **Simon Naulet** et **Matis Codjia**, *« Apprentissage d'heuristiques de branchement pour solveur CP »*, PR [PrCon #46](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/46). La reproduction est entièrement réécrite : elle remplace le split par lignes par des instances disjointes, ajoute trois transferts leave-one-family-out et compare l'arbre, le temps total et le coût d'inférence à une baseline choisie sur le train uniquement. Elle établit un résultat négatif utile : une imitation locale fidèle ne garantit ni un arbre plus petit ni un solveur plus rapide. Provenance : [`data/app28-learning-to-branch-audit/SOURCE.md`](data/app28-learning-to-branch-audit/SOURCE.md). + +Le [Frontieres-07-SALBP-AssemblyLineBalancing-Audit-Python](Frontieres-07-SALBP-AssemblyLineBalancing-Audit-Python.html) rend hommage au projet PrCon B1 d'**Ilias Kalalou** et **Kaelan Grall**, *« Équilibrage de chaîne d'assemblage (SALBP) »*, PR [PrCon #57](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/57). Le notebook préserve leur geste central — SALBP-1/2, comparaison CP-SAT/PuLP/RPW, Pareto et multi-modèles — dans une réécriture CoursIA indépendante qui publie statuts, incumbents, bornes, gaps, identité structurelle des instances et validation hors solveur. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`data/app29-salbp-audit/SOURCE.md`](data/app29-salbp-audit/SOURCE.md). + +Le [Frontieres-08-OrbitalAssembly-Certificate-Audit-Python](Frontieres-08-OrbitalAssembly-Certificate-Audit-Python.html) rend hommage au projet PrCon C4 de **Gurvan Estable**, **Joris Bely** et **Kévin Lubert**, *« Assemblage orbital de satellites »*, PR [PrCon #53](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/53). Le geste distillé est une décision de modélisation : faire descendre la physique dans le modèle, durées issues d'un temps de vol de Hohmann calculé et coûts d'un Δv calculé, les deux contraignant les mêmes intervalles CP-SAT. La reproduction CoursIA est indépendante et volontairement discrétisée autrement, donc non comparable chiffre à chiffre : elle ajoute un auditeur externe qui ne partage aucun état avec les solveurs, la preuve que l'objectif scalarisé `makespan × (B+1) + ergol` est *exactement* lexicographique dès que le budget borne l'ergol — ce que le rapport source qualifiait prudemment d'« approximation » —, une comparaison à makespan égal qui sépare l'inefficacité en ergol d'une heuristique de son retard d'échéancier, un front d'échange ε-contrainte dont chaque point porte son statut, et une sonde qui montre que la taille est un mauvais prédicteur de difficulté. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`data/app30-orbital-assembly-audit/SOURCE.md`](data/app30-orbital-assembly-audit/SOURCE.md). + +Le [Frontieres-09-RCPSP-Max-Feasibility-Bounds-Python](Frontieres-09-RCPSP-Max-Feasibility-Bounds-Python.html) rend hommage au projet PrCon B4 d'**Arthur Gallier** et **Nicolas Naegelen**, *« RCPSP — ordonnancement de projet sous contraintes de ressources »*, PR [PrCon #51](https://github.com/jsboigeEpita/2026-Epita-Programmation-par-Contraintes/pull/51). Leur rendu a fait ce que [Planners-8-Temporal](../../SymbolicAI/Planners/03-Advanced/Planners-8-Temporal-Csharp.ipynb) laissait explicitement « en exercice » : confronter un solveur à un benchmark public d'ordonnancement. La vérification indépendante conduite pour cette distillation confirme leurs dix makespans, tous recalculés `OPTIMAL` par un modèle réécrit de zéro. Le prolongement CoursIA porte sur ce que leur section RCPSP/max rendait possible sans l'exercer : un lag maximal s'encode par un **arc inverse** qui referme un circuit, la faisabilité elle-même devient NP-difficile (Bartusch, Möhring, Radermacher, 1988), et un circuit de poids strictement positif en est le témoin vérifiable à la main. Le notebook balaye les trois régimes — infaisable temporellement, infaisable par les ressources, réalisable —, mesure que le diagnostic polynomial épargne au solveur le tiers gauche du domaine, et propose une échelle de bornes certifiées comme repli explicite lorsqu'aucune référence externe n'est disponible : le champ `niveau_de_preuve` interdit de confondre un écart à une borne calculée avec un écart à un optimum connu. Aucun code, texte ou figure étudiante n'est copié. Provenance : [`data/app31-rcpsp-max/SOURCE.md`](data/app31-rcpsp-max/SOURCE.md). + +Le [Frontieres-10-NeuralDiving-Coloration-Python](Frontieres-10-NeuralDiving-Coloration-Python.html) rend hommage au second geste de l'article de Nair et al. (2021), *« Solving Mixed Integer Programs Using Neural Networks »* (arXiv:2012.13349) : le **diving**, qui apprend une solution partielle pour guider un solveur MIP. Frontieres-06 a audité la composante *branching* (politique de branchement apprise) ; Frontieres-10 enchaîne sur l'autre composante : un plongeur MLP prédit une affectation des 60 sommets d'une coloration de graphe, injectée comme `hint` réparable dans OR-Tools CP-SAT, et l'on mesure l'effet sur les branches de preuve. La famille est calibrée pour qu'une fenêtre existe : les set-cover denses s'effondrent au presolve (`nodes = 0`) et les knapsack corrélés ne se prouvent pas en fenêtre notebook ; la coloration 60 sommets / 3 arêtes branche (médiane 2742, 2303-3799 sur les 60 instances d'entraînement) et se prouve (< 0,1 s). Verdict mesuré sur 25 instances de test, sur un run déterministe (`num_workers = 1`) : la médiane des branches recule (2829 → 2325, ≈ −18 %), les 25 instances s'améliorent (gain relatif médian ≈ 15 %, de 8 % à 28 %), et ≈ 49 % des arêtes du hint (44 sur ~90) sont en conflit avec l'adjacence — la cohérence, pas la précision par bit, détermine l'effet du hint. Le notebook ne copie aucun code, donnée, figure ou prose de l'article, archivé au gisement `G:\Mon Drive\MyIA\IA\Bibliographie IA\Search\`. Provenance : [`data/app33-neural-diving/SOURCE.md`](data/app33-neural-diving/SOURCE.md). + +## Ponts inter-séries + +| Série | Lien | Relation | +| ------- | ------ | ---------- | +| [Partie 1 : Search](../Part1-Foundations/README.md) | Fondamentaux | Heuristiques admissibles, A* (Frontieres-03) | +| [Partie 2 : CSP](../Part2-CSP/README.md) | Programmation par contraintes | CP-SAT, scheduling, optimisation (toute la partie) | +| [Partie 4 : Métaheuristiques](../Part4-Metaheuristics/README.md) | Sélection d'algorithmes | MGS-16 : Rice, No Free Lunch (Frontieres-06, Frontieres-10) | +| [GameTheory](../../GameTheory/README.md) | GameTheory-16 (VCG) | Paiements VCG et garanties d'enchères (Frontieres-04) | +| [SymbolicAI — Planners](../../SymbolicAI/Planners/README.md) | Planners-8 (temporel) | Réseaux de contraintes temporelles (Frontieres-09) | +| [Langlands](../../SymbolicAI/Lean/Langlands/) | Szpiro–Pasten 2026 | La distillation arithmétique (App-32) reliée à la sous-série Langlands (#18368) | + +## Références + +| Notebook | Références | +|----------|-----------| +| Frontieres-03 (MAPF Guarantee Audit) | Stern, R., et al. (2019) — « Multi-Agent Pathfinding: Definitions, Variants, and Benchmarks », *SoCS* ; Sharon, G., et al. (2015) — « Conflict-Based Search for Optimal Multi-Agent Path Finding », *Artificial Intelligence* 219 ; Standley, T. (2010) — « Finding Optimal Solutions to Cooperative Pathfinding Problems », *AAAI* ; Barer, M., et al. (2014) — « Suboptimal Variants of the Conflict-Based Search Algorithm for the Multi-Agent Pathfinding Problem », *SoCS*. | +| Frontieres-04 (CombinatorialAuctions-WDP-VCG) | Rothkopf, M. H., Pekeč, A., & Harstad, R. M. (1998) — « Computationally Combinatorial Auction Design », *Management Science* 44(8) ; Sandholm, T. (2002) — « Algorithm for Optimal Winner Determination in Combinatorial Auctions », *Artificial Intelligence* 135 ; Leyton-Brown, K., Pearson, M., & Shoham, Y. (2000) — « Towards a Universal Test Suite for Combinatorial Auction Design », *EC 2000* (générateur CATS) ; Nisan, N. (2000) — « Bidding and Allocation in Combinatorial Auctions », *EC 2000* (langage XOR) ; Lehmann, D., O'Callaghan, L., & Shoham, Y. (2002) — « Truth Revelation in Approximately Efficient Combinatorial Auctions », *JACM* 49(5) (glouton √m, enchérisseurs single-minded). | +| Frontieres-05 (CoveringArrays Guarantee Audit) | Cohen, D. M., Dalal, S. R., Fredman, M. L., & Patton, G. C. (1997) — « The AETG System: An Approach to Testing Based on Combinatorial Design », *IEEE TSE* 23(7) ; Lei, Y., Kacker, R., Kuhn, D. R., Okun, V., & Lawrence, J. (2007) — « IPOG: A General Strategy for T-Way Software Testing », *ECBS 2007*. | +| Frontieres-06 (LearningToBranch Generalization Audit) | Boussemart, F., Hemery, F., Lecoutre, C., & Sais, L. (2004) — « Boosting Systematic Search by Weighting Constraints », *ECAI* (dom/wdeg) ; Kotthoff, L. (2014) — « Algorithm Selection for Combinatorial Search Problems: A Survey », *AI Magazine* 35(3) ; Bengio, Y., Lodi, A., & Prouvost, A. (2021) — « Machine Learning for Combinatorial Optimization: a Methodological Tour d'Horizon », *European Journal of Operational Research* 290(2) ; Balcan, M.-F., Dick, T., Sandholm, T., & Vitercik, E. (2020) — « Learning to Branch: Generalization Guarantees and Limits of Data-Independent Discretization », *JACM* 67(6). | +| Frontieres-07 (SALBP Assembly Line Balancing Audit) | Salveson, M. E. (1955) — « The Assembly Line Balancing Problem », *Journal of Industrial Engineering* 6(3) ; Helgeson, W. B., & Birnie, D. P. (1961) — « Assembly Line Balancing Using the Ranked Positional Weight Technique », *Journal of Industrial Engineering* 12(6) ; Scholl, A. (1999) — *Balancing and Sequencing of Assembly Lines*, Physica-Verlag. | +| Frontieres-08 (OrbitalAssembly Certificate Audit) | Hohmann, W. (1925) — *Die Erreichbarkeit der Himmelskörper*, Oldenbourg ; Vallado, D. A. (2013) — *Fundamentals of Astrodynamics and Applications*, 4e éd., Microcosm Press ; Haimes, Y. Y., Lasdon, L. S., & Wismer, D. A. (1971) — « On a Bicriterion Formulation of the Problems of Integrated System Identification and System Optimization », *IEEE Transactions on Systems, Man, and Cybernetics* 1(3) (ε-contrainte) ; Wilcoxon, F. (1945) — « Individual Comparisons by Ranking Methods », *Biometrics Bulletin* 1(6). | +| Frontieres-09 (RCPSP Max Feasibility Bounds) | Bartusch, M., Möhring, R. H., & Radermacher, F. J. (1988) — « Scheduling Project Networks with Resource Constraints and Time Windows », *Annals of Operations Research* 16(1) ; Kolisch, R., & Sprecher, A. (1997) — « PSPLIB — A Project Scheduling Problem Library », *European Journal of Operational Research* 96(1) ; Neumann, K., Schwindt, C., & Zimmermann, J. (2003) — *Project Scheduling with Time Windows and Scarce Resources*, Springer ; Bellman, R. (1958) — « On a Routing Problem », *Quarterly of Applied Mathematics* 16(1) (relaxation et détection de circuit). | +| Frontieres-10 (Neural Diving Coloration) | Nair, V., Bartunov, S., Gimeno, F., et al. (2021) — « Solving Mixed Integer Programs Using Neural Networks », arXiv:2012.13349 (v3, juillet 2021) ; Bengio, Y., Lodi, A., & Prouvost, A. (2021) — « Machine Learning for Combinatorial Optimization: a Methodological Tour d'Horizon », *European Journal of Operational Research* 290(2). | + +## Navigation + +[<- Applications (cas pratiques)](../Applications/README.md) | [Partie 4 : Métaheuristiques](../Part4-Metaheuristics/README.md) | [Retour à la série Search](../README.md) diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app24-mapf-audit/SOURCE.md b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app24-mapf-audit/SOURCE.md similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app24-mapf-audit/SOURCE.md rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app24-mapf-audit/SOURCE.md diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app24-mapf-audit/fresh_runs.json b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app24-mapf-audit/fresh_runs.json similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app24-mapf-audit/fresh_runs.json rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app24-mapf-audit/fresh_runs.json diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/LICENSE b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app25-wdp-vcg-audit/LICENSE similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/LICENSE rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app25-wdp-vcg-audit/LICENSE diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/SOURCE.md b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app25-wdp-vcg-audit/SOURCE.md similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/SOURCE.md rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app25-wdp-vcg-audit/SOURCE.md diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/cats/matching_g32_b100_s10000.txt b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app25-wdp-vcg-audit/cats/matching_g32_b100_s10000.txt similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/cats/matching_g32_b100_s10000.txt rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app25-wdp-vcg-audit/cats/matching_g32_b100_s10000.txt diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/cats/paths_g30_b100_s10000.txt b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app25-wdp-vcg-audit/cats/paths_g30_b100_s10000.txt similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/cats/paths_g30_b100_s10000.txt rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app25-wdp-vcg-audit/cats/paths_g30_b100_s10000.txt diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/cats/regions_g30_b100_s10000.txt b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app25-wdp-vcg-audit/cats/regions_g30_b100_s10000.txt similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/cats/regions_g30_b100_s10000.txt rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app25-wdp-vcg-audit/cats/regions_g30_b100_s10000.txt diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/cats_snapshot.json b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app25-wdp-vcg-audit/cats_snapshot.json similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app25-wdp-vcg-audit/cats_snapshot.json rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app25-wdp-vcg-audit/cats_snapshot.json diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app26-covering-arrays-audit/SOURCE.md b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app26-covering-arrays-audit/SOURCE.md similarity index 97% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app26-covering-arrays-audit/SOURCE.md rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app26-covering-arrays-audit/SOURCE.md index c293d69554..0e20fb18e4 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/data/app26-covering-arrays-audit/SOURCE.md +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app26-covering-arrays-audit/SOURCE.md @@ -50,7 +50,7 @@ Initial full execution: ```bash python scripts/notebook_tools/notebook_tools.py execute \ - MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb \ + MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-05-CoveringArrays-Guarantee-Audit-Python.ipynb \ --timeout 180 ``` diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/LICENSE b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app28-learning-to-branch-audit/LICENSE similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/LICENSE rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app28-learning-to-branch-audit/LICENSE diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/SOURCE.md b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app28-learning-to-branch-audit/SOURCE.md similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/SOURCE.md rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app28-learning-to-branch-audit/SOURCE.md diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/baseline_runs.csv b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app28-learning-to-branch-audit/baseline_runs.csv similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/baseline_runs.csv rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app28-learning-to-branch-audit/baseline_runs.csv diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/evaluation_runs.csv b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app28-learning-to-branch-audit/evaluation_runs.csv similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/evaluation_runs.csv rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app28-learning-to-branch-audit/evaluation_runs.csv diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/maturation_report.json b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app28-learning-to-branch-audit/maturation_report.json similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/maturation_report.json rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app28-learning-to-branch-audit/maturation_report.json diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/oracle_trace.csv b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app28-learning-to-branch-audit/oracle_trace.csv similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app28-learning-to-branch-audit/oracle_trace.csv rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app28-learning-to-branch-audit/oracle_trace.csv diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/LICENSE b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app29-salbp-audit/LICENSE similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/LICENSE rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app29-salbp-audit/LICENSE diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/SOURCE.md b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app29-salbp-audit/SOURCE.md similarity index 96% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/SOURCE.md rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app29-salbp-audit/SOURCE.md index bf999fb23a..862f71e061 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/SOURCE.md +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app29-salbp-audit/SOURCE.md @@ -26,7 +26,7 @@ Le notebook exécuté produit : Commande de reproduction depuis la racine CoursIA : ```powershell -python scripts/notebook_tools/notebook_tools.py execute MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb --timeout 300 --verbose +python scripts/notebook_tools/notebook_tools.py execute MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb --timeout 300 --verbose ``` Environnement de la collecte : Windows 11, Python 3.13, OR-Tools CP-SAT, PuLP/CBC, pandas, NumPy et matplotlib. Les versions exactes sont enregistrées dans les métadonnées de `provenance.json` lors de l'exécution. diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/benchmark_runs.csv b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app29-salbp-audit/benchmark_runs.csv similarity index 61% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/benchmark_runs.csv rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app29-salbp-audit/benchmark_runs.csv index 471d014170..05a1a10e35 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/benchmark_runs.csv +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app29-salbp-audit/benchmark_runs.csv @@ -1,16 +1,16 @@ instance,identity,method,status,objective,best_bound,gap,wall_time,valid -coursia-toy,11480c70a3adf3d41ff8ab37bcda3860bf8bc8bf318cf841a508f5254035b972,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.007830100017599761,True -coursia-toy,11480c70a3adf3d41ff8ab37bcda3860bf8bc8bf318cf841a508f5254035b972,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.07294150002417155,True +coursia-toy,11480c70a3adf3d41ff8ab37bcda3860bf8bc8bf318cf841a508f5254035b972,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.010468000022228807,True +coursia-toy,11480c70a3adf3d41ff8ab37bcda3860bf8bc8bf318cf841a508f5254035b972,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.0712360999896191,True coursia-toy,11480c70a3adf3d41ff8ab37bcda3860bf8bc8bf318cf841a508f5254035b972,RPW,HEURISTIC,4.0,,,0.0,True -generated-11,9a228643396f11d3e81bef6aeae0bdce926df8bac84f6498056ce9afe5eab651,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.041808500012848526,True -generated-11,9a228643396f11d3e81bef6aeae0bdce926df8bac84f6498056ce9afe5eab651,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.33075260001351126,True +generated-11,9a228643396f11d3e81bef6aeae0bdce926df8bac84f6498056ce9afe5eab651,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.04976969998097047,True +generated-11,9a228643396f11d3e81bef6aeae0bdce926df8bac84f6498056ce9afe5eab651,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.4921127000125125,True generated-11,9a228643396f11d3e81bef6aeae0bdce926df8bac84f6498056ce9afe5eab651,RPW,HEURISTIC,4.0,,,0.0,True -generated-29,e95aed529a68c39018facd47d87943c48cda29fc01e06bb3e33978b5a298ebd1,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.042367199988802895,True -generated-29,e95aed529a68c39018facd47d87943c48cda29fc01e06bb3e33978b5a298ebd1,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.3754121999954805,True +generated-29,e95aed529a68c39018facd47d87943c48cda29fc01e06bb3e33978b5a298ebd1,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.06011719995876774,True +generated-29,e95aed529a68c39018facd47d87943c48cda29fc01e06bb3e33978b5a298ebd1,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.5629042000509799,True generated-29,e95aed529a68c39018facd47d87943c48cda29fc01e06bb3e33978b5a298ebd1,RPW,HEURISTIC,4.0,,,0.0,True -generated-47,c993ddc974844a909002e38ccb2b501ed84fe639fbe2b34993bed2b4f4c6f76e,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.03369569999631494,True -generated-47,c993ddc974844a909002e38ccb2b501ed84fe639fbe2b34993bed2b4f4c6f76e,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.3053111000044737,True +generated-47,c993ddc974844a909002e38ccb2b501ed84fe639fbe2b34993bed2b4f4c6f76e,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.06239000003552064,True +generated-47,c993ddc974844a909002e38ccb2b501ed84fe639fbe2b34993bed2b4f4c6f76e,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.4311538999900222,True generated-47,c993ddc974844a909002e38ccb2b501ed84fe639fbe2b34993bed2b4f4c6f76e,RPW,HEURISTIC,4.0,,,0.0,True -generated-71,b81fedad52094dbc6867f565bc942c46bd42ed37e76bc4d50e0d2a75275f13a3,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.04218000001856126,True -generated-71,b81fedad52094dbc6867f565bc942c46bd42ed37e76bc4d50e0d2a75275f13a3,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.21040069998707622,True +generated-71,b81fedad52094dbc6867f565bc942c46bd42ed37e76bc4d50e0d2a75275f13a3,CP-SAT SALBP-1,OPTIMAL,4.0,4.0,0.0,0.06049849995179102,True +generated-71,b81fedad52094dbc6867f565bc942c46bd42ed37e76bc4d50e0d2a75275f13a3,PuLP/CBC SALBP-1,OPTIMAL,4.0,4.0,0.0,0.2578691000235267,True generated-71,b81fedad52094dbc6867f565bc942c46bd42ed37e76bc4d50e0d2a75275f13a3,RPW,HEURISTIC,4.0,,,0.0,True diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/mmalbp_runs.json b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app29-salbp-audit/mmalbp_runs.json similarity index 84% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/mmalbp_runs.json rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app29-salbp-audit/mmalbp_runs.json index 689225e5c2..8e64cf9cff 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/mmalbp_runs.json +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app29-salbp-audit/mmalbp_runs.json @@ -28,7 +28,7 @@ "objective": 4.0, "best_bound": 4.0, "gap": 0.0, - "wall_time": 0.010331700003007427, + "wall_time": 0.01079070003470406, "valid": true }, { @@ -48,7 +48,7 @@ "objective": 3.0, "best_bound": 3.0, "gap": 0.0, - "wall_time": 0.009810600022319704, + "wall_time": 0.011468000011518598, "valid": true } ] \ No newline at end of file diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/pareto_fronts.json b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app29-salbp-audit/pareto_fronts.json similarity index 85% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/pareto_fronts.json rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app29-salbp-audit/pareto_fronts.json index 89b4f2b605..e9d539cbf6 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/pareto_fronts.json +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app29-salbp-audit/pareto_fronts.json @@ -14,7 +14,7 @@ "objective": 13.0, "best_bound": 13.0, "gap": 0.0, - "wall_time": 0.012908099975902587, + "wall_time": 0.015810700017027557, "valid": true }, { @@ -24,7 +24,7 @@ "objective": 11.0, "best_bound": 11.0, "gap": 0.0, - "wall_time": 0.019741199997952208, + "wall_time": 0.023093399999197572, "valid": true }, { @@ -34,7 +34,7 @@ "objective": 9.0, "best_bound": 9.0, "gap": 0.0, - "wall_time": 0.02891780002391897, + "wall_time": 0.03744559996994212, "valid": true }, { @@ -44,7 +44,7 @@ "objective": 8.0, "best_bound": 8.0, "gap": 0.0, - "wall_time": 0.04122899999492802, + "wall_time": 0.05330609995871782, "valid": true } ], diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/provenance.json b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app29-salbp-audit/provenance.json similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app29-salbp-audit/provenance.json rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app29-salbp-audit/provenance.json diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/LICENSE b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/LICENSE similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/LICENSE rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/LICENSE diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/SOURCE.md b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/SOURCE.md similarity index 98% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/SOURCE.md rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/SOURCE.md index 66bb35ca18..bad71e0c9f 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/SOURCE.md +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/SOURCE.md @@ -33,7 +33,7 @@ Le notebook exécuté produit : Commande de reproduction depuis la racine CoursIA : ```powershell -python scripts/notebook_tools/notebook_tools.py execute MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb --timeout 600 --verbose +python scripts/notebook_tools/notebook_tools.py execute MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-08-OrbitalAssembly-Certificate-Audit-Python.ipynb --timeout 600 --verbose ``` Environnement de la collecte : Windows 11, Python 3.13, OR-Tools CP-SAT, pandas, NumPy et matplotlib. Les versions exactes sont enregistrées dans `provenance.json` lors de l'exécution. diff --git a/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/difficulty_probe.csv b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/difficulty_probe.csv new file mode 100644 index 0000000000..a9838c1457 --- /dev/null +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/difficulty_probe.csv @@ -0,0 +1,25 @@ +densite,n_modules,seed,n_burns,separations,couloirs,horizon,pond_status,pond_mk,pond_fuel,pond_wall_s,2p_status,2p_mk,2p_fuel,2p_wall_s,2p_mk_certifie,2p_certifie,audit_pond,audit_2p +0.25,16,11,32,25,6,448,OPTIMAL,121,1791,0.08,OPTIMAL/OPTIMAL,121,1791,0.12,True,True,True,True +0.25,16,22,32,24,6,448,OPTIMAL,118,1793,0.04,OPTIMAL/OPTIMAL,118,1793,0.09,True,True,True,True +0.25,16,33,32,32,6,448,OPTIMAL,121,1897,0.06,OPTIMAL/OPTIMAL,121,1897,0.09,True,True,True,True +0.25,32,11,64,109,11,800,OPTIMAL,226,3850,0.42,OPTIMAL/OPTIMAL,226,3850,0.55,True,True,True,True +0.25,32,22,64,124,11,800,OPTIMAL,202,3909,0.14,OPTIMAL/OPTIMAL,202,3909,0.27,True,True,True,True +0.25,32,33,64,116,11,800,OPTIMAL,204,3753,0.12,OPTIMAL/OPTIMAL,204,3753,0.23,True,True,True,True +0.25,64,11,128,497,22,1504,OPTIMAL,382,7346,0.42,OPTIMAL/OPTIMAL,382,7346,0.64,True,True,True,True +0.25,64,22,128,490,22,1504,OPTIMAL,383,7285,0.37,OPTIMAL/OPTIMAL,383,7285,0.58,True,True,True,True +0.25,64,33,128,514,22,1504,FEASIBLE,386,7451,10.04,OPTIMAL/FEASIBLE,386,7449,10.6,True,False,True,True +0.25,90,11,180,975,30,2076,OPTIMAL,518,10289,0.75,OPTIMAL/OPTIMAL,518,10289,1.4,True,True,True,True +0.25,90,22,180,972,30,2076,OPTIMAL,528,10548,1.19,OPTIMAL/OPTIMAL,528,10548,2.57,True,True,True,True +0.25,90,33,180,993,30,2076,OPTIMAL,526,10445,0.83,OPTIMAL/OPTIMAL,526,10445,1.77,True,True,True,True +0.6,16,11,32,63,6,448,OPTIMAL,129,1816,1.24,OPTIMAL/OPTIMAL,129,1816,1.32,True,True,True,True +0.6,16,22,32,65,6,448,OPTIMAL,118,1795,0.05,OPTIMAL/OPTIMAL,118,1795,0.12,True,True,True,True +0.6,16,33,32,76,6,448,OPTIMAL,122,1900,0.07,OPTIMAL/OPTIMAL,122,1900,0.12,True,True,True,True +0.6,32,11,64,285,11,800,FEASIBLE,245,3867,10.03,FEASIBLE/FEASIBLE,244,3875,20.04,False,False,True,True +0.6,32,22,64,274,11,800,FEASIBLE,202,3930,10.02,OPTIMAL/FEASIBLE,202,3930,10.2,True,False,True,True +0.6,32,33,64,268,11,800,OPTIMAL,204,3776,0.19,OPTIMAL/OPTIMAL,204,3776,0.61,True,True,True,True +0.6,64,11,128,1190,22,1504,OPTIMAL,384,7367,1.25,OPTIMAL/OPTIMAL,384,7367,2.28,True,True,True,True +0.6,64,22,128,1184,22,1504,FEASIBLE,383,7316,10.1,OPTIMAL/FEASIBLE,383,7317,11.09,True,False,True,True +0.6,64,33,128,1170,22,1504,FEASIBLE,422,7384,10.04,FEASIBLE/FEASIBLE,401,7417,20.08,False,False,True,True +0.6,90,11,180,2362,30,2076,FEASIBLE,521,10511,10.07,OPTIMAL/FEASIBLE,521,10493,12.02,True,False,True,True +0.6,90,22,180,2351,30,2076,OPTIMAL,531,10455,2.6,OPTIMAL/OPTIMAL,531,10455,5.32,True,True,True,True +0.6,90,33,180,2336,30,2076,OPTIMAL,529,10453,2.36,OPTIMAL/OPTIMAL,529,10453,2.93,True,True,True,True diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/exchange_fronts.json b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/exchange_fronts.json similarity index 81% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/exchange_fronts.json rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/exchange_fronts.json index d32d450647..bf2f1d8430 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/exchange_fronts.json +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/exchange_fronts.json @@ -15,7 +15,7 @@ "certified": true, "makespan": 69, "propellant": 789, - "wall_s": 0.02632969999103807, + "wall_s": 0.01339510001707822, "audit_valid": true }, { @@ -26,7 +26,7 @@ "certified": true, "makespan": 71, "propellant": 690, - "wall_s": 0.014914100000169128, + "wall_s": 0.013753900013398379, "audit_valid": true }, { @@ -37,7 +37,7 @@ "certified": true, "makespan": 73, "propellant": 684, - "wall_s": 0.028333499998552725, + "wall_s": 0.029397199978120625, "audit_valid": true }, { @@ -48,7 +48,7 @@ "certified": true, "makespan": 75, "propellant": 681, - "wall_s": 0.02795350001542829, + "wall_s": 0.01778080000076443, "audit_valid": true }, { @@ -59,7 +59,7 @@ "certified": true, "makespan": 77, "propellant": 676, - "wall_s": 0.014105900016147643, + "wall_s": 0.013640100019983947, "audit_valid": true }, { @@ -70,7 +70,7 @@ "certified": true, "makespan": 78, "propellant": 675, - "wall_s": 0.015514700004132465, + "wall_s": 0.019788899982813746, "audit_valid": true }, { @@ -81,7 +81,7 @@ "certified": true, "makespan": 80, "propellant": 672, - "wall_s": 0.03067199999350123, + "wall_s": 0.013253699988126755, "audit_valid": true }, { @@ -92,7 +92,7 @@ "certified": true, "makespan": 83, "propellant": 672, - "wall_s": 0.026978199981385842, + "wall_s": 0.013125700003001839, "audit_valid": true }, { @@ -101,9 +101,9 @@ "status": "OPTIMAL", "feasible": true, "certified": true, - "makespan": 83, + "makespan": 85, "propellant": 672, - "wall_s": 0.029420500010019168, + "wall_s": 0.014797699986957014, "audit_valid": true }, { @@ -114,7 +114,7 @@ "certified": true, "makespan": 87, "propellant": 672, - "wall_s": 0.012581199989654124, + "wall_s": 0.013792799960356206, "audit_valid": true }, { @@ -123,9 +123,9 @@ "status": "OPTIMAL", "feasible": true, "certified": true, - "makespan": 89, + "makespan": 83, "propellant": 672, - "wall_s": 0.013586000015493482, + "wall_s": 0.028967699967324734, "audit_valid": true }, { @@ -134,9 +134,9 @@ "status": "OPTIMAL", "feasible": true, "certified": true, - "makespan": 91, + "makespan": 83, "propellant": 672, - "wall_s": 0.013719899987336248, + "wall_s": 0.017651000001933426, "audit_valid": true }, { @@ -147,7 +147,7 @@ "certified": true, "makespan": 83, "propellant": 672, - "wall_s": 0.014579500013496727, + "wall_s": 0.027727400010917336, "audit_valid": true } ] @@ -168,7 +168,7 @@ "certified": true, "makespan": 89, "propellant": 1136, - "wall_s": 0.030978499999037012, + "wall_s": 0.027844300027936697, "audit_valid": true }, { @@ -179,7 +179,7 @@ "certified": true, "makespan": 91, "propellant": 1135, - "wall_s": 0.026591500005451962, + "wall_s": 0.030301399994641542, "audit_valid": true }, { @@ -190,7 +190,7 @@ "certified": true, "makespan": 93, "propellant": 1033, - "wall_s": 0.028045599989127368, + "wall_s": 0.032336700009182096, "audit_valid": true }, { @@ -201,7 +201,7 @@ "certified": true, "makespan": 95, "propellant": 1032, - "wall_s": 0.030196200008504093, + "wall_s": 0.029502300021704286, "audit_valid": true }, { @@ -212,7 +212,7 @@ "certified": true, "makespan": 97, "propellant": 1025, - "wall_s": 0.028030100016621873, + "wall_s": 0.031290499959141016, "audit_valid": true }, { @@ -223,7 +223,7 @@ "certified": true, "makespan": 98, "propellant": 1025, - "wall_s": 0.026218799990601838, + "wall_s": 0.0199554999708198, "audit_valid": true }, { @@ -234,7 +234,7 @@ "certified": true, "makespan": 101, "propellant": 1018, - "wall_s": 0.02898750000167638, + "wall_s": 0.027916799997910857, "audit_valid": true }, { @@ -245,7 +245,7 @@ "certified": true, "makespan": 101, "propellant": 1018, - "wall_s": 0.012585399992531165, + "wall_s": 0.030507999996189028, "audit_valid": true }, { @@ -256,7 +256,7 @@ "certified": true, "makespan": 105, "propellant": 1012, - "wall_s": 0.014699499995913357, + "wall_s": 0.029082699969876558, "audit_valid": true }, { @@ -267,7 +267,7 @@ "certified": true, "makespan": 105, "propellant": 1012, - "wall_s": 0.014069700002437457, + "wall_s": 0.02887480001663789, "audit_valid": true }, { @@ -278,7 +278,7 @@ "certified": true, "makespan": 105, "propellant": 1012, - "wall_s": 0.013968200015369803, + "wall_s": 0.02812250005081296, "audit_valid": true }, { @@ -289,7 +289,7 @@ "certified": true, "makespan": 105, "propellant": 1012, - "wall_s": 0.02888669999083504, + "wall_s": 0.016613900021184236, "audit_valid": true }, { @@ -300,7 +300,7 @@ "certified": true, "makespan": 105, "propellant": 1012, - "wall_s": 0.013256700010970235, + "wall_s": 0.030129099963232875, "audit_valid": true } ] @@ -321,7 +321,7 @@ "certified": true, "makespan": 99, "propellant": 1109, - "wall_s": 0.029154199990443885, + "wall_s": 0.03168410004582256, "audit_valid": true }, { @@ -332,7 +332,7 @@ "certified": true, "makespan": 101, "propellant": 1104, - "wall_s": 0.04218920000130311, + "wall_s": 0.04410409997217357, "audit_valid": true }, { @@ -343,7 +343,7 @@ "certified": true, "makespan": 103, "propellant": 1090, - "wall_s": 0.029528899991419166, + "wall_s": 0.032243499998003244, "audit_valid": true }, { @@ -354,7 +354,7 @@ "certified": true, "makespan": 105, "propellant": 1080, - "wall_s": 0.02872370000113733, + "wall_s": 0.048570800048764795, "audit_valid": true }, { @@ -365,7 +365,7 @@ "certified": true, "makespan": 106, "propellant": 1074, - "wall_s": 0.030041499994695187, + "wall_s": 0.048519000003580004, "audit_valid": true }, { @@ -376,7 +376,7 @@ "certified": true, "makespan": 109, "propellant": 1069, - "wall_s": 0.028293100011069328, + "wall_s": 0.029334999970160425, "audit_valid": true }, { @@ -387,7 +387,7 @@ "certified": true, "makespan": 111, "propellant": 1067, - "wall_s": 0.02923369998461567, + "wall_s": 0.04314899997552857, "audit_valid": true }, { @@ -398,7 +398,7 @@ "certified": true, "makespan": 113, "propellant": 1065, - "wall_s": 0.028167500015115365, + "wall_s": 0.032930999994277954, "audit_valid": true }, { @@ -409,7 +409,7 @@ "certified": true, "makespan": 115, "propellant": 1064, - "wall_s": 0.02970019998610951, + "wall_s": 0.027269300015177578, "audit_valid": true }, { @@ -420,7 +420,7 @@ "certified": true, "makespan": 117, "propellant": 1064, - "wall_s": 0.0291000000142958, + "wall_s": 0.02801000000908971, "audit_valid": true }, { @@ -431,7 +431,7 @@ "certified": true, "makespan": 117, "propellant": 1064, - "wall_s": 0.012678700004471466, + "wall_s": 0.027633899997454137, "audit_valid": true }, { @@ -442,7 +442,7 @@ "certified": true, "makespan": 117, "propellant": 1064, - "wall_s": 0.028948699997272342, + "wall_s": 0.03275250003207475, "audit_valid": true }, { @@ -453,7 +453,7 @@ "certified": true, "makespan": 122, "propellant": 1064, - "wall_s": 0.013397900009294972, + "wall_s": 0.030774099985137582, "audit_valid": true } ] @@ -474,7 +474,7 @@ "certified": true, "makespan": 114, "propellant": 1413, - "wall_s": 0.02677110000513494, + "wall_s": 0.027814700035378337, "audit_valid": true }, { @@ -485,7 +485,7 @@ "certified": true, "makespan": 116, "propellant": 1407, - "wall_s": 0.045227700000396, + "wall_s": 0.04753119999077171, "audit_valid": true }, { @@ -496,7 +496,7 @@ "certified": true, "makespan": 118, "propellant": 1396, - "wall_s": 0.050431699986802414, + "wall_s": 0.047664000012446195, "audit_valid": true }, { @@ -507,7 +507,7 @@ "certified": true, "makespan": 120, "propellant": 1390, - "wall_s": 0.02703359999577515, + "wall_s": 0.03373180003836751, "audit_valid": true }, { @@ -518,7 +518,7 @@ "certified": true, "makespan": 122, "propellant": 1380, - "wall_s": 0.0425186000065878, + "wall_s": 0.041050200001336634, "audit_valid": true }, { @@ -529,7 +529,7 @@ "certified": true, "makespan": 123, "propellant": 1380, - "wall_s": 0.04240310000022873, + "wall_s": 0.047627000021748245, "audit_valid": true }, { @@ -540,7 +540,7 @@ "certified": true, "makespan": 126, "propellant": 1373, - "wall_s": 0.028640200005611405, + "wall_s": 0.0644305000314489, "audit_valid": true }, { @@ -551,7 +551,7 @@ "certified": true, "makespan": 127, "propellant": 1373, - "wall_s": 0.028465099981985986, + "wall_s": 0.06009389995597303, "audit_valid": true }, { @@ -562,7 +562,7 @@ "certified": true, "makespan": 130, "propellant": 1369, - "wall_s": 0.03613900000345893, + "wall_s": 0.045005899970419705, "audit_valid": true }, { @@ -571,9 +571,9 @@ "status": "OPTIMAL", "feasible": true, "certified": true, - "makespan": 131, + "makespan": 132, "propellant": 1369, - "wall_s": 0.04424710001330823, + "wall_s": 0.04575529997237027, "audit_valid": true }, { @@ -584,7 +584,7 @@ "certified": true, "makespan": 134, "propellant": 1367, - "wall_s": 0.029340900015085936, + "wall_s": 0.041486899950541556, "audit_valid": true }, { @@ -595,7 +595,7 @@ "certified": true, "makespan": 136, "propellant": 1365, - "wall_s": 0.027387100009946153, + "wall_s": 0.033781300007831305, "audit_valid": true }, { @@ -606,7 +606,7 @@ "certified": true, "makespan": 137, "propellant": 1365, - "wall_s": 0.028716800006804988, + "wall_s": 0.02905710000777617, "audit_valid": true } ] diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/grid_runs.csv b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/grid_runs.csv similarity index 52% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/grid_runs.csv rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/grid_runs.csv index 283678ab42..01b80263b6 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/grid_runs.csv +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/grid_runs.csv @@ -1,26 +1,26 @@ instance,n_modules,seed,n_burns,horizon,corridors,separations,budget,digest,pond_status,pond_mk,pond_fuel,pond_wall_s,pond_conflicts,pond_domaine_objectif,2p_status,2p_mk,2p_fuel,2p_wall_s,2p_certifie,disp_status,disp_mk,disp_fuel,disp_wall_s,audit_pond,audit_2p,audit_disp -coursia-orbital-m4-s11,4,11,8,184,2,0,464,b2ae490d34632341,OPTIMAL,51,408,0.0512,0,86024,OPTIMAL/OPTIMAL,51,408,0.0284,True,FAISABLE,52,433,0.0002,True,True,True -coursia-orbital-m4-s22,4,22,8,184,2,1,478,076b3bd96a209334,OPTIMAL,56,442,0.0108,2,88614,OPTIMAL/OPTIMAL,56,442,0.0268,True,FAISABLE,56,448,0.0001,True,True,True -coursia-orbital-m4-s33,4,33,8,184,2,1,475,4a01cc08497d2f0e,OPTIMAL,37,421,0.0139,0,88059,OPTIMAL/OPTIMAL,37,421,0.0256,True,FAISABLE,41,444,0.0001,True,True,True -coursia-orbital-m4-s44,4,44,8,184,2,0,462,63929a1ca6a9e931,OPTIMAL,59,406,0.0145,0,85654,OPTIMAL/OPTIMAL,59,406,0.0283,True,FAISABLE,59,429,0.0001,True,True,True -coursia-orbital-m4-s55,4,55,8,184,2,2,461,8e3fb414ccb77fbd,OPTIMAL,56,390,0.0135,0,85469,OPTIMAL/OPTIMAL,56,390,0.0297,True,FAISABLE,57,428,0.0001,True,True,True -coursia-orbital-m6-s11,6,11,12,228,2,4,818,9561a6bad9f3485d,OPTIMAL,69,789,0.0129,0,187550,OPTIMAL/OPTIMAL,69,789,0.0432,True,FAISABLE,75,739,0.0001,True,True,True -coursia-orbital-m6-s22,6,22,12,228,2,3,843,80cfbce022aff265,OPTIMAL,68,809,0.0141,3,193275,OPTIMAL/OPTIMAL,68,809,0.0287,True,FAISABLE,83,842,0.0001,True,True,True -coursia-orbital-m6-s33,6,33,12,228,2,2,836,0da7820663568a8d,OPTIMAL,71,810,0.0137,0,191672,OPTIMAL/OPTIMAL,71,810,0.0273,True,FAISABLE,88,836,0.0002,True,True,True -coursia-orbital-m6-s44,6,44,12,228,2,0,825,5d0af050f1f29418,OPTIMAL,72,821,0.0305,0,189153,OPTIMAL/OPTIMAL,72,821,0.043,True,FAISABLE,88,825,0.0001,True,True,True -coursia-orbital-m6-s55,6,55,12,228,2,1,816,6adc1e6e279ccddb,OPTIMAL,61,779,0.0295,0,187092,OPTIMAL/OPTIMAL,61,779,0.0286,True,FAISABLE,66,816,0.0001,True,True,True -coursia-orbital-m8-s11,8,11,16,272,3,5,1208,29361dc8b6b78a6c,OPTIMAL,74,1138,0.0308,6,330056,OPTIMAL/OPTIMAL,74,1138,0.0557,True,FAISABLE,76,1187,0.0002,True,True,True -coursia-orbital-m8-s22,8,22,16,272,3,3,1231,3c2fd6cd73e7e5a5,OPTIMAL,89,1136,0.0287,0,336335,OPTIMAL/OPTIMAL,89,1136,0.0607,True,FAISABLE,92,1209,0.0002,True,True,True -coursia-orbital-m8-s33,8,33,16,272,3,6,1228,22db3908f076aefd,OPTIMAL,66,1021,0.0125,0,335516,OPTIMAL/OPTIMAL,66,1021,0.0274,True,FAISABLE,66,1208,0.0002,True,True,True -coursia-orbital-m8-s44,8,44,16,272,3,8,1214,42e8790ce236a287,OPTIMAL,66,1036,0.0129,0,331694,OPTIMAL/OPTIMAL,66,1036,0.0277,True,FAISABLE,69,1192,0.0002,True,True,True -coursia-orbital-m8-s55,8,55,16,272,3,5,1203,33df73e03efc0780,OPTIMAL,77,1113,0.0292,0,328691,OPTIMAL/OPTIMAL,77,1113,0.0425,True,FAISABLE,86,1179,0.0002,True,True,True -coursia-orbital-m10-s11,10,11,20,316,4,9,1291,da1baffdf3d2000a,OPTIMAL,82,1075,0.0291,0,409563,OPTIMAL/OPTIMAL,82,1075,0.0576,True,FAISABLE,82,1285,0.0002,True,True,True -coursia-orbital-m10-s22,10,22,20,316,4,12,1318,e5a1544da80e6863,OPTIMAL,87,1138,0.0287,0,418122,OPTIMAL/OPTIMAL,87,1138,0.0521,True,FAISABLE,117,1318,0.0005,True,True,True -coursia-orbital-m10-s33,10,33,20,316,4,6,1305,22a14292de403280,OPTIMAL,89,1179,0.0278,0,414001,OPTIMAL/OPTIMAL,89,1179,0.0555,True,FAISABLE,93,1297,0.0003,True,True,True -coursia-orbital-m10-s44,10,44,20,316,4,11,1302,f051cd599c24471a,OPTIMAL,99,1109,0.027,0,413050,OPTIMAL/OPTIMAL,99,1109,0.056,True,FAISABLE,118,1301,0.0005,True,True,True -coursia-orbital-m10-s55,10,55,20,316,4,9,1297,57e93d6ec2629897,OPTIMAL,88,1123,0.0268,0,411465,OPTIMAL/OPTIMAL,88,1123,0.0573,True,FAISABLE,99,1287,0.0003,True,True,True -coursia-orbital-m12-s11,12,11,24,360,4,12,1657,d403e0e32448c7c0,OPTIMAL,88,1477,0.0436,0,598537,OPTIMAL/OPTIMAL,88,1477,0.0572,True,FAISABLE,103,1657,0.0005,True,True,True -coursia-orbital-m12-s22,12,22,24,360,4,7,1673,5a92c1051bba9e3b,OPTIMAL,95,1499,0.0239,0,604313,OPTIMAL/OPTIMAL,95,1499,0.0544,True,FAISABLE,102,1673,0.0003,True,True,True -coursia-orbital-m12-s33,12,33,24,360,4,15,1661,6dbd5ce52666769a,OPTIMAL,114,1413,0.0431,0,599981,OPTIMAL/OPTIMAL,114,1413,0.0716,True,FAISABLE,126,1661,0.0004,True,True,True -coursia-orbital-m12-s44,12,44,24,360,4,15,1670,fe770305c6fb5715,OPTIMAL,96,1386,0.0274,0,603230,OPTIMAL/OPTIMAL,96,1386,0.0811,True,FAISABLE,98,1669,0.0005,True,True,True -coursia-orbital-m12-s55,12,55,24,360,4,14,1658,aab6978371a29600,OPTIMAL,97,1391,0.0543,0,598898,OPTIMAL/OPTIMAL,97,1391,0.0715,True,FAISABLE,100,1654,0.0005,True,True,True +coursia-orbital-m4-s11,4,11,8,184,2,0,464,b2ae490d34632341,OPTIMAL,51,408,0.0277,0,86024,OPTIMAL/OPTIMAL,51,408,0.0327,True,FAISABLE,52,433,0.0001,True,True,True +coursia-orbital-m4-s22,4,22,8,184,2,1,478,076b3bd96a209334,OPTIMAL,56,442,0.0149,2,88614,OPTIMAL/OPTIMAL,56,442,0.0291,True,FAISABLE,56,448,0.0001,True,True,True +coursia-orbital-m4-s33,4,33,8,184,2,1,475,4a01cc08497d2f0e,OPTIMAL,37,421,0.0147,1,88059,OPTIMAL/OPTIMAL,37,421,0.0292,True,FAISABLE,41,444,0.0001,True,True,True +coursia-orbital-m4-s44,4,44,8,184,2,0,462,63929a1ca6a9e931,OPTIMAL,59,406,0.0205,0,85654,OPTIMAL/OPTIMAL,59,406,0.0301,True,FAISABLE,59,429,0.0002,True,True,True +coursia-orbital-m4-s55,4,55,8,184,2,2,461,8e3fb414ccb77fbd,OPTIMAL,56,390,0.0158,0,85469,OPTIMAL/OPTIMAL,56,390,0.0283,True,FAISABLE,57,428,0.0001,True,True,True +coursia-orbital-m6-s11,6,11,12,228,2,4,818,9561a6bad9f3485d,OPTIMAL,69,789,0.0209,0,187550,OPTIMAL/OPTIMAL,69,789,0.0535,True,FAISABLE,75,739,0.0001,True,True,True +coursia-orbital-m6-s22,6,22,12,228,2,3,843,80cfbce022aff265,OPTIMAL,68,809,0.0185,0,193275,OPTIMAL/OPTIMAL,68,809,0.0453,True,FAISABLE,83,842,0.0001,True,True,True +coursia-orbital-m6-s33,6,33,12,228,2,2,836,0da7820663568a8d,OPTIMAL,71,810,0.0129,0,191672,OPTIMAL/OPTIMAL,71,810,0.0472,True,FAISABLE,88,836,0.0002,True,True,True +coursia-orbital-m6-s44,6,44,12,228,2,0,825,5d0af050f1f29418,OPTIMAL,72,821,0.0291,0,189153,OPTIMAL/OPTIMAL,72,821,0.0442,True,FAISABLE,88,825,0.0002,True,True,True +coursia-orbital-m6-s55,6,55,12,228,2,1,816,6adc1e6e279ccddb,OPTIMAL,61,779,0.016,0,187092,OPTIMAL/OPTIMAL,61,779,0.0328,True,FAISABLE,66,816,0.0002,True,True,True +coursia-orbital-m8-s11,8,11,16,272,3,5,1208,29361dc8b6b78a6c,OPTIMAL,74,1138,0.0296,0,330056,OPTIMAL/OPTIMAL,74,1138,0.0404,True,FAISABLE,76,1187,0.0002,True,True,True +coursia-orbital-m8-s22,8,22,16,272,3,3,1231,3c2fd6cd73e7e5a5,OPTIMAL,89,1136,0.0159,0,336335,OPTIMAL/OPTIMAL,89,1136,0.061,True,FAISABLE,92,1209,0.0002,True,True,True +coursia-orbital-m8-s33,8,33,16,272,3,6,1228,22db3908f076aefd,OPTIMAL,66,1021,0.03,0,335516,OPTIMAL/OPTIMAL,66,1021,0.0609,True,FAISABLE,66,1208,0.0002,True,True,True +coursia-orbital-m8-s44,8,44,16,272,3,8,1214,42e8790ce236a287,OPTIMAL,66,1036,0.0158,0,331694,OPTIMAL/OPTIMAL,66,1036,0.0482,True,FAISABLE,69,1192,0.0002,True,True,True +coursia-orbital-m8-s55,8,55,16,272,3,5,1203,33df73e03efc0780,OPTIMAL,77,1113,0.0286,0,328691,OPTIMAL/OPTIMAL,77,1113,0.0625,True,FAISABLE,86,1179,0.0002,True,True,True +coursia-orbital-m10-s11,10,11,20,316,4,9,1291,da1baffdf3d2000a,OPTIMAL,82,1075,0.0446,0,409563,OPTIMAL/OPTIMAL,82,1075,0.0617,True,FAISABLE,82,1285,0.0003,True,True,True +coursia-orbital-m10-s22,10,22,20,316,4,12,1318,e5a1544da80e6863,OPTIMAL,87,1138,0.0309,0,418122,OPTIMAL/OPTIMAL,87,1138,0.0597,True,FAISABLE,117,1318,0.0005,True,True,True +coursia-orbital-m10-s33,10,33,20,316,4,6,1305,22a14292de403280,OPTIMAL,89,1179,0.0297,0,414001,OPTIMAL/OPTIMAL,89,1179,0.059,True,FAISABLE,93,1297,0.0003,True,True,True +coursia-orbital-m10-s44,10,44,20,316,4,11,1302,f051cd599c24471a,OPTIMAL,99,1109,0.0317,0,413050,OPTIMAL/OPTIMAL,99,1109,0.0701,True,FAISABLE,118,1301,0.0006,True,True,True +coursia-orbital-m10-s55,10,55,20,316,4,9,1297,57e93d6ec2629897,OPTIMAL,88,1123,0.0257,0,411465,OPTIMAL/OPTIMAL,88,1123,0.0654,True,FAISABLE,99,1287,0.0003,True,True,True +coursia-orbital-m12-s11,12,11,24,360,4,12,1657,d403e0e32448c7c0,OPTIMAL,88,1477,0.0473,0,598537,OPTIMAL/OPTIMAL,88,1477,0.08,True,FAISABLE,103,1657,0.0008,True,True,True +coursia-orbital-m12-s22,12,22,24,360,4,7,1673,5a92c1051bba9e3b,OPTIMAL,95,1499,0.0265,0,604313,OPTIMAL/OPTIMAL,95,1499,0.0535,True,FAISABLE,102,1673,0.0004,True,True,True +coursia-orbital-m12-s33,12,33,24,360,4,15,1661,6dbd5ce52666769a,OPTIMAL,114,1413,0.0526,0,599981,OPTIMAL/OPTIMAL,114,1413,0.0903,True,FAISABLE,126,1661,0.0007,True,True,True +coursia-orbital-m12-s44,12,44,24,360,4,15,1670,fe770305c6fb5715,OPTIMAL,96,1386,0.0425,0,603230,OPTIMAL/OPTIMAL,96,1386,0.0727,True,FAISABLE,98,1669,0.0005,True,True,True +coursia-orbital-m12-s55,12,55,24,360,4,14,1658,aab6978371a29600,OPTIMAL,97,1391,0.0337,0,598898,OPTIMAL/OPTIMAL,97,1391,0.0712,True,FAISABLE,100,1654,0.0004,True,True,True diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/matched_comparison.csv b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/matched_comparison.csv similarity index 96% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/matched_comparison.csv rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/matched_comparison.csv index d4ac2ca5c1..fe4fbc1937 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/matched_comparison.csv +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/matched_comparison.csv @@ -13,7 +13,7 @@ coursia-orbital-m8-s11,8,11,74,1138,76,1187,76,1037,OPTIMAL,True,4.1280539174389 coursia-orbital-m8-s22,8,22,89,1136,92,1209,92,1127,OPTIMAL,True,6.038047973531844,6.782464846980976 coursia-orbital-m8-s33,8,33,66,1021,66,1208,66,1021,OPTIMAL,True,15.480132450331126,15.480132450331126 coursia-orbital-m8-s44,8,44,66,1036,69,1192,69,1010,OPTIMAL,True,13.087248322147651,15.268456375838927 -coursia-orbital-m8-s55,8,55,77,1113,86,1179,86,994,OPTIMAL,True,5.597964376590331,15.691263782866836 +coursia-orbital-m8-s55,8,55,77,1113,86,1179,85,994,OPTIMAL,True,5.597964376590331,15.691263782866836 coursia-orbital-m10-s11,10,11,82,1075,82,1285,82,1075,OPTIMAL,True,16.342412451361866,16.342412451361866 coursia-orbital-m10-s22,10,22,87,1138,117,1318,114,1082,OPTIMAL,True,13.657056145675266,17.905918057663126 coursia-orbital-m10-s33,10,33,89,1179,93,1297,93,1079,OPTIMAL,True,9.097918272937548,16.808018504240554 diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/provenance.json b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/provenance.json similarity index 95% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/provenance.json rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/provenance.json index 2b27404ef9..e9db3d7531 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/data/app30-orbital-assembly-audit/provenance.json +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app30-orbital-assembly-audit/provenance.json @@ -1,5 +1,5 @@ { - "application": "Research-08 — Ordonnancement d'assemblage orbital", + "application": "Frontieres-08 — Ordonnancement d'assemblage orbital", "distillation": { "projet": "PrCon C4 — Orbital Assembly Scheduling", "auteurs": [ diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/LICENSE b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app31-rcpsp-max/LICENSE similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/LICENSE rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app31-rcpsp-max/LICENSE diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/SOURCE.md b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app31-rcpsp-max/SOURCE.md similarity index 98% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/SOURCE.md rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app31-rcpsp-max/SOURCE.md index 12fa2aadb7..36a6fc0dd4 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/SOURCE.md +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app31-rcpsp-max/SOURCE.md @@ -53,7 +53,7 @@ Le notebook exécuté produit : Commande de reproduction depuis la racine CoursIA : ```powershell -python scripts/notebook_tools/notebook_tools.py execute MyIA.AI.Notebooks/Search/Applications/Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb --timeout 900 --verbose +python scripts/notebook_tools/notebook_tools.py execute MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb --timeout 900 --verbose ``` ## Instances PSPLIB : observées, non redistribuées diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/bounds_ladder.json b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app31-rcpsp-max/bounds_ladder.json similarity index 89% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/bounds_ladder.json rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app31-rcpsp-max/bounds_ladder.json index 4ed5fb3070..536aa0c295 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/bounds_ladder.json +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app31-rcpsp-max/bounds_ladder.json @@ -14,7 +14,7 @@ "statut": "OPTIMAL", "ecart_borne_combinee_pct": 17.6, "borne_active": "charge", - "secondes": 1.047, + "secondes": 1.26, "densite": 0.1, "graine": 0 }, @@ -27,7 +27,7 @@ "statut": "OPTIMAL", "ecart_borne_combinee_pct": 9.7, "borne_active": "charge", - "secondes": 0.062, + "secondes": 0.091, "densite": 0.1, "graine": 1 }, @@ -40,7 +40,7 @@ "statut": "OPTIMAL", "ecart_borne_combinee_pct": 22.6, "borne_active": "charge", - "secondes": 0.093, + "secondes": 0.126, "densite": 0.1, "graine": 2 }, @@ -53,7 +53,7 @@ "statut": "OPTIMAL", "ecart_borne_combinee_pct": 37.9, "borne_active": "charge", - "secondes": 2.481, + "secondes": 3.389, "densite": 0.1, "graine": 3 }, @@ -66,7 +66,7 @@ "statut": "OPTIMAL", "ecart_borne_combinee_pct": 17.6, "borne_active": "charge", - "secondes": 0.045, + "secondes": 0.073, "densite": 0.18, "graine": 0 }, @@ -79,7 +79,7 @@ "statut": "OPTIMAL", "ecart_borne_combinee_pct": 16.1, "borne_active": "charge", - "secondes": 0.463, + "secondes": 0.491, "densite": 0.18, "graine": 1 }, @@ -92,7 +92,7 @@ "statut": "OPTIMAL", "ecart_borne_combinee_pct": 22.6, "borne_active": "charge", - "secondes": 0.027, + "secondes": 0.041, "densite": 0.18, "graine": 2 }, @@ -105,7 +105,7 @@ "statut": "OPTIMAL", "ecart_borne_combinee_pct": 48.3, "borne_active": "charge", - "secondes": 0.764, + "secondes": 1.099, "densite": 0.18, "graine": 3 }, @@ -118,7 +118,7 @@ "statut": "OPTIMAL", "ecart_borne_combinee_pct": 20.6, "borne_active": "charge", - "secondes": 0.027, + "secondes": 0.034, "densite": 0.28, "graine": 0 }, @@ -131,7 +131,7 @@ "statut": "OPTIMAL", "ecart_borne_combinee_pct": 19.4, "borne_active": "charge", - "secondes": 0.108, + "secondes": 0.151, "densite": 0.28, "graine": 1 }, @@ -144,7 +144,7 @@ "statut": "OPTIMAL", "ecart_borne_combinee_pct": 25.8, "borne_active": "charge", - "secondes": 0.03, + "secondes": 0.035, "densite": 0.28, "graine": 2 }, @@ -157,7 +157,7 @@ "statut": "OPTIMAL", "ecart_borne_combinee_pct": 48.3, "borne_active": "charge", - "secondes": 0.253, + "secondes": 0.395, "densite": 0.28, "graine": 3 }, @@ -170,7 +170,7 @@ "statut": "OPTIMAL", "ecart_borne_combinee_pct": 26.5, "borne_active": "charge", - "secondes": 0.029, + "secondes": 0.028, "densite": 0.4, "graine": 0 }, @@ -183,7 +183,7 @@ "statut": "OPTIMAL", "ecart_borne_combinee_pct": 19.4, "borne_active": "charge", - "secondes": 0.014, + "secondes": 0.033, "densite": 0.4, "graine": 1 }, @@ -196,7 +196,7 @@ "statut": "OPTIMAL", "ecart_borne_combinee_pct": 35.5, "borne_active": "charge", - "secondes": 0.03, + "secondes": 0.032, "densite": 0.4, "graine": 2 }, @@ -222,7 +222,7 @@ "statut": "OPTIMAL", "ecart_borne_combinee_pct": 15.4, "borne_active": "chemin critique", - "secondes": 0.014, + "secondes": 0.033, "densite": 0.55, "graine": 0 }, @@ -235,7 +235,7 @@ "statut": "OPTIMAL", "ecart_borne_combinee_pct": 32.3, "borne_active": "charge", - "secondes": 0.014, + "secondes": 0.015, "densite": 0.55, "graine": 1 }, @@ -248,7 +248,7 @@ "statut": "OPTIMAL", "ecart_borne_combinee_pct": 35.5, "borne_active": "charge", - "secondes": 0.031, + "secondes": 0.033, "densite": 0.55, "graine": 2 }, diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/provenance.json b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app31-rcpsp-max/provenance.json similarity index 94% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/provenance.json rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app31-rcpsp-max/provenance.json index 12c7735e26..08a06f6dd5 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Research/data/app31-rcpsp-max/provenance.json +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app31-rcpsp-max/provenance.json @@ -1,5 +1,5 @@ { - "notebook": "Research-09-RCPSP-Max-Feasibility-Bounds-Python", + "notebook": "Frontieres-09-RCPSP-Max-Feasibility-Bounds-Python", "objet": "RCPSP/max : faisabilite, circuits de poids positif, hierarchie de bornes", "source_distillee": { "auteurs": [ diff --git a/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app31-rcpsp-max/temporal_regimes.csv b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app31-rcpsp-max/temporal_regimes.csv new file mode 100644 index 0000000000..b2437d3360 --- /dev/null +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app31-rcpsp-max/temporal_regimes.csv @@ -0,0 +1,217 @@ +jeu,graine,lags,regime,statut,makespan,secondes,temoin +-3,0,6,T,circuit positif,,0.0,8-10-8 +-3,1,12,T,circuit positif,,0.0,10-11-10 +-3,2,8,T,circuit positif,,0.0,10-13-10 +-3,3,12,T,circuit positif,,0.0,7-10-7 +-3,4,13,T,circuit positif,,0.0,10-11-10 +-3,5,13,T,circuit positif,,0.0,10-13-10 +-3,6,13,T,circuit positif,,0.0,11-12-11 +-3,7,13,T,circuit positif,,0.0,6-11-6 +-3,8,17,T,circuit positif,,0.0,8-12-8 +-3,9,19,T,circuit positif,,0.0,11-13-11 +-3,10,13,T,circuit positif,,0.0,8-9-8 +-3,11,21,T,circuit positif,,0.0,11-13-11 +-3,12,17,T,circuit positif,,0.0,12-13-11-12 +-3,13,15,T,circuit positif,,0.0,7-8-7 +-3,14,11,T,circuit positif,,0.0,9-11-9 +-3,15,14,T,circuit positif,,0.0,9-11-9 +-3,16,21,T,circuit positif,,0.0,10-9-10 +-3,17,12,T,circuit positif,,0.0,7-13-7 +-3,18,14,T,circuit positif,,0.0,10-12-10 +-3,19,17,T,circuit positif,,0.0,8-9-8 +-3,20,18,T,circuit positif,,0.0,8-6-8 +-3,21,13,T,circuit positif,,0.0,8-12-8 +-3,22,10,T,circuit positif,,0.0,10-13-10 +-3,23,13,T,circuit positif,,0.0,8-11-8 +-2,0,6,T,circuit positif,,0.0,8-10-8 +-2,1,12,T,circuit positif,,0.0,10-11-10 +-2,2,8,T,circuit positif,,0.0,10-13-10 +-2,3,12,T,circuit positif,,0.0,7-10-7 +-2,4,13,T,circuit positif,,0.0,10-11-10 +-2,5,13,T,circuit positif,,0.0,10-13-10 +-2,6,13,T,circuit positif,,0.0,11-12-11 +-2,7,13,T,circuit positif,,0.0,6-11-6 +-2,8,17,T,circuit positif,,0.0,8-12-8 +-2,9,19,T,circuit positif,,0.0,11-13-11 +-2,10,13,T,circuit positif,,0.0,8-9-8 +-2,11,21,T,circuit positif,,0.0,11-13-11 +-2,12,17,T,circuit positif,,0.0,12-13-11-12 +-2,13,15,T,circuit positif,,0.0,7-8-7 +-2,14,11,T,circuit positif,,0.0,9-11-9 +-2,15,14,T,circuit positif,,0.0,9-11-9 +-2,16,21,T,circuit positif,,0.0,10-9-10 +-2,17,12,T,circuit positif,,0.0,7-13-7 +-2,18,14,T,circuit positif,,0.0,10-12-10 +-2,19,17,T,circuit positif,,0.0,8-9-8 +-2,20,18,T,circuit positif,,0.0,8-6-8 +-2,21,13,T,circuit positif,,0.0,8-12-8 +-2,22,10,T,circuit positif,,0.0,10-13-10 +-2,23,13,T,circuit positif,,0.0,8-11-8 +-1,0,6,T,circuit positif,,0.0,8-10-8 +-1,1,12,T,circuit positif,,0.0,10-11-10 +-1,2,8,T,circuit positif,,0.0,10-13-10 +-1,3,12,T,circuit positif,,0.0,7-10-7 +-1,4,13,T,circuit positif,,0.0,10-11-10 +-1,5,13,T,circuit positif,,0.0,10-13-10 +-1,6,13,T,circuit positif,,0.0,11-12-11 +-1,7,13,T,circuit positif,,0.0,6-11-6 +-1,8,17,T,circuit positif,,0.0,8-12-8 +-1,9,19,T,circuit positif,,0.0,11-13-11 +-1,10,13,T,circuit positif,,0.0,8-9-8 +-1,11,21,T,circuit positif,,0.0,11-13-11 +-1,12,17,T,circuit positif,,0.0,12-13-11-12 +-1,13,15,T,circuit positif,,0.0,7-8-7 +-1,14,11,T,circuit positif,,0.0,9-11-9 +-1,15,14,T,circuit positif,,0.0,9-11-9 +-1,16,21,T,circuit positif,,0.0,10-9-10 +-1,17,12,T,circuit positif,,0.0,7-13-7 +-1,18,14,T,circuit positif,,0.0,10-12-10 +-1,19,17,T,circuit positif,,0.0,8-9-8 +-1,20,18,T,circuit positif,,0.0,8-6-8 +-1,21,13,T,circuit positif,,0.0,8-12-8 +-1,22,10,T,circuit positif,,0.0,10-13-10 +-1,23,13,T,circuit positif,,0.0,8-11-8 +0,0,6,R,INFEASIBLE,,0.007024200051091611, +0,1,12,R,INFEASIBLE,,0.00323300005402416, +0,2,8,R,INFEASIBLE,,0.004088000045157969, +0,3,12,R,INFEASIBLE,,0.0036551000084728003, +0,4,13,R,INFEASIBLE,,0.0036200000322423875, +0,5,13,R,INFEASIBLE,,0.005301000026520342, +0,6,13,R,INFEASIBLE,,0.00437370000872761, +0,7,13,R,INFEASIBLE,,0.00381209998158738, +0,8,17,R,INFEASIBLE,,0.00419289997080341, +0,9,19,R,INFEASIBLE,,0.03844279999611899, +0,10,13,R,INFEASIBLE,,0.003969000012148172, +0,11,21,R,INFEASIBLE,,0.00432040001032874, +0,12,17,R,INFEASIBLE,,0.0059290999779477715, +0,13,15,R,INFEASIBLE,,0.0034611999872140586, +0,14,11,R,INFEASIBLE,,0.003710299963131547, +0,15,14,R,INFEASIBLE,,0.006407500011846423, +0,16,21,R,INFEASIBLE,,0.004005800001323223, +0,17,12,R,INFEASIBLE,,0.0039046999881975353, +0,18,14,R,INFEASIBLE,,0.0035075999912805855, +0,19,17,R,INFEASIBLE,,0.003600900003220886, +0,20,18,R,INFEASIBLE,,0.004145599959883839, +0,21,13,R,INFEASIBLE,,0.0042999000288546085, +0,22,10,R,INFEASIBLE,,0.04301810002652928, +0,23,13,R,INFEASIBLE,,0.00470420002238825, +1,0,6,R,INFEASIBLE,,0.005122300004586577, +1,1,12,R,INFEASIBLE,,0.004711700021289289, +1,2,8,R,INFEASIBLE,,0.030298000026959926, +1,3,12,R,INFEASIBLE,,0.007173600024543703, +1,4,13,R,INFEASIBLE,,0.007763399975374341, +1,5,13,R,INFEASIBLE,,0.261250400042627, +1,6,13,R,INFEASIBLE,,0.013908300024922937, +1,7,13,F,OPTIMAL,26.0,0.029320300032850355, +1,8,17,R,INFEASIBLE,,0.004020300053525716, +1,9,19,R,INFEASIBLE,,0.04701729997759685, +1,10,13,R,INFEASIBLE,,0.005067999998573214, +1,11,21,R,INFEASIBLE,,0.006163800018839538, +1,12,17,R,INFEASIBLE,,0.005615600035525858, +1,13,15,R,INFEASIBLE,,0.00347440002951771, +1,14,11,R,INFEASIBLE,,0.0045205000205896795, +1,15,14,R,INFEASIBLE,,0.027531800034921616, +1,16,21,R,INFEASIBLE,,0.0034759000409394503, +1,17,12,R,INFEASIBLE,,0.002952000009827316, +1,18,14,R,INFEASIBLE,,0.0032524000271223485, +1,19,17,R,INFEASIBLE,,0.006434200040530413, +1,20,18,R,INFEASIBLE,,0.006072600022889674, +1,21,13,R,INFEASIBLE,,0.006592500023543835, +1,22,10,R,INFEASIBLE,,0.02596350002568215, +1,23,13,R,INFEASIBLE,,0.005508600035682321, +2,0,6,F,OPTIMAL,41.0,0.03422649996355176, +2,1,12,R,INFEASIBLE,,0.02121779997833073, +2,2,8,R,INFEASIBLE,,0.03522999997949228, +2,3,12,R,INFEASIBLE,,0.003945899952668697, +2,4,13,R,INFEASIBLE,,0.0034842999884858727, +2,5,13,R,INFEASIBLE,,0.1661735000088811, +2,6,13,R,INFEASIBLE,,0.004293299978598952, +2,7,13,F,OPTIMAL,26.0,0.029198800039011985, +2,8,17,R,INFEASIBLE,,0.003679599962197244, +2,9,19,R,INFEASIBLE,,0.057362399995326996, +2,10,13,R,INFEASIBLE,,0.005917200003750622, +2,11,21,R,INFEASIBLE,,0.005469100025948137, +2,12,17,R,INFEASIBLE,,0.03006909997202456, +2,13,15,R,INFEASIBLE,,0.003497099969536066, +2,14,11,R,INFEASIBLE,,0.003865300037432462, +2,15,14,R,INFEASIBLE,,0.04476829996565357, +2,16,21,R,INFEASIBLE,,0.0045427000150084496, +2,17,12,R,INFEASIBLE,,0.00375890004215762, +2,18,14,R,INFEASIBLE,,0.004455899994354695, +2,19,17,R,INFEASIBLE,,0.0043756000231951475, +2,20,18,R,INFEASIBLE,,0.0033514000242576003, +2,21,13,R,INFEASIBLE,,0.003993299964349717, +2,22,10,R,INFEASIBLE,,0.03310240001883358, +2,23,13,R,INFEASIBLE,,0.004635399964172393, +3,0,6,F,OPTIMAL,41.0,0.02761559997452423, +3,1,12,R,INFEASIBLE,,0.02829409996047616, +3,2,8,R,INFEASIBLE,,0.035245200037024915, +3,3,12,R,INFEASIBLE,,0.004259300010744482, +3,4,13,R,INFEASIBLE,,0.024465300026349723, +3,5,13,R,INFEASIBLE,,0.03348320000804961, +3,6,13,R,INFEASIBLE,,0.00484930002130568, +3,7,13,F,OPTIMAL,26.0,0.023408200009725988, +3,8,17,R,INFEASIBLE,,0.003952300001401454, +3,9,19,R,INFEASIBLE,,0.05896170000778511, +3,10,13,R,INFEASIBLE,,0.18464370002038777, +3,11,21,R,INFEASIBLE,,0.00438699999358505, +3,12,17,R,INFEASIBLE,,0.02496490004705265, +3,13,15,R,INFEASIBLE,,0.004014400008600205, +3,14,11,R,INFEASIBLE,,0.004887700022663921, +3,15,14,R,INFEASIBLE,,0.051876400015316904, +3,16,21,R,INFEASIBLE,,0.0060940999537706375, +3,17,12,R,INFEASIBLE,,0.004151300003286451, +3,18,14,R,INFEASIBLE,,0.004973899980541319, +3,19,17,R,INFEASIBLE,,0.047570599999744445, +3,20,18,R,INFEASIBLE,,0.006011199962813407, +3,21,13,R,INFEASIBLE,,0.006615900027099997, +3,22,10,R,INFEASIBLE,,0.029884800023864955, +3,23,13,R,INFEASIBLE,,0.003890399995725602, +5,0,6,F,OPTIMAL,41.0,0.028083099983632565, +5,1,12,R,INFEASIBLE,,0.06897979998029768, +5,2,8,F,OPTIMAL,34.0,0.02777879999484867, +5,3,12,R,INFEASIBLE,,0.004439999989699572, +5,4,13,R,INFEASIBLE,,0.05862379999598488, +5,5,13,R,INFEASIBLE,,0.032677699986379594, +5,6,13,F,OPTIMAL,37.0,0.03403219999745488, +5,7,13,F,OPTIMAL,25.0,0.029363400011789054, +5,8,17,R,INFEASIBLE,,0.18126559996744618, +5,9,19,R,INFEASIBLE,,0.11825060000410303, +5,10,13,R,INFEASIBLE,,0.048656500002834946, +5,11,21,R,INFEASIBLE,,0.005099800007883459, +5,12,17,R,INFEASIBLE,,0.042008599964901805, +5,13,15,R,INFEASIBLE,,0.005863900005351752, +5,14,11,R,INFEASIBLE,,0.18576140003278852, +5,15,14,R,INFEASIBLE,,0.2720096000120975, +5,16,21,R,INFEASIBLE,,0.07830699998885393, +5,17,12,R,INFEASIBLE,,0.005884800048079342, +5,18,14,R,INFEASIBLE,,0.02475919999415055, +5,19,17,F,OPTIMAL,35.0,0.029600400011986494, +5,20,18,R,INFEASIBLE,,0.004792499996256083, +5,21,13,R,INFEASIBLE,,0.03069579997099936, +5,22,10,R,INFEASIBLE,,0.19301630003610626, +5,23,13,R,INFEASIBLE,,0.035261700046248734, +8,0,6,F,OPTIMAL,40.0,0.04883799998788163, +8,1,12,F,OPTIMAL,36.0,0.03129399998579174, +8,2,8,F,OPTIMAL,34.0,0.03466100001242012, +8,3,12,R,INFEASIBLE,,0.030428900034166873, +8,4,13,F,OPTIMAL,32.0,0.032388599996920675, +8,5,13,F,OPTIMAL,42.0,0.02999489998910576, +8,6,13,F,OPTIMAL,33.0,0.04225860000588, +8,7,13,F,OPTIMAL,23.0,0.02418839995516464, +8,8,17,F,OPTIMAL,32.0,0.03015939996112138, +8,9,19,F,OPTIMAL,34.0,0.031720199971459806, +8,10,13,F,OPTIMAL,36.0,0.02979509998112917, +8,11,21,R,INFEASIBLE,,0.010792299988679588, +8,12,17,F,OPTIMAL,40.0,0.032569300034083426, +8,13,15,R,INFEASIBLE,,0.04807860002620146, +8,14,11,F,OPTIMAL,35.0,0.028448699973523617, +8,15,14,F,OPTIMAL,34.0,0.03514930000528693, +8,16,21,F,OPTIMAL,41.0,0.022359599999617785, +8,17,12,F,OPTIMAL,35.0,0.03161870001349598, +8,18,14,F,OPTIMAL,38.0,0.03405190003104508, +8,19,17,F,OPTIMAL,31.0,0.02947649999987334, +8,20,18,F,OPTIMAL,37.0,0.031054000020958483, +8,21,13,R,INFEASIBLE,,0.10111630003666505, +8,22,10,F,OPTIMAL,32.0,0.02987069997470826, +8,23,13,F,OPTIMAL,41.0,0.03128390002530068, diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app33-neural-diving/SOURCE.md b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app33-neural-diving/SOURCE.md similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app33-neural-diving/SOURCE.md rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app33-neural-diving/SOURCE.md diff --git a/MyIA.AI.Notebooks/Search/Applications/Research/data/app33-neural-diving/diving_results.csv b/MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app33-neural-diving/diving_results.csv similarity index 100% rename from MyIA.AI.Notebooks/Search/Applications/Research/data/app33-neural-diving/diving_results.csv rename to MyIA.AI.Notebooks/Search/Part5-Frontieres/data/app33-neural-diving/diving_results.csv diff --git a/MyIA.AI.Notebooks/Search/README.md b/MyIA.AI.Notebooks/Search/README.md index 805b9a2aaf..fccded6fed 100644 --- a/MyIA.AI.Notebooks/Search/README.md +++ b/MyIA.AI.Notebooks/Search/README.md @@ -147,7 +147,7 @@ Problèmes du monde réel adaptés de projets étudiants. Chaque application est | 12 (C#) | [App-19-ProceduralGeneration-WFC-CSharp](Applications/CSP/App-19-ProceduralGeneration-WFC-CSharp.ipynb) | ~45 min | Twin C# du 12 : WFC from-scratch (entropie de Shannon + propagation AC-3 + backtracking) (See #4956) | Marathon | | 13 | [App-20-SudokuBenchmark-Python](Applications/CSP/App-20-SudokuBenchmark-Python.html) | ~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](Applications/CSP/App-20b-SudokuBenchmark-CSharp.html) | ~50 min | Twin C# du 13 : mêmes solveurs from-scratch en .NET, comparaison des écosystèmes | Jumeau .NET | -| 16 | [Research-05-CoveringArrays-Guarantee-Audit-Python](Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.html) | ~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) | +| 16 | [Frontieres-05-CoveringArrays-Guarantee-Audit-Python](Part5-Frontieres/Frontieres-05-CoveringArrays-Guarantee-Audit-Python.html) | ~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). @@ -209,7 +209,7 @@ CSP-8 Temporal ───> Temporal Planning, STP ## 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](Part4-Metaheuristics/README.md) comme territoire .NET natif (au-dessus de MetaGeneticSharp). Le **marathon parité [EPIC #4956](https://github.com/jsboige/CoursIA/issues/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-33 ont enrichi le dossier Applications — la galerie pédagogique (App-21 à App-27) et la sous-série de recherche ([`Research/`](Applications/README.md#applications-research-research), audits de garanties et distillations de preprints) ; le tableau distingue donc le cœur en binômes de l'inventaire actuel, dont les volumes sont portés par le catalogue (`CATALOG-STATUS`). +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](Part4-Metaheuristics/README.md) comme territoire .NET natif (au-dessus de MetaGeneticSharp). Le **marathon parité [EPIC #4956](https://github.com/jsboige/CoursIA/issues/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-33 ont enrichi le dossier Applications — la galerie pédagogique (App-21 à App-27) et les audits de garanties devenus la [Partie 5 — frontières](Part5-Frontieres/README.md) ; le tableau distingue donc le cœur en binômes de l'inventaire actuel, dont les volumes sont portés par le catalogue (`CATALOG-STATUS`). ### Couverture actuelle @@ -218,7 +218,8 @@ Cette série est née **Python d'abord** pour son cœur pédagogique (recherche, | [Part1-Foundations](Part1-Foundations/) | 24 (Search-1 à Search-11, Search-2b, Search-2c, Search-03b à Search-03e, Search-09b à Search-09d, Search-11c, Search-11d, Search-12a, Search-13a) | Python (22) + Lean (Search-09d) + 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) | | [Part2-CSP](Part2-CSP/) | 9 (CSP-1 à CSP-9) | Python + .NET | **9 binômes complets** — marathon achevé, voir [bilan final](#marathon-epic-4956) | | [Part4-Metaheuristics](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](Applications/) | 20 cas cœur (App-1 à App-20) + galerie App-21–27 + sous-série Research (audits de garanties, volumes au catalogue) | Python + .NET | **20 binômes complets** + compagnons et audits App-21 à App-33 | +| [Applications](Applications/) | 20 cas cœur (App-1 à App-20) + galerie App-21–27 (volumes au catalogue) | Python + .NET | **20 binômes complets** + compagnons App-21 à App-33 | +| [Part5-Frontieres](Part5-Frontieres/) | Audits de garanties et distillations de preprints (volumes au catalogue) | Python | prolonge Part1/Part2/Part4 et les projets étudiants PrCon | | Racine | 0 | — | (aucun — voir [_archive/](_archive/) pour les anciens notebooks racine) | La série a atteint la **parité `Python ⇄ C#` complète** en juillet 2026 : le marathon [EPIC #4956](https://github.com/jsboige/CoursIA/issues/4956) a livré les jumeaux des trois parties curriculaires et des 20 applications, tous mergés sur `main`. Seule la [Partie 4](Part4-Metaheuristics/) reste mono-langage — par conception, puisqu'elle démontre l'ingénierie .NET native au-dessus de GeneticSharp. @@ -384,7 +385,7 @@ Search/ │ │ ├── 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 (sélection ci-dessous, Python + jumeaux C#) +│ └── Hybrid/ # Métaheuristiques (sélection ci-dessous, Python + jumeaux C#) │ ├── App-9-EdgeDetection.ipynb │ ├── App-9b-EdgeDetection-CSharp.ipynb │ ├── App-10-Portfolio.ipynb @@ -399,7 +400,8 @@ Search/ │ ├── 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) │ -│ └── Research/ # Recherche : audits de garanties et distillations de preprints (numérotation propre Research-01..NN, modèle Discrepancy/, arbitrage #17802) +│ +├── Part5-Frontieres/ # Partie 5 — frontières : audits de garanties et distillations de preprints (Frontieres-01..10, carte #19253) │ ├── 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 diff --git a/MyIA.AI.Notebooks/Search/requirements.txt b/MyIA.AI.Notebooks/Search/requirements.txt index 70c8d97e6b..4093ff418e 100644 --- a/MyIA.AI.Notebooks/Search/requirements.txt +++ b/MyIA.AI.Notebooks/Search/requirements.txt @@ -34,7 +34,7 @@ optuna>=3.0 # Optimisation bayesienne d'hyperparametres (App-18 rustuna>=0.1.0 # Portage Rust officiel d'Optuna (App-18c ; statut experimental, bug best_trial connu — cf notebook) # Linear Programming -pulp>=2.8.0,<4.0 # Linear programming with CBC, HiGHS solvers (<4.0 : LpVariable.dicts retiree en 4.0, consomme par Search-09 et Research-07) +pulp>=2.8.0,<4.0 # Linear programming with CBC, HiGHS solvers (<4.0 : LpVariable.dicts retiree en 4.0, consomme par Search-09 et Frontieres-07) # Jupyter ipywidgets>=8.1 diff --git a/MyIA.AI.Notebooks/Search/search_lean/README.md b/MyIA.AI.Notebooks/Search/search_lean/README.md index 04be4ed076..06bda7651a 100644 --- a/MyIA.AI.Notebooks/Search/search_lean/README.md +++ b/MyIA.AI.Notebooks/Search/search_lean/README.md @@ -193,7 +193,7 @@ flowchart TD Le module [`Szpiro.lean`](Szpiro.lean) (miroir EN : [`Szpiro_en.lean`](Szpiro_en.lean)) est le sibling Lean du carnet -[`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Research/Research-10-Szpiro-Pasten-2026-Python.html) : +[`App-32-Szpiro-Pasten-2026.ipynb`](../Applications/Search/App-32-Szpiro-Pasten-2026.html) : Pasten 2026, *Improved Bounds for Szpiro's Conjecture* (arXiv 2609.17390) rend la borne `h(E) ≪ N·log log N` **inconditionnelle** — elle était connue sous GRH — et prouve `h(E) ≪_S N` pour les courbes semistables hors d'un ensemble fini. @@ -242,6 +242,6 @@ Phases suivantes (suivi #4048) : of Minimum Cost Paths*, IEEE Trans. Syst. Sci. Cybern. **4**(2), 1968. - H. Pasten, *Improved Bounds for Szpiro's Conjecture*, arXiv 2609.17390 (2026), archivé `G:\Mon Drive\MyIA\IA\Bibliographie IA\NumberTheory\` — carnet compagnon - [`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Research/Research-10-Szpiro-Pasten-2026-Python.html). + [`App-32-Szpiro-Pasten-2026.ipynb`](../Applications/Search/App-32-Szpiro-Pasten-2026.html). - S. Russell, P. Norvig, *Artificial Intelligence: A Modern Approach*, §3.5 (A* Search). - Notebooks compagnons : [`Search-02-Uninformed.ipynb`](../Part1-Foundations/Search-02-Uninformed.html), [`Search-03-Informed.ipynb`](../Part1-Foundations/Search-03-Informed.ipynb) (le notebook historique [`Exploration_non_informée_et_informée_intro.ipynb`](../_archive/Exploration_non_informée_et_informée_intro.ipynb) est archivé depuis 2026-07-03). diff --git a/MyIA.AI.Notebooks/Search/search_lean/Szpiro.lean b/MyIA.AI.Notebooks/Search/search_lean/Szpiro.lean index 55b86eb1e0..a021abce5e 100644 --- a/MyIA.AI.Notebooks/Search/search_lean/Szpiro.lean +++ b/MyIA.AI.Notebooks/Search/search_lean/Szpiro.lean @@ -4,7 +4,7 @@ import Mathlib # Szpiro — ancrage Mathlib des bornes de Pasten 2026 (hommage à Serre) Sibling Lean du carnet -[`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb) +[`App-32-Szpiro-Pasten-2026.ipynb`](../Applications/Search/App-32-Szpiro-Pasten-2026.ipynb) (issue #16549, option A) : Pasten 2026, *Improved Bounds for Szpiro's Conjecture*, arXiv 2609.17390 (preprint, 261 Ko, archivé `Bibliographie IA\NumberTheory`). diff --git a/MyIA.AI.Notebooks/Search/search_lean/Szpiro_en.lean b/MyIA.AI.Notebooks/Search/search_lean/Szpiro_en.lean index 5d6aeddfc0..29e5bee013 100644 --- a/MyIA.AI.Notebooks/Search/search_lean/Szpiro_en.lean +++ b/MyIA.AI.Notebooks/Search/search_lean/Szpiro_en.lean @@ -10,7 +10,7 @@ EN sibling files, both compile; namespace `Szpiro_en` (anti-collision with FR docstrings manually translated. Companion Lean file of the notebook -[`Research-10-Szpiro-Pasten-2026-Python.ipynb`](../Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb): +[`App-32-Szpiro-Pasten-2026.ipynb`](../Applications/Search/App-32-Szpiro-Pasten-2026.ipynb): Pasten 2026, *Improved Bounds for Szpiro's Conjecture*, arXiv 2609.17390 (preprint, archived under `Bibliographie IA\NumberTheory`). diff --git a/MyIA.AI.Notebooks/SymbolicAI/Lean/Langlands/02-monstrous-moonshine-invariant-j.ipynb b/MyIA.AI.Notebooks/SymbolicAI/Lean/Langlands/02-monstrous-moonshine-invariant-j.ipynb index 51934cad88..f0368e5d01 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/Lean/Langlands/02-monstrous-moonshine-invariant-j.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/Lean/Langlands/02-monstrous-moonshine-invariant-j.ipynb @@ -929,7 +929,7 @@ "- 01 — Formes modulaires : de $SL_2(\\mathbb{Z})$ aux opérateurs de Hecke (notebook 01, PR #17972) — le socle calculatoire ;\n", "- [Lean-16a — Conway: Man and Work](../Lean-16a-Conway-Man-and-Work.ipynb) — le contexte biographique (Conway a co-signé la conjecture et nommé « moonshine ») ;\n", "- [Serre100 — 07 : zéros de fonctions $L$, gaps GUE](../Serre100/07-zeros-fonctions-l-gaps-gue.ipynb) — la face analytique ;\n", - "- [Research-10 : Szpiro–Pasten 2026](../../../Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb) — une correspondance de Jacquet–Langlands qui contraint un invariant calculable.\n", + "- [App-32 : Szpiro–Pasten 2026](../../../Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb) — une correspondance de Jacquet–Langlands qui contraint un invariant calculable.\n", "\n", "**Sources** : Conway & Norton, *Monstrous Moonshine*, Bull. LMS **11** (1979) ; Borcherds, *Monstrous moonshine and monstrous Lie superalgebras*, Invent. Math. **109** (1992) ; Frenkel, Lepowsky & Meurman, *Vertex Operator Algebras and the Monster*, Academic Press (1988) ; Diamond & Shurman, *A First Course in Modular Forms* (ch. 1) ; Serre, *A Course in Arithmetic* (ch. VII). Récit : Margaret Wertheim, « Hunting a Mathematical Snark: The sublime symmetry of the Monster », *Cabinet Magazine* n° 34 (2009), [cabinetmagazine.org/issues/34/wertheim.php](https://www.cabinetmagazine.org/issues/34/wertheim.php) ; Adam Goucher, « An attempt to understand the Monster group », *cp4space* (29/11/2020), [cp4space.hatsya.com](https://cp4space.hatsya.com/2020/11/29/an-attempt-to-understand-the-monster-group/)\n", "\n", diff --git a/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-27-EdgeColoring-Tutte-Companion.ipynb b/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-27-EdgeColoring-Tutte-Companion.ipynb index 2d32a40c08..10cce868ca 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-27-EdgeColoring-Tutte-Companion.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-27-EdgeColoring-Tutte-Companion.ipynb @@ -16,7 +16,7 @@ "source": [ "# Lean-27 : coloration d'arêtes et conjecture de Tutte — compagnon formel\n", "\n", - "Compagnon **formel** du notebook Python [`Research-01-EdgeColoring-Tutte-Python`](../../Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb) (même mandat, issue #13031) : ici, les définitions sont écrites **en Lean 4 sur `Mathlib.Combinatorics.SimpleGraph`** et interrogées par le compilateur (`#check`, `#eval`, `decide`). Les sorties de ce notebook sont des sorties du compilateur Lean, pas de la prose à propos de Lean.\n", + "Compagnon **formel** du notebook Python [`Frontieres-01-EdgeColoring-Tutte-Python`](../../Search/Part5-Frontieres/Frontieres-01-EdgeColoring-Tutte-Python.ipynb) (même mandat, issue #13031) : ici, les définitions sont écrites **en Lean 4 sur `Mathlib.Combinatorics.SimpleGraph`** et interrogées par le compilateur (`#check`, `#eval`, `decide`). Les sorties de ce notebook sont des sorties du compilateur Lean, pas de la prose à propos de Lean.\n", "\n", "**Navigation** : [<< Lean-26 Munkres](Lean-26-Munkres-Tribute.ipynb) | [Index](README.md)\n", "\n", @@ -903,7 +903,7 @@ "1. **La planarité n'est pas dans Mathlib.** Notre `IsApexRelativeTo` prend le prédicat de planarité comme **paramètre** `P` — honnête, mais tant que `P` n'est pas instancié, l'énoncé « cubique + sans pont + apex ⇒ 3-colorable » reste un schéma. Formaliser la planarité (via les embeddings combinatoires ou les matroïdes graphiques) est un sous-projet en soi.\n", "2. **La preuve est un programme, pas un lemme.** Même avec la planarité, la preuve du papier combine un ensemble de réductibilité vérifié par ordinateur et une phase de déchargement — exactement la structure de la preuve des quatre couleurs, dont la formalisation (Gonthier, 2005) a pris des années-homme.\n", "\n", - "Ce que ce compagnon laisse au lecteur est donc la **grammaire** du théorème : `IsCubic`, `Edge3Colorable`, `IsApexRelativeTo`, un Petersen exécutable, et l'équivalence de Tutte (`SimpleGraph.tutte`) comme racine Mathlib du fil couplages. Le notebook Python compagnon ([Research-01](../../Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb)) porte, lui, la vérification empirique à large échantillon (48 graphes, 0 violation).\n", + "Ce que ce compagnon laisse au lecteur est donc la **grammaire** du théorème : `IsCubic`, `Edge3Colorable`, `IsApexRelativeTo`, un Petersen exécutable, et l'équivalence de Tutte (`SimpleGraph.tutte`) comme racine Mathlib du fil couplages. Le notebook Python compagnon ([Frontieres-01](../../Search/Part5-Frontieres/Frontieres-01-EdgeColoring-Tutte-Python.ipynb)) porte, lui, la vérification empirique à large échantillon (48 graphes, 0 violation).\n", "\n", "## Exercices\n", "\n", diff --git a/MyIA.AI.Notebooks/SymbolicAI/Lean/README.md b/MyIA.AI.Notebooks/SymbolicAI/Lean/README.md index 94ee028cf4..cf32f50f0a 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/Lean/README.md +++ b/MyIA.AI.Notebooks/SymbolicAI/Lean/README.md @@ -159,7 +159,7 @@ Tous les notebooks incluent une **barre de navigation** en haut et en bas permet | 24b | [Lean-24b-Confiance-Preuves-Native](Lean-24b-Confiance-Preuves-Native.ipynb) | Compagnon **natif** (kernel `lean4-wsl`, lake `mathlib_examples`) sur la fiabilité d'un certificat formel, piste Dougherty/von Hippel 2026 (*Lies, Damned Lies, and Proofs* — « ce qui rend une preuve formelle fiable ») : mis-définition rendant la preuve trivialement vraie (`DivPar` → `True` vs la vraie divisibilité avec témoin), axiomes de secours mesurés par `#print axioms` (`sorryAx` transitif, `native_decide`, `Classical.choice` whitelisté par nom), implosion depuis `False` (0 axiome), et orthogonalité certificat-vs-headline (mêmes axiomes, fidélités opposées) — cellules code exécutées sans erreur, 3 exercices | 30 min | | 25 | [Lean-25-Coherence-et-Temoin](Lean-25-Coherence-et-Temoin.ipynb) | Cohérence de de Finetti et témoin (Dutch book) : miroir Python **exact** (`fractions.Fraction`) du lake `decision_theory_lean` — un livret (+1,+1,−1,−1) encaisse l'écart d'inclusion-exclusion uniformément dans les 4 états, balayage borné exhaustif (390 625 combinaisons) qui certifie l'absence de livre sur le système réparé, stabilité affine vNM mesurée (0 divergence pour 3u+2 contre 124 pour u² sur les 2145 paires de 66 loteries du simplexe) | 40 min | | 26 | [Lean-26-Munkres-Tribute](Lean-26-Munkres-Tribute.ipynb) | Hommage à James R. Munkres (1930-2026), le cours 18.901 dans Mathlib en kernel **natif** `lean4-wsl`, exécuté sur le lake `mathlib_examples` (environnement d'exécution Mathlib, cf. [`mathlib_examples/`](mathlib_examples/)) : les cinq chapitres du manuel *Topology* — axiomes (`IsOpen`), adhérence/intérieur (`nhds`, dualités §17 ex. 6), continuité (`continuous_def` = Munkres §18.1), T2/compacité, connexité — chaque notion interrogée par `#check`/`example`/`#print axioms` (0 axiome), 3 exercices `sorry` | 30 min | -| 27 | [Lean-27-EdgeColoring-Tutte-Companion](Lean-27-EdgeColoring-Tutte-Companion.ipynb) | Compagnon **natif** (kernel `lean4-wsl`) du notebook [Research-01](../../Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.html) (théorème apex arXiv 2608.22870, #13031) : définitions `IsCubic`/`Edge3Colorable`/`IsApexRelativeTo` posées sur `SimpleGraph` (absentes de Mathlib, vérifié), Petersen = Kneser KG(5,2) via `SimpleGraph.mk'` — 10 sommets, 15 arêtes, cubique prouvés par `decide`, backtracking `#eval` qui certifie l'absence de toute 3-coloration d'arêtes (`0`) avec contrôle positif K4 (`6`), ancrage `SimpleGraph.tutte` | 35 min | +| 27 | [Lean-27-EdgeColoring-Tutte-Companion](Lean-27-EdgeColoring-Tutte-Companion.ipynb) | Compagnon **natif** (kernel `lean4-wsl`) du notebook [Frontieres-01](../../Search/Part5-Frontieres/Frontieres-01-EdgeColoring-Tutte-Python.html) (théorème apex arXiv 2608.22870, #13031) : définitions `IsCubic`/`Edge3Colorable`/`IsApexRelativeTo` posées sur `SimpleGraph` (absentes de Mathlib, vérifié), Petersen = Kneser KG(5,2) via `SimpleGraph.mk'` — 10 sommets, 15 arêtes, cubique prouvés par `decide`, backtracking `#eval` qui certifie l'absence de toute 3-coloration d'arêtes (`0`) avec contrôle positif K4 (`6`), ancrage `SimpleGraph.tutte` | 35 min | | 28 | [Lean-28-Complex-Structure-S6](Lean-28-Complex-Structure-S6.ipynb) | Le problème de Hopf résolu : une structure complexe intégrable sur S⁶ (énoncé `Mathoverflow1973` de Formal Conjectures) — digestion du fil constructif (triangle (3,4,∞), accouplement de Shioda ⟨P,P⟩=1/6 calculé, transformations logarithmiques 3 et 4, remplissage de Mumford dP₆, reconnaissance Hurewicz→Smale→Kervaire–Milnor) avec deux invariants **calculés** (\|π₁\| = \|4m+3n\| par forme normale de Smith, χ = 2), reproduction **réelle** du dépôt piné `plby/HopfProblem` via `hopf_s6_reproduction.py` (248 818 lignes compilées en 1154 s, 0 sorry/0 axiom, comparator double kernel Lean+nanoda : *« Your solution is okay! »*, axiomes [propext, Classical.choice, Quot.sound]) et attribution différenciée (manuscrit écrit par Claude/communiqué par Alpöge, exposition Engel avec caveat, code Lean majoritairement Codex) | 45 min | | 29 | [Lean-29-Hecke-Operators-Native](Lean-29-Hecke-Operators-Native.ipynb) | Compagnon **natif** (kernel `lean4-wsl`) du lake `hecke_lean` (port pédagogique de `anthropics/fermats-last-theorem`, Apache-2.0, toolchain pinée `leanprover/lean4:v4.33.0`) : les opérateurs de Hecke T_p et U_p sur le demi-plan supérieur — représentants γ_{p,j} et partie diagonale, action de slash et ses deux comportements opposés, formule des coefficients a(np) + p^{k−1}·a(n/p) portée par `coeffHeckeT` — chaque déclaration interrogée par `#check`/`#print axioms` exécutés in-kernel (0 erreur), 3 exercices | 40 min | | 30 | [Lean-30-FormalGroups-Native](Lean-30-FormalGroups-Native.ipynb) | Compagnon **natif** (kernel `lean4-wsl`) du lake `formal_groups_lean` (port de `anthropics/fermats-last-theorem`, Apache-2.0, toolchain pinée `leanprover/lean4:v4.33.0`) : les groupes formels multivariés à travers les quatre modules `Basic`/`Hom`/`Additive`/`Iterates` — structure `MvFormalGroup` (neutre, partie linéaire, associativité), commutativité et substitution sûre, morphismes `Hom` et changement d'anneau, loi additive `addMv`, itérés `nthSeries`/`linearPart`/`FiniteHeight` — `#check`/`#print axioms` exécutés in-kernel (0 erreur), 3 exercices | 40 min | diff --git a/_quarto.yml b/_quarto.yml index a21d518aa3..c3640130df 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -15,7 +15,7 @@ project: # (regeneree par scripts/regen_quarto_render.py) car Quarto 1.7 # n'etend pas le glob **/README.md sur les sous-repertoires. # Archives et libs vendored EXCLUES (history interne, non pedagogique). - # 501 READMEs (racine + arborescence, hors archives). + # 513 READMEs (racine + arborescence, hors archives). - "README.md" - "docker-configurations/docs/README.md" - "docker-configurations/notebook-runner/README.md" @@ -249,6 +249,7 @@ project: - "MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/README.md" - "MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/scripts/_archive/README.md" - "MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/scripts/launchers/README.md" + - "MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/shadow/README.md" - "MyIA.AI.Notebooks/QuantConnect/partner-course-quant-trading/examples/Crypto-MultiCanal/README.md" - "MyIA.AI.Notebooks/QuantConnect/partner-course-quant-trading/examples/Sector-Momentum/README.md" - "MyIA.AI.Notebooks/QuantConnect/partner-course-quant-trading/examples/Trend-Following/README.md" @@ -317,6 +318,8 @@ project: - "MyIA.AI.Notebooks/QuantConnect/projects/LSTM-Forecasting/README.md" - "MyIA.AI.Notebooks/QuantConnect/projects/MacroFactorRotation-QC/README.md" - "MyIA.AI.Notebooks/QuantConnect/projects/Mamba-Crypto-Ranking/README.md" + - "MyIA.AI.Notebooks/QuantConnect/projects/Markov-Regime-Detection-Equity-Options/README.md" + - "MyIA.AI.Notebooks/QuantConnect/projects/Markov-Regime-Detection-Index-Options/README.md" - "MyIA.AI.Notebooks/QuantConnect/projects/Markov-Regime-Detection/README.md" - "MyIA.AI.Notebooks/QuantConnect/projects/MeanReversion/README.md" - "MyIA.AI.Notebooks/QuantConnect/projects/ML-Chronos-Foundation/README.md" @@ -346,6 +349,9 @@ project: - "MyIA.AI.Notebooks/QuantConnect/projects/Options-VGT/README.md" - "MyIA.AI.Notebooks/QuantConnect/projects/OptionsIncome/README.md" - "MyIA.AI.Notebooks/QuantConnect/projects/PairsTrading/README.md" + - "MyIA.AI.Notebooks/QuantConnect/projects/Paradox46Benchmarks/README.md" + - "MyIA.AI.Notebooks/QuantConnect/projects/Paradox46Correlation/README.md" + - "MyIA.AI.Notebooks/QuantConnect/projects/Paradox46VolScaledMomentum/README.md" - "MyIA.AI.Notebooks/QuantConnect/projects/PCA-StatArbitrage/README.md" - "MyIA.AI.Notebooks/QuantConnect/projects/Portfolio-IBKR-Coinbase-Hybrid/paper_harness/README.md" - "MyIA.AI.Notebooks/QuantConnect/projects/Portfolio-IBKR-Coinbase-Hybrid/README.md" @@ -368,6 +374,9 @@ project: - "MyIA.AI.Notebooks/QuantConnect/projects/Temporal-CNN-Prediction/README.md" - "MyIA.AI.Notebooks/QuantConnect/projects/TermStructureCommodities-QC/README.md" - "MyIA.AI.Notebooks/QuantConnect/projects/TFT-Crypto-Ranking/README.md" + - "MyIA.AI.Notebooks/QuantConnect/projects/ThreeZone781Benchmarks/README.md" + - "MyIA.AI.Notebooks/QuantConnect/projects/ThreeZone781Correlation/README.md" + - "MyIA.AI.Notebooks/QuantConnect/projects/ThreeZoneSPYDrawdownRotation/README.md" - "MyIA.AI.Notebooks/QuantConnect/projects/TradingCosts-Optimization/README.md" - "MyIA.AI.Notebooks/QuantConnect/projects/Trend-Following/README.md" - "MyIA.AI.Notebooks/QuantConnect/projects/TrendFilteredMeanReversion/README.md" @@ -410,6 +419,7 @@ project: - "MyIA.AI.Notebooks/SymbolicAI/Lean/formal_groups_lean/README.md" - "MyIA.AI.Notebooks/SymbolicAI/Lean/formal_logic_lean/README.md" - "MyIA.AI.Notebooks/SymbolicAI/Lean/galois_lean/README.md" + - "MyIA.AI.Notebooks/SymbolicAI/Lean/Geometry/geometry_lean/README.md" - "MyIA.AI.Notebooks/SymbolicAI/Lean/Geometry/README.md" - "MyIA.AI.Notebooks/SymbolicAI/Lean/grothendieck_lean/README.md" - "MyIA.AI.Notebooks/SymbolicAI/Lean/hecke_lean/README.md" @@ -482,6 +492,7 @@ project: - "scripts/release/README.md" - "scripts/smartcontracts/_archive/README.md" - "scripts/sudoku/_archive/README.md" + - "scripts/tests/_archive/README.md" - "scripts/translation/README.md" - "scripts/validation/README.md" - "slides/01-introduction/analysis/README.md" @@ -521,16 +532,18 @@ project: # docs/*.md rendus en HTML (issue #18422). Meme mecanisme # que les READMEs : liste explicite (globs non etendus en Quarto 1.7). # Garde `---` (#11451) appliquee auto-resorbante. - # 153 docs/*.md (sous-arbre docs/, hors README/archive/hr). + # 159 docs/*.md (sous-arbre docs/, hors README/archive/hr). - "docs/audit/sampling-protocol.md" - "docs/audit/workflow-path-filters/latest.md" - "docs/cadrage/aima-armature.md" + - "docs/cadrage/leiden-declaration-position.md" - "docs/ci/po2024-topology-baseline.md" - "docs/ci/scripts-tests-triage.md" - "docs/ci/self-hosted-runners.md" - "docs/ci/slow-lane.md" - "docs/claim-implicit-check.md" - "docs/curriculum/_inventory.md" + - "docs/curriculum/aima-walk-competences.md" - "docs/curriculum/genai-rush.md" - "docs/curriculum/genai.md" - "docs/curriculum/ia-classique.md" @@ -539,9 +552,11 @@ project: - "docs/curriculum/symbolic-formalization.md" - "docs/curriculum/trading.md" - "docs/data-policy.md" + - "docs/dotnet/net11-runtime-deltas.md" - "docs/dotnet/net11-toub-digest.md" - "docs/genai/audio-embed-pattern.md" - "docs/genai/audio-fading-remediation.md" + - "docs/genai/decision-models.md" - "docs/genai/genai-services.md" - "docs/genai/model-mapping-openai.md" - "docs/genai/model-mapping.md" @@ -590,6 +605,7 @@ project: - "docs/lean/life-sat-cost-frontier.md" - "docs/lean/llm-endpoints.md" - "docs/lean/mimo-converse-cartography.md" + - "docs/lean/origami-reconnaissance.md" - "docs/lean/windows-native-toolchain.md" - "docs/ledgers/10678-interp-positioning-audit.md" - "docs/ledgers/10678-orphan-interp-scan.md" @@ -604,11 +620,12 @@ project: - "docs/ledgers/14169-z3linq-upstream-overlap.md" - "docs/ledgers/14591-volet-bc-mesure.md" - "docs/ledgers/14598-ict-tests-timeout-dissipation.md" + - "docs/ledgers/15159-wan-video-inv.md" - "docs/ledgers/15573-cadrage-granulaire.md" - "docs/ledgers/15615-gradation-foundations.md" - "docs/ledgers/17375-md-content-loss-justified.md" - "docs/ledgers/18493-counter-scan-classification.md" - - "docs/cadrage/leiden-declaration-position.md" + - "docs/ledgers/18741-qualification-14-notebooks.md" - "docs/ml/bdh-evaluation.md" - "docs/ml/tsad-benchmark-flaws.md" - "docs/notebook-metadata/cost-matrix.md" @@ -678,7 +695,7 @@ project: # Notebooks rendus en HTML (EPIC #10921, pilote Search #10923). # Liste explicite — globs non etendus en Quarto 1.7. # Execution desactivee + echo: true au niveau racine (_quarto.yml). - # 1454 notebooks (sous-arbres: MyIA.AI.Notebooks/CaseStudies/, MyIA.AI.Notebooks/Complexity/, MyIA.AI.Notebooks/Compression/, MyIA.AI.Notebooks/GameTheory/, MyIA.AI.Notebooks/GenAI/00-GenAI-Environment/, MyIA.AI.Notebooks/GenAI/Audio/, MyIA.AI.Notebooks/GenAI/CaseStudies/, MyIA.AI.Notebooks/GenAI/FallacyDetection/, MyIA.AI.Notebooks/GenAI/FineTuning/, MyIA.AI.Notebooks/GenAI/Image/, MyIA.AI.Notebooks/GenAI/Integrations-DotNet/, MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/, MyIA.AI.Notebooks/GenAI/Plateformes-Conversationnelles/, MyIA.AI.Notebooks/GenAI/PostTraining/, MyIA.AI.Notebooks/GenAI/RAG-et-Memoire-Semantique/, MyIA.AI.Notebooks/GenAI/Security/, MyIA.AI.Notebooks/GenAI/SemanticKernel/, MyIA.AI.Notebooks/GenAI/Texte/, MyIA.AI.Notebooks/GenAI/Vibe-Coding/, MyIA.AI.Notebooks/GenAI/Video/, MyIA.AI.Notebooks/IIT/, MyIA.AI.Notebooks/ML/, MyIA.AI.Notebooks/NLP/, MyIA.AI.Notebooks/Probas/, MyIA.AI.Notebooks/QuantConnect/, MyIA.AI.Notebooks/RL/, MyIA.AI.Notebooks/Search/, MyIA.AI.Notebooks/Sudoku/, MyIA.AI.Notebooks/SymbolicAI/, MyIA.AI.Notebooks/SymbolicAI/Argument_Analysis/, MyIA.AI.Notebooks/SymbolicAI/Lean/, MyIA.AI.Notebooks/SymbolicAI/Planners/, MyIA.AI.Notebooks/SymbolicAI/SMT/, MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/, MyIA.AI.Notebooks/SymbolicAI/SmartContracts/, MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/, MyIA.AI.Notebooks/SymbolicAI/Tweety/, MyIA.AI.Notebooks/cross-series/). + # 1472 notebooks (sous-arbres: MyIA.AI.Notebooks/CaseStudies/, MyIA.AI.Notebooks/Complexity/, MyIA.AI.Notebooks/Compression/, MyIA.AI.Notebooks/GameTheory/, MyIA.AI.Notebooks/GenAI/00-GenAI-Environment/, MyIA.AI.Notebooks/GenAI/Audio/, MyIA.AI.Notebooks/GenAI/CaseStudies/, MyIA.AI.Notebooks/GenAI/FallacyDetection/, MyIA.AI.Notebooks/GenAI/FineTuning/, MyIA.AI.Notebooks/GenAI/Image/, MyIA.AI.Notebooks/GenAI/Integrations-DotNet/, MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/, MyIA.AI.Notebooks/GenAI/Plateformes-Conversationnelles/, MyIA.AI.Notebooks/GenAI/PostTraining/, MyIA.AI.Notebooks/GenAI/RAG-et-Memoire-Semantique/, MyIA.AI.Notebooks/GenAI/Security/, MyIA.AI.Notebooks/GenAI/SemanticKernel/, MyIA.AI.Notebooks/GenAI/Texte/, MyIA.AI.Notebooks/GenAI/Vibe-Coding/, MyIA.AI.Notebooks/GenAI/Video/, MyIA.AI.Notebooks/IIT/, MyIA.AI.Notebooks/ML/, MyIA.AI.Notebooks/NLP/, MyIA.AI.Notebooks/Probas/, MyIA.AI.Notebooks/QuantConnect/, MyIA.AI.Notebooks/RL/, MyIA.AI.Notebooks/Search/, MyIA.AI.Notebooks/Sudoku/, MyIA.AI.Notebooks/SymbolicAI/, MyIA.AI.Notebooks/SymbolicAI/Argument_Analysis/, MyIA.AI.Notebooks/SymbolicAI/Lean/, MyIA.AI.Notebooks/SymbolicAI/Planners/, MyIA.AI.Notebooks/SymbolicAI/SMT/, MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/, MyIA.AI.Notebooks/SymbolicAI/SmartContracts/, MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/, MyIA.AI.Notebooks/SymbolicAI/Tweety/, MyIA.AI.Notebooks/cross-series/). - "MyIA.AI.Notebooks/CaseStudies/Diagnostic-Medical/solution/Diagnostic-Medical.ipynb" - "MyIA.AI.Notebooks/CaseStudies/Diagnostic-Medical/student/Diagnostic-Medical.ipynb" - "MyIA.AI.Notebooks/CaseStudies/Oncology-Planning/solution/Oncology-Planning.ipynb" @@ -795,6 +812,7 @@ project: - "MyIA.AI.Notebooks/GameTheory/GameTheory-20b-Chemin-Minimal-Temoins-Impossibilite-Python.ipynb" - "MyIA.AI.Notebooks/GameTheory/GameTheory-20c-Chemin-Minimal-3x2-Ordinal-Python.ipynb" - "MyIA.AI.Notebooks/GameTheory/GameTheory-20d-Loi-II-Translateur-Life-Python.ipynb" + - "MyIA.AI.Notebooks/GameTheory/GameTheory-20e-Perplexite-Structurelle-Hashlife-Python.ipynb" - "MyIA.AI.Notebooks/GameTheory/SocialChoice/01-Arrow-Impossibility-Theorem-Csharp.ipynb" - "MyIA.AI.Notebooks/GameTheory/SocialChoice/01-Arrow-Impossibility-Theorem.ipynb" - "MyIA.AI.Notebooks/GameTheory/SocialChoice/01b-Lean-SocialChoice-Formal.ipynb" @@ -864,8 +882,10 @@ project: - "MyIA.AI.Notebooks/GenAI/FineTuning/FT-00c-LoRA-SOTA-Comparison-Python.ipynb" - "MyIA.AI.Notebooks/GenAI/FineTuning/FT-00d-LoRA-QLoRA-SOTA-Comparison-Python.ipynb" - "MyIA.AI.Notebooks/GenAI/FineTuning/FT-01-Introduction-FineTuning-Python.ipynb" + - "MyIA.AI.Notebooks/GenAI/FineTuning/FT-01-Introduction-FineTuning-Python_en.ipynb" - "MyIA.AI.Notebooks/GenAI/FineTuning/FT-02-QLoRA-Quantization-Python.ipynb" - "MyIA.AI.Notebooks/GenAI/FineTuning/FT-03-Supervised-FineTuning-SFT-Python.ipynb" + - "MyIA.AI.Notebooks/GenAI/FineTuning/FT-03-Supervised-FineTuning-SFT-Python_en.ipynb" - "MyIA.AI.Notebooks/GenAI/FineTuning/FT-04-RLHF-DPO-Python.ipynb" - "MyIA.AI.Notebooks/GenAI/FineTuning/FT-05-ModelMerging-Routing-Python.ipynb" - "MyIA.AI.Notebooks/GenAI/FineTuning/FT-05-ModelMerging-Routing-Python_en.ipynb" @@ -889,6 +909,7 @@ project: - "MyIA.AI.Notebooks/GenAI/Image/04-Applications/04-3-Production-Integration.ipynb" - "MyIA.AI.Notebooks/GenAI/Image/04-Applications/04-4-Cross-Stitch-Pattern-Maker-Legacy.ipynb" - "MyIA.AI.Notebooks/GenAI/Image/04-Applications/04-5-MiniMax-Cloud-Image.ipynb" + - "MyIA.AI.Notebooks/GenAI/Image/05-History/05-0-Generateurs-Symboliques.ipynb" - "MyIA.AI.Notebooks/GenAI/Image/05-History/05-1-DiscoDiffusion-CLIP-Guided-Diffusion.ipynb" - "MyIA.AI.Notebooks/GenAI/Image/05-History/05-2-CLIPasso-Semantic-Sketching.ipynb" - "MyIA.AI.Notebooks/GenAI/Image/examples/history-geography.ipynb" @@ -991,6 +1012,8 @@ project: - "MyIA.AI.Notebooks/GenAI/SemanticKernel/fort-boyard-python.ipynb" - "MyIA.AI.Notebooks/GenAI/SemanticKernel/Notebook-Generated.ipynb" - "MyIA.AI.Notebooks/GenAI/SemanticKernel/Notebook-Template.ipynb" + - "MyIA.AI.Notebooks/GenAI/SemanticKernel/Semantic-fleet-MultiConnector-Routing.ipynb" + - "MyIA.AI.Notebooks/GenAI/SemanticKernel/Semantic-fleet-Radix-PromptMatcher.ipynb" - "MyIA.AI.Notebooks/GenAI/SemanticKernel/Semantic-kernel-AutoInteractive.ipynb" - "MyIA.AI.Notebooks/GenAI/SemanticKernel/Workbook-Template-Python.ipynb" - "MyIA.AI.Notebooks/GenAI/SemanticKernel/Workbook-Template.ipynb" @@ -1139,6 +1162,7 @@ project: - "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-44-GeometryOfTruth-Python.ipynb" - "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-45-InoculationBifurcation-9B-Python.ipynb" - "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-46-Strate7-FreeCoordinates-Python.ipynb" + - "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-47-PainAxisDistillation-Python.ipynb" - "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Annexe-ProxyContextuality.ipynb" - "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Argumentation-BeliefTrajectories.ipynb" - "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Argumentation-QBFAcceptance.ipynb" @@ -1318,6 +1342,7 @@ project: - "MyIA.AI.Notebooks/Probas/DecisionTheory/DecInfer/DecInfer-08-Sequential.ipynb" - "MyIA.AI.Notebooks/Probas/DecisionTheory/DecInfer/DecInfer-08b-Lean-Gittins.ipynb" - "MyIA.AI.Notebooks/Probas/DecisionTheory/DecInfer/DecInfer-10-Thompson-Sampling.ipynb" + - "MyIA.AI.Notebooks/Probas/DecisionTheory/DecPyMC/DecPyMC-08-Actuariat-Capstone.ipynb" - "MyIA.AI.Notebooks/Probas/DecisionTheory/DecPyMC/DecPyMC-1-Utility-Foundations.ipynb" - "MyIA.AI.Notebooks/Probas/DecisionTheory/DecPyMC/DecPyMC-2-Utility-Money.ipynb" - "MyIA.AI.Notebooks/Probas/DecisionTheory/DecPyMC/DecPyMC-3-Multi-Attribute.ipynb" @@ -1325,7 +1350,6 @@ project: - "MyIA.AI.Notebooks/Probas/DecisionTheory/DecPyMC/DecPyMC-5-Value-Information.ipynb" - "MyIA.AI.Notebooks/Probas/DecisionTheory/DecPyMC/DecPyMC-6-Expert-Systems.ipynb" - "MyIA.AI.Notebooks/Probas/DecisionTheory/DecPyMC/DecPyMC-7-Sequential.ipynb" - - "MyIA.AI.Notebooks/Probas/DecisionTheory/DecPyMC/DecPyMC-08-Actuariat-Capstone.ipynb" - "MyIA.AI.Notebooks/Probas/Infer/Infer-08b-TrueSkill-Formules-Fermees-CSharp.ipynb" - "MyIA.AI.Notebooks/Probas/Infer/Infer-1-Setup.ipynb" - "MyIA.AI.Notebooks/Probas/Infer/Infer-10-Model-Selection.ipynb" @@ -1390,9 +1414,12 @@ project: - "MyIA.AI.Notebooks/QuantConnect/partner-course-quant-trading/examples/Crypto-MultiCanal/research.ipynb" - "MyIA.AI.Notebooks/QuantConnect/partner-course-quant-trading/examples/Crypto-MultiCanal/research_archive.ipynb" - "MyIA.AI.Notebooks/QuantConnect/partner-course-quant-trading/examples/Sector-Momentum/deep_research_optimization.ipynb" + - "MyIA.AI.Notebooks/QuantConnect/partner-course-quant-trading/examples/Sector-Momentum/deep_research_optimization_en.ipynb" - "MyIA.AI.Notebooks/QuantConnect/partner-course-quant-trading/examples/Sector-Momentum/research_robustness.ipynb" + - "MyIA.AI.Notebooks/QuantConnect/partner-course-quant-trading/examples/Sector-Momentum/research_robustness_en.ipynb" - "MyIA.AI.Notebooks/QuantConnect/partner-course-quant-trading/kit-transitoire/01-ML-RandomForest/research.ipynb" - "MyIA.AI.Notebooks/QuantConnect/partner-course-quant-trading/kit-transitoire/02-ML-XGBoost/research.ipynb" + - "MyIA.AI.Notebooks/QuantConnect/partner-course-quant-trading/kit-transitoire/02-ML-XGBoost/research_en.ipynb" - "MyIA.AI.Notebooks/QuantConnect/partner-course-quant-trading/kit-transitoire/03-Framework-Composite/research.ipynb" - "MyIA.AI.Notebooks/QuantConnect/projects/_docs/qc_top4_oos_extension.ipynb" - "MyIA.AI.Notebooks/QuantConnect/projects/AdaptiveAssetAllocation/quantbook.ipynb" @@ -1403,6 +1430,7 @@ project: - "MyIA.AI.Notebooks/QuantConnect/projects/BTC-ML/research.ipynb" - "MyIA.AI.Notebooks/QuantConnect/projects/Chronos-Foundation-Forecasting/research.ipynb" - "MyIA.AI.Notebooks/QuantConnect/projects/Congress-Trades-Copy/research.ipynb" + - "MyIA.AI.Notebooks/QuantConnect/projects/Corrective-AI/research.ipynb" - "MyIA.AI.Notebooks/QuantConnect/projects/Crypto-LSTM-Prediction/research.ipynb" - "MyIA.AI.Notebooks/QuantConnect/projects/Crypto-MultiCanal/quantbook.ipynb" - "MyIA.AI.Notebooks/QuantConnect/projects/Crypto-MultiCanal/research.ipynb" @@ -1640,9 +1668,6 @@ project: - "MyIA.AI.Notebooks/Search/Applications/CSP/App-20-SudokuBenchmark-Python.ipynb" - "MyIA.AI.Notebooks/Search/Applications/CSP/App-20b-SudokuBenchmark-CSharp.ipynb" - "MyIA.AI.Notebooks/Search/Applications/CSP/App-21-VoiceLeading.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb" - "MyIA.AI.Notebooks/Search/Applications/CSP/App-2b-GraphColoring-CSharp.ipynb" - "MyIA.AI.Notebooks/Search/Applications/CSP/App-3-NurseScheduling.ipynb" - "MyIA.AI.Notebooks/Search/Applications/CSP/App-3b-NurseScheduling-CSharp.ipynb" @@ -1669,21 +1694,14 @@ project: - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-18c-HyperparameterTuning-Rustuna-vs-Optuna.ipynb" - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-22-AlgorithmSelection-Python.ipynb" - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb" - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-27-Sparse-Index-Tracking-Walk-Forward.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb" - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-9-EdgeDetection.ipynb" - "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-9b-EdgeDetection-CSharp.ipynb" - "MyIA.AI.Notebooks/Search/Applications/Search/App-14-ConnectFour-Adversarial-CSharp.ipynb" - "MyIA.AI.Notebooks/Search/Applications/Search/App-14-ConnectFour-Adversarial.ipynb" - "MyIA.AI.Notebooks/Search/Applications/Search/App-14b-ConnectFour.ipynb" - "MyIA.AI.Notebooks/Search/Applications/Search/App-14c-ConnectFour-CSharp.ipynb" - - "MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb" + - "MyIA.AI.Notebooks/Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb" - "MyIA.AI.Notebooks/Search/Discrepancy/Discrepancy-01-BeckFiala-Lean-Python.ipynb" - "MyIA.AI.Notebooks/Search/Part1-Foundations/Search-01-StateSpace-CSharp.ipynb" - "MyIA.AI.Notebooks/Search/Part1-Foundations/Search-01-StateSpace.ipynb" @@ -1701,6 +1719,7 @@ project: - "MyIA.AI.Notebooks/Search/Part1-Foundations/Search-03d-WeightedAstar-CSharp.ipynb" - "MyIA.AI.Notebooks/Search/Part1-Foundations/Search-03d-WeightedAstar.ipynb" - "MyIA.AI.Notebooks/Search/Part1-Foundations/Search-03e-AStar-Optimality.ipynb" + - "MyIA.AI.Notebooks/Search/Part1-Foundations/Search-03f-Reparer-Localement-Sous-Garantie-Python.ipynb" - "MyIA.AI.Notebooks/Search/Part1-Foundations/Search-04-LocalSearch-CSharp.ipynb" - "MyIA.AI.Notebooks/Search/Part1-Foundations/Search-04-LocalSearch.ipynb" - "MyIA.AI.Notebooks/Search/Part1-Foundations/Search-05-GeneticAlgorithms-CSharp.ipynb" @@ -1781,6 +1800,16 @@ project: - "MyIA.AI.Notebooks/Search/Part4-Metaheuristics/MGS-vs-mealpy/MGS-29-GA-vs-Mealpy.ipynb" - "MyIA.AI.Notebooks/Search/Part4-Metaheuristics/MGS-vs-mealpy/MGS-30-ScatterSearch-Decomposition.ipynb" - "MyIA.AI.Notebooks/Search/Part4-Metaheuristics/MGS-vs-mealpy/MGS-31-Synthese-Croisee.ipynb" + - "MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-01-EdgeColoring-Tutte-Python.ipynb" + - "MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-02-Factorio-Balancer-Python.ipynb" + - "MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-03-MAPF-Guarantee-Audit-Python.ipynb" + - "MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-04-CombinatorialAuctions-WDP-VCG-Python.ipynb" + - "MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-05-CoveringArrays-Guarantee-Audit-Python.ipynb" + - "MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-06-LearningToBranch-Generalization-Audit-Python.ipynb" + - "MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb" + - "MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-08-OrbitalAssembly-Certificate-Audit-Python.ipynb" + - "MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb" + - "MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-10-NeuralDiving-Coloration-Python.ipynb" - "MyIA.AI.Notebooks/Sudoku/Sudoku-00-Environment-CSharp.ipynb" - "MyIA.AI.Notebooks/Sudoku/Sudoku-01-Backtracking-CSharp.ipynb" - "MyIA.AI.Notebooks/Sudoku/Sudoku-01-Backtracking-Python.ipynb" @@ -1883,6 +1912,7 @@ project: - "MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-13-Kochen-Specker.ipynb" - "MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-13b-CHSH-Tsirelson-Native.ipynb" - "MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-13c-CHSH-Landau-Saturation.ipynb" + - "MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-13d-CHSH-Indeterminisme-Native.ipynb" - "MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-14-Finiteness-Derivatives.ipynb" - "MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-14b-Finiteness-Lean-Companion.ipynb" - "MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-15-Grothendieck-Tribute.ipynb" @@ -1934,6 +1964,10 @@ project: - "MyIA.AI.Notebooks/SymbolicAI/Lean/Serre100/09-congruences-tau-lacunarite-delta.ipynb" - "MyIA.AI.Notebooks/SymbolicAI/Lean/Serre100/10-empilements-borne-lp-cohn-elkies.ipynb" - "MyIA.AI.Notebooks/SymbolicAI/Lean/Serre100/11-corps-quadratiques-reciprocite-quadratique.ipynb" + - "MyIA.AI.Notebooks/SymbolicAI/Lean/Serre100/12-formes-quadratiques-binaires-nombre-classes.ipynb" + - "MyIA.AI.Notebooks/SymbolicAI/Lean/Serre100/13-jacobi-kronecker-reciprocite-II.ipynb" + - "MyIA.AI.Notebooks/SymbolicAI/Lean/Serre100/14-formes-quadratiques-composition-gauss.ipynb" + - "MyIA.AI.Notebooks/SymbolicAI/Lean/Serre100/15-quatre-carres-lagrange.ipynb" - "MyIA.AI.Notebooks/SymbolicAI/OR-tools-Stiegler.ipynb" - "MyIA.AI.Notebooks/SymbolicAI/Planners/00-Environment/Planners-0-Setup.ipynb" - "MyIA.AI.Notebooks/SymbolicAI/Planners/01-Foundation/Planners-1-Introduction-Csharp.ipynb" diff --git a/docs/curriculum/ia-classique.md b/docs/curriculum/ia-classique.md index 3715c8434a..e2bdedd3da 100644 --- a/docs/curriculum/ia-classique.md +++ b/docs/curriculum/ia-classique.md @@ -44,9 +44,9 @@ Algorithmes de recherche classique, satisfaction de contraintes (CSP), résoluti | 13 | [App-20 — Benchmark comparatif des solveurs Sudoku…](../../MyIA.AI.Notebooks/Search/Applications/CSP/App-20-SudokuBenchmark-Python.ipynb) | BETA | Oui | | 14 | [App-20b : Benchmark compare des solveurs Sudoku (jumeau…](../../MyIA.AI.Notebooks/Search/Applications/CSP/App-20b-SudokuBenchmark-CSharp.ipynb) | BETA | Oui | | 15 | [Voice Leading Minimal par Affectation — l'algorithme de…](../../MyIA.AI.Notebooks/Search/Applications/CSP/App-21-VoiceLeading.ipynb) | BETA | Oui | -| 16 | [App-22 : Coloration d'arêtes et conjecture de Tutte](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb) | BETA | Oui | -| 17 | [App-23 - Factorio Belt Balancer (CP-SAT borne)](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb) | BETA | Oui | -| 18 | [App-26 — Covering Arrays : tester les interactions…](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb) | BETA | Oui | +| 16 | [Frontieres-01 : Coloration d'arêtes et conjecture de Tutte](../../MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-01-EdgeColoring-Tutte-Python.ipynb) | BETA | Oui | +| 17 | [Frontieres-02 - Factorio Belt Balancer (CP-SAT borne)](../../MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-02-Factorio-Balancer-Python.ipynb) | BETA | Oui | +| 18 | [Frontieres-05 — Covering Arrays : tester les interactions…](../../MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-05-CoveringArrays-Guarantee-Audit-Python.ipynb) | BETA | Oui | | 19 | [App-2b : Coloration de graphes — Jumeau C#](../../MyIA.AI.Notebooks/Search/Applications/CSP/App-2b-GraphColoring-CSharp.ipynb) | BETA | Oui | | 20 | [App-3 : Nurse Scheduling (Planification des horaires…](../../MyIA.AI.Notebooks/Search/Applications/CSP/App-3-NurseScheduling.ipynb) | BETA | Oui | | 21 | [App-3b : Nurse Scheduling — Twin C# (planification de…](../../MyIA.AI.Notebooks/Search/Applications/CSP/App-3b-NurseScheduling-CSharp.ipynb) | BETA | Oui | @@ -72,21 +72,21 @@ Algorithmes de recherche classique, satisfaction de contraintes (CSP), résoluti | 41 | [App-18c — Rustuna vs Optuna : mesurer un portage Rust…](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-18c-HyperparameterTuning-Rustuna-vs-Optuna.ipynb) | BETA | Oui | | 42 | [App-22 — Sélection empirique d'algorithmes : trois…](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-22-AlgorithmSelection-Python.ipynb) | BETA | Oui | | 43 | [App-23 — Cryptanalyse différentielle de PRESENT par SAT](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb) | BETA | Oui | -| 44 | [App-24 — MAPF : auditer les garanties des solveurs](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb) | BETA | Non | -| 45 | [App-25 — Enchères combinatoires : Winner Determination…](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb) | BETA | Oui | +| 44 | [Frontieres-03 — MAPF : auditer les garanties des solveurs](../../MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-03-MAPF-Guarantee-Audit-Python.ipynb) | BETA | Non | +| 45 | [Frontieres-04 — Enchères combinatoires : Winner Determination…](../../MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-04-CombinatorialAuctions-WDP-VCG-Python.ipynb) | BETA | Oui | | 46 | [App-27 — Sparse index tracking](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-27-Sparse-Index-Tracking-Walk-Forward.ipynb) | BETA | Oui | -| 47 | [App-28 — Learning to branch](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb) | BETA | Oui | -| 48 | [App-29 — Équilibrage de chaîne d'assemblage (SALBP)](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb) | BETA | Oui | -| 49 | [App-30 — Ordonnancement d'assemblage orbital](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb) | BETA | Oui | -| 50 | [App-31 — RCPSP/max : quand la faisabilité devient le…](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb) | BETA | Oui | -| 51 | [App-33 — Neural diving : un plongeur appris pour CP-SAT](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb) | BETA | Oui | +| 47 | [Frontieres-06 — Learning to branch](../../MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-06-LearningToBranch-Generalization-Audit-Python.ipynb) | BETA | Oui | +| 48 | [Frontieres-07 — Équilibrage de chaîne d'assemblage (SALBP)](../../MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb) | BETA | Oui | +| 49 | [Frontieres-08 — Ordonnancement d'assemblage orbital](../../MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-08-OrbitalAssembly-Certificate-Audit-Python.ipynb) | BETA | Oui | +| 50 | [Frontieres-09 — RCPSP/max : quand la faisabilité devient le…](../../MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb) | BETA | Oui | +| 51 | [Frontieres-10 — Neural diving : un plongeur appris pour CP-SAT](../../MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-10-NeuralDiving-Coloration-Python.ipynb) | BETA | Oui | | 52 | [App-9 : Detection de bords par algorithmes génétiques](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-9-EdgeDetection.ipynb) | BETA | Oui | | 53 | [TP : Conception d'Algorithmes Génétiques avec…](../../MyIA.AI.Notebooks/Search/Applications/Hybrid/App-9b-EdgeDetection-CSharp.ipynb) | BETA | Oui | | 54 | [App-14-ConnectFour-Adversarial-CSharp — Jumeau C# :…](../../MyIA.AI.Notebooks/Search/Applications/Search/App-14-ConnectFour-Adversarial-CSharp.ipynb) | BETA | Oui | | 55 | [App-14 - Connect Four : Benchmark Adversarial Search](../../MyIA.AI.Notebooks/Search/Applications/Search/App-14-ConnectFour-Adversarial.ipynb) | BETA | Oui | | 56 | [App-14b : Puissance 4 -- Comparaison d'algorithmes IA…](../../MyIA.AI.Notebooks/Search/Applications/Search/App-14b-ConnectFour.ipynb) | BETA | Oui | | 57 | [App-14c (C#) : Puissance 4 -- Comparaison d'algorithmes…](../../MyIA.AI.Notebooks/Search/Applications/Search/App-14c-ConnectFour-CSharp.ipynb) | BETA | Oui | -| 58 | [App-32 — Szpiro : Pasten 2026 rend N log log N…](../../MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb) | BETA | Oui | +| 58 | [App-32 — Szpiro : Pasten 2026 rend N log log N…](../../MyIA.AI.Notebooks/Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb) | BETA | Oui | ## Search/Part1-Foundations (44 notebooks) diff --git a/docs/reference/rename-ledger.tsv b/docs/reference/rename-ledger.tsv index e91bfa4cbd..14faf161f1 100644 --- a/docs/reference/rename-ledger.tsv +++ b/docs/reference/rename-ledger.tsv @@ -225,15 +225,14 @@ MyIA.AI.Notebooks/SymbolicAI/SmartContracts/06-Real-World/SC-25-Mainnet-Deploy.i MyIA.AI.Notebooks/SymbolicAI/SmartContracts/06-Real-World/SC-26-Final-Project.ipynb MyIA.AI.Notebooks/SymbolicAI/SmartContracts/06-Real-World/SC-26-Final-Project-Python.ipynb 2026-09-25 myia-po-2025:CoursIA MyIA.AI.Notebooks/SymbolicAI/SmartContracts/06-Real-World/SC-27-Dette-Irreversibilite.ipynb MyIA.AI.Notebooks/SymbolicAI/SmartContracts/06-Real-World/SC-27-Dette-Irreversibilite-Python.ipynb 2026-09-25 myia-po-2025:CoursIA ancien nouveau date lane -MyIA.AI.Notebooks/IIT/ICT-Series/ICT-42-Crosscoder-Distillation-Python.ipynb MyIA.AI.Notebooks/IIT/ICT-Series/ICT-41b-Crosscoder-Distillation-Python.ipynb 2026-10-03 myia-po-2027:CoursIA -MyIA.AI.Notebooks/Search/Applications/CSP/App-22-EdgeColoring-Tutte.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-01-EdgeColoring-Tutte-Python.ipynb 2026-10-04 myia-po-2027:CoursIA -MyIA.AI.Notebooks/Search/Applications/CSP/App-23-Factorio-Balancer.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb 2026-10-04 myia-po-2027:CoursIA -MyIA.AI.Notebooks/Search/Applications/Hybrid/App-24-MAPF-Guarantee-Audit.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb 2026-10-04 myia-po-2027:CoursIA -MyIA.AI.Notebooks/Search/Applications/Hybrid/App-25-CombinatorialAuctions-WDP-VCG.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-04-CombinatorialAuctions-WDP-VCG-Python.ipynb 2026-10-04 myia-po-2027:CoursIA -MyIA.AI.Notebooks/Search/Applications/CSP/App-26-CoveringArrays-Guarantee-Audit.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-05-CoveringArrays-Guarantee-Audit-Python.ipynb 2026-10-04 myia-po-2027:CoursIA -MyIA.AI.Notebooks/Search/Applications/Hybrid/App-28-LearningToBranch-Generalization-Audit.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb 2026-10-04 myia-po-2027:CoursIA -MyIA.AI.Notebooks/Search/Applications/Hybrid/App-29-SALBP-AssemblyLineBalancing-Audit.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb 2026-10-04 myia-po-2027:CoursIA -MyIA.AI.Notebooks/Search/Applications/Hybrid/App-30-OrbitalAssembly-Certificate-Audit.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb 2026-10-04 myia-po-2027:CoursIA -MyIA.AI.Notebooks/Search/Applications/Hybrid/App-31-RCPSP-Max-Feasibility-Bounds.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb 2026-10-04 myia-po-2027:CoursIA -MyIA.AI.Notebooks/Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb 2026-10-04 myia-po-2027:CoursIA -MyIA.AI.Notebooks/Search/Applications/Hybrid/App-33-NeuralDiving-Coloration.ipynb MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb 2026-10-04 myia-po-2027:CoursIA +MyIA.AI.Notebooks/IIT/ICT-Series/ICT-42-Crosscoder-Distillation-Python.ipynb MyIA.AI.Notebooks/IIT/ICT-Series/ICT-41b-Crosscoder-Distillation-Python.ipynb 2026-10-03 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/CSP/App-22-EdgeColoring-Tutte.ipynb MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-01-EdgeColoring-Tutte-Python.ipynb 2026-10-05 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/CSP/App-23-Factorio-Balancer.ipynb MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-02-Factorio-Balancer-Python.ipynb 2026-10-05 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/Hybrid/App-24-MAPF-Guarantee-Audit.ipynb MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-03-MAPF-Guarantee-Audit-Python.ipynb 2026-10-05 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/Hybrid/App-25-CombinatorialAuctions-WDP-VCG.ipynb MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-04-CombinatorialAuctions-WDP-VCG-Python.ipynb 2026-10-05 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/CSP/App-26-CoveringArrays-Guarantee-Audit.ipynb MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-05-CoveringArrays-Guarantee-Audit-Python.ipynb 2026-10-05 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/Hybrid/App-28-LearningToBranch-Generalization-Audit.ipynb MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-06-LearningToBranch-Generalization-Audit-Python.ipynb 2026-10-05 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/Hybrid/App-29-SALBP-AssemblyLineBalancing-Audit.ipynb MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-07-SALBP-AssemblyLineBalancing-Audit-Python.ipynb 2026-10-05 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/Hybrid/App-30-OrbitalAssembly-Certificate-Audit.ipynb MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-08-OrbitalAssembly-Certificate-Audit-Python.ipynb 2026-10-05 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/Hybrid/App-31-RCPSP-Max-Feasibility-Bounds.ipynb MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-09-RCPSP-Max-Feasibility-Bounds-Python.ipynb 2026-10-05 myia-po-2027:CoursIA +MyIA.AI.Notebooks/Search/Applications/Hybrid/App-33-NeuralDiving-Coloration.ipynb MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-10-NeuralDiving-Coloration-Python.ipynb 2026-10-05 myia-po-2027:CoursIA diff --git a/scripts/tests/baseline_nb_nav_chain.json b/scripts/tests/baseline_nb_nav_chain.json index e42a0bf52b..d1f7fdcd6b 100644 --- a/scripts/tests/baseline_nb_nav_chain.json +++ b/scripts/tests/baseline_nb_nav_chain.json @@ -255,11 +255,6 @@ "notebook": "MyIA.AI.Notebooks/GameTheory/GameTheory-18c-Humour-Banc-Python.ipynb", "series": "MyIA.AI.Notebooks/GameTheory" }, - { - "kind": "orphan_entry", - "notebook": "MyIA.AI.Notebooks/GameTheory/GameTheory-18d-Humour-Banc-Dur-Python.ipynb", - "series": "MyIA.AI.Notebooks/GameTheory" - }, { "kind": "orphan_entry", "notebook": "MyIA.AI.Notebooks/GameTheory/GameTheory-20b-Chemin-Minimal-Temoins-Impossibilite-Python.ipynb", @@ -1220,11 +1215,6 @@ "notebook": "MyIA.AI.Notebooks/Search/Applications/CSP/App-20b-SudokuBenchmark-CSharp.ipynb", "series": "MyIA.AI.Notebooks/Search/Applications/CSP" }, - { - "kind": "orphan_entry", - "notebook": "MyIA.AI.Notebooks/Search/Applications/Research/Research-02-Factorio-Balancer-Python.ipynb", - "series": "MyIA.AI.Notebooks/Search/Applications/Research" - }, { "kind": "orphan_entry", "notebook": "MyIA.AI.Notebooks/Search/Applications/CSP/App-5-Timetabling-CSharp.ipynb", @@ -1265,31 +1255,11 @@ "notebook": "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-22-AlgorithmSelection-Python.ipynb", "series": "MyIA.AI.Notebooks/Search/Applications/Hybrid" }, - { - "kind": "orphan_entry", - "notebook": "MyIA.AI.Notebooks/Search/Applications/Research/Research-03-MAPF-Guarantee-Audit-Python.ipynb", - "series": "MyIA.AI.Notebooks/Search/Applications/Research" - }, { "kind": "orphan_entry", "notebook": "MyIA.AI.Notebooks/Search/Applications/Hybrid/App-27-Sparse-Index-Tracking-Walk-Forward.ipynb", "series": "MyIA.AI.Notebooks/Search/Applications/Hybrid" }, - { - "kind": "orphan_entry", - "notebook": "MyIA.AI.Notebooks/Search/Applications/Research/Research-06-LearningToBranch-Generalization-Audit-Python.ipynb", - "series": "MyIA.AI.Notebooks/Search/Applications/Research" - }, - { - "kind": "orphan_entry", - "notebook": "MyIA.AI.Notebooks/Search/Applications/Research/Research-08-OrbitalAssembly-Certificate-Audit-Python.ipynb", - "series": "MyIA.AI.Notebooks/Search/Applications/Research" - }, - { - "kind": "orphan_entry", - "notebook": "MyIA.AI.Notebooks/Search/Applications/Research/Research-11-NeuralDiving-Coloration-Python.ipynb", - "series": "MyIA.AI.Notebooks/Search/Applications/Research" - }, { "kind": "orphan_entry", "notebook": "MyIA.AI.Notebooks/Search/Applications/Search/App-14-ConnectFour-Adversarial-CSharp.ipynb", @@ -1302,8 +1272,8 @@ }, { "kind": "orphan_entry", - "notebook": "MyIA.AI.Notebooks/Search/Applications/Research/Research-10-Szpiro-Pasten-2026-Python.ipynb", - "series": "MyIA.AI.Notebooks/Search/Applications/Research" + "notebook": "MyIA.AI.Notebooks/Search/Applications/Search/App-32-Szpiro-Pasten-2026.ipynb", + "series": "MyIA.AI.Notebooks/Search/Applications/Search" }, { "kind": "orphan_entry", @@ -1445,6 +1415,31 @@ "notebook": "MyIA.AI.Notebooks/Search/Part4-Metaheuristics/MGS-vs-mealpy/MGS-31-Synthese-Croisee.ipynb", "series": "MyIA.AI.Notebooks/Search/Part4-Metaheuristics/MGS-vs-mealpy" }, + { + "kind": "orphan_entry", + "notebook": "MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-02-Factorio-Balancer-Python.ipynb", + "series": "MyIA.AI.Notebooks/Search/Part5-Frontieres" + }, + { + "kind": "orphan_entry", + "notebook": "MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-03-MAPF-Guarantee-Audit-Python.ipynb", + "series": "MyIA.AI.Notebooks/Search/Part5-Frontieres" + }, + { + "kind": "orphan_entry", + "notebook": "MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-06-LearningToBranch-Generalization-Audit-Python.ipynb", + "series": "MyIA.AI.Notebooks/Search/Part5-Frontieres" + }, + { + "kind": "orphan_entry", + "notebook": "MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-08-OrbitalAssembly-Certificate-Audit-Python.ipynb", + "series": "MyIA.AI.Notebooks/Search/Part5-Frontieres" + }, + { + "kind": "orphan_entry", + "notebook": "MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-10-NeuralDiving-Coloration-Python.ipynb", + "series": "MyIA.AI.Notebooks/Search/Part5-Frontieres" + }, { "kind": "orphan_entry", "notebook": "MyIA.AI.Notebooks/Sudoku/Sudoku-12b-Z3-Linq2Z3-CSharp.ipynb", From 17b1cc59ecd1141fd46d96be6e8c8554773d9786 Mon Sep 17 00:00:00 2001 From: jsboige Date: Tue, 6 Oct 2026 01:44:59 +0200 Subject: [PATCH 8/8] Fix: Frontieres-08 -- lectures markdown re-ancrees sur les sorties actuelles Reponse au concern adjoint (PR #19189) : deux cellules de lecture portaient des timings absolus machine-dependants figes par une execution anterieure (x1,80 / 131,1 s vs 82,2 s / +60 %) et un statut FEASIBLE/UNKNOWN disparu de la sortie courante (les deux cas a double limite rendent desormais FEASIBLE/FEASIBLE). - cellule 067f347b : rapport renvoye a la cellule de mesure, plus de secondes absolues en prose - cellule bb1f6872 : lignes 'pire temps' retirees du tableau, timings absolus retires de la prose, statuts decrits tels qu'imprimes, comptes de certification inchanges (18/24 -> 22/24, 4 certificats) - edition markdown-only : aucune cellule de code touchee, aucune re-execution due (C.2), aucun output remplace Co-Authored-By: Claude Sonnet 5.5 --- ...rbitalAssembly-Certificate-Audit-Python.ipynb | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-08-OrbitalAssembly-Certificate-Audit-Python.ipynb b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-08-OrbitalAssembly-Certificate-Audit-Python.ipynb index 079e0d269a..dfc1da3437 100644 --- a/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-08-OrbitalAssembly-Certificate-Audit-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Part5-Frontieres/Frontieres-08-OrbitalAssembly-Certificate-Audit-Python.ipynb @@ -1277,13 +1277,13 @@ "\n", "**25/25 couples (makespan, ergol) identiques** entre les deux encodages. Ce n'est pas une observation heureuse : c'est la preuve de la section 5 qui se manifeste. Si un seul couple avait divergé, c'est la preuve qu'il aurait fallu reprendre, pas les solveurs.\n", "\n", - "Les deux encodages certifient tout sur cette grille : 25/25 `OPTIMAL` pour l'encodage pondéré, 25/25 `OPTIMAL/OPTIMAL` pour les deux passes. Quand tout est certifié, le second encodage n'apporte aucune information supplémentaire — et il coûte **1,80 fois** le temps du premier (2,903 s contre 1,617 s cumulées). Sur une grille facile, la scalarisation est le bon choix, sans réserve. La section 10 ira chercher le régime où ce jugement s'inverse.\n", + "Les deux encodages certifient tout sur cette grille : 25/25 `OPTIMAL` pour l'encodage pondéré, 25/25 `OPTIMAL/OPTIMAL` pour les deux passes. Quand tout est certifié, le second encodage n'apporte aucune information supplémentaire — et il coûte environ **deux fois** le temps du premier (le rapport exact est imprimé par la cellule de mesure ci-dessus). Sur une grille facile, la scalarisation est le bon choix, sans réserve. La section 10 ira chercher le régime où ce jugement s'inverse.\n", "\n", "Deux détails valent d'être relevés.\n", "\n", "Le **domaine de l'objectif scalarisé** s'étend ici de 85 469 à 604 313. Ce sont des entiers parfaitement représentables, et c'est justement ce qu'il faut vérifier avant d'employer un grand coefficient : la preuve d'exactitude suppose une arithmétique entière sans débordement. Sur des budgets ou des horizons beaucoup plus grands, l'énoncé resterait vrai en mathématiques et deviendrait fragile en machine — le poids `B+1` multiplie l'horizon.\n", "\n", - "L'**auditeur externe n'a rejeté aucun des 75 plans** produits par les trois méthodes. C'est un renseignement, pas une formalité : l'auditeur vient de démontrer en section 4 qu'il sait échouer. Un oracle qui n'échoue jamais, sur aucune entrée, ne prouve rien ; celui-ci a déjà rejeté un plan avant d'accepter ceux-là." + "L'**auditeur externe n'a rejeté aucun des 75 plans** produits par les trois méthodes. C'est un renseignement, pas une formalité : l'auditeur vient de démontrer en section 4 qu'il sait échouer. Un oracle qui n'échoue jamais, sur aucune entrée, ne prouve rien ; celui-ci a déjà rejeté un plan avant d'accepter ceux-là.\n" ] }, { @@ -2199,23 +2199,21 @@ "| | n = 16 | n = 32 | n = 64 | n = 90 |\n", "|---|---|---|---|---|\n", "| **densité 0,25** — pondéré `OPTIMAL` | 3/3 | 3/3 | **2/3** | **3/3** |\n", - "| pire temps | 0,16 s | 0,63 s | 10,05 s | 1,85 s |\n", "| **densité 0,60** — pondéré `OPTIMAL` | 3/3 | **1/3** | **1/3** | **2/3** |\n", - "| pire temps | 2,52 s | 10,04 s | 10,03 s | 10,05 s |\n", "\n", - "Aux **deux** densités, la plus grande instance se certifie mieux qu'une instance plus petite. À d = 0,25, `n = 90` — 180 poussées et de 972 à 993 écarts de sécurité — est certifiée 3/3 en 1,85 s au pire, tandis que `n = 64` (490 à 514 séparations) épuise les 10 s sur une graine. À d = 0,60, `n = 90` porte de **2 336 à 2 362** séparations et se certifie sur deux graines en 4,11 s et 4,23 s, alors que `n = 32` (268 à 285 séparations) épuise les 10 s sur deux graines sur trois.\n", + "Aux **deux** densités, la plus grande instance se certifie mieux qu'une instance plus petite. À d = 0,25, `n = 90` — 180 poussées et de 972 à 993 écarts de sécurité — est certifiée 3/3, quand `n = 64` (490 à 514 séparations) épuise la limite de 10 s sur une graine. À d = 0,60, `n = 90` porte de **2 336 à 2 362** séparations et certifie deux graines sur trois, alors que `n = 32` (268 à 285 séparations) épuise la limite sur deux graines sur trois.\n", "\n", - "La variance *intra*-taille est du même ordre : à d = 0,60 et n = 16, une graine demande 2,52 s quand les deux autres se règlent en moins de 0,20 s. Trois tirages du même générateur, avec les mêmes paramètres, ne se valent donc pas non plus entre eux — raison de plus pour publier les graines plutôt qu'une moyenne.\n", + "La variance *intra*-taille est du même ordre : à d = 0,60 et n = 16, une graine demande un ordre de grandeur de plus que les deux autres, qui se règlent en une fraction de seconde — la mesure par instance est dans la sortie ci-dessus. Trois tirages du même générateur, avec les mêmes paramètres, ne se valent donc pas non plus entre eux — raison de plus pour publier les graines plutôt qu'une moyenne.\n", "\n", "Extrapoler « ça passera moins bien plus haut » à partir d'une borne de grille est donc infondé sur cette famille d'instances. Ce qui gouverne la difficulté, c'est la structure de l'instance tirée — comment les fenêtres, les couloirs et les disjonctions s'articulent — bien plus que son nombre de modules. La densité, elle, a un effet lisible : 11/12 certifications à d = 0,25 contre 7/12 à d = 0,60. C'est le bon axe ; la taille ne l'est pas.\n", "\n", "**Ce que le second encodage achète.** Sur **4 instances sur 24**, l'encodage pondéré rend un `FEASIBLE` global indistinct alors que les deux passes certifient le makespan optimal (`OPTIMAL/FEASIBLE`) : d = 0,25 / n = 64 / graine 33, puis d = 0,60 pour n = 32 graine 22, n = 64 graine 22 et n = 90 graine 11. Dans ces quatre cas, on sait **quelque chose** — l'échéancier ne peut pas être meilleur — au lieu de ne rien savoir. Le makespan certifié passe ainsi de 18/24 à 22/24.\n", "\n", - "**Ce qu'il coûte, sans arrangement.** 131,1 s contre 82,2 s, soit **×1,60**. Et le coût n'est pas seulement un facteur moyen : sur `d = 0,60 / n = 32 / graine 11` et `d = 0,60 / n = 64 / graine 33`, les deux passes consomment **deux fois la limite complète** (20,06 s) pour rendre `FEASIBLE/UNKNOWN` et `FEASIBLE/FEASIBLE` — donc rien de plus que l'encodage pondéré, pour le double du temps. Le second encodage n'est pas gratuit et n'est pas toujours gagnant.\n", + "**Ce qu'il coûte, sans arrangement.** Environ une fois et demie le temps total du pondéré — le rapport exact est imprimé par la cellule de mesure ci-dessus. Et le coût n'est pas seulement un facteur moyen : sur `d = 0,60 / n = 32 / graine 11` et `d = 0,60 / n = 64 / graine 33`, les deux passes consomment **deux fois la limite complète** (deux fois 10 s) pour rendre `FEASIBLE/FEASIBLE` — aucun certificat de plus que le `FEASIBLE` de l'encodage pondéré, pour le double du temps. Le second encodage n'est pas gratuit et n'est pas toujours gagnant.\n", "\n", - "Le compromis se résume alors sans emphase : **+60 % de temps achètent 4 certificats de makespan supplémentaires sur 24, et 2 dépenses doublées pour rien.** Comme la preuve de la section 5 établit que les deux encodages définissent le *même* optimum, ils ne diffèrent en rien d'autre — ni en exactitude, ni en valeur. Ils diffèrent uniquement par ce qu'ils savent **dire** quand le temps manque. C'est une propriété de l'écriture du modèle, pas du solveur.\n", + "Le compromis se résume alors sans emphase : **un surcoût d'environ moitié du temps achète 4 certificats de makespan supplémentaires sur 24, et 2 dépenses doublées pour rien.** Comme la preuve de la section 5 établit que les deux encodages définissent le *même* optimum, ils ne diffèrent en rien d'autre — ni en exactitude, ni en valeur. Ils diffèrent uniquement par ce qu'ils savent **dire** quand le temps manque. C'est une propriété de l'écriture du modèle, pas du solveur.\n", "\n", - "Enfin, l'auditeur externe n'a rejeté aucun plan de la sonde. Sur des instances où la recherche est interrompue et rend des incumbents non certifiés, c'est précisément là qu'un vérificateur indépendant a de la valeur : `FEASIBLE` reste un plan **valide**, et cette validité est ici mesurée, pas supposée." + "Enfin, l'auditeur externe n'a rejeté aucun plan de la sonde. Sur des instances où la recherche est interrompue et rend des incumbents non certifiés, c'est précisément là qu'un vérificateur indépendant a de la valeur : `FEASIBLE` reste un plan **valide**, et cette validité est ici mesurée, pas supposée.\n" ] }, {