diff --git a/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-04-Research-Workflow.ipynb b/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-04-Research-Workflow.ipynb index e32b7d1004..b155cd3271 100644 --- a/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-04-Research-Workflow.ipynb +++ b/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-04-Research-Workflow.ipynb @@ -438,7 +438,7 @@ "source": [ "### Calcul des Returns\n", "\n", - "Calculons les returns journaliers et cumulatifs. Deux lignes pandas : `pct_change()` pour le return journalier, puis le cumulatif par produit (`(1 + r).cumprod()`) -- la composition geometrique, qui repond a \"que vaut 1 dollar investi au depart ?\". La sortie affiche les dernieres lignes : un cumulatif final autour de 1.24, soit +24 % sur l'annee. A noter dans cette meme sortie : le `SettingWithCopyWarning` de pandas -- `df_spy` est une vue extraite par `.loc`, et pandas rappelle qu'ecrire dedans peut ne pas faire ce qu'on croit ; le notebook vit avec (les ecritures passent), mais le pattern propre serait `.copy()` a l'extraction. Ce warning ressortira a chaque ajout de colonne -- le reconnaitre vaut mieux que le craindre.\n" + "Calculons les returns journaliers et cumulatifs : `pct_change()` pour le return journalier, puis le cumulatif par produit (`(1 + r).cumprod()`) -- la composition geometrique, qui repond a \"que vaut 1 dollar investi au depart ?\". La sortie affiche les dernieres lignes : un cumulatif final autour de 1.24, soit +24 % sur l'annee. A noter dans cette meme sortie : le `SettingWithCopyWarning` de pandas -- `df_spy` est une vue extraite par `.loc`, et pandas rappelle qu'ecrire dedans peut ne pas faire ce qu'on croit ; le notebook vit avec (les ecritures passent), mais le pattern propre serait `.copy()` a l'extraction. Ce warning ressortira a chaque ajout de colonne -- le reconnaitre vaut mieux que le craindre.\n" ] }, { @@ -813,7 +813,7 @@ "source": [ "### Generation des Signaux\n", "\n", - "Generons les signaux de trading bases sur le croisement. La regle SMA est d'une ligne pandas : signal = 1 quand `sma_50 > sma_200` (golden cross, tendance haussiere), 0 sinon (death cross). La sortie montrera les dernieres lignes -- signal constant a 1 et position 1.0 en fin de periode, la tendance etant restee haussiere. La **position** est une colonne distincte du signal, et le `.shift(1)` entre les deux n'est pas decoratif : c'est le garde-fou anti-lookahead que la cellule d'apres explique en detail.\n" + "Generons les signaux de trading bases sur le croisement. La regle SMA : signal = 1 quand `sma_50 > sma_200` (golden cross, tendance haussiere), 0 sinon (death cross). La sortie montrera les dernieres lignes -- signal constant a 1 et position 1.0 en fin de periode, la tendance etant restee haussiere. La **position** est une colonne distincte du signal, et le `.shift(1)` entre les deux n'est pas decoratif : c'est le garde-fou anti-lookahead que la cellule d'apres explique en detail.\n" ] }, { @@ -865,7 +865,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "> **Point Crucial** : Le `.shift(1)` sur la position est essentiel pour eviter le **lookahead bias** -- le defaut qui fait paraitre bonne une strategie qui ne l'est pas. L'erreur a eviter : calculer le return du jour avec le signal decide **sur les donnees du meme jour** -- or le signal de fin de jour j (SMA calculees au close de j) ne peut gouverner le return que de j+1. Sans `shift(1)`, chaque croisement capte le retour du jour du croisement, une information que le trader reel n'avait pas encore. C'est LE bug classique du backtest vectorise -- invisible dans le code (une ligne de moins) et massif dans les resultats (des Sharpe fabriques de toutes pieces).\n" + "> **Point Crucial** : Le `.shift(1)` sur la position est essentiel pour eviter le **lookahead bias** -- le defaut qui fait paraitre bonne une strategie qui ne l'est pas. L'erreur a eviter : calculer le return du jour avec le signal decide **sur les donnees du meme jour** -- or le signal de fin de jour j (SMA calculees au close de j) ne peut gouverner le return que de j+1. Sans `shift(1)`, chaque croisement capte le retour du jour du croisement, une information que le trader reel n'avait pas encore. C'est LE bug classique du backtest vectorise -- invisible dans le code et massif dans les resultats (des Sharpe fabriques de toutes pieces).\n" ] }, { @@ -1108,7 +1108,7 @@ "\n", "### Importer les Helpers\n", "\n", - "Le repository embarque ses propres helpers standardises (`shared/features.py`, `shared/backtest_helpers.py`) -- le meme code de calcul pour toute la serie, plutot que des reimplementations locales qui divergent. La cellule gere les **deux layouts** : en local, `shared/` est un dossier parent (`sys.path` vers `../shared`) ; sur QC Cloud, le repository est clone a cote (`./shared`). La sortie confirmera `Helpers importes avec succes` -- et les trois fonctions qui suivent (`calculate_returns`, `add_technical_features`, `calculate_metrics`) demontreront le gain : une ligne d'appel pour des calculs qui, faits a la main dans la section 3, ont pris chacun une cellule.\n" + "Le repository embarque ses propres helpers standardises (`shared/features.py`, `shared/backtest_helpers.py`) -- le meme code de calcul pour toute la serie, plutot que des reimplementations locales qui divergent. La cellule gere les **deux layouts** : en local, `shared/` est un dossier parent (`sys.path` vers `../shared`) ; sur QC Cloud, le repository est clone a cote (`./shared`). La sortie confirmera `Helpers importes avec succes` -- et les trois fonctions qui suivent (`calculate_returns`, `add_technical_features`, `calculate_metrics`) demontreront le gain : un simple appel pour des calculs qui, faits a la main dans la section 3, occupaient chacun leur propre cellule.\n" ] }, { @@ -1617,7 +1617,7 @@ "source": [ "### Creer Labels (Classification Binaire)\n", "\n", - "Creons des labels pour predire la direction du prix. Le label binaire se construit en une ligne conceptuelle : `1` si le return futur a 5 jours est positif, `0` sinon -- la colonne `future_returns_5d` (deja croisee en section 5) devient la cible, pas une feature. La sortie affichera les dernieres lignes du DataFrame labellise, avec les NaN de bord (les 5 derniers jours n'ont pas de futur connu) que le nettoyage suivant retirera. Question a garder en tete pour l'interpretation : la repartition des classes -- un label 90 % positif rend l'accuracy trompeuse (un modele constant \"hausse\" atteint 90 % sans rien predire).\n" + "Creons des labels pour predire la direction du prix. Le label binaire se construit ainsi : `1` si le return futur a 5 jours est positif, `0` sinon -- la colonne `future_returns_5d` (deja croisee en section 5) devient la cible, pas une feature. La sortie affichera les dernieres lignes du DataFrame labellise, avec les NaN de bord (les 5 derniers jours n'ont pas de futur connu) que le nettoyage suivant retirera. Question a garder en tete pour l'interpretation : la repartition des classes -- un label 90 % positif rend l'accuracy trompeuse (un modele constant \"hausse\" atteint 90 % sans rien predire).\n" ] }, { diff --git a/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-07-Futures-Forex.ipynb b/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-07-Futures-Forex.ipynb index 02952be22c..98e4d29359 100644 --- a/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-07-Futures-Forex.ipynb +++ b/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-07-Futures-Forex.ipynb @@ -56,7 +56,7 @@ "3. §3 Forex — pips, mini/micro lots, P&L par pip\n", "5. §5 Stratégie Donchian (Donchian 20/10, off-by-one) — exemple complet\n", "\n", - "**Exercices** : 3 cellules stub (Exercice #7, #12, #16) :\n", + "**Exercices** : cellules stub (Exercice #7, #12, #16) :\n", "- **Exercice 1** : sélection personnalisée de contrats Futures\n", "- **Exercice 2** : stratégie de couverture Forex\n", "- **Exercice 3** : position size multi-devises\n", diff --git a/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-17-Sentiment-Analysis.ipynb b/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-17-Sentiment-Analysis.ipynb index 5ea02e7b5b..0f7dab51aa 100644 --- a/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-17-Sentiment-Analysis.ipynb +++ b/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-17-Sentiment-Analysis.ipynb @@ -50,7 +50,7 @@ "5. Combinaison Sentiment + Technique (20 min)\n", "6. Stratégie Complete (20 min)\n", "\n", - "> **Note de conception** : Ce notebook contient du code de référence à copier dans QuantConnect Lab (main.py) — ces blocs définissent le code QC en chaîne Python. Les cellules d'analyse locale (TextBlob, VADER, simulations) s'exécutent dans le notebook ; seules les 3 cellules d'exercice restent à compléter (stubs étudiant).\n" + "> **Note de conception** : Ce notebook contient du code de référence à copier dans QuantConnect Lab (main.py) — ces blocs définissent le code QC en chaîne Python. Les cellules d'analyse locale (TextBlob, VADER, simulations) s'exécutent dans le notebook ; seules les cellules d'exercice restent à compléter (stubs étudiant).\n" ] }, { @@ -88,10 +88,10 @@ "#40, #44) est un *bloc à coller* dans `main.py`. L'utilisateur\n", "construit l'algorithme en assemblant : `SentimentData` (cellule #23)\n", "+ `SentimentAlphaModel` (cellule #28) + `SentimentTradingAlgorithm`\n", - "(cellule #25). Le tout fait ~150 lignes à intégrer dans un projet\n", + "(cellule #25). Le tout s'intègre dans un projet\n", "QC.\n", "\n", - "**Backtests disponibles** : deux cellules affichent des résultats\n", + "**Backtests disponibles** : des cellules affichent des résultats\n", "QC Cloud pré-calculés :\n", "- Cellule #26 : `SentimentTradingAlgorithm` (2015-2024)\n", "- Cellule #45 : `NewsSentimentStrategy` (2023)\n", @@ -665,12 +665,12 @@ "\n", "TextBlob est base sur un dictionnaire de mots pre-annotes et utilise des règles pour calculer le sentiment.\n", "\n", - "**Section TextBlob** : Pattern-based, ~15K lignes de code, bien\n", + "**Section TextBlob** : Pattern-based, bien\n", "maintenu. Sortie simple : `polarity` (sentiment) + `subjectivity`\n", "(objectivité perçue). Force : simplicité. Faiblesse : pas de\n", "lexique financier spécifique.\n", "\n", - "**Section VADER** : rule-based, ~3K lignes de code, lexique\n", + "**Section VADER** : rule-based, lexique\n", "annoté manuellement (~7500 mots). Force : lexique financier.\n", "Faiblesse : pas de désambiguïsation contextuelle.\n", "\n", @@ -1248,7 +1248,7 @@ "\n", "**Pourquoi ce stub** : le lexique de base VADER couvre le\n", "*langage général*. Un pipeline trading sérieux doit *spécialiser*\n", - "le lexique. C'est ~30 lignes de code, 1-2 heures de travail.\n" + "le lexique. C'est 1-2 heures de travail.\n" ] }, { @@ -4338,7 +4338,7 @@ "\n", "Cette approche multicouche réduit les faux signaux en exigeant une confirmation de trois sources indépendantes.\n", "\n", - "**Architecture résumée** : le notebook expose 5 briques :\n", + "**Architecture résumée** : le notebook expose les briques suivantes :\n", "\n", "| Composant | Rôle | Cellule |\n", "|---|---|---|\n", diff --git a/MyIA.AI.Notebooks/Search/Applications/CSP/App-16-Crossword-CSP.ipynb b/MyIA.AI.Notebooks/Search/Applications/CSP/App-16-Crossword-CSP.ipynb index e4b5791d23..13603f5f5e 100644 --- a/MyIA.AI.Notebooks/Search/Applications/CSP/App-16-Crossword-CSP.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/CSP/App-16-Crossword-CSP.ipynb @@ -1397,7 +1397,7 @@ "\n", "### Sortie attendue\n", "\n", - "La cellule affiche un tableau avec 24 lignes (une par slot), montrant pour chaque slot la longueur, le nombre de mots dans le domaine avant et apres AC-3, et le nombre de mots retires. La derniere ligne resume l'espace combinatoire avant et apres (1.7×10³¹ -> 2.56×10²)." + "La cellule affiche un tableau (une ligne par slot), montrant pour chaque slot la longueur, le nombre de mots dans le domaine avant et apres AC-3, et le nombre de mots retires. La derniere ligne resume l'espace combinatoire avant et apres (1.7×10³¹ -> 2.56×10²)." ] }, { diff --git a/MyIA.AI.Notebooks/Search/Applications/CSP/App-5-Timetabling.ipynb b/MyIA.AI.Notebooks/Search/Applications/CSP/App-5-Timetabling.ipynb index 63a0bb7f77..2a9354612e 100644 --- a/MyIA.AI.Notebooks/Search/Applications/CSP/App-5-Timetabling.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/CSP/App-5-Timetabling.ipynb @@ -1727,7 +1727,7 @@ "| `->` (implication) | `only_enforce_if` | Implication logique |\n", "| `solve minimize f` | `model.minimize(f)` | Objectif |\n", "\n", - "**Avantage principal** : le modèle MiniZinc est **beaucoup plus concis**. La contrainte C3 (pas de double reservation) s'ecrit en 3 lignes contre ~8 en CP-SAT.\n", + "**Avantage principal** : le modèle MiniZinc est **beaucoup plus concis**. La contrainte C3 (pas de double reservation) s'ecrit de façon plus compacte qu'en CP-SAT.\n", "\n", "> **Pour aller plus loin** : voir [App-8 MiniZinc](../CSP/App-8-MiniZinc.ipynb) pour une introduction complete au langage MiniZinc avec des exemples progressifs." ] @@ -1838,7 +1838,7 @@ "\n", "| Critere | CP-SAT (Python) | MiniZinc | Commentaire |\n", "|---------|-----------------|----------|-------------|\n", - "| Lignes de modèle | ~80 | ~40 | MiniZinc 2x plus concis |\n", + "| Concision du modèle | Plus de code | Plus compact | MiniZinc plus concis que CP-SAT |\n", "| Lisibilite | Bonne (Python) | Excellente (math-like) | MiniZinc plus proche de la specification |\n", "| Performance | Très bon | Variable selon solveur | CP-SAT souvent plus rapide |\n", "| Integration Python | Native | Via package minizinc | CP-SAT plus simple a integrer |\n", diff --git a/MyIA.AI.Notebooks/Search/Applications/CSP/App-8-MiniZinc-CSharp.ipynb b/MyIA.AI.Notebooks/Search/Applications/CSP/App-8-MiniZinc-CSharp.ipynb index 8b7e97ba3c..6ed054dedf 100644 --- a/MyIA.AI.Notebooks/Search/Applications/CSP/App-8-MiniZinc-CSharp.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/CSP/App-8-MiniZinc-CSharp.ipynb @@ -155,7 +155,7 @@ "On commence par un **système d'équations** simple : deux inconnues `x` et `y` dans `[1..10]` telles que `x + y = 10` ET `x * y = 21`. C'est l'exemple le plus minimal du paradigme déclaratif : on **décrit** les contraintes (la somme et le produit), on n'écrit **aucun** algorithme de résolution.\n", "\n", "Deux points de syntaxe méritent d'être soulignés :\n", - "- **MiniZinc** (twin Python) l'exprime en **5 lignes** : déclaration des variables (`var 1..10: x`), des contraintes (`constraint x + y = 10`), puis `solve satisfy`. Laconique et mathématique.\n", + "- **MiniZinc** (twin Python) l'exprime ainsi : déclaration des variables (`var 1..10: x`), des contraintes (`constraint x + y = 10`), puis `solve satisfy`. Laconique et mathématique.\n", "- **CP-SAT C#** ajoute la **création explicite** des variables (`model.NewIntVar(1, 10, \"x\")`) et, pour le produit non-linéaire, une **variable intermédiaire** `produit` liée par `AddMultiplicationEquality`. C'est plus verbeux mais donne le contrôle fin typique d'une API procédurale." ] }, @@ -425,9 +425,9 @@ "source": [ "## 3. Contraintes globales\n", "\n", - "Les contraintes **globales** (`alldifferent`, `cumulative`, `circuit`, `element`) capturent des structures récurrentes qui apparaissent dans une grande variété de problèmes. Plutôt que d'écrire une à une les contraintes binaires élémentaires, on invoque une contrainte globale qui **encode la structure entière** en une ligne — et, crucial, que le solveur sait **propager** efficacement grâce à des algorithmes dédiés (filtres de bornes, cohérence d'arc).\n", + "Les contraintes **globales** (`alldifferent`, `cumulative`, `circuit`, `element`) capturent des structures récurrentes qui apparaissent dans une grande variété de problèmes. Plutôt que d'écrire une à une les contraintes binaires élémentaires, on invoque une contrainte globale qui **encode la structure entière** — et, crucial, que le solveur sait **propager** efficacement grâce à des algorithmes dédiés (filtres de bornes, cohérence d'arc).\n", "\n", - "`alldifferent` est la plus utile : elle exprime en **une ligne** ce qui demanderait O(n²) contraintes binaires « différentes deux à deux ». Sur le N-Reines, trois `alldifferent` suffisent à coder tout le problème (lignes, diagonale montante, diagonale descendante). C'est ce gain de concision — et surtout de **vitesse de propagation** — qui rend la CP si efficace sur les problèmes structurés." + "`alldifferent` est la plus utile : elle exprime ce qui demanderait O(n²) contraintes binaires « différentes deux à deux ». Sur le N-Reines, trois `alldifferent` suffisent à coder tout le problème (lignes, diagonale montante, diagonale descendante). C'est ce gain de concision — et surtout de **vitesse de propagation** — qui rend la CP si efficace sur les problèmes structurés." ] }, { @@ -694,7 +694,7 @@ "\n", "Le solveur trouve une solution valide en quelques millisecondes. Deux observations pédagogiques :\n", "\n", - "- **Concision moindre qu'en MiniZinc** (~12 vs ~5 lignes) : CP-SAT exige la création **explicite** des variables de diagonale intermédiaires (`d1[i] = q[i]+i`, `d2[i] = q[i]-i`) avant de pouvoir appliquer `AddAllDifferent` dessus. MiniZinc abstrait ces calculs via la **compréhension de liste** `[q[i] + i | i in 1..n]`. C'est le coût documenté du contrôle fin : on échange de la concision contre de la transparence sur ce que le solveur fait réellement.\n", + "- **Concision moindre qu'en MiniZinc** : CP-SAT exige la création **explicite** des variables de diagonale intermédiaires (`d1[i] = q[i]+i`, `d2[i] = q[i]-i`) avant de pouvoir appliquer `AddAllDifferent` dessus. MiniZinc abstrait ces calculs via la **compréhension de liste** `[q[i] + i | i in 1..n]`. C'est le coût documenté du contrôle fin : on échange de la concision contre de la transparence sur ce que le solveur fait réellement.\n", "- **Symétrie des solutions** : pour 8 reines, il existe 92 solutions distinctes (12 à symétrie près). Le solveur en renvoie **une** arbitrairement — la première trouvée. L'énumération complète demanderait une boucle de recherche (« solution suivante »), hors scope de cette démonstration." ] }, diff --git a/MyIA.AI.Notebooks/Search/Applications/CSP/App-8-MiniZinc.ipynb b/MyIA.AI.Notebooks/Search/Applications/CSP/App-8-MiniZinc.ipynb index c12a5c2cb8..1559377b71 100644 --- a/MyIA.AI.Notebooks/Search/Applications/CSP/App-8-MiniZinc.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/CSP/App-8-MiniZinc.ipynb @@ -879,7 +879,7 @@ "\n", "| Critere | CP-SAT (Python) | MiniZinc |\n", "|---------|-----------------|----------|\n", - "| Lignes de code utiles | ~12 | ~5 |\n", + "| Concision du code | Plus de code | Plus compact |\n", "| Boilerplate (imports, solver, extraction) | Oui | Non |\n", "| Lisibilite mathematique | Moyenne | Haute |\n", "| Flexibilite du solveur | CP-SAT uniquement | Gecode, Chuffed, OR-Tools... |\n", @@ -1182,7 +1182,7 @@ "| `dist[i, next[i]]` | Distance de la ville $i$ a la suivante (indexation par variable) |\n", "\n", "**Points cles** :\n", - "1. Tout le modèle TSP tient en ~5 lignes declaratives\n", + "1. Tout le modèle TSP tient en quelques lignes declaratives\n", "2. `circuit` est une contrainte globale très puissante : elle elimine les sous-tours automatiquement\n", "3. En CP-SAT, il faudrait ajouter manuellement des contraintes d'elimination de sous-tours (MTZ ou lazy constraints)" ] diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-17b-VRP-Logistics-Python.ipynb b/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-17b-VRP-Logistics-Python.ipynb index 3b968156c1..f1bd5e0bfa 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-17b-VRP-Logistics-Python.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-17b-VRP-Logistics-Python.ipynb @@ -964,7 +964,7 @@ "id": "vrp17b-22", "metadata": {}, "source": [ - "**Véracité démontrée (SOTA-OK, #3801).** OR-Tools est la référence industrielle ; notre recuit from-scratch est **légèrement en retrait** (écart de quelques pour-cents), ce qui est honnête et attendu — une métaheuristique pédagogique de ~50 lignes ne bat pas une bibliothèque optimisée par des années de R&D. L'important : nous avons **reconstruit** chaque algorithme pour le comprendre, puis **mesuré** l'écart contre le vrai outil. C'est la complémentarité App-17 (OR-Tools) ↔ App-17b (from-scratch)." + "**Véracité démontrée (SOTA-OK, #3801).** OR-Tools est la référence industrielle ; notre recuit from-scratch est **légèrement en retrait** (écart de quelques pour-cents), ce qui est honnête et attendu — une métaheuristique pédagogique ne bat pas une bibliothèque optimisée par des années de R&D. L'important : nous avons **reconstruit** chaque algorithme pour le comprendre, puis **mesuré** l'écart contre le vrai outil. C'est la complémentarité App-17 (OR-Tools) ↔ App-17b (from-scratch)." ] }, { diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-28-LearningToBranch-Generalization-Audit.ipynb b/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-28-LearningToBranch-Generalization-Audit.ipynb index ec624e2025..bb3f1f9a28 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-28-LearningToBranch-Generalization-Audit.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-28-LearningToBranch-Generalization-Audit.ipynb @@ -858,7 +858,7 @@ "source": [ "## 6. Exécution fraîche — matérialiser le coût de chaque claim\n", "\n", - "La cellule suivante régénère les CSV et le rapport JSON sous `data/app28-learning-to-branch-audit/`. Elle résout d'abord les 36 instances avec quatre heuristiques classiques, collecte 11 461 lignes candidates aux nœuds visités par `dom/wdeg`, puis entraîne et évalue 20 combinaisons split × graine.\n", + "La cellule suivante régénère les CSV et le rapport JSON sous `data/app28-learning-to-branch-audit/`. Elle résout d'abord les 36 instances avec quatre heuristiques classiques, collecte les lignes candidates aux nœuds visités par `dom/wdeg`, puis entraîne et évalue 20 combinaisons split × graine.\n", "\n", "Le coût de cette exécution est partie intégrante de l'expérience : une politique de branchement n'est pas évaluée hors du solveur. Les temps absolus restent dépendants de la machine et de la charge ; les ratios comparent deux méthodes dans le même run, sur la même instance. Même ces ratios ne sont pas universels, car les CSP sont petits et l'overhead Python occupe une place plus grande que dans un solveur compilé.\n", "\n", diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-29-SALBP-AssemblyLineBalancing-Audit.ipynb b/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-29-SALBP-AssemblyLineBalancing-Audit.ipynb index 9d61e85b71..f66fa24c2a 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-29-SALBP-AssemblyLineBalancing-Audit.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-29-SALBP-AssemblyLineBalancing-Audit.ipynb @@ -719,7 +719,7 @@ "source": [ "### Ce que ferme le tableau — et ce qu'il laisse ouvert\n", "\n", - "Les dix lignes exactes rapportent `OPTIMAL`, une borne égale à l'incumbent et `valid=True`. Sur ce panel précis, CP-SAT et CBC concordent donc sur cinq valeurs fermées, et leurs solutions satisfont un contrôle indépendant. RPW retourne cinq affectations valides et atteint aussi quatre stations à chaque fois.\n", + "Les lignes exactes rapportent `OPTIMAL`, une borne égale à l'incumbent et `valid=True`. Sur ce panel précis, CP-SAT et CBC concordent donc sur cinq valeurs fermées, et leurs solutions satisfont un contrôle indépendant. RPW retourne cinq affectations valides et atteint aussi quatre stations à chaque fois.\n", "\n", "Cette régularité est utile mais elle révèle une limite du banc : les instances sont faciles et peu discriminantes pour la qualité de RPW. On ne doit pas convertir « 5/5 égalités » en taux de succès général. Pour étudier l'heuristique, il faudrait des familles plus grandes et diverses, des répétitions, des tie-breaks alternatifs et des écarts à une borne ou à un optimum certifié.\n", "\n", diff --git a/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-30-OrbitalAssembly-Certificate-Audit.ipynb b/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-30-OrbitalAssembly-Certificate-Audit.ipynb index ff4a70df93..113796437c 100644 --- a/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-30-OrbitalAssembly-Certificate-Audit.ipynb +++ b/MyIA.AI.Notebooks/Search/Applications/Hybrid/App-30-OrbitalAssembly-Certificate-Audit.ipynb @@ -1038,7 +1038,7 @@ "source": [ "### La scalarisation n'est pas une approximation : elle est **exactement** lexicographique\n", "\n", - "On lit souvent qu'un objectif du type $mk \\times W + f$ « approxime » une priorité lexicographique, avec un poids $W$ choisi « assez grand ». Ici, le choix $W = B+1$ rend l'énoncé **exact**, et cela se démontre en trois lignes.\n", + "On lit souvent qu'un objectif du type $mk \\times W + f$ « approxime » une priorité lexicographique, avec un poids $W$ choisi « assez grand ». Ici, le choix $W = B+1$ rend l'énoncé **exact**, et cela se démontre.\n", "\n", "Soient deux plans $A$ et $B$ réalisables, d'ergols $f_A, f_B$ nécessairement dans $[0, B]$ puisque le budget est une contrainte du modèle. Supposons $mk_A < mk_B$, c'est-à-dire $mk_A + 1 \\le mk_B$ (les makespans sont entiers). Alors :\n", "\n", diff --git a/MyIA.AI.Notebooks/SymbolicAI/Lean/ANALYSE/ANALYSE-02-Tao-Lean-Python.ipynb b/MyIA.AI.Notebooks/SymbolicAI/Lean/ANALYSE/ANALYSE-02-Tao-Lean-Python.ipynb index ba6e30c494..8b9f77b67b 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/Lean/ANALYSE/ANALYSE-02-Tao-Lean-Python.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/Lean/ANALYSE/ANALYSE-02-Tao-Lean-Python.ipynb @@ -35,7 +35,7 @@ "\n", "**Pourquoi ce notebook dans notre serie Lean ?**\n", "\n", - "- Notre serie Lean a deja couvert Sendov (Lean-18 : digestion par Tao de la preuve de L. Mazur, analyse complexe, 1 grain = 1 théorème). Pour ce 2e grain — cette fois une oeuvre propre de Tao — on prend du recul : ce n'est plus *un* théorème mais *un manuel entier* (11 chapitres, 109 fichiers, 44 297 LOC, 2079 `sorry` deliberes par l'auteur comme exercices au lecteur).\n", + "- Notre serie Lean a deja couvert Sendov (Lean-18 : digestion par Tao de la preuve de L. Mazur, analyse complexe, 1 grain = 1 théorème). Pour ce 2e grain — cette fois une oeuvre propre de Tao — on prend du recul : ce n'est plus *un* théorème mais *un manuel entier* (11 chapitres, `sorry` deliberes par l'auteur comme exercices au lecteur).\n", "- **Substance nouvelle** : Lean-19 est le premier grain de notre serie qui est *Lean-meta* (recit methodologique) plutot que *Lean-content* (preuve formelle). C'est ce qu'on appelle dans le jargon de la preuve agentique un *process notebook* — un notebook qui decrit un processus de preuve, pas une preuve.\n", "- **Méthode nouvelle** : comparaison directe avec notre cluster — en realite TROIS méthodes : Tao a la main (seul, 2 ans, 5-15 commits/jour), Tao + grosse machinerie (Sendov digere en 2 jours, cf. [Lean-18](ANALYSE-01-Sendov-Lean-Python.ipynb)), et notre cluster (4 workers + 1 coordinateur, ~2 PRs/h, petits increments sur des problemes varies). Quels sont les tradeoffs ?\n", "- **Apport a Mathlib** : Tao n'utilise presque pas Mathlib dans les chapitres 2-5 (auto-contenu, axiomes Peano, construction de Cauchy des réels), puis transitionne progressivement vers Mathlib a partir du chapitre 6. C'est une approche pedagogique rare — la plupart des projets partent de Mathlib.\n", @@ -63,21 +63,21 @@ "\n", "Le lac `teorth/analysis` est structure en **11 chapitres** qui suivent le plan du manuel *Analysis I* :\n", "\n", - "| Chapitre | Section range | Contenu | LOC approx |\n", - "|---|---|---|---|\n", - "| 2 | `Section_2_*` | Natural numbers (axiomes Peano, +, x) | ~3k |\n", - "| 3 | `Section_3_*` | Set theory (ZF, paradox Russell, fonctions, cardinalite) | ~6k |\n", - "| 4 | `Section_4_*` | Integers and rationals | ~3k |\n", - "| 5 | `Section_5_*` | Real numbers (Cauchy sequences, sup/inf) | ~5k |\n", - "| 6 | `Section_6_*` | Limits of sequences | ~4k |\n", - "| 7 | `Section_7_*` | Series | ~4k |\n", - "| 8 | `Section_8_*` | Infinite sets (denombrabilite, AC) | ~4k |\n", - "| 9 | `Section_9_*` | Continuous functions on R | ~5k |\n", - "| 10 | `Section_10_*` | Differentiation | ~3k |\n", - "| 11 | `Section_11_*` | Riemann integration | ~5k |\n", - "| Appendix A, B | `Appendix_A_*`, `Appendix_B_*` | Résultats auxiliaires | ~2k |\n", - "\n", - "**Total** : 109 fichiers Lean / 44 297 LOC / 2079 `sorry` deliberes (cf. README, exercices au lecteur).\n", + "| Chapitre | Section range | Contenu |\n", + "|---|---|---|\n", + "| 2 | `Section_2_*` | Natural numbers (axiomes Peano, +, x) |\n", + "| 3 | `Section_3_*` | Set theory (ZF, paradox Russell, fonctions, cardinalite) |\n", + "| 4 | `Section_4_*` | Integers and rationals |\n", + "| 5 | `Section_5_*` | Real numbers (Cauchy sequences, sup/inf) |\n", + "| 6 | `Section_6_*` | Limits of sequences |\n", + "| 7 | `Section_7_*` | Series |\n", + "| 8 | `Section_8_*` | Infinite sets (denombrabilite, AC) |\n", + "| 9 | `Section_9_*` | Continuous functions on R |\n", + "| 10 | `Section_10_*` | Differentiation |\n", + "| 11 | `Section_11_*` | Riemann integration |\n", + "| Appendix A, B | `Appendix_A_*`, `Appendix_B_*` | Résultats auxiliaires |\n", + "\n", + "**Total** : `sorry` deliberes (cf. README, exercices au lecteur).\n", "\n", "### 1.2 Module helpers\n", "\n", @@ -230,7 +230,7 @@ "\n", "### 2.1 Le pari pedagogique de Tao\n", "\n", - "La majorite des projets de formalisation en Lean 4 partent de **Mathlib** : c'est la base canonique, ~1M LOC, documentee, testee. Tao fait le **contraire** dans les chapitres 2-5 : il **reconstruit from scratch** :\n", + "La majorite des projets de formalisation en Lean 4 partent de **Mathlib** : c'est la base canonique, documentee, testee. Tao fait le **contraire** dans les chapitres 2-5 : il **reconstruit from scratch** :\n", "\n", "- **Chapitre 2** : natural numbers par induction, pas Mathlib.Nat. Mais **un epilogue** (Section_2_epilogue) démontre l'isomorphisme avec `Mathlib.Nat`.\n", "- **Chapitre 3** : set theory a la ZF, pas `Mathlib.Set`. Encore un epilogue qui montre la connexion a `Mathlib.SetTheory.ZFC.Basic`.\n", @@ -257,7 +257,7 @@ "- Aucune reconstruction from-scratch (les polynomes, les zeros, les dérivées viennent directement de Mathlib).\n", "- Strategie : **sprints bornes** sur des théorèmes SOTA, pas un manuel pedagogique.\n", "\n", - "Sendov est **rapide** (14.9k LOC pour 1 théorème) mais **opaque** (le lecteur voit le résultat, pas la construction). Analysis est **lent** (44.3k LOC pour un manuel) mais **transparent** (chaque construction est visible). Les deux strategies sont legitimes ; elles servent des objectifs differents." + "Sendov est **rapide** (14.9k LOC pour 1 théorème) mais **opaque** (le lecteur voit le résultat, pas la construction). Analysis est **lent** (pour un manuel) mais **transparent** (chaque construction est visible). Les deux strategies sont legitimes ; elles servent des objectifs differents." ] }, { @@ -352,7 +352,7 @@ "source": [ "## 3. Cinq lemmes emblématiques\n", "\n", - "Choix selectif parmi les 44k LOC : 5 lemmes qui illustrent chacun un aspect de la méthode Tao. Pseudo-Lean (convention serie Lean-12/17/19), illustrations Python en aval.\n", + "Choix selectif parmi les lemmes du lac : 5 lemmes qui illustrent chacun un aspect de la méthode Tao. Pseudo-Lean (convention serie Lean-12/17/19), illustrations Python en aval.\n", "\n", "### 3.1 Lemme 1 — Peano axioms (Chapitre 2)\n", "\n", @@ -362,7 +362,7 @@ " theorem peano_axiom_succ : Nat.succ n = Nat.succ m → n = m\n", " theorem peano_induction (P : Nat → Prop) (h0 : P 0) (hs : ∀ n, P n → P (Nat.succ n)) : ∀ n, P n\n", "\n", - "Puis le **théorème-clé** : l'addition est commutative. **14 lignes** de Lean pour le prouver, dont la majorite sont des appels a `Nat.rec` (le recursur structurel sur le type inductif `Nat`).\n", + "Puis le **théorème-clé** : l'addition est commutative. La preuve s'appuie en majorite sur des appels a `Nat.rec` (le recursur structurel sur le type inductif `Nat`).\n", "\n", "### 3.2 Lemme 2 — Cantor's theorem (Chapitre 3, set theory)\n", "\n", @@ -372,7 +372,7 @@ "\n", "Preuve : si une telle `f` existait, on construirait `S = { x | x ∉ f x }`, puis on aurait `S ∈ f a ⟺ a ∉ S = a ∉ f a`, contradiction.\n", "\n", - "Tao définit `Set X` comme `X → Prop` (les sous-ensembles sont les predicats), ce qui est l'encodage standard en theorie des types. **3 lignes** de Lean pour le théorème :\n", + "Tao définit `Set X` comme `X → Prop` (les sous-ensembles sont les predicats), ce qui est l'encodage standard en theorie des types. Le théorème en Lean :\n", "\n", " theorem cantor (X : Type u) : ¬ ∃ f : X → X → Prop, Function.Surjective f :=\n", " fun ⟨f, hf⟩ => hf {\n", @@ -395,7 +395,7 @@ "\n", " theorem cauchy_converges (a : ℕ → ℝ) (h : CauchySeq a) : ∃ L : ℝ, a → L\n", "\n", - "Preuve : la borne supérieure des queues de suite est la limite. **12 lignes** de Lean, dont la moitie sont du calcul de sup/inf explicite.\n", + "Preuve : la borne supérieure des queues de suite est la limite, la moitie en calcul de sup/inf explicite.\n", "\n", "### 3.5 Lemme 5 — Intermediate value theorem (Chapitre 9)\n", "\n", @@ -409,7 +409,7 @@ "\n", "\n", "> **Pour aller plus loin — Surviving proofs, *Why Do We Care About Proofs?* (29/08/2026)**\n", - "> Sheydvasser, à l'article 0, insiste : une preuve n'est pas seulement un certificat, c'est une *stratégie* qui éclaire. Le lemme 2 (Cantor) qu'on présente ici en est l'illustration parfaite : la diagonale $S = \\{x \\mid x \\notin f\\,x\\}$ n'est pas un artefact technique — c'est la *stratégie* même de la preuve par contradiction. Trois lignes de Lean concentrent un geste logique que toute la théorie des ensembles porte : on définit le sous-ensemble piégé, on exhibe la contradiction, on conclut que `f` ne peut pas être surjective. La preuve est lisible parce qu'elle *nomme* la stratégie (diagonale de Russell), pas parce qu'elle est courte. C'est exactement ce que Sheydvasser recommande à l'article 0.\n", + "> Sheydvasser, à l'article 0, insiste : une preuve n'est pas seulement un certificat, c'est une *stratégie* qui éclaire. Le lemme 2 (Cantor) qu'on présente ici en est l'illustration parfaite : la diagonale $S = \\{x \\mid x \\notin f\\,x\\}$ n'est pas un artefact technique — c'est la *stratégie* même de la preuve par contradiction. La preuve de Lean concentre un geste logique que toute la théorie des ensembles porte : on définit le sous-ensemble piégé, on exhibe la contradiction, on conclut que `f` ne peut pas être surjective. La preuve est lisible parce qu'elle *nomme* la stratégie (diagonale de Russell), pas parce qu'elle est courte. C'est exactement ce que Sheydvasser recommande à l'article 0.\n", "> *Senia Sheydvasser, The Deranged Mathematician (Substack), URL https://derangedmathematician.substack.com/p/why-do-we-care-about-proofs*\n", "> *Archivé : G:\\Mon Drive\\MyIA\\IA\\Bibliographie IA\\Pedagogie-Proves\\Sheydvasser-Surviving-Proofs\\2026-08-29_why-do-we-care-about-proofs.html*" ] @@ -755,7 +755,7 @@ "Lean-18 est le **frere direct** de Lean-19 dans l'EPIC Terry Tao 2026. Meme source, meme digestion methodologique, mais focaux differents :\n", "\n", "- **Lean-18 (Sendov)** : 1 théorème SOTA d'analyse complexe (conjecture de 1959 resolue).\n", - "- **Lean-19 (Analysis)** : 1 manuel pedagogique d'analyse undergraduate (44k LOC, 11 chapitres).\n", + "- **Lean-19 (Analysis)** : 1 manuel pedagogique d'analyse undergraduate (11 chapitres).\n", "\n", "Ces deux notebooks sont **le recto et le verso** d'un meme projet : montrer **les deux bouts** de la formalisation agentique — sprint borne sur un SOTA, ou marathon pedagogique sur un classique." ] @@ -1238,7 +1238,7 @@ "\n", "Le lac `teorth/analysis` est un **monument pedagogique** :\n", "\n", - "- 11 chapitres, 109 fichiers Lean, 44 297 LOC.\n", + "- 11 chapitres.\n", "- 2 ans d'iteration agentique par Terence Tao.\n", "- Strategie auto-contenante (chap 2-5) puis transition vers Mathlib (chap 6+).\n", "- 5 lemmes emblématiques illustres : Peano, Cantor, real_complete, cauchy_converges, IVT.\n", diff --git a/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-03-Propositions-Proofs-Lean.ipynb b/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-03-Propositions-Proofs-Lean.ipynb index a9c671b171..d17e7c77b5 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-03-Propositions-Proofs-Lean.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-03-Propositions-Proofs-Lean.ipynb @@ -105,7 +105,7 @@ "2. **Réduction de preuves**. Quand vous écrivez `#reduce` sur un `Prop`, le noyau **calcule** la preuve comme n'importe quel terme : `True.intro ▸ True` se réduit en `True`. C'est ce qui permet à `#check` de normaliser et à `#rfl` de trancher `a = a`. Lean-5 (tactiques `rfl`/`decide`/`simp`) automatise cette bêta-réduction.\n", "3. **Extractionnalité** : deux preuves du **même** `Prop` sont **considérées égales** par le noyau (`propext`), même si elles sont construites différemment. C'est pourquoi `rfl` tranche : il n'a pas besoin de comparer les arbres de syntaxe, juste de savoir qu'ils normalisent au même terme.\n", "\n", - "**Le pont vers la partie haute** : `Prop` est le véhicule de **toutes** les preuves de la série Lean. Lean-3 introduit la machinerie (intro/elim/constructeurs) ; Lean-4 ajoute les quantificateurs `∀`/`∃` ; Lean-5 fournit les tactiques qui automatisent ; Lean-12 (Huang) met tout en pratique sur une preuve de quelques centaines de lignes. Si la notion de « preuve = objet de type `Prop` » est floue, **relisez cette cellule** avant d'aborder Lean-4." + "**Le pont vers la partie haute** : `Prop` est le véhicule de **toutes** les preuves de la série Lean. Lean-3 introduit la machinerie (intro/elim/constructeurs) ; Lean-4 ajoute les quantificateurs `∀`/`∃` ; Lean-5 fournit les tactiques qui automatisent ; Lean-12 (Huang) met tout en pratique sur une preuve. Si la notion de « preuve = objet de type `Prop` » est floue, **relisez cette cellule** avant d'aborder Lean-4." ] }, { @@ -4105,13 +4105,13 @@ "\n", "### Exemples guides vs exercices\n", "\n", - "Cette cellule introduit trois **exemples résolus** (associativité de `Or`, distributivité de `And` sur `Or`, contraposée classique) qui démontrent les patterns de preuve vus dans les sections 1-9. Suivez-les **activement** :\n", + "Cette cellule introduit des **exemples résolus** (associativité de `Or`, distributivité de `And` sur `Or`, contraposée classique) qui démontrent les patterns de preuve vus dans les sections 1-9. Suivez-les **activement** :\n", "\n", "1. **Associativité de `Or`** : `Or.assoc : (p ∨ q) ∨ r ↔ p ∨ (q ∨ r)`. La preuve est purement constructive (les deux directions utilisent `cases`).\n", "2. **Distributivité de `And` sur `Or`** : `p ∧ (q ∨ r) ↔ (p ∧ q) ∨ (p ∧ r)`. La preuve utilise `cases h with | intro hp hor => ...` puis reconstruction par `Or.inl`/`Or.inr`.\n", "3. **Contraposée classique** : `(p → q) ↔ (¬q → ¬p)` (utilise `Classical.em` pour l'une des directions).\n", "\n", - "**Pourquoi trois exemples et pas un seul**. Chaque exemple illustre un **pattern** distinct :\n", + "**Pourquoi plusieurs exemples et pas un seul**. Chaque exemple illustre un **pattern** distinct :\n", "- (1) montre la **réorganisation structurelle** des `Or` (équivalent à la curryfication de Lean-2 pour `Sum`).\n", "- (2) montre la **distribution** d'un connecteur sur un autre (pattern fréquent dans la partie haute).\n", "- (3) montre l'**usage du classique** (vs constructif).\n", diff --git a/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-05-Tactics-Lean.ipynb b/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-05-Tactics-Lean.ipynb index ee81b0485c..8cc809f5d9 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-05-Tactics-Lean.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-05-Tactics-Lean.ipynb @@ -3951,7 +3951,7 @@ "source": [ "## Exemples guides : Preuves tactiques\n", "\n", - "Voici trois exemples complets illustrant les tactiques `constructor`, `rw` et `cases`.\n", + "Voici des exemples complets illustrant les tactiques `constructor`, `rw` et `cases`.\n", "\n", "Ces exemples reprennent les preuves soumises par **@thorgal27** dans le PR #2510, promues en exemples guides.\n", "Les solutions integrent : `constructor` pour les equivalences, `intro`/`cases` pour la decomposition,\n", diff --git a/scripts/notebook_tools/twin_pairs.d/app-16-crossword-csp.yaml b/scripts/notebook_tools/twin_pairs.d/app-16-crossword-csp.yaml index fe92a1d7b0..5bb6d5c129 100644 --- a/scripts/notebook_tools/twin_pairs.d/app-16-crossword-csp.yaml +++ b/scripts/notebook_tools/twin_pairs.d/app-16-crossword-csp.yaml @@ -6,6 +6,7 @@ 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." known_differences: + - 'Re-baseline 2026-09-30 (myia-po-2025:CoursIA, #18523 relais prose-counts #17636) : edition unilaterale cote Python seul, markdown uniquement -- la prose d''interpretation du tableau AC-3 derivait d''un compteur d''artefact (24 lignes, une par slot) remplace par un renvoi qualitatif (une ligne par slot) ; les grandeurs observables (tailles de domaines, espace combinatoire) restent portees par les sorties committees. Aucune cellule code, sortie ou execution_count touchee (batterie byte-surgical). Parite semantique inchanges ; re-baseline du python_sha.' - "Socle pedagogique commun : Generateur de mots croises (CSP : slots, intersections, dictionnaire) 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 = OR-Tools CP-SAT (cp_model + AddElement) + dataclass + viz grille ; C# = Tranche 1 from-scratch BCL pure (System.Linq/Text, 0 NuGet) PRESERVEE + Tranche 2 Google.OrTools CP-SAT (cp_model + AddElement), miroir du twin Python (#10382). Parite native-both." - "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 (Tranche 1 PRESERVEE) + Tranche 2 binding NuGet Google.OrTools CP-SAT (le meme moteur que le twin Python, #10382), presentation compacte. Meme socle theorique, leviers de demonstration differents." diff --git a/scripts/notebook_tools/twin_pairs.d/app-16-crossword-csp/0013-2026-09-30-myia-po-2025-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/app-16-crossword-csp/0013-2026-09-30-myia-po-2025-CoursIA.yaml new file mode 100644 index 0000000000..9b5b56563f --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/app-16-crossword-csp/0013-2026-09-30-myia-po-2025-CoursIA.yaml @@ -0,0 +1,6 @@ +date: '2026-09-30' +by: myia-po-2025:CoursIA +python_sha: 13603f5f5ede4a3ff59f2f291b4ee4d66fa8aa38 +csharp_sha: 90779e7a0699d30f7107364803d2a7bd2dc96327 +content_python_sha: 91d92d0af48b664d64616399361f37640b2c56d45c026bc75ec44bdaee882cca +content_csharp_sha: b23c83c5af98d568cfaf4290f8c2ed439454a6ca4bcb1b92398593284c96ce89 diff --git a/scripts/notebook_tools/twin_pairs.d/app-5-timetabling/0006-2026-09-30-myia-po-2025-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/app-5-timetabling/0006-2026-09-30-myia-po-2025-CoursIA.yaml new file mode 100644 index 0000000000..430048d2e3 --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/app-5-timetabling/0006-2026-09-30-myia-po-2025-CoursIA.yaml @@ -0,0 +1,6 @@ +date: '2026-09-30' +by: myia-po-2025:CoursIA +python_sha: 2a9354612efaee7b30c1a9eca96d55b70d1b1e20 +csharp_sha: dfb33334f88bc104a217d17c05c7b23cd3c1e24b +content_python_sha: be0cc1150a76baa9dea4c7345e07acb1b2a8e710916bce5e09f507062511d03f +content_csharp_sha: a6af73b2bfeb94f14402adc40f5c65ad4a81eb1c0b98644c95bb40cb39677791 diff --git a/scripts/notebook_tools/twin_pairs.d/app-8-minizinc/0011-2026-09-30-myia-po-2025-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/app-8-minizinc/0011-2026-09-30-myia-po-2025-CoursIA.yaml new file mode 100644 index 0000000000..8fa0a8d4de --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/app-8-minizinc/0011-2026-09-30-myia-po-2025-CoursIA.yaml @@ -0,0 +1,6 @@ +date: '2026-09-30' +by: myia-po-2025:CoursIA +python_sha: 1559377b71e90e409518459ebd5c4947b952beb8 +csharp_sha: 6ed054dedfbd325ff1809029949bfc5e45a316e8 +content_python_sha: a559672f382930e08efc23bd07996e8d87e1d4e58ef1896d27cb5adb5339976a +content_csharp_sha: 622d3d9d6f440a59c2a3eb243de51c88b1186bbf092f972dd5f31cbf92f0aec9