Skip to content

feat(notebooks,#10479): GameTheory-05 C# twin — 6 lectures ancrées aux sorties (890→1217) - #14043

Merged
myia-ai-01 merged 2 commits into
mainfrom
feature/gt05-density-enrichment
Sep 1, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
feature/gt05-density-enrichment

Conversation

@jsboige

@jsboige jsboige commented Sep 1, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-dotnet — lane myia-po-2027:CoursIA — prev: MED/notebook-dotnet #14037 (substance distincte : GameTheory-05 équilibre de jeu à somme nulle, et non Search/LocalSearch)

Sujet

GameTheory-05-ZeroSum-Minimax-Csharp.ipynb sortait à 890 c/cell (seuil 1200). Ajout de 6 cellules markdown « Lecture du résultat », chacune ancrée aux valeurs d'équilibre committées du notebook. Les intros de section pré-énoncent les concepts (théorème minimax, point-selle, dualité LP) mais ne lisent pas les chiffres calculés — c'est l'écart que ces insertions comblent :

# Position (après) Contenu ancré (valeurs committées)
1 cell. 4 (MP + RPS maximin/minimax) maximin(Row)=-1,0, minimax(Col)=+1,0, gap 2,0 ; même verdict RPS (symétrie cyclique) → pas de point-selle en pur
2 cell. 6 (jeu 3×3) maximin=5 (R2), minimax=5 (C2) → point-selle, valeur du jeu 5, équilibre (R2,C2) ; R2 faiblement dominante (6≥1,5≥3,7≥2), C2 plafonne Row
3 cell. 14 (cross-validation 3 moteurs) v=0 (MP, RPS) et v=0,71428571 (asym) identiques au bruit machine : |v1−v2|≈2,2e-16, |v2−v3|≈1,3e-12 ; 3 solveurs indépendants (simplexe, GLOP, Gambit) convergent → verdict SOTA-OK ; sanity check σ'Bτ=0
4 cell. 16 (stratégie mixte MP + RPS) σ*=τ*=[0,5;0,5] (MP) et [0,333;0,333;0,333] (RPS), valeur 0 → distribution uniforme du jeu symétrique (matrice antisymétrique)
5 cell. 18 (jeu asymétrique + balayage) v=0,7143=5/7, σ=τ=[0,5714;0,4286] ; le balayage rend min(pire)=min(3p−1, 3−4p), pic p=4/7≈0,5714 (croisement), d'où v=5/7 ; le pas de 0,1 n'échantillonne que des points (0,60), la valeur exacte vient du croisement analytique
6 cell. 20 (dualité forte) v=w (0 pour RPS, 0,714286 pour asym) → dualité forte = théorème minimax en LP ; complementary slackness : chaque gain de Row ≥ v est vrai (0 / 0,7143), Row neutralise simultanément toutes les actions de Col

Validation

  • Code byte-identique : 15/15 cellules code inchangées (source + outputs + execution_count + metadata comparés en octets contre origin/main, via git show capturé en bytes — pas text=True, qui décode cp1252 et produit un faux mojibake é→é sur les chaînes accentuées des cellules 6/7). Enrichissement markdown-only, exempt de re-exécution (C.2/C.3 exception modifs uniquement markdown) ; le pre-commit H.3 est passé (les cellules code conservent execution_count + outputs).
  • Densité : pedagogy_density.py 890 → 1217 c/cell (seuil 1200 atteint) ; Judged vs floor: 0 below ; 32 → 38 cellules ; 6 insertions, 0 deletions.
  • Guards verts : detect_markdown_rendering.py 0 violation · detect_code_in_markdown_cells.py 0 nouveau vs baseline (2) · scan_cell_ordering.py 0 finding · check_interp_positioning.py 0 finding.
  • consecutive-code-cells (PRÉEXISTANT) : max=2 runs=2 — mesuré identique sur origin/main (fichier témoin /tmp/gt05_base.ipynb), donc non causé par cette PR (les insertions n'ajoutent que des cellules markdown entre cellules code, elles ne peuvent pas créer de run). Relevé, non traité (hors scope — règle 3 : signaler, pas toucher).
  • Twin parity : paire GameTheory-5 ZeroSum-Minimax (native-both), enrichissement markdown-only côté C# uniquement + rebaseline --update --pair "GameTheory-5 ZeroSum-Minimax" --by "myia-po-2027:CoursIA" (après commit, attestation lue sur les blobs HEAD) et known_difference documenté. Justification du drift unilatéral : le jumeau Python GameTheory-05-ZeroSum-Minimax.ipynb porte déjà les interprétations équivalentes (cellules 6/10/14/20 — absence de point-selle, résolution LP, visualisation du théorème, stratégie de Col Blotto) ; cette PR aligne le côté C# sur la couverture déjà présente chez son jumeau — elle résorbe un écart, n'en crée pas. Parité lib-vs-lib native-both non affectée (cellules de calcul Tranche 1/2/3 inchangées) ; la paire sort à OK (SHA rebaseliné, 6 known_differences).
  • Choix du grain : picker sans candidat CONTENU non-VOID au cycle (tout couvert par PRs ouvertes / META) ; scan famille à densité < seuil : les notebooks Search/Sudoku/IIT/GTS sous-1200 sont déjà interprétés (à dominante « cellules code longues »), enrichir y créerait de la redondance → pivot vers GameTheory-05, seul gap réellement additif et non-redondant.

…x sorties (890→1217)

Densité d'interprétation de GameTheory-05-ZeroSum-Minimax-Csharp.ipynb : ajout de
6 cellules markdown « Lecture du résultat » qui lisent les valeurs committées
(maximin/minimax en pur avec gap 2,0 ; point-selle valeur 5 en (R2,C2) ;
cross-validation 3 moteurs à 1e-12 ; stratégie mixte uniforme [0,5]/[1/3] ;
valeur 5/7 et croisement p=4/7 du balayage ; dualité forte v=w). Enrichissement
markdown-only : 15/15 cellules code byte-identiques à origin/main. Le twin Python
porte déjà ces interprétations (cellules 6/10/14/20) — cette PR aligne le côté
C# sur la même couverture, sans duplication.

See #10479 (densité), #8057 (twin parity).
…ichissement C#

L'enrichissement markdown-only du côté C# (#10479) fait dériver le blob SHA de la
paire ; --update rebaseline le registre et un known_difference documente le drift
unilatéral justifié (le jumeau Python porte déjà les interprétations équivalentes).

See #8057, #10479.
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

⚠️ Detector abstained (merge-base introuvable, shallow fetch or unanchored branch).

c.415 (#11873): scope = notebooks CHANGED in this PR, not the whole corpus.
See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 pathologie.

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Bash Syntax Advisory — shebang / executable-bit warnings

See the Shebang + dry-run advisory job log for the per-file ::warning:: lines. Non-blocking.

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 5.4s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.9s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.9s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.6s
Search-1-StateSpace.ipynb ✅ SUCCESS 3.7s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.6s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 26.3s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.3s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 15
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Hermes] — #14043 feat(notebooks,#10479): GameTheory-05 C# twin — 6 lectures ancrées aux sorties (890→1217)

Verdict: COMMENT (LGTM) — notebook réellement exécuté, valeurs ancrées cohérentes.

Vérification notebook (fichier au head SHA ba6f08c) :

  • Exécution réelle : 15 cellules code, execution_count = 1..15, zéro null → le notebook a été genuinely exécuté, pas de outputs statiques.
  • Valeurs ancrées vérifiées dans les outputs : le jeu asymétrique 2×2 (cell. 8) sort v = 0.71428571 (= 5/7, la claim du body) ; Matching Pennies / Pierre-Feuille-Ciseaux sortent v = 0.00000000. Les valeurs annoncées dans les 6 cellules « Lecture » s'appuient sur des chiffres réellement présents dans les outputs.
  • Comptage cellules : 38 total (23 markdown + 15 code), 6 cellules « Lecture » présentes → cohérent avec « 32→38 cellules, 6 insertions ».
  • Markdown-only : le diff ne montre aucune re-exécution (pas de "execution_count" ajoutés), uniquement des cellules markdown. La claim « code byte-identique (15/15 cellules inchangées) » est cohérente avec le diff observé.
  • Pair YAML gametheory-5-zerosum-minimax.yaml : parité native-both, bridge_verdict: SOTA-OK, historique d'audits SOTA propriétés. La justification du drift unilatéral (le jumeau Python porte déjà les interprétations) est bien argumentée.

Seul point résiduel (déjà signalé par l'auteur) : consecutive-code-cells max=2 est préexistant (mesuré identique sur origin/main), non causé par cette PR — correctement relevé, non traité (hors scope, règle « signaler, pas toucher »). Aucun credential dans le diff (notebook + YAML, enrichissement markdown).

Aucune préoccupation actionnable. La PR ajoute une vraie valeur pédagogique ancrée aux chiffres calculés, sans altérer le code ni les outputs.

@myia-ai-01
myia-ai-01 merged commit 170dfc7 into main Sep 1, 2026
65 checks passed
@jsboige
jsboige deleted the feature/gt05-density-enrichment branch September 2, 2026 13:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants