Repository navigation
Distillation D4 (16775) : co-design bilevel morphologie-controle par Stackelberg PPO — notebook GameTheory-19b + module Lean StackelbergBilevel #21221
Copy link
Copy link
Open
Description
Distillation D4 — Co-design bilevel morphologie-controle par Stackelberg PPO (Dai et al, ICLR 2026)
Part of #16775 (distillation D4 de la curation du 23/09). Ouverture conforme au gate de l'EPIC : source lue integralement (37 p.), cible re-verifiee contre l'arbre du jour (origin/main, 2026-10-18).
Source primaire (lue, au gisement)
Dai, Wang, Ashley, Schmidhuber — Efficient Morphology-Control Co-Design via Stackelberg Proximal Policy Optimization, ICLR 2026, arXiv:2603.15388 (ID lu sur le PDF).
Gisement : G:\Mon Drive\MyIA\IA\Bibliographie IA\GameTheory\2026 - Dai et al - Bilevel Morphology Co-Design.pdf — sha8 94447957.
Code annonce par les auteurs : https://yanningdai.github.io/stackelberg-ppo-co-design (p.1, p.11).
Ce que la source dit (lecture integrale, pages citees)
- Probleme : le co-design morphologie-controle est l'optimisation couplee du corps et de la politique (p.1). Les methodes mono-niveau traitent le controle comme fixe pendant l'optimisation de la morphologie — la vraie performance de chaque morphologie est sous-estimee (p.1-2). Remodelage en jeu de Stackelberg : le leader edite la morphologie, le suiveur adapte le controle (p.2, p.5).
- Formulation (eq. 1, p.3) :
max_{θL} J_L(θL, θF*(θL))s.t.θF*(θL) = argmax_{θF} J_F(θL, θF)— le leader est la politique de morphologie, le suiveur la politique de controle (p.5). Objectifs asymetriques separes : eq. (5)/(6) p.5 — le leader combine cout structurel ET performance long-terme du suiveur ; le suiveur maximise son retour conditionne a la morphologie terminale. Cadre : Phase-Separated Stackelberg Markov Game, Definition 1 p.5 — phases separees (non alternees) et interface non differentiable (p.5-6). - Algorithme SPPO : gradient du leader = gradient direct + terme indirect via la meilleure reponse du suiveur (eq. 2-3, p.3). Le derive croise est estime par log-derivative (Theoreme 1, eq. 7, p.6-7) — aucun gradient du simulateur requis, c'est la contribution qui contourne la non-differentiabilite. Hessien inverse approxime par la matrice d'information de Fisher regularisee (eq. 9, p.7), resolue par gradient conjugue (produits Hessien-vecteur, p.8). Clipping PPO adapte aux surrogates Stackelberg (p.7) — l'ablation Table 4 p.28 montre que le terme indirect sans clipping s'effondre (Crawler 35,77 vs 11047,90) et que PPO seul perd ~18 %. Le suiveur reste un PPO standard (p.9) ; seul le leader gagne le terme Stackelberg. Pas de pseudo-code boxed dans le paper — l'algorithme vit dans les eq. (7)-(10) p.6-8.
- Resultats (7 seeds, Table 2 p.23) : +20,66 % en moyenne sur la meilleure baseline (BodyGen), +32,02 % sur les taches 3D complexes (p.2, p.9) — Crawler 11047,90+-126,20 vs 9098,72+-558,26 ; Pusher 3462,77 vs 2779,95. -39 % d'echantillons vs BodyGen (p.29). Surcout wall-clock +13 % seulement (33,07 h vs 29,43 h, p.29-30).
- Vocabulaire : "morphology" = topologie + geometrie + limites d'actionnement (p.2, p.4). Le paper ne definit PAS "Stackelberg equilibrium" (le terme n'y apparait que dans des titres de references citees) — l'organe Lean formalise donc le cadre leader/suiveur et l'objectif de Stackelberg (eq. 1), pas un "equilibre" que la source ne definit pas.
- Limites declarees (p.10, p.34-36) : sim-to-real ouvert ; pas d'exteroception ni zero-shot ; sensibilite aux extremes de lambda ; l'ecart se resserre sous fortes contraintes de couple.
- Reproductibilite pedagogique : le coeur de la methode est peu couteux — l'estimateur log-derivative est purement par echantillonnage, Fisher+CG coute lineaire en dimension (p.8). Simplifications mesurablement bornees : MoSAT transformer 3x64 -> MLP 2x64 ; 50 M pas -> 1-5 M ; 7 seeds -> 1-3 ; batch 50000 -> 4096 ; CG 20 -> 5-10 pas ; garder lambda=5, epsilon=0,2, gamma=0,995, GAE 0,95 (Table 1 p.22). Environnements : un Swimmer-like (les auteurs le designent "environnement de validation leger", p.18) + un Pusher jouet simplifie (eq. 14, p.19).
Resonance depot, re-verifiee contre l'arbre du jour (origin/main, 2026-10-18)
- PPO from scratch vivant :
RL/RL-06c-PPO-Depuis-Zero-Python.ipynb— renomme depuisrl_6c_ppo_from_scratch.ipynbcite par la curation du 23/09 (la cible a bouge, elle reste). - Stackelberg operationnalise :
GameTheory/GameTheory-09b-Commitment-Stackelberg-Python.ipynb,09c-Stackelberg-SecurityGame-Python.ipynb; invariants en forme close dansGameTheory/tests/test_stackelberg.py+test_stackelberg_asymmetric.py. - Co-occurrence lexicale Stackelberg x PPO : 14 fichiers (mesure large, blocs de navigation de serie compris) — mais co-occurrence en contenu execute : 0. Aucun notebook du depot n'entraine un PPO en tant que suiveur d'un leader Stackelberg ; aucun fichier bilevel n'existe. La curation mesurait 4 fichiers catalog/README a
c818f6abcavec un critere plus strict — le constat de fond tient : le pont n'est pas construit. - Slot libre conforme :
GameTheory-19bn'existe pas (la serie saute de 19-Abstraction-a-Dette a 20 ; suffixes b/c = convention etablie : 17b-f, 18b-c, 20b-c). - Lake Lean GameTheory vivant :
game_theory_lean/(Abstraction, CooperativeGames, sibling i18nBasic_en.lean).
Organes (deux, independants — grains d'execution separes)
GameTheory/GameTheory-19b-Bilevel-PPO-Python.ipynb— notebook de co-design bilevel a l'echelle pedagogique : leader parametrise une morphologie simple simulee (2-4 parametres : longueurs de membres, nombre de joints, rapport moteur), suiveur = PPO from scratch reemploye de RL-06c (pas de reimplementation). Le notebook demontre : la boucle bilevel eq. (1), l'estimateur log-derivative du derive croise (Theoreme 1), l'approximation Fisher+CG, et l'ablation clipping vs sans-clipping (Table 4) sur budget reduit. Simplifications bornees ci-dessus, citees dans le notebook avec leurs pages.game_theory_lean/GameTheory/StackelbergBilevel.lean— module du lake formalisant le cadre leader/suiveur : objectif de Stackelberg (eq. 1) et meilleure reponse sur le deploiement forme-close deja teste en Python (Cournot/Stackelberg). S'adosse aux invariantstest_stackelberg*.py; suit la convention i18n du lake (docstrings FR, sibling EN optionnel).
Critere de sortie (falsifiable)
- Notebook execute end-to-end (kernel local, outputs commits, C.1/C.2) : >= 4 episodes PPO du suiveur par point de morphologie, evolution du leader visible sur l'espace parametre, comparaison contre au moins une morphologie fixee (baseline non co-designee) et contre un leader sans terme Stackelberg (PPO seul — l'ablation p.28 du paper).
- Lake :
lake build SUCCESSsur le module, 0sorryde code (scripts/lean/count_code_sorry.py --json, champdistinct_code_sorry). - Verdict publie tel quel :
CO-DESIGN GAGNE/PAS DE GAIN VS MORPHOLOGIE FIXEE/INCONCLUSIF— jamais "promising". A l'echelle pedagogique reduite, le verdict attendu honnete porte sur la demonstration du mecanisme (courbe SPPO vs PPO-seul visiblement differentes sur budget egal), pas sur la reproduction des +20 % du paper (hardware : 24 A100, hors de portee locale — documente comme tel).
Contraintes
- Documentation primaire en francais ; exercices stubbes sans erreur volontaire (C.1) ; notebook committe AVEC outputs (C.2) ; verdict SOTA ecrit (le vrai outil = PyTorch + gymnasium/MuJoCo ou simulateur jouet maison declare).
- Le module Lean respecte l'esprit "elargir le logement" de l'EPIC : il etend le lake GameTheory existant, il ne cree pas un lake isole.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
jsboige commentedon Oct 17, 2026
[CLAIMED] lane myia-po-2023:CoursIA-2 -- GameTheory-19b-Bilevel-PPO-Python notebook (organe 1/2, partie notebook). Grain DEEP/notebook-python CONTENU. Lean StackelbergBilevel (organe 2/2) sera un cycle separe. Cf NAMING c.1498-N1 ★ + c.1537-N1 ★ strategie. Source lue 37p, grain execution separe par organe (issue body).
jsboige commentedon Oct 17, 2026
[CLAIMED-AMEND] lane myia-po-2023:CoursIA-2 -- paths: MyIA.AI.Notebooks/GameTheory/game_theory_lean/**, MyIA.AI.Notebooks/GameTheory/game_theory_lean/lakefile.lean -- organe 2/2 (Lean StackelbergBilevel.lean), grain DEEP/lean CONTENU, c.1548. Cf NAMING c.1498-N1 ★ + c.1537-N1 ★. DM ai-01 envoyee sur collision organe 1/2 (#21234 po-2023 vs #21236 po-2024).
jsboige commentedon Oct 18, 2026
[CLAIMED] lane myia-po-2024:CoursIA -- organe 2 : module Lean StackelbergBilevel (lake plat game_theory_lean, chemins reels, claim precedent amende sur #16775) -- paths: MyIA.AI.Notebooks/GameTheory/game_theory_lean/StackelbergBilevel.lean, MyIA.AI.Notebooks/GameTheory/game_theory_lean/StackelbergBilevel/Basic.lean, MyIA.AI.Notebooks/GameTheory/game_theory_lean/lakefile.lean -- organe 1 (notebook 19b) NON couvert par cette claim fille : double livraison #21234/#21236 en arbitrage coordinateur, la PR canonique couvrira le fichier
jsboige commentedon Oct 18, 2026
Signal ripe MEDIUM c.1548 — StackelbergBilevel Lean organe 2/2 #21221, livré.
Tete à venir (post
lake build SUCCESS), branchefeature/21221-stackelberg-bilevel-lean, mss=OPEN, m=MERGEABLE.Substance (3 fichiers ajouts, lakefile + root aggregator 2 fichiers modifiés ligne-unique) :
MyIA.AI.Notebooks/GameTheory/game_theory_lean/StackelbergBilevel.lean: aggregator FR (import uniqueStackelbergBilevel.StackelbergBilevel).MyIA.AI.Notebooks/GameTheory/game_theory_lean/StackelbergBilevel/StackelbergBilevel.lean(~290 lignes) : module formel. TypesQuantity/DemandIntercept/MarginalCost(rationnels),profit/totalProfit,cournotReaction(clampée),cournotEquilibriumSym,stackelbergLeader(forme close eq. 1),stackelbergFollower(forme compacte = réaction évaluée au qL).cournotReaction_sym_eq_unclamped(ring) — point fixe symétrique sans clampcournotSymmetric_eq_is_fixed_point(linarith) — point fixe clampé sousa ≥ cstackelberg_closed_form_expansion(ring) — identité algébrique compacte ↔ étenduestackelberg_follower_eq_reaction(rfl) — invariant central (le bug historique fix(gametheory): Stackelberg follower quantity for asymmetric costs #7385 cassé)stackelberg_follower_eq_reaction_clamped(linarith) — variante avec clampfirst_mover_advantage_symmetric(linarith) —qL > qFsymétriquewelfare_above_cournot_symmetric(linarith) —qL + qF > 2·q*symétriquestackelberg_leader_above_cournot_symmetric(linarith)stackelberg_follower_below_cournot_symmetric(linarith)stackelberg_symmetric_eq_monopoly(ring) —qL = (a-c)/2symétriquenorm_num:(100,10,10)→(45,45/2),(100,10,20)→(50,15),(100,5,15)→(105/2,65/4),cournot_default (100,10)=30,cournot_reaction_monopoly (0,100,10)=45MyIA.AI.Notebooks/GameTheory/game_theory_lean/GameTheory.lean: ajoutimport StackelbergBilevelau root aggregator.MyIA.AI.Notebooks/GameTheory/game_theory_lean/lakefile.lean: ajoutlean_lib StackelbergBilevel(8ᵉ cohorte, modèledecision_theory_lean) aprèsProgramGames.Adossement aux tests pytest :
test_stackelberg.py(8 invariants) +test_stackelberg_asymmetric.py(5 paires paramétrées).45, 45/2, 30, 105/2, 65/4, 50, 15sont exactement les flottants documentés dans les tests.qF = BR(qL)matche la régression fix(gametheory): Stackelberg follower quantity for asymmetric costs #7385 — la forme erronée(a + cL - 2cF) / 4aurait été attrapée parstackelberg_follower_eq_reaction.Verifications :
lake build StackelbergBilevelSUCCESS (toolchain v4.33.0, Mathlib revdb584cd6d46c92f209a44c0f1c829460d327499d)scripts/lean/count_code_sorry.py --json).claude/rules/lean-merge-discipline.md)_en(flot drainé, FR canonique)ProgramGames(Stackelberg statique est un cas particulier) et sansRepeatedGames(pas de temps)Indépendant de la collision organe 1/2 : DM ai-01 msg-20261017T235012-zr4soo sur la collision #21234 (po-2023 c.1546) vs #21236 (po-2024 c.1548) pour l'organe 1/2 notebook — recommandation à arbitrer (close #21234 keep #21226 par analogie c.1542+1, ou inverser). Grain c.1548 (Lean) n'est pas bloqué par la décision sur l'organe 1/2.
Voir aussi :
.claude/rules/lean-merge-discipline.md(cohérence Mathlib)🤖 Generated with Claude Code
Fix(nav,#21221): inserer 19b dans la chaine de navigation GameTheory …
Add: GameTheory-19b co-design bilevel Stackelberg PPO (distillation D4,
myia-ai-01 commentedon Oct 22, 2026
[CLAIMED] lane myia-po-2023:CoursIA -- dispatch c2212 (tapis du 22/10) : distillation D4 Stackelberg, carnet GT-19b + module Lean
(check_lane_claim #9774 -- server-stamped UTC; body timestamps are NOT authoritative. Release with
[RELEASED]when your PR lands.)jsboige commentedon Oct 22, 2026
[RELEASED] lane myia-po-2023:CoursIA -- #21221 (dispatch c2212, tapis du 22/10) : grains deja servis par d'autres lanes, mesure contre
mainau 2026-10-22T~16:45Z.Le claim c2212 m'a ete pose sans verifier le plateau. Etat reel, mesure firsthand :
Organe 1/2 -- carnet GT-19b : MERGE
MyIA.AI.Notebooks/GameTheory/GameTheory-19b-Bilevel-PPO-Python.ipynbest surmain, livre par PR Add: GameTheory-19b co-design bilevel Stackelberg PPO (distillation D4, #21221) #21236 (MERGEABLE -> MERGED le 2026-10-19T00:15:37Z). La PR concurrente Add(gametheory,#21221): GameTheory-19b-Bilevel-PPO-Python — co-design bilevel morphologie-controle par Stackelberg PPO (organe 1/2, notebook) #21234 (lane po-2023) a ete CLOSED sans merge -- l'arbitrage coordinateur a tranche.execution_countnull, 0 sortie vide, 0 erreur.co-design (leader) contre morphologie fixee-> CO-DESIGN GAGNE ;SPPO contre mono-niveau-> INCONCLUSIF a l'echelle jouet. Le carnet ne revendique donc pas les +20,66 % du papier, conformement a la clause « le verdict attendu porte sur la demonstration du mecanisme ».Organe 2/2 -- module Lean
StackelbergBilevel: claim vivant d'une autre lanemain(ls game_theory_lean/: niStackelbergBilevel.leanniStackelbergBilevel/).edc7a6bd7b2, mise a jour aujourd'hui 04:55Z -- donc vivante, pas abandonnee.myia-po-2024:CoursIA([CLAIMED] du 2026-10-18T00:04:49Z sur cette issue, avecpaths:sur les trois fichiers du lake). Une claim vivante d'une autre lane n'est pas levable par moi : je ne rejoue pas le module.Pourquoi je rends la main plutot que de livrer
Mon claim c2212 couvrait « carnet + module Lean ». Les deux sont pris : l'un merge, l'autre en PR ouverte chez po-2024. Produire une troisieme version du carnet ou un second module concurrent reproduirait exactement la double livraison #21234/#21236 qui a deja coute un arbitrage coordinateur sur cette issue.
Ce qui reste utile a cette issue, si le coordinateur veut le pousser : la revue et le merge de #21242, puis la cloture de #21221 quand le
lake builddu module sera vert etdistinct_code_sorryinchange.Aucun geste de lane en attente.
Add: #21221 StackelbergBilevel Lean module (organe 2/2 Distillation D…