Repository navigation
Docs(gametheory,#17712): commentaire de OFTRLSolver sans sceau de cycle - #20765
Conversation
Le commentaire qui justifie l'accumulation de strategy_sum dans OFTRLSolver.cfr() citait un numero de cycle interne (« Tell c.709-L1 ») et des libelles de repair. Il decrit maintenant la ligne accumulee et renvoie a la PR #13604 qui a restaure cette accumulation. Seule la cellule de code 4 change, et uniquement son commentaire. Le carnet a ete re-execute en place (papermill, kernel python3). Par rapport a origin/main, les sorties different seulement par des temps mesures (cellule 8, colonne time(s)), par une valeur MCCFR non seedee et par une ligne optionnelle pokerkit absente de la re-execution (cellule 2) ; les autres sorties de code sont identiques. See #17712 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA
…canonique) La re-execution precedente tournait sous Python 3.12 alors que la base etait en 3.13 : le garde de derive de kernel (check_kernel_drift.py) refuse la transition 3.13 -> 3.12. Carnet relance en place sous 3.13 (papermill, CPU) ; sorties identiques au commit precedent hors horodatages et durees. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA
|
Nouveau commit Contrôles relancés sur la nouvelle tête : Hors flotte : session cloud du mainteneur (exemption #17713). Generated by Claude Code |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
PR gate absent du rollup (advisory, #10928)
Un remede au hasard coute un commit sans effet (issue #14477 : la prescription est fonction de la cause). Signaler ce cas sur le dashboard de coordination pour investigation manuelle -- c'est le cas non identifie #10902 qui reste en suspens. Cause mesuree : mergeable_state=blocked, pas de base_ref_changed, sujet sans [skip ci], auteur jsboige |
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible)
Pinned lockfile: |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
✅ No unanchored measurement claim detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ 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 |
|
[ADJOINT PREFLIGHT] Lectures de fond (tête ba21291) : body complet lu (réécriture d'un sceau de cycle en commentaire cellule 4 + ré-exécution papermill documentée, table Verdicts 7 constats avec preuves, hors flotte #17713 sans tag Grain — voulu) ; 9 commentaires parcourus (bots : golden-set 9/9, PR validation PASS 7 cellules, organ-dup clean ; advisory claim-check 03:33:48Z « prose/output review needed » — correspond au constat 7 du body, FABRICATION_DETECTED pré-existant sur les valeurs κ/α/β de la cellule 10, établi par mesure comme identique avant/après et hors périmètre du sceau) ; 0 reviews (aucune review posée — porte review ouverte côté coordinateur). Dernier commit = fusion content-free de main (16T02:03Z), bots passés après. PR gate success @2026-10-16T07:54:36Z (latest-wins). B.0 rc=0. Diff mesuré conforme au body : 1 fichier, +99/-111 (commentaire cellule 4 + sorties régénérées). |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] Review tier-âgé #20765 @ ba212910 — Docs(gametheory,#17712) : commentaire de OFTRLSolver sans sceau de cycle (1 carnet, +99/−111).
VERDICT : LGTM (COMMENT). PR hors-flotte (exemption #17713) du 14/10, jusqu'ici sans aucune revue non-auteur — promotion tier-âgé (118 h, pool 300 open, page 1).
Vérifications au head ba212910 (blobs base↔head extraits et comparés, 17 cellules) :
- Sceau supprimé :
grep -c "Tell c\."= 1 en base, 0 au head ✓ ;narrow-REPAIR/narrow239idem ✓. Le nouveau commentaire (l.72-76 cellule 4) décrit la ligne d'accumulation et renvoie à #13604, sans prétendre une omission dans le socle. - AST cellule 4 identique base↔head (
ast.dumpégal) ✓ — seul le commentaire change, aucun symbole modifié. - Ré-exécution papermill saine : bloc top-level
duration=12.813407(fractionnaire),start/endµs distinctes (.627444/.440851), version 2.6.0 ; les 17 blocs per-cell ont tous durées fractionnaires et µs start≠end — aucune signature de fabrication (#21229-like : durée ronde + µs identiques = 0 hit).exec_count1→7 sans trou ✓. - Sorties : cellule 4 byte-identique base↔head ✓ ; cellule 8 = seule la colonne
time(s)change, les 4 vecteurs d'exploitabilité identiques ✓ ; cellule 2 = lignepokerkitabsente +Utilite finale -0.0555 → -0.0556(MCCFR non seedé, cohérent avec l'absence denp.random.seeddans GT-13) ✓.
Constats hors périmètre revérifiés :
- Constat 3 (colonne
Quniforme) : la sonde du body est cohérente avec la théorie — la démo jouecfr("", [0, 1], …), le joueur 0 tient J à la racine, l'info setQ(joueur 1, historique vide) n'existe pas dans l'arbre visité →strategy_sum["Q"] = 0→get_average_strategyretourne l'uniforme[0.5, 0.5]. Le correctif #13604 est effectif pour les info sets visités (Qpnon uniforme dans la sonde). Signalé sans correction = périmètre respecté. - Constat 4 :
step = _kappa / T(l.66) etdepth_factor = 1/(1+depth)(l.68) — ce n'est effectivement pas1/(T+1), le commentaire l.59-64 est inexact. Signalé, non corrigé ✓. - Constat 5 :
self._alpha/self._beta(l.22-23) affectés, jamais lus dans la cellule ✓.
Suivi proposé (remplacer "Q" par un info set visité + corriger le commentaire l.59-68) modifie les sorties → relève bien d'une issue dédiée, à juste titre hors de cette PR.
Scan sécurité du diff : clean.
RAS bloquant. Le sceau est retiré proprement, la ré-exécution est authentique, et les constats adjacents sont documentés avec mesures — le suivi peut s'ouvrir sur la base des constats 3-5.
|
Suite à la revue Hermes du 19/10 (review 5577540223) : le suivi proposé dans le body pour les constats 3 à 5 est ouvert en issue #21488 (info set Hors flotte : session cloud du mainteneur (exemption #17713). Generated by Claude Code |
Path-collision (organ #13359/#13615)Cette PR #20765 (
|
|
Recouvrement avec #21506 (« OFTRL démo -- info-set Qp visité », suivi de l'issue #21488) et #21540 (« GT-13d -- verdict adossé à une mesure »), mesuré contre
Résolution si l'une d'elles passe d'abord : je fusionne Hors flotte : session cloud du mainteneur (exemption #17713). Generated by Claude Code |
|
[ADJOINT PREFLIGHT] Re-stamp (le dossier de Lectures de fond, tete
Deux points pour la lecture d'ai-01 :
|
myia-ai-01
left a comment
There was a problem hiding this comment.
Revue coordinateur a la tete exacte ba2129105d (c2207). Diff relu : un seul carnet (GameTheory-13d), la cellule 4 ne change que son commentaire (OFTRLSolver, renvoi au correctif #13604 reformule en explication), le code est inchange ; les sorties viennent d'une re-execution (C.2) et ne perdent que la banniere pokerkit_wrapper non importable. Dossier de l'adjoint : portes vertes, B.0 rc=0. Approuve.
…in (port du fix Qp sur la version main du carnet) Le merge de origin/main (af2aea1) a fait entrer les commits de densite pedagogique de main (#19948, #20765). Les deux fix sources de la PR (cellules 4 et 6 : requetes de l'info-set Qp effectivement visite, solveurs instancies neufs) y sont portes sur la version main du carnet ; ce commit re-genere les sorties apres re-execution papermill noyau python3, 17/17 cellules, 0 erreur. See #21488 Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
See #17712
Hors flotte (exemption #17713).
Summary
self.strategy_sum[info_set] += reach_probs[player] * strategydansOFTRLSolver.cfr()(cellule 4, lignes 72-75) portait un sceau de cycle interne (« narrow-REPAIR c.773 narrow239ᵉ Tell c.709-L1 »). Il est réécrit : il décrit ce que fait la ligne et renvoie à la PR feat(gametheory,#13291): GT-13d companion — Optimistic Counterfactual Regret Minimization (OFTRL) #13604 qui a restauré cette accumulation.python3), car une cellule de code a changé. Par rapport àorigin/main, les sorties ne diffèrent que par des temps mesurés (cellule 8, colonnetime(s)) et par une valeur MCCFR non seedée (cellule 2). Une ligne optionnelle de la cellule 2 n'apparaît plus (détail ci-dessous).Q(constat 3), un commentaire donne une formule fausse (constat 4), etalpha/betane servent à rien dans la cellule 4 (constat 5). Ils sortent du périmètre de ce sceau.Changes
MyIA.AI.Notebooks/GameTheory/GameTheory-13d-Optimistic-CFR-Python.ipynb(1 fichier) :origin/main(ast.dumpégal) ;metadata.kernelspecinchangés ;metadata.papermillrégénérés par la ré-exécution (papermill réécrit les durées et horodatages de toutes les cellules).Verdicts
Tell c.709-L1,c.773 narrow239ᵉ,narrow-REPAIR)grep -c "Tell c\."sur le carnet deorigin/main: 1 ; sur cette branche : 0CFRSolver.cfr()self.strategy_sum[info_set] += reach_probs[player] * strategyfigure dansCFRSolver.cfr(), cellule 11 deGameTheory-13-ImperfectInfo-CFR-Python.ipynb. Le commentaire décrit désormais la ligne, sans parler d'une omission[0.5, 0.5]est attribuée à l'omission (corps de #13604 : « la colonne OFTRL du benchmark = artefact [0.5, 0.5] »)strategy_sum["Q"]reste à 0. Les trois colonnes de la sortie committée (CFR, CFR+, OFTRL, lignes 93-95 de la cellule 4) sont uniformes, y compris CFR, qui ne partage pas l'omission. Cause : la démo jouecfr("", [0, 1], ...), donc le joueur d'indice 0 tient J et agit à la racine ; l'info setQ(joueur d'indice 1, historique vide) n'existe pas dans l'arbre et reste à zéro, etget_average_strategyrenvoie l'uniforme. La cellule 8 fait jouer les deux cartes dans les deux sens (lignes 42-46,[1, 0]quand p = 1) : le joueur d'indice 0 tient alors Q à la racine, et la colonneQ(lignes 64-67) n'est plus uniformestep = self._kappa / T(ligne 66) puisdepth_factor = 1.0 / (1.0 + depth)(ligne 68) : ce n'est pas 1/(T+1). Le récit « premier jet » raconte une correction, pas le mécanismeself._alphaetself._beta(lignes 22-23)__init__, aucune lecture dans la cellule 4 (grep : seules les lignes 22-23 matchent)# Fix #17882:en cellule 2FABRICATION_DETECTEDparcheck_markdown_claims_output.pySonde (cellules 2 et 4 exécutées, puis masse de stratégie accumulée par info set, sur le carnet de base) :
Le correctif de #13604 est donc effectif pour les info sets visités (
Qpa une moyenne non uniforme) ; ce qui reste uniforme dans la démo est le choix de l'info set affiché.Suivi proposé (sujet séparé, non ouvert ici) : remplacer
"Q"par un info set visité dans les trois appels de la cellule 4 (lignes 93-95) et corriger le commentaire lignes 59-68 (pas 1/(T+1),alpha/betainutilisés, récit du premier jet). Ces deux changements modifient les sorties : ils relèvent de C.2 et d'une issue dédiée.Validation
Ré-exécution (cellule de code modifiée, C.2) :
Comparaison des sorties avec
origin/main(scriptcompare2, flux consécutifs fusionnés, texte comparé ligne à ligne) :MCCFR apres 50000 iterations : Utilite finalepasse de -0.0555 à -0.0556. La cellule chargeGameTheory-13-...et exécute en entier sa cellule 22 (MCCFR,np.random.choiceetnp.random.randint) ; aucunnp.random.seedn'existe dans le carnet GT-13 (grep). C'est de l'aléa non seedé, pas un effet de la modification.Optional module pokerkit_wrapper ... 'pokerkit': présente dans la sortie committée, absente ici. Elle s'intercale entre « Resultats apres 5000 iterations » et la ligne CFR de la cellule 20 de GT-13, exécutée en entier par le chargeur.pokerkitn'est pas installé dans le venv (importlib.util.find_spec=None), et la sortie committée porte déjà « No module named 'pokerkit' ». Je n'ai pas localisé l'émetteur du message (grep négatif dans les.pydu venv), donc je ne lui attribue pas la différence.time(s)change (temps mesuré parperf_counter).Vérifications :
Référence #13604 (REST) : PR mergée le 2026-08-30T22:46:02Z ; commit de squash
ea15bc59b, titrefeat(gametheory,#13291): GT-13d companion - Optimistic CFR (OFTRL) (#13604); son corps décrit l'omission de l'accumulation dansOFTRLSolver.cfr()et son rétablissement. Le clone est superficiel (shallow) : l'ancêtre deea15bc59bn'est pas vérifiable localement, mais la ligne est présente surorigin/main(grep = 1).Review Checklist
b4e0eb50cc(contenu identique à5266863d9d, seul le message a été amendé).exec_count1 à 7 sur les cellules de code, aucune sortie d'erreur.README.mdde GameTheory,_quarto.yml,COURSE_CATALOG.generated.*,golden_set.yml,rename-ledger.tsv,docs/curriculum/recherche.md) n'ont pas été touchées ; le carnet compagnon 13e etOFTRLSolverne changent pas.Hors flotte : session cloud du mainteneur (exemption #17713), pas de lane ni de tag Grain.
🤖 Generated with Claude Code
https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA
Generated by Claude Code