From dca069ec4e477f758708758b53db3a3bfee08b94 Mon Sep 17 00:00:00 2001 From: jsboige Date: Thu, 17 Sep 2026 01:49:20 +0200 Subject: [PATCH 1/2] Add: 10 lectures chiffrees md-only GameTheory-15c-CooperativeGames-Python (densite 967 -> 1320, plancher 1200 #13410) Co-Authored-By: Claude Sonnet 5 --- ...meTheory-15c-CooperativeGames-Python.ipynb | 100 ++++++++++++++++-- 1 file changed, 90 insertions(+), 10 deletions(-) diff --git a/MyIA.AI.Notebooks/GameTheory/GameTheory-15c-CooperativeGames-Python.ipynb b/MyIA.AI.Notebooks/GameTheory/GameTheory-15c-CooperativeGames-Python.ipynb index bcce993753..ac333e0e8b 100644 --- a/MyIA.AI.Notebooks/GameTheory/GameTheory-15c-CooperativeGames-Python.ipynb +++ b/MyIA.AI.Notebooks/GameTheory/GameTheory-15c-CooperativeGames-Python.ipynb @@ -22,7 +22,7 @@ "\n", "**Kernel** : Python 3\n", "\n", - "---\n", + "***\n", "\n", "## Introduction\n", "\n", @@ -105,7 +105,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 1. Valeur de Shapley - Rappels\n", "\n", @@ -168,6 +168,14 @@ "print(\"Fonction shapley_value_exact definie.\")" ] }, + { + "cell_type": "markdown", + "id": "23ef45a6", + "metadata": {}, + "source": [ + "**Lecture de la sortie — l'instrument s'installe avant de jouer.** La ligne « Fonction shapley_value_exact definie. » n'affiche aucun resultat : la cellule pose l'outil, pas encore son usage. Ce que le contrat installe : le calcul exact par enumeration des n! permutations (chaque ordre d'arrivee des joueurs, contribution marginale moyenne), exact au sens ou aucune variance de sondage ne s'y glisse — a la difference des estimations Monte Carlo qu'on rencontre dans d'autres series du depot. La section suivante l'appliquera aussitot au jeu de gants : la premiere valeur chiffree viendra de la, pas d'ici.\n" + ] + }, { "cell_type": "markdown", "id": "c1c7ec32", @@ -182,7 +190,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 2. Jeu de Gants (Glove Game)\n", "\n", @@ -449,6 +457,14 @@ "print(\"Exercice a completer\")" ] }, + { + "cell_type": "markdown", + "id": "d260abdb", + "metadata": {}, + "source": [ + "**Lire la sortie d'un exercice non rempli.** « Exercice a completer » avec `Total: 0.0000` : le squelette `exercice_shapley_glove_etendu` rend l'etat vide, la ligne Total etant le format d'affichage attendu, pas un resultat. Le contrat, pose par l'enonce ci-dessus : etendre le jeu de gants de 3 a 4 joueurs (deux gants gauches L1, L2, deux droits R1, R2 selon le meme schema de gains) et recalculer les valeurs de Shapley exactes. La sortie remplie affichera quatre allocations sommant a v(N), et la question interessante de lecture : la rarete change-t-elle de camp quand les deux cotes passent a deux detenteurs ? L'indice de l'enonce oriente sans reveler.\n" + ] + }, { "cell_type": "code", "execution_count": 6, @@ -519,7 +535,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 3. Core Vide : Jeu de Majorite\n", "\n", @@ -764,6 +780,14 @@ "print(f\" x1 + x2 = {shapley_majority[0] + shapley_majority[1]:.4f} < 1 = v({{1,2}})\")" ] }, + { + "cell_type": "markdown", + "id": "25fb7204", + "metadata": {}, + "source": [ + "**Lecture chiffree — equitable et instable : les deux diagnostics tiennent ensemble.** La sortie affiche `Joueur 1: 0.3333 = 1/3` (et pareil pour les deux autres), puis la note cle : Shapley donne une allocation « juste » mais « cette allocation n'est PAS stable (pas dans le Core) », verifiee par la ligne `x1 + x2 = 0.6667 < 1 = v({1,2})`. Les deux nombres se lisent ensemble : 1/3 chacun est l'equite au sens des contributions marginales moyennes (symetrie parfaite des roles), et 2/3 < 1 est le blocage au sens du Core (n'importe quelle paire peut quitter la table avec 1). Ni l'un ni l'autre ne degonfle l'autre : c'est la coexistence des deux criteres, l'un distributif, l'autre strategique, qui fait tout l'interet du jeu de majorite — la preuve de vacuite de la section precedente dit qu'aucun partage ne peut gagner les DEUX.\n" + ] + }, { "cell_type": "markdown", "id": "ecfb28f3", @@ -778,7 +802,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 4. Jeux de Vote Ponderes et Banzhaf\n", "\n", @@ -978,6 +1002,14 @@ "print(\"Note : Le pouvoir reel (Shapley/Banzhaf) peut differer du poids nominal!\")" ] }, + { + "cell_type": "markdown", + "id": "964f18cb", + "metadata": {}, + "source": [ + "**Lecture de la figure — le renversement se voit avant de se calculer.** Les barres cote a cote tracent, pour chaque joueur, le poids nominal contre les indices de pouvoir reel (Shapley et Banzhaf) : la note de la sortie resume ce que l'oeil capte — « Le pouvoir reel (Shapley/Banzhaf) peut differer du poids nominal! ». Le tableau chiffre de l'interpretation precedente donne les valeurs exactes ; la figure ajoute le diagnostic visuel : les barres poids et pouvoir ne sont PAS alignees, le desequilibre change de sens selon les joueurs (le grand poids est surcote en apparence, les petits poids surindexes en pouvoir). C'est la lecture a retenir d'un coup d'oeil avant toute negotiation de quota : on negocie des poids, on exerce du pouvoir.\n" + ] + }, { "cell_type": "markdown", "id": "96c72b60", @@ -992,7 +1024,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 5. Jeux Convexes : Shapley dans le Core\n", "\n", @@ -1171,6 +1203,14 @@ "print(f\"Shapley dans le Core ? {in_core_maj} - {msg_maj}\")" ] }, + { + "cell_type": "markdown", + "id": "21ae35db", + "metadata": {}, + "source": [ + "**Lecture chiffree — le theoreme verifies sur ses deux cotes.** La sortie aligne le jeu convexe `v(S) = |S|^2 / 9` puis son contre-exemple. Cote theoreme : `Convexe ? True` et `Shapley : [0.3333, 0.3333, 0.3333]` avec `Dans le Core ? True` — sur un jeu convexe, la valeur de Shapley APPARTIENT au Core, l'allocation equitable est ici aussi stable. Cote contre-exemple : le jeu de majorite repond `False` avec la cause nominmee — `Coalition (0, 1) peut bloquer`. La paire de verdicts fait le travail pedagogique : la convexite est precisement l'hypothese qui soude equite et stabilite, et le jeu de majorite (non convexe) montre les deux critieres se separer a nouveau, comme en section 3.\n" + ] + }, { "cell_type": "markdown", "id": "ex-convex-core-md", @@ -1264,6 +1304,14 @@ "print(\"Exercice a completer\")" ] }, + { + "cell_type": "markdown", + "id": "fe3e9680", + "metadata": {}, + "source": [ + "**Lire la sortie d'un exercice non rempli — et reconnaitre un artefact.** Les lignes `Convexe: False` sur le Jeu 1 (convexe attendu) ne sont pas un verdict mathematique : `Shapley: []` le revele, le squelette ne calcule rien, et le False par defaut s'affiche pour les deux jeux a l'identique. L'etat reel est « Exercice a completer ». Le contrat : construire deux jeux de 3 joueurs (un convexe, un non convexe), appliquer `is_convex` puis le test d'appartenance au Core, et lire la PAIRE de verdicts — convexe attendu True/True a la maniere de la cellule precedente, non convexe attendu False/False. La sortie remplie devra rompre la symetrie artefactuelle des deux False actuels : c'est justement le signe que la solution vit.\n" + ] + }, { "cell_type": "markdown", "id": "gt15c-lp-intro", @@ -1655,6 +1703,14 @@ " \"equilibre (Core non vide)\" if somme_dual <= vN + 1e-9 else \"non equilibre (Core vide)\"))\n" ] }, + { + "cell_type": "markdown", + "id": "40f1f6a7", + "metadata": {}, + "source": [ + "**Lecture chiffree — le solveur rend le certificat gratuitement.** La sortie part des marges duales du LP de least-core (`res.ineqlin.marginal`) et les transforme en certificat de Bondareva-Shapley. Jeu de gants : `epsilon* = -0.0000`, les trois paires portent `|m| = 0.3333` chacune ; la renormalisation `k = 1.5000` (chaque joueur apparait dans deux paires) donne `w({i,j}) = 0.5000` et `somme_S w(S)*v(S) = +1.0000` — pile `v(N)` : la collection equilibree explicite de la cellule precedente, reconstruite par le dual sans qu'on la fournisse. Jeu de majorite : `epsilon* = -0.3333` et la meme mecanique conduit a la somme `3/2 > 1` de la preuve manuelle. La lecon d'ingenierie : primal et dual d'un meme LP livrent le verdict ET son certificat — deux preuves pour le prix d'un solve.\n" + ] + }, { "cell_type": "markdown", "id": "gt15c-bal-ex-md", @@ -1738,6 +1794,14 @@ "print(\"Exercice a completer\")\n" ] }, + { + "cell_type": "markdown", + "id": "90b74d47", + "metadata": {}, + "source": [ + "**Lire la sortie d'un exercice non rempli — l'artefact du jeu nul.** `Collection equilibree : {}` avec `somme_S w(S)*v(S) = +0.0000 vs v(N) = 0.0` puis `Core vide ? False` : tout vient du jeu par defaut (nul) et de la collection vide — le verdict False mesure un objet absent, pas le jeu de majorite. L'etat reel : « Exercice a completer ». Le contrat : exhiber une collection equilibree qui prouve la vacuite du Core du jeu de majorite, c'est-a-dire des poids `w` sur des coalitions avec `somme_{S contient i} w(S) = 1` pour chaque joueur et `somme_S w(S) v(S) > v(N)`. La reponse existe deja dans ce notebook — les trois paires a `1/2` de la section precedente ; l'exercice demande de la retrouver par la methode, pas de la recopier.\n" + ] + }, { "cell_type": "markdown", "id": "gt15c-nuc-intro", @@ -1861,6 +1925,14 @@ " print(f\" Shapley = {[round(float(z), 4) for z in sh]} -> dans le Core : {in_core_sh}\")\n" ] }, + { + "cell_type": "markdown", + "id": "4395bde8", + "metadata": {}, + "source": [ + "**Lecture chiffree — trois jeux font un banc complet pour le nucleole.** La sortie croise nucleole et Shapley sur les trois jeux du notebook. Jeu de gants : `Nucleole = [-0.0, -0.0, 1.0] -> Core : True` contre `Shapley = [0.1667, 0.1667, 0.6667] -> False` — le nucleole selections l'unique point du Core (le detenteur du gant droit rafle tout), la Shapley equitable reste dehors : stabilite contre equite, tranchees. Jeu de majorite : les DEUX valent `(0.3333, 0.3333, 0.3333)` et TOUS DEUX hors Core — la symetrie force l'egalite des deux concepts, et le nucleole existe meme sans Core (propriete « existe toujours » verifiee sur ce cas). Jeu convexe : les deux coincident encore, cette fois DANS le Core. Le detail final compte : « 2 LP resolus » pour gants et majorite contre « 1 LP resolus » pour le convexe — l'algorithme sequentiel de Maschler s'arrete des la premiere etape quand le Core a un interieur, il ne s'y enlise que sur les cas limites.\n" + ] + }, { "cell_type": "code", "execution_count": 20, @@ -1968,7 +2040,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Resume\n", "\n", @@ -1989,7 +2061,7 @@ "| Definition du Core | Test d'appartenance |\n", "| Jeux de vote | Banzhaf et comparaison |\n", "\n", - "---\n", + "***\n", "\n", "**Navigation** : [← GameTheory-15b-Lean-CooperativeGames](GameTheory-15b-Lean-CooperativeGames.ipynb) | [Index](GameTheory-01-Setup.ipynb) | [Fin de la serie]" ] @@ -2008,7 +2080,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 13. Exercices\n", "\n", @@ -2086,6 +2158,14 @@ "print(\"Exercice a completer\")" ] }, + { + "cell_type": "markdown", + "id": "c8049152", + "metadata": {}, + "source": [ + "**Lire la sortie d'un exercice non rempli.** La ligne « Exercice a completer » ouvre l'espace des exemples guides de la section Exercices : le premier (jeu de l'aeroport, enonce ci-dessus) attend sa solution ici. Le terrain est pose par le notebook entier : `shapley_value_exact` (section 1) calcule les allocations, le LP de least-core (section 6) teste l'appartenance au Core, et le modele du jeu de gants montre comment encoder une fonction caracteristique par petites regles. Une solution remplie affichera la fonction de cout de l'aeroport, les parts Shapley par joueur, et leur lecture — qui paie quoi du runway commun quand les avions n'ont pas la meme taille.\n" + ] + }, { "cell_type": "markdown", "id": "c36229aa", @@ -2142,7 +2222,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "**Notebook précédent**: [GameTheory-15b-Lean-CooperativeGames](GameTheory-15b-Lean-CooperativeGames.ipynb) \n", "**Notebook suivant**: [GameTheory-16-MechanismDesign](GameTheory-16-MechanismDesign.ipynb)" From 1542374eeb6b6fc4224f780beee6e74ba7667496 Mon Sep 17 00:00:00 2001 From: jsboige Date: Fri, 18 Sep 2026 04:50:18 +0200 Subject: [PATCH 2/2] fix(16474): rebaseline twin pair gametheory-15c cooperativegames after markdown-only density tranche MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pair attested: GameTheory-15c CooperativeGames. Paraphyte-preservant verification (python-compare vs origin/main): all code cells byte-identical (source + outputs + execution_count) — 21/21; changes are markdown-only additions (+10 cells). Command run: python scripts/notebook_tools/check_twin_parity.py --update --pair "GameTheory-15c CooperativeGames" --by "myia-po-2026:CoursIA" Co-Authored-By: Claude Sonnet 5 --- .../0008-2026-09-18-myia-po-2026-CoursIA.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 scripts/notebook_tools/twin_pairs.d/gametheory-15c-cooperativegames/0008-2026-09-18-myia-po-2026-CoursIA.yaml diff --git a/scripts/notebook_tools/twin_pairs.d/gametheory-15c-cooperativegames/0008-2026-09-18-myia-po-2026-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/gametheory-15c-cooperativegames/0008-2026-09-18-myia-po-2026-CoursIA.yaml new file mode 100644 index 0000000000..5304ca357f --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/gametheory-15c-cooperativegames/0008-2026-09-18-myia-po-2026-CoursIA.yaml @@ -0,0 +1,6 @@ +date: '2026-09-18' +by: myia-po-2026:CoursIA +python_sha: ac333e0e8ba7ee004cf04020e12bdc3db58512bb +csharp_sha: ec3187383c1ab533c8ec217bf16c67ddcd756650 +content_python_sha: 4bd1bf74e653ec127452bdc4f646f16532afbe20b1ae57a636f11116cc901d94 +content_csharp_sha: e102c341af4d39f19de946b725aa0d6997279140fd3f17930e4eb925555254ef