Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"\n",
"**Kernel** : Python 3\n",
"\n",
"---\n",
"***\n",
"\n",
"## Introduction\n",
"\n",
Expand Down Expand Up @@ -105,7 +105,7 @@
"tags": []
},
"source": [
"---\n",
"***\n",
"\n",
"## 1. Valeur de Shapley - Rappels\n",
"\n",
Expand Down Expand Up @@ -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",
Expand All @@ -182,7 +190,7 @@
"tags": []
},
"source": [
"---\n",
"***\n",
"\n",
"## 2. Jeu de Gants (Glove Game)\n",
"\n",
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -519,7 +535,7 @@
"tags": []
},
"source": [
"---\n",
"***\n",
"\n",
"## 3. Core Vide : Jeu de Majorite\n",
"\n",
Expand Down Expand Up @@ -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",
Expand All @@ -778,7 +802,7 @@
"tags": []
},
"source": [
"---\n",
"***\n",
"\n",
"## 4. Jeux de Vote Ponderes et Banzhaf\n",
"\n",
Expand Down Expand Up @@ -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",
Expand All @@ -992,7 +1024,7 @@
"tags": []
},
"source": [
"---\n",
"***\n",
"\n",
"## 5. Jeux Convexes : Shapley dans le Core\n",
"\n",
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -1968,7 +2040,7 @@
"tags": []
},
"source": [
"---\n",
"***\n",
"\n",
"## Resume\n",
"\n",
Expand All @@ -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]"
]
Expand All @@ -2008,7 +2080,7 @@
"tags": []
},
"source": [
"---\n",
"***\n",
"\n",
"## 13. Exercices\n",
"\n",
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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)"
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Loading