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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"> **Twin C#** de [`App-15-SportsScheduling`](App-15-SportsScheduling.ipynb) (Python + OR-Tools CP-SAT + numpy + matplotlib).\n",
"> Marathon **.NET / Python** (#4956), volet **Search / Applications / CSP**.\n",
"\n",
"**Navigation** : [<< App-15 Python](App-15-SportsScheduling.ipynb) | [Index](../../README.md) | [App-16 Crossword >>](App-16-Crossword-CSP-Csharp.ipynb)\n",
"**Navigation** : [<< App-15 Python](App-15-SportsScheduling.ipynb) | [Index](../../README.md) | [App-16 Crossword >>](App-16-Crossword-CSP-CSharp.ipynb)\n",
"\n",
"## Objectifs d'apprentissage\n",
"\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"source": [
"# App-18b : Optimisation d'Hyperparametres - Jumeau C#\n",
"\n",
"> **Twin C#** de [`App-18-HyperparameterTuning`](App-18-HyperparameterTuning.ipynb) (Python / scikit-learn + Optuna). Navigation : [<< App-17b VRP](App-17b-VRP-Logistics-Csharp.ipynb) | [Index](../../README.md) | [App-19 WFC >>](../CSP/App-19-ProceduralGeneration-WFC-Csharp.ipynb)\n",
"> **Twin C#** de [`App-18-HyperparameterTuning`](App-18-HyperparameterTuning.ipynb) (Python / scikit-learn + Optuna). Navigation : [<< App-17b VRP](App-17b-VRP-Logistics-Csharp.ipynb) | [Index](../../README.md) | [App-19 WFC >>](../CSP/App-19-ProceduralGeneration-WFC-CSharp.ipynb)\n",
"\n",
"## Objectif pedagogique\n",
"\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
"\n",
"### Duree estimee : 45 minutes\n",
"\n",
"> **Verdict SOTA (#3801 Prong A).** Ce twin C# est un **planificateur SAS+ pedagogique from-scratch** (SOTA-OK pour le concept du moteur). Le notebook Python [Planners-4-Fast-Downward](Planners-4-Fast-Downward.ipynb) invoque le **vrai Fast Downward** (IPC winner, Helmert 2006) via Docker + `unified-planning` = **RECOVERABLE-MACHINE** (le solveur reel n'est pas lie a .NET pedagogique). Le twin from-scratch rend visibles les internes (representation SAS+, opérateurs prevail/pre/eff, RPG, EHC) que Fast Downward cache dans son binaire C++ — compagnon pedagogique intentionnel, même pattern que le twin [App-19 WFC C#](../../../Search/Applications/CSP/App-19-ProceduralGeneration-WFC-Csharp.ipynb). Implementation en BCL .NET 9 **pure, 0 NuGet**."
"> **Verdict SOTA (#3801 Prong A).** Ce twin C# est un **planificateur SAS+ pedagogique from-scratch** (SOTA-OK pour le concept du moteur). Le notebook Python [Planners-4-Fast-Downward](Planners-4-Fast-Downward.ipynb) invoque le **vrai Fast Downward** (IPC winner, Helmert 2006) via Docker + `unified-planning` = **RECOVERABLE-MACHINE** (le solveur reel n'est pas lie a .NET pedagogique). Le twin from-scratch rend visibles les internes (representation SAS+, opérateurs prevail/pre/eff, RPG, EHC) que Fast Downward cache dans son binaire C++ — compagnon pedagogique intentionnel, même pattern que le twin [App-19 WFC C#](../../../Search/Applications/CSP/App-19-ProceduralGeneration-WFC-CSharp.ipynb). Implementation en BCL .NET 9 **pure, 0 NuGet**."
]
},
{
Expand Down
8 changes: 4 additions & 4 deletions scripts/notebook_tools/pedagogy_density_baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -448,9 +448,9 @@
"MyIA.AI.Notebooks/Search/Applications/CSP/App-11b-Picross-CSharp.ipynb": 849.417,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-15-SportsScheduling.ipynb": 1181.588,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-15b-SportsScheduling-CSharp.ipynb": 1475.733,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-16-Crossword-CSP-Csharp.ipynb": 787.75,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-16-Crossword-CSP-CSharp.ipynb": 787.75,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-16-Crossword-CSP.ipynb": 660.25,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-19-ProceduralGeneration-WFC-Csharp.ipynb": 646.2,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-19-ProceduralGeneration-WFC-CSharp.ipynb": 646.2,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-19-ProceduralGeneration-WFC.ipynb": 705.062,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-1b-NQueens-CSharp.ipynb": 870.071,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-2-GraphColoring-Statistical-Validity-Python.ipynb": 1031.273,
Expand All @@ -464,11 +464,11 @@
"MyIA.AI.Notebooks/Search/Applications/CSP/App-4b-JobShopScheduling-CSharp.ipynb": 1189.7,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-5-Timetabling-CSharp.ipynb": 1304.6,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-5-Timetabling.ipynb": 887.35,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-6-Minesweeper-Csharp.ipynb": 1083.273,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-6-Minesweeper-CSharp.ipynb": 1083.273,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-6-Minesweeper.ipynb": 964.652,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-7-Wordle.ipynb": 1009.333,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-7b-Wordle-CSharp.ipynb": 698.0,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-8-MiniZinc-Csharp.ipynb": 1214.857,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-8-MiniZinc-CSharp.ipynb": 1214.857,
"MyIA.AI.Notebooks/Search/Applications/CSP/App-8-MiniZinc.ipynb": 1171.474,
"MyIA.AI.Notebooks/Search/Applications/Hybrid/App-10-Portfolio.ipynb": 1120.158,
"MyIA.AI.Notebooks/Search/Applications/Hybrid/App-10b-Portfolio-CSharp.ipynb": 1966.273,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
date: '2026-09-13'
by: lane myia-po-2023:CoursIA-2
python_sha: 25bd1e99bac08467847225c6c1bef27284108879
csharp_sha: ae8f80d872996154014b6fd4bc746e5f7b820240
content_python_sha: 6bc97a786ead73280efd5ab9062fd87f8625ba308268932374d4234885dbbb46
content_csharp_sha: d7499933e03ca2e5c2d5f88b78b8f6183492c880a2b94cc1f1fe07700f45fff3
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
- name: App-16 Crossword CSP
family: Search/Applications
python: MyIA.AI.Notebooks/Search/Applications/CSP/App-16-Crossword-CSP.ipynb
csharp: MyIA.AI.Notebooks/Search/Applications/CSP/App-16-Crossword-CSP-Csharp.ipynb
csharp: MyIA.AI.Notebooks/Search/Applications/CSP/App-16-Crossword-CSP-CSharp.ipynb
parity_level: native-both
bridge_verdict: SOTA-OK
bridge_verdict_reason: "Python = OR-Tools CP-SAT (cp_model + AddElement/inter constraints, dataclass) + numpy + matplotlib (11 cellules code). C# = Google.OrTools.Sat (NuGet, C# binding du MEME engine OR-Tools CP-SAT 9.11) + Tranche 1 from-scratch BCL pure (System.Linq/Text, 0 NuGet) PRESERVEE (12 cellules code). Verdict SOTA-OK (lib-vs-lib native-both) : les deux cotes invoquent le MEME moteur CP-SAT 9.11 (ortools.sat.python.cp_model <-> Google.OrTools.Sat.CpModel). Prong-B (#3801) : hierarchie sur grids 15x15 -- exact SOLUTION_OPTIMAL, backtracking from-scratch timeout sur les grands grilles -- discrimination mesuree. Tranche 1 from-scratch preservee intacte (byte-identique a main). Python met l'accent sur SOTA + viz matplotlib + experimentation comparative ; C# demontre from-scratch + binding NuGet. parity_level: native-both preserve."
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
date: '2026-09-13'
by: lane myia-po-2023:CoursIA-2
python_sha: 17ba5d66c7ff9ea1eae59c503364c77210b9c50a
csharp_sha: d1a40d93d1e1e33d98d3ea587e08700047bfcadb
content_python_sha: 73920f7e8592771a8d78b6b7e285242e81f2e5c883da5d5ba5097102d78ce505
content_csharp_sha: 61f67ec6bb0f8f7dc3d71215c168723efe443be68a543bc71bb069b011e336ea
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
- name: App-19 ProceduralGeneration WFC
family: Search/Applications
python: MyIA.AI.Notebooks/Search/Applications/CSP/App-19-ProceduralGeneration-WFC.ipynb
csharp: MyIA.AI.Notebooks/Search/Applications/CSP/App-19-ProceduralGeneration-WFC-Csharp.ipynb
csharp: MyIA.AI.Notebooks/Search/Applications/CSP/App-19-ProceduralGeneration-WFC-CSharp.ipynb
parity_level: native-both
bridge_verdict: SOTA-OK
bridge_verdict_reason: "Python = `wfc_cpsat` (module local qui wrappe `ortools` CP-SAT, moteur de production) + ipywidgets + matplotlib viz. C# = WFC from-scratch BCL pure (sections 1-8) + Tranche 2 : binding officiel **Google.OrTools CP-SAT** (NuGet 9.11.4210) portant le meme modele que le jumeau — adjacence par disjonction AddBoolOr, ratio sol 30-60 %, densite ennemis 5-20 %, comptes cles/coffres exacts, relaxation flow connectivite (source (0,0) forcee sol + arcs entrants), objectif variete via AddElement. Mesure 12x12 seed 42, instance identique au jumeau (cell 10) : 43 cases sol (30 %), 3 ennemis (7,0 % du sol), 1 cle, 1 coffre, connectivite BFS 7 % des cases sol (relaxation flow — meme ordre de grandeur que le ~7 % observe du jumeau), OPTIMAL ~1,5 s. Prong B : les contraintes globales (ratio, densite, comptes, connectivite) sont hors de portee du WFC pur (contraintes locales + backtracking) — le passage au solveur industriel fait valoir le moteur. parity_level: native-both : les deux cotes atteignent un moteur de production (OR-Tools CP-SAT)."
Expand Down
2 changes: 1 addition & 1 deletion scripts/notebook_tools/twin_pairs.d/app-6-minesweeper.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
- name: App-6 Minesweeper
family: Search/Applications
python: MyIA.AI.Notebooks/Search/Applications/CSP/App-6-Minesweeper.ipynb
csharp: MyIA.AI.Notebooks/Search/Applications/CSP/App-6-Minesweeper-Csharp.ipynb
csharp: MyIA.AI.Notebooks/Search/Applications/CSP/App-6-Minesweeper-CSharp.ipynb
parity_level: native-both
bridge_verdict: SOTA-OK
bridge_verdict_reason: "Resolved 2026-08-12 (myia-po-2023:CoursIA, tranche 2). Le C# desormais branche Google.OR-Tools CP-SAT (#r nuget:Google.OrTools), le meme solveur de production que le twin Python. Le verdict RECOVERABLE-LOCAL pose par #10588 (ecart = NuGet first-class manquant) est clot : le port est livre. Le solveur from-scratch (section 4) reste pour enseigner la mecanique ; la tranche 2 (section 4bis) demontre la deduction par propagation UNSAT + la contrainte globale total-mines (Exercice 1), deux capacites que le backtracking manuel n'a pas. parity_level passe semantic -> native-both : les deux twins invoquent maintenant le solveur natif de leur ecosysteme (OR-Tools)."
Expand Down
4 changes: 2 additions & 2 deletions scripts/notebook_tools/twin_pairs.d/app-8-minizinc.yaml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
- name: App-8 MiniZinc
family: Search/Applications
python: MyIA.AI.Notebooks/Search/Applications/CSP/App-8-MiniZinc.ipynb
csharp: MyIA.AI.Notebooks/Search/Applications/CSP/App-8-MiniZinc-Csharp.ipynb
csharp: MyIA.AI.Notebooks/Search/Applications/CSP/App-8-MiniZinc-CSharp.ipynb
parity_level: native-both
bridge_verdict: SOTA-OK
bridge_verdict_reason: "Python = minizinc (binding Python pour MiniZinc modeling language, MIT, https://github.com/MiniZinc/libminizinc, dekker 2024) + OR-Tools CP-SAT (driver pour cross-solve depuis MiniZinc) + numpy + matplotlib (19 cellules code). C# = Google.OrTools.Sat (NuGet, C# binding OR-Tools CP-SAT 9.11) + System.* BCL, 14 cellules code. Verdict SOTA-OK (lib-vs-lib) : Python invoque minizinc (modeling language) + OR-Tools CP-SAT (solver backend) ; C# invoque Google.OrTools.Sat (C# binding du MEME engine OR-Tools CP-SAT 9.11). MiniZinc utilise OR-Tools comme solver backend par defaut, donc les deux cotes aboutissent au MEME moteur CP-SAT reel. L'asymetrie est mineure : Python passe par la couche modeling language MiniZinc (plus declarative, plus haut niveau d'abstraction), C# utilise directement le binding CP-SAT (plus proche du moteur). parity_level: semantic preserve (post-#10382 les deux cotes utilisent le MEME solver)."
known_differences:
- '2026-08-31 : ATTESTATION UNILATERALE (PR #13659, lane myia-ai-01:CoursIA) -- reparation d''echappements JSON manges dans le markdown du cote Python. CAUSE : dans le .ipynb, la sequence dollar-\bot-dollar ecrite avec UN SEUL antislash est lue par le parseur JSON comme l''echappement \b (backspace, U+0008) ; la source chargee porte un caractere de controle et le notebook rend un dollar-ot-dollar prive de sa commande LaTeX. FIX : doubler l''antislash (\\bot). Le DRIFT est UNILATERAL parce que le DEFAUT l''est : la contrepartie App-8-MiniZinc-Csharp.ipynb (C#), 19 cellules markdown, a ete scannee sous controle positif (le litteral defectueux passe a json.loads doit rendre U+0008 -- assertion verifiee avant le scan) et ne porte AUCUN caractere de controle U+0008/U+000B/U+000C. Il n''y a donc rien a reparer de ce cote : l''attestation ne consacre aucune asymetrie de contenu. PORTEE DU DIFF cote repare (comparaison des JSON parses origin/main -> HEAD) : markdown uniquement, 0 cellule code touchee, 0 sortie modifiee, 0 execution_count deplace, 0 cellule ajoutee ou retiree.'
- '2026-08-31 : ATTESTATION UNILATERALE (PR #13659, lane myia-ai-01:CoursIA) -- reparation d''echappements JSON manges dans le markdown du cote Python. CAUSE : dans le .ipynb, la sequence dollar-\bot-dollar ecrite avec UN SEUL antislash est lue par le parseur JSON comme l''echappement \b (backspace, U+0008) ; la source chargee porte un caractere de controle et le notebook rend un dollar-ot-dollar prive de sa commande LaTeX. FIX : doubler l''antislash (\\bot). Le DRIFT est UNILATERAL parce que le DEFAUT l''est : la contrepartie App-8-MiniZinc-CSharp.ipynb (C#), 19 cellules markdown, a ete scannee sous controle positif (le litteral defectueux passe a json.loads doit rendre U+0008 -- assertion verifiee avant le scan) et ne porte AUCUN caractere de controle U+0008/U+000B/U+000C. Il n''y a donc rien a reparer de ce cote : l''attestation ne consacre aucune asymetrie de contenu. PORTEE DU DIFF cote repare (comparaison des JSON parses origin/main -> HEAD) : markdown uniquement, 0 cellule code touchee, 0 sortie modifiee, 0 execution_count deplace, 0 cellule ajoutee ou retiree.'
- "Socle pedagogique commun : MiniZinc (modeling language CSP, OR-Tools CP-SAT cross-solve) comme application canonique. Les deux twins couvrent le meme socle theorique (formulation variables/domaines/contraintes, resolution, experimentation) avec parite semantique sur les concepts cibles."
- "Idiomes framework : Python = minizinc + OR-Tools CP-SAT ; C# = Google.OrTools.Sat NuGet (C# binding du meme solver OR-Tools)."
- "Asymetrie pedagogique : Python met l'accent sur le solveur SOTA (OR-Tools CP-SAT / library specialisee) + visualisation matplotlib + experimentation comparative ; le C# demontre l'implementation from-scratch en BCL pure (ou binding NuGet du meme solver pour App-8/10/15), presentation compacte. Meme socle theorique, leviers de demonstration differents."
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
date: '2026-09-13'
by: lane myia-po-2023:CoursIA-2
python_sha: 90853b19dc0d5375a47c21372a4664aa4bff5786
csharp_sha: fd5bf5bc76ac9c24d2c9268fe15e4ccaaeb16bf5
content_python_sha: e2274aa89c2aca8823dd3cc1b2f8a5e3f61158a6fd9f3847251e11ddaa97d551
content_csharp_sha: d9b439a500f192e57eb0f9126a4e36d0e7dddc9f8b56ad21112f67478f8070e6
Loading