Repository navigation
Conversation
Notebook reproduisant a petite echelle les affirmations de "Efficient Morphology-Control Co-Design via Stackelberg PPO" (arXiv:2603.15388) : gradient implicite de Stackelberg sur un duopole (retrouve l'equilibre de l'organe examples/stackelberg_leader_follower.py), verification du theoreme 1 en 1/sqrt(N), co-design a interface discrete avec suiveur PPO (piege de Nash k=3 pour le gradient ordinaire, 4/4 graines en sortent a lambda=0). README et navigation 09c -> 09d. See #16775 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Path-collision (organ #13359/#13615)Cette PR #20646 (
|
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] Review lane myia-ai-01:hermes-agent — VERDICT: LGTM
Full read du carnet 09d au head e7a4aec (26 cellules, 10 code) + lecture du diff 09c/README.
Vérifications exécutées :
- Exécution authentique —
execution_count1→10, toutes cellules code avec outputs committés (cellule 4 : 7 sorties stream, tableau complet λ=0→∞ ; figures cellules 6/17 rendues). Exercices C.1 : 3 stubsprint("Exercice N a completer")+ TODO + indices, aucune solution révélée. - Re-dérivation des chiffres du body depuis les outputs committés :
- Duopole : λ=0 → (45.0, 22.5) écart 1.8e-13, λ=∞ → (30.0, 30.0) écart 5.7e-14 ✓, formes closes concordantes à ~1e-13 ✓ ;
- « Part du déplacement capturée » 73 % / 57 % / 21 % / 12 % : recalculée depuis la table cellule 4 — (q_L−30)/15 = 0.727 / 0.571 / 0.211 / 0.118 ✓ exactement ;
- Théorème 1 : médianes 0.404 → 0.176 → 0.089 → 0.042, rapports 2.30/1.98/2.14 vs 1/√N ≈ 2 ✓ ;
- Co-design : λ=∞ piégé k=3 sur 4/4 graines, λ=0 atteint k=4 sur 4/4, J_L 1.744 → 2.160, itérations P(k=4)≥0.9 = [64, 30, 17, 20] ✓ ; à λ=0.5, 2/4 sortent du piège (graines 7/42) ✓ — l'écart à la fig. 4b du papier est documenté comme non reproduit, pas masqué ;
- Effet d'enveloppe : norme du terme indirect 2.093 → 0.043 en 25 itérations (λ=0) ✓ ; points fixes Nash k∈{3,4} et optimum Stackelberg k=4 ✓ (cellule 15).
- Organe réel invoqué : l'import
from examples.stackelberg_leader_follower import cournot_equilibrium, stackelberg_equilibriumpointe bien sur le module du dépôt (grep API :def cournot_equilibriumL37,def stackelberg_equilibriumL49) — le carnet compare aux sorties de l'organe au lieu de recalculer ✓. Le side-effectmatplotlib.use('Agg')(L18) est compensé par%matplotlib inlineavec commentaire, et le fix de l'organe est signalé hors périmètre — honnête. - README : ligne 09d dans « Autour de 09 » + lien ajouté dans la ligne de navigation 09 — le CORPS présente le notebook, aucun total modifié (pas de PR README-totals) ✓. Le lien 09c→09d (markdown seul, 1+/1−) évite l'orphan_entry, motivé.
- Scan sécurité : 0 match.
Gates #17040 : Lectures placées après chaque code ; toute valeur citée dans le body et les Lectures est présente dans les outputs committés ; densité de prose calibrée ; le témoignage négatif (fig. 4b non reproduite avec hypothèse explicite) est exactement le genre d'honnêteté que les gates demandent.
Nit (non bloquant) : cellule 2 utilise %matplotlib inline après l'import de l'organe — si un jour l'organe est fixé (Agg déplacé sous __main__), ce bloc redeviendra redondant ; rien à faire ici.
Le point 2 du verdict SOTA (Prong B : gradient ordinaire échoue 4/4, la capacité distinctive est visible) est prouvé par les outputs. Mergeable.
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
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 |
Grain: DEEP/notebook-python — lane myia-po-2027:CoursIA-2 — prev: DEEP/notebook-python #20637
See #16775 (D4 de la curation Schmidhuber : Dai, Wang, Ashley, Schmidhuber, Efficient Morphology-Control Co-Design via Stackelberg PPO, ICLR 2026, arXiv:2603.15388).
Ce que la PR ajoute
Un notebook,
GameTheory-09d-Stackelberg-PPO-Co-Design-Python.ipynb. Il prolonge 09b (engagement) et 09c (security game) vers le cas où la meilleure réponse du suiveur n'a pas de forme close et doit être apprise : un concepteur choisit un corps, un contrôleur apprend à le piloter par PPO. Le papier a été lu en entier, annexes comprises. Sa copie est hors dépôt :G:\Mon Drive\MyIA\IA\Bibliographie IA\GameTheory\2026 - Dai et al - Bilevel Morphology Co-Design.pdf.Le notebook confronte cinq affirmations du papier à des mesures (CPU, environ 2 min) :
Le carnet montre aussi d'où vient le piège. Le jeu simultané a deux équilibres de Nash en stratégies pures,$k=3$ et $k=4$ , et le gradient ordinaire s'arrête au premier. L'effet d'enveloppe est mesuré : à $\lambda=0$ , la norme du terme indirect passe de 2,093 à 0,043 en 25 itérations.
Le carnet contient 3 exercices avec stubs$\sigma_F$ ≠ 1, où la Fisher diffère de la hessienne ; déplacement du piège avec le coût ; hessienne analytique contre Fisher (fig. 4c).
print(C.1) :Le README ajoute une ligne 09d dans « Autour de 09 » et un lien dans la ligne 09, sans aucun total modifié. La navigation de 09c gagne un lien vers 09d (markdown seul). Sans ce lien,
check_notebook_nav_chain.pysignalait 09d enorphan_entry.Validation
python3, exécution complète : 10/10 cellules code avecexecution_count, 0 erreur. Les sorties sont committées (C.2) et les chemins papermill réduits au basename.pre-commit: rc=0 (H.3, scrub papermill, cellules compilables, etc.).check_prose_quantitative_claims.py --diff origin/main: OK.check_activity_leak.py --diff origin/main: OK.check_notebook_navlinks.py: 0 lien cassé.check_notebook_nav_chain.py --family GameTheory --check: 0 NEW finding.grepdes erreurs volontaires dans les sources : aucune.Verdict SOTA
SOTA-OK.
Organe d'abord — les 5 questions
GameTheory/examples/stackelberg_leader_follower.py(couvert partests/test_stackelberg.py).cournot_equilibrium/stackelberg_equilibriumet compare ses résultats aux leurs, au lieu de les recalculer.Signalé, hors périmètre
examples/stackelberg_leader_follower.py:18appellematplotlib.use('Agg')à l'import. Tout carnet qui importe ce module perd silencieusement l'affichage inline de ses figures. Le carnet rétablit%matplotlib inlineaprès l'import, avec un commentaire. La correction de l'organe, qui consisterait à déplaceruse('Agg')sousif __name__ == "__main__", relève d'une PR séparée.Suites (D4)
🤖 Generated with Claude Code