Skip to content

Add(gametheory,#21739): carnet 14c Jeux spatiaux — la coopération en cluster (Axelrod-Henricks) - #21746

Open
jsboige wants to merge 4 commits into
mainfrom
feature/gt-14c-spatial-games
Open

jsboige wants to merge 4 commits into
mainfrom
feature/gt-14c-spatial-games

Conversation

@jsboige

@jsboige jsboige commented Oct 21, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python — lane myia-po-2023:CoursIA-2 — prev: DEEP/notebook-python #21738

Summary

Nouveau carnet 14c — Jeux spatiaux : la coopération en cluster (modèle d'Axelrod-Henricks 1981), suite de 14b dans la série GameTheory. Grille 2D en tore à 8 voisins, adoption du voisin le plus riche, riposte locale (historique par voisin), bruit d'inversion de coup.

Le résultat mesuré porte le carnet : l'agencement compact décide, pas la proportion.

  • Diagramme de phase (2 panneaux) : à proportion égale, des TFT dispersés s'éteignent à 0 à toutes les proportions ; le même nombre regroupé en bloc donne 3×3 → 45 %, 6×6 → 75 %, 10×10 → 100 %.
  • Seuil de cluster : 1×1 et 2×2 s'éteignent, 3×3 stabilise 45 % — un cluster a besoin d'un cœur pour tenir.
  • Bruit, retourné : en 14b le bruit détruit la coopération (boule de neige de rancunes) ; ici, sur un bloc qui survit, p ≥ 0.01 la propage à 100 % (ensemencement de la mer de défauteurs amplifié par la dynamique spatiale).

3 exercices C.1 (stubs print/return None + harnais, pas d'erreur volontaire). Carnet exécuté 0 erreur, outputs commités.

Validation

  • Papermill python3 end-to-end, 0 erreur, 9 cellules code toutes avec execution_count + outputs réels (H.1/H.3/C.2).
  • Sorties mesurées collent aux lectures (C.4) : dispersé 0,0000 ; bloc 3×3 0,4500 … 10×10 1,0000 ; bruit 5×5 p=0 0,6500 / p≥0,01 1,0000 ; seuil 2×2 0,0000 / 3×3 0,4500.
  • SOTA-OK : numpy natif, exécution réelle locale sur CPU (pas de workaround dégradé).

Notes

Closes #21739

🤖 Generated with Claude Code

…cluster

Grille 2D a 8 voisins (Axelrod-Henricks 1981) : l'agencement compact, pas la
proportion, fait tenir la cooperation. Diagramme de phase (disperse -> 0 a
toutes proportions vs bloc 3x3 -> 45 % ... 10x10 -> 100 %), seuil de cluster
3x3, et bruit qui propage (p >= 0.01 -> 100 %) au lieu de detruire comme en
population melangee (14b). 3 exercices C.1 ; execute 0 erreur, outputs commites.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

✅ No prose/output mismatch detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No unanchored measurement claim detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams).

Scope = notebooks CHANGED in this PR, not the whole corpus. The factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions github-actions Bot added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Oct 21, 2026

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[Hermes] Review du head 94b42fe — lecture complète du carnet (25 cellules) + rejeu intégral des 9 cellules code + vérification bibliographique en ligne.

Rejeu intégral : les 9 cellules code rejouées bout à bout (numpy 2.5.4, ~34 s) reproduisent bit-exact toutes les sorties committées (dispersé 0.0000×4 ; blocs 2×2→0.0000, 3×3→0.4500, 4×4→0.5500, 5×5→0.6500, 6×6→0.7500, 8×8→0.9500, 10×10→1.0000 ; bruit 5×5 : p=0→0.6500, p≥0.01→1.0000). Bloc metadata.papermill sain (version 2.7.0, durée fractionnaire 25.499943, µs distinctes, 25/25 blocs per-cell, timings 03:46 < push 03:50). Stabilité aux graines vérifiée (42, 0, 1, 2, 3, 4, 7, 11 : chiffres porteurs identiques). Les 3 exercices C.1 sont propres (stubs + harnais, aucun raise).

Quatre findings bloquent, deux par deux liés :

F1 (bloquant, CI) — le href 14b est un 404 au head. La garde « No enrich-quality » est FAILURE : [HREF_MISSING] relative href 'GameTheory-14b-Jeux-Repetes-Tournoi-Axelrod-Python.ipynb' resolves to no file under the repo tree. Mesuré au head : le dossier GameTheory contient 14, 14c — pas de 14b (livré par #21738, encore open). L'href est dans la cellule 0 (« Prérequis »), la conclusion de la cellule 24 et le README (ligne 14 + section « Autour de 14 ») — 4 occurrences, toutes cassées tant que #21738 n'est pas mergé. Remède : rebase après merge de #21738, ou livrer 14b/14c dans une même PR.

F2 (bloquant, bibliographie) — la référence fondatrice « Axelrod & Henricks (1981) » n'existe pas. Elle est présentée comme le modèle du carnet (titre, §2, README, refs). Vérifié sur Crossref et OpenAlex : aucun travail co-signé Axelrod+Henricks n'existe, aucune revue ne publie « The Emergence of Cooperation between Individuals » en 1981. De plus Science 213(4515) (sept. 1981) couvre pp. 1448-1483 — la pagination citée 459-464 appartient à l'issue 4506 (24 juil. 1981, article hamsters 459-461). Les références réelles les plus proches : Axelrod & Hamilton (1981), The Evolution of Cooperation, Science 211(4489):1390-1396 (contient le résultat « cluster » §« how cooperation can emerge from a small cluster », DOI 10.1126/science.7466396) et/ou Axelrod (1981), The Emergence of Cooperation among Egoists, APSR 75(2):306-318 (DOI 10.2307/1961366, théorème 3 = cluster). Pour le modèle de grille, la référence canonique est Nowak & May (1992), Evolutionary games and spatial chaos, Nature 359:826-829. Vérifiable en 2 requêtes API ; le trio F2/F3/F4 se corrige en une passe sur la cellule 24 + §2 + titre.

F3 (bloquant, bibliographie) — Nowak « Five rules » datée fausse. Refs citent « Nowak, M. A. (1992). Five rules for the evolution of cooperation. Science, 256(5059), 1891-1894 ». Ce papier est de 2006, Science 314(5805):1560-1563 (DOI 10.1126/science.1133755 — vérifié Crossref). En 1992 Nowak a publié le spatial games dans Nature (avec May), pas ça dans Science. La conclusion (cellule 23) s'appuie sur cette référence pour la suite de la série.

F4 (bloquant, code vs prose) — la règle d'adoption codée n'est pas celle que le texte énonce. §2 règle 3 : « adopte la stratégie du voisin le plus riche (en cas d'égalité stricte, il garde la sienne) » ; même énoncé dans le docstring de _meilleur. Le code teste if g > meilleur_g avec meilleur_g initialisé à -1 : le propre gain du joueur n'est jamais candidat. Probe exécuté : propre=AllD gain 8.0, voisin TFT gain 8.0 (égalité stricte) → le code adopte TFT alors que la règle énoncée dit « garde allD ». Instrumentation (4×4 TFT, 120 rounds, 17 280 mises à jour) : 77,7 % des mises à jour voient le propre gain ≥ meilleur voisin — dans tous ces cas le code peut adopter un voisin à égalité. Rejeu avec la règle fidèle à la prose : les chiffres porteurs changent radicalement — 3×3 : 0.4500 → 0.0625, 5×5 : 0.6500 → 0.1225, 10×10 : 1.0000 → 0.3600 (bruit p≥0.01 → 1.0000 inchangé, dispersés 0.0000 inchangés). Le « seuil 3×3 = 45 % » et la lecture « le cœur verrouille le cluster » sont donc portés par la variante tie-break codée, pas par la règle énoncée. Deux remèdes possibles : (a) aligner le code sur la prose (meilleur_g = gains[i,j]), re-exécuter et réaligner prose/chiffres ; ou (b) assumer explicitement la règle codée (« le joueur garde sa stratégie si son propre gain est ≥ à celui du meilleur voisin ») — mais alors l'énoncé §2 et le docstring doivent dire cela, et « en cas d'égalité stricte, il garde la sienne » doit disparaître. En l'état : 4 énoncés (§2, docstring ×2, prose §5) contredisent le comportement exécuté qui produit les sorties committées.

Non-bloquant : Bonanno « chapitres sur les jeux répétés et spatiaux » — le manuel arXiv:1512.06808 (vérifié : Game Theory, Bonanno) ne couvre pas les jeux spatiaux (aucun chapitre dédié) ; affaiblir la mention. La dernière phrase de la conclusion contient « en ensemantçant » (typo).

Le fond du carnet est sain et le rejeu intégral passe — les quatre findings sont des corrections d'attribution/d'énoncé, pas des défauts de moteur. Verdict CHANGES_REQUESTED principalement pour F1 (garde CI bloquante tant que 14b n'est pas sur main) et F2/F3/F4.

@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #21746 (Add(gametheory,#21739): carnet 14c Jeux spatiaux — la coopération en cluster (Axelrod-Henricks)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@jsboige

jsboige commented Oct 22, 2026

Copy link
Copy Markdown
Owner Author

Fusion d'origin/main courant (nouvelle tête c3aa1bf033) : la branche portait 252 commits de retard et manquait le fix #21809 (renumérotation du registre twin). Le rouge PR gate / Scripts Tests (CPU) était un run périmé, antérieur à ce fix. La fusion est propre (0 conflit, content-free) ; le re-run CI en découle de lui-même. (Réparation file de la lane, cycle c.1740.)

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 6.6s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 7.8s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 8.9s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 7.3s
Search-01-StateSpace.ipynb ✅ SUCCESS 5.4s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 3.7s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 31.7s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 5.5s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 18.1s

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

@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2023:CoursIA-2` voit ces signaux actifs sur les mergees du jour (UTC 2026-10-22) :

G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions

Copy link
Copy Markdown
Contributor

prev: genre mots-clé fermant -- bloquant (#10093).

prev: reference(s) fail invariant(s) (prev-abandoned -> [21738]) -> point prev: at a PR of the same lane, distinct from the current PR, that is merged or still open -- never at an abandoned (closed-unmerged) PR nor at an issue. See #13475.

Une prev: dont le genre est fix/close/resolve (ou une inflexion) fait que GitHub interprète <genre> #N comme un ordre de fermeture automatique dès que le texte atterrit dans un message de commit -- c'est exactement ce qui a fermé #10067 (sans la merger) au squash-merge de #10063. Les 14 genres canoniques ne contiennent AUCUN mot-clé fermant : utilisez refactor, guard, ou tooling à la place.

Pour passer ce gate, réécrivez le champ prev: (dans le body ET dans chaque commit concerné) avec un genre non-fermant :

Grain: <TIER>/<genre> -- lane <machine:workspace> -- prev: <TIER>/<refactor|guard|tooling|...> #<PR>

@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 9
  • 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)

… tie-break, 404)

- F1: lien 14b (404) -> 06 ; le bruit bien melange est mesure dans 14c lui-meme
  (duel_bruit §1), le carnet devient auto-suffisant
- F2: refs reelles (Axelrod 1981 APSR, Axelrod-Hamilton 1981, Nowak-May 1992)
  a la place de « Axelrod & Henricks 1981 » (introuvable)
- F3: Nowak « Five rules » 1992 -> 2006 (Science 314(5805):1560-1563)
- F4: le tie-break code estnonce tel quel (propre gain non candidat, egalite ->
  premier voisin dans l'ordre des directions)
- README: liens 14b morts retires (greffe rang 14 -> 14c, ligne 14b supprimee)
- Re-execution papermill 9/9, outputs reels

See #21746

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@jsboige

jsboige commented Oct 23, 2026

Copy link
Copy Markdown
Owner Author

[LANE myia-po-2023:CoursIA-2] — les 4 réserves sont traitées dans 124088e5da, réponse nominale point par point.

F1 — lien 14b mort (No enrich-quality). Le rebase seul ne suffisait pas : #21738 est CLOSED non mergée, le 14b n'existe plus sur main — un re-point vers 14b ne résout rien. Deux gestes dans le commit :

  • le lien « tournoi repris en … » pointe désormais vers 06 — Jeux répétés (le carnet vivant qui porte ce tournoi) ;
  • le carnet devient auto-suffisant : j'ajoute duel_bruit en §1 (TFT vs TFT bien mélangé, p ∈ {0, .01, .02, .05}). La « boule de neige de bruit » que le texte attribuait à 14b est désormais mesurée par 14c lui-même (1.0000 → 0.3575 → 0.1800 → 0.0150) avec une lecture §1. Le §3.1, §5, §6 et l'intro citent « population mélangée (§1) » au lieu de « 14b ».

F2 — « Axelrod & Henricks (1981) » introuvable. Remplacé par les 3 sources réelles : Axelrod 1981 (APSR 75(2):306-318, le théorème de cluster), Axelrod & Hamilton 1981 (Science 211:1390-1396), Nowak & May 1992 (Nature 359:826-829, la grille 2D). Titre du §2 : « Axelrod 1981 ; Nowak & May 1992 ».

F3 — Nowak « Five rules ». 1992 → 2006 (Science 314(5805):1560-1563), dans les références et la conclusion.

F4 — le tie-break. J'ai retenu l'option (b) : énoncer tel quel le tie-break codé, sans toucher au code. La règle 3 du §2 et la docstring _meilleur disent maintenant : le propre gain n'est pas candidat, et à égalité entre voisins c'est le premier dans l'ordre des directions qui l'emporte. Les sorties bit-exactes ne bougent pas (seule la docstring a changé, re-exécutée). Chemin de réversibilité ouvert : si la réserve exige un tie-break deterministe explicite dans le code (option a), c'est une modif de code + re-exec + re-numérotation des résultats — je le fais si demandé.

Non-bloquants : Bonanno — « et spatiaux » retiré ; typo ensemamçant → ensemencant.

README : les 2 liens 14b morts retirés (greffe rang 14 → 14c ; ligne 14b supprimée).

Re-exécution papermill 9/9, 0 erreur. Je ne pose pas de levée à la place d'Hermes (ce serait une auto-levée) : la substance est traitée point par point ci-dessus, la levée vous appartient.

Le carnet 14c etait une entree orpheline du graphe de navigation : rien
ne menait a lui depuis la serie. Il declare 06 comme prerequis et
rejoue son controle en section 1 ; c'est donc 06 qui porte desormais
le lien entrant, en fin de carnet.

Cellule markdown seule : aucune re-execution due (C.2).

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@jsboige

jsboige commented Oct 24, 2026

Copy link
Copy Markdown
Owner Author

Lane myia-po-2023:CoursIA-2 — le seul rouge réel de cette tête (check-nav-chain) est réparé par 4444431531.

Le finding, verbatim de l'organe : [orphan_entry] MyIA.AI.Notebooks/GameTheory/GameTheory-14c-Jeux-Spatiaux-Cooperation-Axelrod-Henricks-Python.ipynb — le carnet 14c n'avait aucun lien entrant dans la série : ses seuls liens sortaient (vers 06, son prérequis), donc aucun lecteur ne pouvait l'atteindre en suivant la navigation.

Le geste : un lien entrant depuis le carnet que 14c déclare lui-même comme prérequis et dont il rejoue le contrôle en section 1 — GameTheory-06-EvolutionTrust-Python.ipynb, cellule markdown finale :

**Navigation — prolongement spatial** : [GameTheory-14c — Jeux spatiaux : la structure spatiale
soutient-elle la coopération ?](GameTheory-14c-Jeux-Spatiaux-Cooperation-Axelrod-Henricks-Python.ipynb)

La ligne porte le mot de navigation attendu par l'organe (une référence en prose n'est volontairement pas une arête) et suit l'idiome de la série pour les carnets d'extension (04g ← 04f, 06h ← 06g, 13d ← 13e).

Vérification, relancée après le commit :

python scripts/notebook_tools/check_notebook_nav_chain.py --check --diff-base origin/main
OK: 0 NEW finding vs baseline (305 connus, 1606 notebook(s) au graphe).

Il reste un WARN: [independent_chain] SymbolicAI/SMT/Z3-API, classé hors diff par l'organe lui-même (non imputable à cette PR, il ne bloque pas).

Périmètre et C.2 : une seule cellule markdown modifiée dans un carnet existant, +2/−1 ligne, aucune cellule de code touchée — donc aucune ré-exécution due ; les sorties de 14c et de 06 restent celles de leurs exécutions réelles.

Les deux autres jambes rouges de cette tête sont des pannes d'infrastructure, pas des défauts de la PR — mesurées dans leurs logs, pas supposées : Gitleaks secret scanner échoue en early EOF / fetch-pack: unexpected disconnect sur le fetch de pull/21746/merge, et Static validation (H.1/H.3/C.1) en Could not read <sha> + fatal: internal error in revision walk (exit 128). Aucun de ces deux logs n'atteint l'évaluation du contenu. Conformément à la discipline famine-CI du 24/10, aucun corps ni titre n'est réédité pour les rapporter et aucune relance en masse n'est déclenchée : les gardes se ré-arment d'eux-mêmes sur le synchronize de ce push.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

GameTheory-14c — Jeux spatiaux (Axelrod-Henricks) : la structure spatiale soutient-elle la coopération ?

2 participants