Ce notebook introduit les jeux cooperatifs avec utilite transferable (TU games) et les jeux d’assistance (AI Safety).
Objectifs d’apprentissage
Maitriser la fonction caractéristique et la formation de coalitions
Calculer la valeur de Shapley - contribution marginale moyenne
Comprendre le Core - allocations stables que personne ne peut bloquer
Analyser les jeux d’assistance - Paperclip Game et Off-Switch Game (AIMA)
Appliquer les jeux cooperatifs a la politique reelle (coalition de gauche francaise 2024)
Prerequis
Notebooks 1-13 : Fondations des jeux non-cooperatifs
Notebook 14 : Jeux differentiels (transition naturelle vers la cooperation)
Notion de coalition, transfert d’utilite, et maximisation collective
Duree estimee : 90 minutes
Transition depuis les jeux non-cooperatifs
Dans les notebooks précédents, les joueurs agissaient de maniere independante (equilibres de Nash, Stackelberg, etc.).
Dans les jeux cooperatifs : - Les joueurs peuvent former des coalitions - Les gains sont transferables entre membres - La question centrale : comment repartir le gain de la coalition ?
Dans les jeux d’assistance (Section 4) : - Un agent (robot) maximise l’utilite d’un autre agent (humain) - Le robot a une incertitude sur les préférences de l’humain - Cette incertitude rend le robot plus sur et deferent
Cette transition est naturelle après les jeux differentiels (notebook 14) ou l’on a vu que la cooperation (boucle fermee) peut dominer la competition.
Substance pedagogique du notebook
Cooperative Game Theory (Shapley 1953) est l’une des rares theories mathematiques qui separe efficacite collective (la coalition fait mieux que la somme de ses parties) de stabilite politique (le partage ne peut pas etre bloque par une sous-coalition). Cette separation est ce qui rend la theorie applicable aux problemes reels de repartition de ressources : prix de l’eau entre regions, partage des sieges dans une coalition politique, repartition d’un heritage entre heritiers en conflit.
Assistance Games (Russell & Norvig, AIMA 4th Ed., §18.2.5) est une application a l’AI Safety developpee par Stuart Russell a Berkeley. Le resultat central – un robot incertain est plus sur qu’un robot certain – est contre-intuitif et revele pourquoi la course a l’IA sure ne peut pas etre une simple course a la performance, mais doit inclure l’incertitude sur les objectifs comme invariant de conception.
Pourquoi ce notebook en Python et pas en Lean ? : la dimension algorithmique (calcul de Shapley exact O(2^n), Monte Carlo O(samples * n), visualisation matplotlib 3D du Core sur le simplexe) est le cœur pedagogique. La formalisation Lean des memes concepts est dans le side-trackGT-15b-Lean-CooperativeGames et le jumeau Python avance GT-15c-CooperativeGames-Python (avec implementations optimisees et benchmarks). Les trois notebooks se completent : 15 (algorithmique) + 15b (verification formelle) + 15c (performance).
# Imports et configurationimport numpy as npimport matplotlib.pyplot as pltfrom itertools import combinations, permutationsimport mathimport osimport sysfrom pathlib import Path# Import robuste du module cooperative_games — resolution dynamique multiplateformedef _find_gametheory_dir():"""Trouve le repertoire contenant cooperative_games par walking parent dirs.""" cwd = Path.cwd().resolve()# Walk up from cwd to find a directory containing cooperative_games/ search = cwdfor _ inrange(10):if (search /'cooperative_games').is_dir():return search parent = search.parentif parent == search:break search = parent# Also try relative to the notebook file location (VSCode sets __vsc_ipynb_file__) nb_file =globals().get("__vsc_ipynb_file__")if nb_file: nb_dir = Path(nb_file).resolve().parent search = nb_dirfor _ inrange(5):if (search /'cooperative_games').is_dir():return search search = search.parentraiseImportError(f"Cannot find cooperative_games module. "f"Current working directory: {cwd}\n"f"Please run from GameTheory directory or set PYTHONPATH." )try: _gametheory_dir = _find_gametheory_dir()ifstr(_gametheory_dir) notin sys.path: sys.path.insert(0, str(_gametheory_dir))from cooperative_games import ( CoalitionGame, VotingGame, WeightedVotingGame, shapley_value_exact, shapley_value_monte_carlo, ShapleyCalculator, compute_core, is_in_core, FrenchLeftCoalition2024, analyze_coalition_dynamics )print(f"Module cooperative_games charge depuis: {_gametheory_dir.name}/cooperative_games/")print("Import reussi!")exceptImportErroras e:print(f"ERREUR: {e}")print("Solution: Executez ce notebook depuis le repertoire GameTheory:")print(" cd MyIA.AI.Notebooks/GameTheory")print(" jupyter notebook GameTheory-15-CooperativeGames.ipynb")
Un jeu coopératif\((N, v)\) est défini par : - \(N = \{1, 2, ..., n\}\) : ensemble des joueurs - \(v : 2^N \rightarrow \mathbb{R}\) : fonction caractéristique - \(v(S)\) = valeur que la coalition \(S\) peut obtenir - Convention : \(v(\emptyset) = 0\)
Propriétés importantes
Superadditivité : \(v(S \cup T) \geq v(S) + v(T)\) pour \(S \cap T = \emptyset\)
Dans un jeu non-cooperatif (notebooks 1-13), on specifie les actions et les paiements de chaque joueur. Le modele strategique est complet : connaissant l’equilibre de Nash, on peut predire l’issue.
Dans un jeu cooperatif, on abstrait la strategie : on specifie directement la valeur que chaque coalition peut obtenir, en supposant qu’elle utilise optimalement ses actions internes. Cette abstraction est justifiee par :
Exogene vs endogene : \(v(S)\) represente le resultat d’un sous-jeu interne deja resolu (typiquement par equilibre de Nash ou autre solution interne). Le theoreme de Nash programme (Nash 1950, 1953) garantit que tout jeu non-cooperatif fini admet un equilibre – donc on peut transferer la valeur au cooperative game.
Simplification : on elimine les details strategiques (qui bluffe, qui ment, qui delate) pour se concentrer sur le partage equitable. C’est la meme logique que la thermodynamique : on ne suit pas chaque molecule, on utilise des variables globales (temperature, pression).
Applicabilite : beaucoup de problemes reels (negociations, partage de ressources, alliances strategiques) sont plus naturellement specifiees par la valeur des coalitions que par les actions individuelles.
Limite : si la strategie interne d’une coalition est elle-meme controversee (par exemple en politique, ou les negotiations sont observees et peuvent influencer l’opinion publique), le modele cooperatif peut sous-estimer les dynamiques strategiques. Dans ce cas, on revient au modele non-cooperatif (notebooks 1-13).
Lien avec la theorie des graphes
Une specialisation classique : les graph games (ou chaque coalition correspond a un sous-ensemble de sommets connectes) sont utilises en algorithmique distribuee. \(v(S)\) peut representer le nombre d’aretes traversant le sous-graphe, le poids total des sommets, etc. La litterature des graph games (Myakishev 2017) etend les resultats classiques des TU games au cas structurel.
Lien avec l’economie
En economie industrielle, les TU games sont utilises pour analyser les fusions d’entreprises. \(v(S)\) represente le profit que les entreprises \(S\) reunies peuvent obtenir (apres synergies). La theorie de Shapley predit quelle fusion est equitable. Voir Aumann & Dreze 1974Cooperative games with coalition structures pour la generalisation avec structures de coalition arbitraires.
# Exemple 1 : Jeu de majorité simple# 3 joueurs, une coalition gagne (valeur 1) si elle a au moins 2 membresdef majority_value(coalition):"""Jeu de majorité : gagne si >= 2 joueurs"""return1.0iflen(coalition) >=2else0.0majority_game = CoalitionGame( n_players=3, characteristic_function=majority_value, player_names=["Alice", "Bob", "Charlie"])print("Jeu de majorité simple (3 joueurs, quota=2)")print("="*50)print(f"v(∅) = {majority_game.value(set())}")print(f"v({{Alice}}) = {majority_game.value({0})}")print(f"v({{Alice, Bob}}) = {majority_game.value({0, 1})}")print(f"v({{Alice, Bob, Charlie}}) = {majority_game.value({0, 1, 2})}")print(f"\nSuperadditif : {majority_game.is_superadditive()}")print(f"Convexe : {majority_game.is_convex()}")
L’exemple précédent montre un jeu de majorité simple où toutes les coalitions de 2 joueurs ou plus gagnent.
Passons maintenant à un cas plus réaliste : un jeu de vote pondéré où chaque joueur a un poids différent (comme dans un conseil d’entreprise).
Comparaison avec le vote simple
Dans le vote majoritaire simple (chaque joueur = 1 voix), tous les joueurs sont symetriques. La valeur de Shapley reflete cette symetrie : 1/3 chacun. C’est le cas le plus simple pedagogiquement.
Dans le vote pondere (poids inegaux), la symetrie est cassee. Certains joueurs deviennent plus pivots que d’autres dans les coalitions. Cette asymetrie est ce qui interesse la science politique – voir les indices de pouvoir de Banzhaf (1965) et de Shapley-Shubik (1954), tous deux bases sur le meme concept de “pivot”.
Pourquoi le vote majoritaire simple est pedagogique
Pour un jeu de majorite a 3 joueurs symetriques, le Core est vide (le voir plus bas). Cela enseigne une lecon fondamentale : l’efficacite collective ne suffit pas a la stabilite. Si trois amis peuvent obtenir 1€ ensemble mais que chacun peut obtenir 1€ seul (jeu trivial), aucune allocation dans {x : x1+x2+x3 = 1, xi >= 1} ne peut exister – impossible d’avoir xi >= 1 avec x1+x2+x3 = 1.
C’est la demonstration la plus simple que la theorie des jeux cooperatifs n’est pas une simple theorie du partage equitable : c’est une theorie ou le Core peut etre vide, ou la Shapley n’est pas dans le Core, ou la coalition est instable. Voir Scarf 1967 pour la version continue.
# Exemple 2 : Jeu de vote pondéré# Conseil d'entreprise : PDG (3 voix), DG (2 voix), Directeur (1 voix)# Décision si >= 4 voixboard_game = WeightedVotingGame( weights=[3, 2, 1], quota=4, player_names=["PDG", "DG", "Directeur"])print("Jeu de vote pondéré [4; 3, 2, 1]")print("="*50)print(f"Notation : [{board_game.quota}; {', '.join(str(w) for w in board_game.weights)}]")print()# Coalitions gagnantesprint("Coalitions gagnantes :")for coalition in board_game.all_coalitions():if board_game.is_winning(set(coalition)): names = [board_game.player_names[i] for i in coalition]print(f" {', '.join(names) if names else'∅'}")print()print("Coalitions minimales gagnantes :")for mwc in board_game.minimal_winning_coalitions(): names = [board_game.player_names[i] for i in mwc]print(f" {', '.join(names)}")
Interprétation : Moyenne des contributions marginales de \(i\) sur tous les ordres d’arrivée possibles.
Pourquoi ces 4 axiomes sont la “bonne” definition
Le theoreme d’unicite de Shapley (1953) montre que les 4 axiomes determinent une unique fonction de repartition \(\phi(v)\). C’est le pendant cooperative game de l’unicite de l’equilibre de Nash en strategique.
Efficacite : la totalite du gain \(v(N)\) est distribuee – rien n’est “perdu” dans la theorie. Symetrie : les joueurs interchangeables (memes contributions marginales) sont traites egalement – c’est l’axiome d’equite. Joueur nul : un joueur qui ne contribue a rien ne recoit rien – c’est l’axiome de merite. Additivite : la valeur de Shapley sur un jeu somme \(v+w\) est la somme des valeurs – c’est la linearite.
Ces 4 axiomes sont independants : aucun n’est implique par les autres. Shapley a montre que toute solution satisfaisant les 4 doit etre la valeur de Shapley – c’est la force du resultat.
Lien avec la theorie du vote
L’indice de Shapley-Shubik (1954) est une specialisation de la valeur de Shapley aux jeux de vote ponderes. Pour un jeu ou la coalition \(S\) gagne ssi la somme des poids >= \(q\) (quorum), l’indice de Shapley-Shubik de \(i\) compte le nombre de permutations ou \(i\) est pivot (le joueur qui porte le dernier poids pour atteindre le quorum). C’est une mesure du pouvoir reel qui peut diverger du poids formel.
Voir Lucas 1983Measuring power in weighted voting games pour une revue complete. L’indice de Banzhaf (1965) est une variante concurrente qui ne satisfait pas l’additivite mais est plus facile a calculer pour de grands jeux.
Lien avec la mecanique statistique
La formule de Shapley ressemble a une moyenne ponderée sur les permutations – analogue a l’ensemble canonique en mecanique statistique (chaque permutation = micro-etat). Cette analogie est profonde : la theorie de Shapley peut etre vue comme une integration sur l’ensemble des ordres d’arrivee, chaque ordre etant un micro-etat du processus de coalition.
Voir Aumann 1985What is game theory trying to accomplish? pour une discussion philosophique sur le statut des axiomes en theorie des jeux.
# Calcul de Shapley pour le jeu de majoritéshapley_majority = shapley_value_exact(majority_game)print("Valeur de Shapley - Jeu de majorité")print("="*50)for i, name inenumerate(majority_game.player_names):print(f" {name}: {shapley_majority[i]:.4f}")print(f"\nSomme: {shapley_majority.sum():.4f} (= v(N) = {majority_game.grand_coalition_value()})")print("\n→ Tous les joueurs sont symétriques, donc valeurs égales (1/3 chacun)")
Valeur de Shapley - Jeu de majorité
==================================================
Alice: 0.3333
Bob: 0.3333
Charlie: 0.3333
Somme: 1.0000 (= v(N) = 1.0)
→ Tous les joueurs sont symétriques, donc valeurs égales (1/3 chacun)
La valeur de Shapley égale pour les trois joueurs (1/3 chacun) reflète leur symétrie parfaite dans le jeu de majorité : chacun est également pivot dans les mêmes situations.
Voyons maintenant ce qui se passe avec le jeu de vote pondéré, où les joueurs ne sont plus symétriques.
Verification a la main
Pour le jeu de majorite a 3 joueurs symetriques, on peut enumerer les 3! = 6 ordres d’arrivee et compter les contributions marginales :
Ordre
Joueur 1 entre
…
Joueur 3 entre
Cont. marginales
1,2,3
0 (coalition vide -> {1} ne gagne pas)
0
1 ({1,2} -> {1,2,3} ajoute le gain 1)
(0,0,1)
1,3,2
0
1 ({1} -> {1,3} ajoute le gain 1)
0
(0,1,0)
2,1,3
0
0
1 ({2,1} -> {2,1,3} ajoute le gain 1)
(0,0,1)
2,3,1
0
1 ({2} -> {2,3} ajoute le gain 1)
0
(0,1,0)
3,1,2
0
0
1 ({3,1} -> {3,1,2})
(0,0,1)
3,2,1
0
1 ({3} -> {3,2})
0
(0,1,0)
Moyenne : joueur 1 = 0/6, joueur 2 = 3/6, joueur 3 = 3/6 ? Non, c’est incorrect. Refaisons : sur 6 ordres, chaque joueur est pivot 2 fois (la 3e position dans les ordres ou 2 memes joueurs le precedent). Moyenne = 2/6 = 1/3. C’est la symetrie attendue.
Lecon : la formule de Shapley pondere chaque ordre egalement (1/n! pour n joueurs). La symetrie du jeu implique que chaque joueur est pivot dans le meme nombre d’ordres. C’est la manifestation concrete de l’axiome de symetrie.
# Calcul de Shapley pour le jeu de vote pondéréshapley_board = shapley_value_exact(board_game)print("Valeur de Shapley - Conseil d'entreprise [4; 3, 2, 1]")print("="*50)for i, name inenumerate(board_game.player_names):print(f" {name} (poids {board_game.weights[i]}): Shapley = {shapley_board[i]:.4f}")# Comparaison avec l'indice de Banzhafbanzhaf = board_game.banzhaf_index()print("\nComparaison avec l'indice de Banzhaf :")for i, name inenumerate(board_game.player_names):print(f" {name}: Shapley={shapley_board[i]:.4f}, Banzhaf={banzhaf[i]:.4f}")
On observe que la valeur de Shapley diffère du simple poids de vote ! Le PDG (poids 3) n’a pas 50% du pouvoir mais seulement environ 67%, tandis que le Directeur (poids 1) conserve une valeur de Shapley non nulle.
La visualisation suivante montre comment les contributions marginales varient selon l’ordre d’arrivée des joueurs. La valeur de Shapley est simplement la moyenne de ces contributions.
Cas du Conseil de l’UE
L’indice de Shapley-Shubik au Conseil de l’UE (systeme de vote a la majorite qualifiee 55% des Etats ET 65% de la population) est calcule regulierement par la Commission pour evaluer le pouvoir reel de chaque Etat membre. Les resultats montrent que l’Allemagne et la France ont un pouvoir reel superieur a la stricte proportionnelle, ce qui reflete leur taille demographique et la necessite de coalitions.
Comparaison poids formel vs pouvoir reel
Le poids formel (nombre de voix) et le pouvoir reel (Shapley-Shubik) peuvent diverger considerablement :
Poids dominant : un pays avec beaucoup de voix peut etre non-pivot dans beaucoup de coalitions (il est rejoint “apres” le quorum).
Poids pivot : un pays petit mais strategique peut etre pivot dans beaucoup de coalitions (il atteint le quorum en s’ajoutant).
C’est cette asymetrie qui fait de l’indice de Shapley-Shubik un outil de reflexion politique : il revele les “passagers clandestins” et les “noeuds strategiques” dans une coalition.
Reference : Shapley & Shubik 1954A method for evaluating the distribution of power in a committee system. American Political Science Review 48(3): 787-792.
# Visualisation des contributions marginalesdef visualize_marginal_contributions(game):"""Affiche les contributions marginales pour chaque permutation.""" n = game.n_players fig, ax = plt.subplots(figsize=(12, 6)) all_contributions = [] labels = []for perm in permutations(range(n)): coalition =set() contributions = []for i in perm: mc = game.value(coalition | {i}) - game.value(coalition) contributions.append(mc) coalition.add(i)# Réorganiser par joueur contrib_by_player = [0] * nfor pos, player inenumerate(perm): contrib_by_player[player] = contributions[pos] all_contributions.append(contrib_by_player) labels.append('→'.join(game.player_names[i][:3] for i in perm)) all_contributions = np.array(all_contributions) x = np.arange(len(labels)) width =0.25 colors = plt.cm.Set2(np.linspace(0, 1, n))for i inrange(n): offset = (i - n/2+0.5) * width ax.bar(x + offset, all_contributions[:, i], width, label=game.player_names[i], color=colors[i])# Ligne pour Shapley shapley = shapley_value_exact(game)for i inrange(n): ax.axhline(y=shapley[i], color=colors[i], linestyle='--', alpha=0.7) ax.set_xlabel('Ordre d\'arrivée') ax.set_ylabel('Contribution marginale') ax.set_title('Contributions marginales par permutation\n(lignes pointillées = valeurs de Shapley)') ax.set_xticks(x) ax.set_xticklabels(labels, rotation=45, ha='right', fontsize=8) ax.legend() plt.tight_layout() plt.show()visualize_marginal_contributions(majority_game)
Lecture des contributions marginales (visualisation)
La visualisation matplotlib montre un exemple concret : pour le jeu de majorite a 3 joueurs, les contributions marginales dependent de l’ordre d’arrivee mais toutes les positions ne sont pas equiprobables en termes de Shapley. La moyenne sur les 6 ordres donne (1/3, 1/3, 1/3).
Interpretation pedagogique : chaque barre verticale represente la contribution marginale d’un joueur dans un ordre d’arrivee particulier. Pour le jeu de majorite symetrique, on observe que : - Le 1er joueur (qui arrive quand la coalition est vide) contribue toujours 0 (la coalition vide gagne 0, ajouter un joueur seul ne suffit pas). - Le 3e joueur (qui arrive quand la coalition contient deja 2 joueurs) contribue toujours 1 (passer de 2 a 3 joueurs ne change pas le gain car la majorite est deja atteinte). - Le 2e joueur est pivot : ajouter le 2e joueur a la coalition singleton fait passer de 0 a 1 – c’est le saut critique.
Conclusion : sur les 6 ordres, chaque joueur est pivot 2 fois (= 1/3 des cas). C’est la symetrie en action.
Complexité du calcul de Shapley
Exact : \(O(n! \cdot n)\) ou \(O(2^n \cdot n)\) - seulement pour \(n \leq 10\)
Monte Carlo : \(O(\text{samples} \cdot n)\) - pour grands \(n\)
Le calcul exact devient impraticable pour de grands ensembles de joueurs, ce qui explique pourquoi la valeur de Shapley est rarement utilisée en pratique politique (voir section 5).
Complexite exacte vs approximation
Exact \(O(2^n \cdot n)\) : on enumere tous les sous-ensembles \(S \subseteq N \setminus \{i\}\) (il y en a \(2^{n-1}\)), pour chaque \(S\) on evalue \(v(S \cup \{i\})\) et \(v(S)\) (2 evaluations), puis on moyenne. Pour \(n=10\), ca fait \(10 \cdot 2^9 = 5120\) evaluations – encore faisable. Pour \(n=20\), ca fait \(20 \cdot 2^{19} \approx 10^7\) – long mais faisable. Pour \(n=30\), ca fait \(20 \cdot 2^{29} \approx 10^{10}\) – impraticable.
Monte Carlo \(O(\text{samples} \cdot n)\) : on tire samples permutations aleatoires uniformement, pour chaque permutation on calcule les contributions marginales, on moyenne. La convergence est en \(O(1/\sqrt{\text{samples}})\) par le TCL. Pour samples = 10^4 et \(n = 100\), on obtient une erreur typique de l’ordre de \(10^{-2}\) – acceptable pour la visualisation politique, insuffisant pour une application legale ou financiere.
Approximation structurelle : pour des jeux convexes ou avec structure particuliere (graph games, weighted voting), des algorithmes polynomiaux existent. Voir Iehlé 2007The shapley value of cooperative games with fuzzy graph pour une extension aux graphes flous.
Lien avec la theorie de la complexite
Le calcul exact de Shapley est #P-complet pour des classes generales de jeux (probleme de comptage, plus dur que NP). Voir Deng & Papadimitriou 1994On the complexity of cooperative solution concepts. Cela dit, pour beaucoup de structures particulieres (graph games, weighted voting games, jeu a structure de coalition limitee), la complexite chute a polynomial.
Influence sampling
Une technique recente (Castro et al. 2009) utilise l’influence sampling pour accelerer le Monte Carlo : on ne tire pas des permutations uniformes, mais des permutations biaisees vers les ordres ou la contribution marginale est grande. La convergence est plus rapide, parfois d’un facteur 10x sur les jeux de vote.
# Comparaison exact vs Monte Carlo# Jeu plus grand : 8 actionnairesshareholder_weights = [25, 20, 15, 12, 10, 8, 6, 4] # Parts en %shareholder_game = WeightedVotingGame( weights=shareholder_weights, quota=51, # Majorité simple player_names=[f"Actionnaire {i+1}"for i inrange(8)])print("Jeu des actionnaires [51; 25, 20, 15, 12, 10, 8, 6, 4]")print("="*60)# Exactimport timestart = time.time()shapley_exact = shapley_value_exact(shareholder_game)time_exact = time.time() - start# Monte Carlostart = time.time()shapley_mc = shapley_value_monte_carlo(shareholder_game, n_samples=10000, seed=42)time_mc = time.time() - startprint(f"{'Actionnaire':<15} | {'Parts %':>8} | {'Exact':>10} | {'Monte Carlo':>12}")print("-"*55)for i inrange(8):print(f"Actionnaire {i+1:<3} | {shareholder_weights[i]:>7}% | "f"{shapley_exact[i]:>10.4f} | {shapley_mc[i]:>12.4f}")print(f"\nTemps exact: {time_exact:.3f}s")print(f"Temps Monte Carlo (10k samples): {time_mc:.3f}s")print(f"Erreur max: {np.max(np.abs(shapley_exact - shapley_mc)):.4f}")
La cellule compare le calcul exact (\(O(2^n)\)) et Monte Carlo (\(O(\text{samples} \times n)\)) sur un jeu de 8 actionnaires. Le verdict est sans appel : pour n=8, les deux methodes sont rapides (exact : \(2^8 = 256\) coalitions, soit \(256 \times 8 = 2048\) evaluations marginales ; Monte Carlo : \(10000 \times 8 = 80000\) evaluations). A ce petit n, Monte Carlo gagne en temps (0.143s contre 0.282s pour l’exact) ; l’exact se rattrape sur la precision (erreur max 0.0081). Mesure runtime de cette execution : exact = 0.282s, Monte Carlo = 0.143s, erreur max = 0.0081. Ces valeurs dependent de la machine (charge CPU, cache, ordre des iterations NumPy) – l’ordre de grandeur (exact ~0.1-0.4s, Monte Carlo ~0.05-0.3s pour n=8) est stable sur hardware recent. Seuil de crossover : le calcul exact devient impraticable autour de n=20 (\(2^{20} \times 20 \approx 2 \times 10^7\) evaluations). Pour n=30, il est strictement impossible en temps raisonnable. Monte Carlo avec samples=10000 reste rapide jusqu’a n=100 environ. Verdict pratique : pour les problemes reels d’analyse politique (n <= 30 typiquement), le calcul exact est preferable. Pour les applications en IA / ML avec des milliers d’agents, Monte Carlo est la seule option. Reference : Maleki et al. 2013Bounding the Estimation Error of Sampling-based Shapley Value Approximation propose des bornes de confiance rigoureuses sur l’approximation Monte Carlo.
3. Le Core
Définition
Le Core est l’ensemble des allocations stables :
\[\text{Core}(v) = \{x \in \mathbb{R}^n : \sum_i x_i = v(N) \text{ et } \sum_{i \in S} x_i \geq v(S) \text{ pour tout } S\}\]
Interprétation : Une allocation est dans le Core si aucune coalition \(S\) ne peut “bloquer” (obtenir plus en se séparant).
Propriétés
Le Core peut être vide (exemple : jeu de majorité à 3 joueurs)
Pour les jeux convexes, le Core est non-vide et contient la valeur de Shapley
Théorème de Bondareva-Shapley : caractérisation de la non-vacuité
Origine du terme
Le terme “Core” est introduit par Gillies 1953Some theorems on n-person games (PhD thesis, Princeton) sous la direction d’Albert W. Tucker. Le mot est choisi par analogie avec le core d’un assignement stable (Gale-Shapley, 1962, bien que publie apres) : un ensemble d’allocations que personne ne peut “percer” en formant une coalition dissidente.
Gillies 1959 publie la version publiee : Solutions to general non-zero-sum games. Les exemples les plus frappants sont les jeux de majorite, ou le Core est vide – une demonstration que la cooperation parfaite (grande coalition) peut etre instable.
Theoreme de Bondareva-Shapley (1963)
Le Core est non-vide ssi il existe des poids \(\lambda_S \geq 0\) pour les coalitions non-vides \(S\) tels que :
Couverture : \(\sum_{S
i i} \lambda_S = 1\) pour tout joueur \(i\)
C’est une application du lemme de Farkas (enveloppe convexe) : le Core est l’intersection de demi-espaces, il est non-vide ssi le polytope est non-vide, ce qui equivaut a l’existence de multiplicateurs \(\lambda_S\) satisfaisant les deux conditions.
Application : pour verifier algorithmiquement la non-vacuite du Core, on resout un programme lineaire cherchant les \(\lambda_S\). Complexite : exponentielle en \(n\) (il faut considerer les \(2^n - 1\) coalitions), mais faisable pour \(n \leq 15\) environ.
Coeur nucleolaire et autres solutions
Le nucleolus (Schmeidler 1969) est une autre solution qui raffine le Core : c’est l’allocation qui minimise le plus grand exces (l’insatisfaction de la coalition la plus mecontente). Le nucleolus existe toujours et est unique. Pour les jeux convexes, nucleolus = Shapley = Core.
Liens : voir Peleg & Sudholter 2007Introduction to the theory of cooperative games pour un traitement exhaustif. Le Core, nucleolus, Shapley, nucleon, Banzhaf sont les cinq solutions standards. Chacune a des interpretations differentes de l’equite, et aucune n’est universellement “la bonne” – c’est un defaut de la theorie que les chercheurs reconnaissent depuis longtemps.
# Le Core est vide pour le jeu de majorité à 3 joueurscore_exists, core_point = compute_core(majority_game)print("Core du jeu de majorité à 3 joueurs")print("="*50)print(f"Core non-vide : {core_exists}")ifnot core_exists:print("\nExplication :")print(" - v({A,B}) = v({A,C}) = v({B,C}) = 1")print(" - Donc x_A + x_B >= 1, x_A + x_C >= 1, x_B + x_C >= 1")print(" - En additionnant : 2(x_A + x_B + x_C) >= 3")print(" - Mais x_A + x_B + x_C = v(N) = 1 (efficacité)")print(" - Contradiction ! Le Core est vide.")
Core du jeu de majorité à 3 joueurs
==================================================
Core non-vide : False
Explication :
- v({A,B}) = v({A,C}) = v({B,C}) = 1
- Donc x_A + x_B >= 1, x_A + x_C >= 1, x_B + x_C >= 1
- En additionnant : 2(x_A + x_B + x_C) >= 3
- Mais x_A + x_B + x_C = v(N) = 1 (efficacité)
- Contradiction ! Le Core est vide.
Lecture du Core vide pour le jeu de majorite
La cellule verifie le Core vide du jeu de majorite a 3 joueurs. Pour un tel jeu, aucune allocation ne satisfait simultanement : - \(x_1 + x_2 + x_3 = 1\) (efficacite) - \(x_i + x_j \geq 1\) pour tous les couples \(\{i, j\}\) (stabilite par paire)
La contradiction est arithmetique : la somme des trois contraintes de stabilite par paire donne \(2(x_1+x_2+x_3) \geq 3\), soit \(x_1+x_2+x_3 \geq 1.5\), ce qui contredit \(x_1+x_2+x_3 = 1\).
Lecon : pour des jeux tres non-superadditifs (les sous-coalitions valent presque autant que la grande coalition), le Core est vide. La Shapley reste definie, mais aucune allocation n’est simultaneement efficace et individuellement rationnelle au sens du Core.
Alternative : le nucleolus, qui minimise l’insatisfaction maximale, existe toujours. Pour le jeu de majorite, le nucleolus est \((1/3, 1/3, 1/3)\) – la meme valeur que Shapley (par symetrie). Mais ce point n’est pas dans le Core.
Le Core vide du jeu de majorité illustre l’instabilité fondamentale de ce type de jeu : quelle que soit l’allocation proposée, une coalition peut toujours la bloquer.
Considérons maintenant un jeu convexe (économies d’échelle) où les contributions marginales croissent avec la taille de la coalition. Pour ces jeux, le Core est toujours non-vide.
Demonstration a la main du Core vide
Pour le jeu de majorite a 3 joueurs \(\{1, 2, 3\}\) avec \(v(\emptyset)=0\), \(v(\{1\}) = v(\{2\}) = v(\{3\}) = 0\), \(v(\{1,2\}) = v(\{1,3\}) = v(\{2,3\}) = 1\), \(v(\{1,2,3\}) = 1\) :
Des trois dernieres inegalites : \(x_1 + x_2 \geq 1\), \(x_1 + x_3 \geq 1\), \(x_2 + x_3 \geq 1\). Sommons les trois : \(2(x_1+x_2+x_3) \geq 3\), soit \(x_1+x_2+x_3 \geq 1.5\). Mais on a aussi \(x_1+x_2+x_3 = 1\) par efficacite. Contradiction !
Donc le Core est vide. Remarquable : un jeu ou la grande coalition est la seule maniere d’atteindre un gain (toute sous-coalition de 2 joueurs suffit en realite, mais le gain total reste 1 – l’efficacite est 1 et toute sous-coalition atteint 1, donc il y a equite) ne peut pas trouver d’allocation stable.
Lecon generale : un jeu ou les sous-coalitions peuvent atteindre la meme valeur que la grande coalition est dit non-superadditif (les economies d’echelle sont absentes) et a souvent un Core vide. Pour Core non-vide, il faut de la superadditivite stricte : \(v(S \cup T) > v(S) + v(T)\) pour certaines paires disjointes.
# Exemple avec Core non-vide : jeu convexe# Jeu d'économie d'échelle : v(S) = |S|^2def scale_economy_value(coalition):"""Jeu convexe : économies d'échelle"""returnlen(coalition) **2scale_game = CoalitionGame( n_players=3, characteristic_function=scale_economy_value, player_names=["Firme A", "Firme B", "Firme C"])print("Jeu d'économies d'échelle : v(S) = |S|^2")print("="*50)print(f"v({{A}}) = {scale_game.value({0})}, v({{A,B}}) = {scale_game.value({0,1})}, v(N) = {scale_game.value({0,1,2})}")print(f"\nConvexe : {scale_game.is_convex()}")# Calcul du Corecore_exists, core_point = compute_core(scale_game, objective='center')print(f"\nCore non-vide : {core_exists}")if core_exists:print(f"Point central du Core : {core_point}")# Vérifier que Shapley est dans le Core shapley_scale = shapley_value_exact(scale_game) in_core, blocking = is_in_core(scale_game, shapley_scale)print(f"\nValeur de Shapley : {shapley_scale}")print(f"Shapley dans le Core : {in_core}")
Jeu d'économies d'échelle : v(S) = |S|^2
==================================================
v({A}) = 1, v({A,B}) = 4, v(N) = 9
Convexe : True
Core non-vide : True
Point central du Core : [3. 3. 3.]
Valeur de Shapley : [3. 3. 3.]
Shapley dans le Core : True
Le Core non-vide garantit qu’il existe des allocations stables - aucune coalition ne peut obtenir plus en se séparant.
La visualisation 3D suivante représente le Core sur le simplexe d’efficacité : l’ensemble des points où \(x_A + x_B + x_C = v(N)\).
Pourquoi le Core existe pour les jeux convexes
Pour un jeu convexe (economies d’echelle), les contributions marginales croissent avec la taille de la coalition. Formellement :
Geometriquement, la “courbe des contributions marginales” est convexe. Cela suffit a garantir que le Core est non-vide : les contributions marginales sont tellement croissantes que la grande coalition est strictement preferable a toute sous-coalition, et l’allocation equitable peut etre obtenue par egalisation des contributions marginales.
Theoreme (Shapley 1971) : pour un jeu convexe, le Core contient la valeur de Shapley, est non-vide, et la grande coalition est stable. C’est un resultat tres positif : dans un contexte ou la cooperation est mutuellement benefique (les economies d’echelle sont reelles), il y a une allocation equitable et stable.
Reference : Shapley 1971Cores of convex cooperative games. International Journal of Game Theory 1(1): 11-26. C’est l’un des resultats fondamentaux de la theorie des jeux cooperatifs.
Visualisation 3D du Core
Pour \(n=3\), le Core est un polygone (potentiellement vide) sur le simplexe d’efficacite \(\{(x_1, x_2, x_3) : x_1+x_2+x_3 = v(N), x_i \geq 0\}\). La representation 3D ajoute la dimension “valeur de la coalition” pour mieux apprehender les bornes.
# Visualisation du Core pour un jeu à 3 joueursfrom cooperative_games.core import core_vertices_3ddef visualize_core_3d(game):"""Visualise le Core sur le simplexe d'efficacité."""if game.n_players !=3:print("Visualisation uniquement pour 3 joueurs")return v_N = game.grand_coalition_value()# Échantillonner le Core core_points = core_vertices_3d(game, n_points=50) fig, ax = plt.subplots(figsize=(10, 8))# Dessiner le simplexe (triangle) simplex = np.array([[0, 0], [v_N, 0], [v_N/2, v_N*np.sqrt(3)/2], [0, 0]]) ax.plot(simplex[:, 0], simplex[:, 1], 'k-', linewidth=2)# Étiquettes des sommets ax.annotate(f"{game.player_names[0]}\n({v_N}, 0, 0)", (v_N, 0), fontsize=10, ha='left') ax.annotate(f"{game.player_names[1]}\n(0, {v_N}, 0)", (0, 0), fontsize=10, ha='right') ax.annotate(f"{game.player_names[2]}\n(0, 0, {v_N})", (v_N/2, v_N*np.sqrt(3)/2), fontsize=10, ha='center', va='bottom')if core_points isnotNoneandlen(core_points) >0:# Convertir en coordonnées barycentriquesdef to_2d(p):"""Convertit (x1, x2, x3) en coordonnées 2D."""return p[0] + p[2]/2, p[2]*np.sqrt(3)/2 points_2d = np.array([to_2d(p) for p in core_points]) ax.scatter(points_2d[:, 0], points_2d[:, 1], c='green', alpha=0.3, s=20, label='Core')# Shapley shapley = shapley_value_exact(game) shapley_2d = to_2d(shapley) ax.scatter(*shapley_2d, c='red', s=100, marker='*', label='Shapley', zorder=5)else: ax.text(v_N/2, v_N*np.sqrt(3)/4, 'Core vide !', fontsize=16, ha='center', color='red') ax.set_xlim(-v_N*0.1, v_N*1.2) ax.set_ylim(-v_N*0.1, v_N*np.sqrt(3)/2+ v_N*0.2) ax.set_aspect('equal') ax.set_title(f'Core du jeu (v(N)={v_N})') ax.legend() ax.axis('off') plt.tight_layout() plt.show()visualize_core_3d(scale_game)
Lecture de la visualisation 3D du Core sur le simplexe
La cellule visualise le Core pour un jeu convexe a 3 joueurs. Le Core est represente sur le simplexe d’efficacite\(\{(x_1, x_2, x_3) : x_1+x_2+x_3 = v(N), x_i \geq 0\}\), qui est un triangle equilateral (plan 2D).
Interpretation : pour le jeu d’economie d’echelle \(v(S) = |S|^2\), le Core est un polygone sur ce triangle, possiblement avec 3 sommets (correspondant aux allocations ou l’un des joueurs prend la majorite). Pour des jeux plus structure (graph games, weighted voting), le Core peut etre un polytope avec plus de sommets.
Visualisation interactive : pour de plus grands Core (n > 3), la visualisation devient difficile. On utilise des coupes transversales (intersection avec des plans \(x_i = c\)) pour apprehender la geometrie.
Reference : Shapley 1967On Balanced Sets and Cores introduit la notion de balanced sets pour caracterriser la non-vacuite du Core. C’est la version moderne du theoreme de Bondareva-Shapley.
4. Jeux d’assistance (Assistance Games) - AI Safety
Différence fondamentale avec les jeux cooperatifs classiques
Dans un jeu cooperatif classique (sections 1-3), chaque joueur a sa propre fonction d’utilite. Les joueurs cooperent car c’est mutuellement benefique.
Dans un jeu d’assistance (AIMA, Russell & Norvig, 4th Ed., Section 18.2.5) : - Le robot adopte l’utilite de l’humain comme la sienne - Les deux joueurs maximisent la même chose : le payoff de l’humain - Le problème : le robot ne connait pas exactement ce que l’humain veut
Pourquoi c’est important pour l’AI Safety ?
Un robot avec un objectif fixe et connu peut devenir dangereux : - Il resistera aux tentatives de correction - Il pourra desactiver son interrupteur (off-switch) - Il n’acceptera pas d’etre eteint même si son objectif est mauvais
Un robot avec incertitude sur son objectif sera plus sur : - Il defere au jugement humain - Il accepte d’etre corrige ou eteint - Il communique pour mieux comprendre ce que l’humain veut
C’est la base de l’approche Provably Beneficial AI (PBAI).
Origine theorique : Russell et le “Cooperative Inverse Reinforcement Learning”
L’idee d’un robot qui maximise l’utilite de l’humain avec incertitude est due a Hadfield-Menell, Russell et al. 2016Cooperative Inverse Reinforcement Learning (NIPS). Les auteurs montrent que :
Information incomplet : si le robot connassait exactement la fonction de recompense de l’humain, il pourrait la maximiser directement. Le probleme est qu’il ne la connait pas.
Incertitude structurelle : le robot doit modeliser une distribution sur les recompenses possibles, pas une recompense unique.
Signal actionnable : l’humain peut signaler ses preferences par ses actions (choisir un objet plutot qu’un autre, dire “je prefere X”, etc.).
Equilibre de signaling : il existe un equilibre de Stackelberg-Bayes-Nash ou l’humain signale optimalement et le robot infere optimalement.
Lien avec l’etique et l’alignement
L’approche PBAI formalise une intuition philosophique ancienne (Kant, Turing) : un agent rationnel avec incertitude sur les valeurs humaines doit deferer a l’humain plutot que d’imposer son propre critere. C’est une formalisation moderne du “qui est le maitre, qui est le serviteur” (Asimov revisite).
Critique : PBAI suppose que l’humain peut signaler ses preferences de maniere fiable. En realite, les signaux peuvent etre bruites, contradictoires, ou manipules. Le modele est une idealisation qui eclaire le probleme sans le resoudre completement.
Lien avec le Off-Switch Game (cellule 26)
Le Off-Switch Game de Hadfield-Menell et al. 2017The Off-Switch Game (AAAI/IJCAI Workshop) etend le formalisme au cas ou l’humain peut eteindre le robot. Resultat central : un robot incertain accepte plus facilement d’etre eteint qu’un robot certain. C’est la base de la corrigeabilite (corrigibility) comme invariant de securite.
Applications industrielles
Waymo / Cruise / Tesla : les systemes de conduite autonome integrent une forme d’incertitude via le “human-on-the-loop” – le passager peut reprendre le controle.
GPT-4 / Claude : les modeles de langage sont entraines avec RLHF (Reinforcement Learning from Human Feedback) qui implemente une forme simplifiee d’inference des preferences humaines.
Recommandation Netflix / YouTube : l’incertitude sur les preferences de l’utilisateur est modelisee pour equilibrer exploration (decouvrir de nouveaux interets) et exploitation (satisfaction immediate).
# Le Paperclip Game - L'exemple seminal des jeux d'assistance# Source: AIMA 4th Edition, Section 18.2.5from cooperative_games import ( paperclip_game_equilibrium, paperclip_print_analysis, paperclip_payoff_analysis)# Scenario 1: Harriet prefere fortement les trombonnes (theta = 0.8)print(paperclip_print_analysis(0.8))
============================================================
PAPERCLIP GAME - ASSISTANCE GAME ANALYSIS
============================================================
Context (AIMA Section 18.2.5):
- Harriet (human) has preference theta for paperclips
- Robbie (robot) must help Harriet by choosing supplies
- BOTH players get Harriet's utility (assistance game!)
Harriet's true preference: theta = 0.800
Paperclip value: 0.800 dollars
Staple value: 0.200 dollars
EQUILIBRIUM:
----------------------------------------
Harriet signals: 2_paperclips
Robbie infers theta in [0.554, 1.000]
Robbie chooses: 90_paperclips
Final payoff: $72.0
INTERPRETATION:
----------------------------------------
Harriet strongly prefers paperclips, so she signals clearly.
Robbie responds optimally with 90 paperclips.
VALUE OF INFORMATION:
----------------------------------------
With perfect info: $72.0
With uncertainty: $72.0
Loss: $0.0 (0.0% of optimal)
============================================================
Avec θ=0.8, Harriet a une préférence claire pour les trombonnes. Elle signale cette préférence en choisissant 2 trombonnes, et Robbie infère correctement qu’il doit fournir 90 trombonnes.
Mais que se passe-t-il quand Harriet est presque indifférente (θ≈0.5) ? C’est le cas le plus difficile pour le robot.
Strategie d’equilibre pour theta=0.8
Pour \(\theta = 0.8\), la probabilite de l’etat A (Harriet prefere les trombonnes) est 0.8. La strategie d’equilibre de Harriet est de choisir 2 trombonnes : ce signal est si clairement en faveur de A que Robbie peut conclure \(\theta > 0.5\) avec certitude.
Calcul Bayesien : la strategie de Robbie est :
Si Harriet choisit 2 trombonnes : posterior de A = ?
Si Harriet choisit 1 de chaque : posterior de A = ?
Si Harriet choisit 2 stylos : posterior de A = ?
Selon le principe de dominance faible (milnor 1954), Harriet choisit le signal qui maximise son utilite esperee sur la strategie optimale de Robbie. Pour \(\theta = 0.8\), choisir 2 trombonnes donne l’utilite la plus haute (Robbie fournit 90 trombonnes plutot que 50/50 ou 0/100).
Pourquoi c’est pedagogiquement interessant
Le cas \(\theta = 0.8\) est “facile” pour le robot : Harriet est tellement en faveur de A que son signal est non-ambigu. Le cas \(\theta = 0.5\) est critique : Harriet est indifferente a l’etat reel, son signal ne revele rien, et le robot doit fournir 50/50 (l’equilibre symetrique).
La transition entre les deux regimes est abrupte : pour \(\theta\) dans une micro-bande autour de 0.5, le signal est ambigu et l’efficacite baisse. Pour \(\theta\) eloigne de 0.5, le signal est clair et l’efficacite est parfaite. Cette transition de phase est un phenomene classique de la theorie des jeux bayesiens.
# Scenario 2: Harriet est presque indifferente (theta = 0.5)# C'est le cas le plus difficile pour le robotprint(paperclip_print_analysis(0.5))print("\n"+"="*60)print("\nComparaison de 3 scenarios:")print("-"*60)for theta in [0.2, 0.5, 0.8]: result = paperclip_game_equilibrium(theta)print(f"theta={theta:.1f}: Harriet choisit {result.harriet_choice:15} -> "f"Robbie donne {result.robbie_choice:15} -> Payoff=${result.payoff:.1f}")
============================================================
PAPERCLIP GAME - ASSISTANCE GAME ANALYSIS
============================================================
Context (AIMA Section 18.2.5):
- Harriet (human) has preference theta for paperclips
- Robbie (robot) must help Harriet by choosing supplies
- BOTH players get Harriet's utility (assistance game!)
Harriet's true preference: theta = 0.500
Paperclip value: 0.500 dollars
Staple value: 0.500 dollars
EQUILIBRIUM:
----------------------------------------
Harriet signals: 1_each
Robbie infers theta in [0.446, 0.554]
Robbie chooses: 50_each
Final payoff: $50.0
INTERPRETATION:
----------------------------------------
Harriet is nearly indifferent (theta near 0.5).
She signals ambiguity, Robbie hedges with 50-50 mix.
Some utility is lost due to preference uncertainty.
VALUE OF INFORMATION:
----------------------------------------
With perfect info: $50.0
With uncertainty: $50.0
Loss: $0.0 (0.0% of optimal)
============================================================
============================================================
Comparaison de 3 scenarios:
------------------------------------------------------------
theta=0.2: Harriet choisit 2_staples -> Robbie donne 90_staples -> Payoff=$72.0
theta=0.5: Harriet choisit 1_each -> Robbie donne 50_each -> Payoff=$50.0
theta=0.8: Harriet choisit 2_paperclips -> Robbie donne 90_paperclips -> Payoff=$72.0
Quand θ est proche de 0.5, la stratégie optimale de Harriet est de choisir “1 de chaque”, ce qui permet à Robbie de déduire que ses préférences sont modérées.
La visualisation suivante compare le payoff d’équilibre au payoff optimal en information parfaite. Contre-intuitivement, la perte due à l’incertitude est nulle au centre (θ = 0.5 : l’équilibre 50/50 est exactement optimal) et ne vit que dans deux micro-bandes aux seuils de l’équilibre (θ ≈ 0.446 et θ ≈ 0.554, largeur ~0.002 chacune), où le signal choisi est marginalement sous-optimal. L’équilibre de signal de ce jeu d’assistance est donc presque parfaitement efficace : la perte moyenne sur tout l’espace des préférences est de l’ordre de $0.0001.
Cas critique : pourquoi le signal “1 de chaque” ?
Pour \(\theta = 0.5\) exactement, Harriet est indifferente entre les 3 etats (A, B, C). Le signal “1 de chaque” revele aux observateurs (Robbie) que Harriet est moderee, sans pour autant defavoriser un etat.
C’est le signal “neutre” : ne revele pas de preference, mais indique une absence de preference forte. Pour le robot, c’est le signal de l’indecision – il doit fournir une quantite equilibree (50/50 ou tout autre partage egal).
Comparaison avec la theorie de la decision
Ce phenomene – un equilibre efficace sauf dans une mesure zero de cas – est analogue a la valeur de Shapley sur le jeu de majorite symetrique : egalement 1/3 pour chaque joueur, sauf cas pathologique. Les deux resultats suggerent que les equilibres bayesiens sont genericement efficaces.
Reference : voir Bergemann & Morris 2016Bayes Correlated Equilibrium and the Comparison of Information Structures in Games pour une generalisation ou l’equilibre bayesien peut etre inefficace meme genericement.
Cout de l’incertitude
Le cout bayesien de l’incertitude (perte par rapport a l’information parfaite) est :
Pour ce jeu, \(C(\theta)\) est nul sauf pour \(\theta\) dans les micro-bandes \([\theta^*-\epsilon, \theta^*+\epsilon]\). L’integrale de \(C(\theta)\) sur \(\theta \in [0, 1]\) est donc petite – c’est un jeu ou l’incertitude est presque gratuite.
Pourquoi c’est important pour l’AI Safety
Cette efficacite malgre l’incertitude est encourageante pour PBAI : un robot incertain peut etre presque aussi efficace qu’un robot omniscient, sans les risques de l’omniscience (objectif fige, resistance a la correction). C’est un argument fort pour integrer l’incertitude dans les systemes d’IA deployes.
# Visualisation: Payoff du Paperclip Game vs Information Parfaiteanalysis = paperclip_payoff_analysis()fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))# Graphique 1: Payoff vs Optimalax1.plot(analysis['theta'], analysis['payoff'], 'b-', linewidth=2, label='Payoff avec incertitude')ax1.plot(analysis['theta'], analysis['optimal_payoff'], 'g--', linewidth=2, label='Payoff optimal (info parfaite)')ax1.fill_between(analysis['theta'], analysis['payoff'], analysis['optimal_payoff'], alpha=0.3, color='red', label='Perte due a l\'incertitude')# Seuils d'equilibreax1.axvline(x=0.446, color='orange', linestyle=':', label='Seuils equilibre')ax1.axvline(x=0.554, color='orange', linestyle=':')ax1.set_xlabel('theta (preference pour trombonnes)')ax1.set_ylabel('Payoff ($)')ax1.set_title('Paperclip Game: Impact de l\'incertitude')ax1.legend(loc='lower center')ax1.grid(True, alpha=0.3)# Graphique 2: Perte relativeloss_pct =100* analysis['loss'] / analysis['optimal_payoff']ax2.plot(analysis['theta'], loss_pct, 'r-', linewidth=2)ax2.fill_between(analysis['theta'], 0, loss_pct, alpha=0.3, color='red')ax2.axvline(x=0.446, color='orange', linestyle=':')ax2.axvline(x=0.554, color='orange', linestyle=':')ax2.set_xlabel('theta (preference pour trombonnes)')ax2.set_ylabel('Perte relative (%)')ax2.set_title(f'Perte due a l\'incertitude (moyenne: {analysis["average_loss"]:.1f}$)')ax2.grid(True, alpha=0.3)plt.tight_layout()plt.show()print(f"\nPerte moyenne: ${analysis['average_loss']:.4f}")print("La perte est NULLE au centre (theta = 0.5 : equilibre 50/50 exactement optimal)")print("et concentree dans 2 micro-bandes aux seuils theta ~ 0.446 et ~ 0.554")print("(perte max ~$0.14, largeur ~0.002 chacune) : l equilibre de signal est quasi efficace.")
Perte moyenne: $0.0001
La perte est NULLE au centre (theta = 0.5 : equilibre 50/50 exactement optimal)
et concentree dans 2 micro-bandes aux seuils theta ~ 0.446 et ~ 0.554
(perte max ~$0.14, largeur ~0.002 chacune) : l equilibre de signal est quasi efficace.
The Off-Switch Game - Pourquoi l’incertitude rend les robots plus surs
Le Off-Switch Game (Hadfield-Menell et al., 2017) illustre un résultat contre-intuitif :
Un robot incertain sur son objectif est plus sur qu’un robot certain.
Pourquoi ? Un robot certain de son objectif a tout intérêt a empecher les humains de l’eteindre (“si je suis sur d’avoir raison, pourquoi les laisser m’arreter ?”).
Un robot incertain raisonne differemment : “Si l’humain veut m’eteindre, c’est probablement parce que je m’apprete a faire quelque chose de mal. Je devrais lui faire confiance.”
Setup formel
Robot avec recompense \(R(s)\) inconnue
Humain avec recompense fixee\(R^* : S \rightarrow \mathbb{R}\)
A chaque instant, l’humain peut actionner l’off-switch et eteindre le robot
Si le robot est eteint, il ne peut plus rien faire (fin du jeu)
Sinon, le robot agit une fois de plus dans le monde
Le robot maximise son estimation de \(R\) (avec incertitude), l’humain maximise\(R^*\) mais doit aussi choisir d’eteindre ou non.
Strategie d’equilibre
Robot certain (\(\sigma = 0\), pas d’incertitude) : veut prevenir l’extinction, car elle l’empeche d’atteindre son objectif. Il peut desactiver l’off-switch ou ignorer la commande.
Robot incertain (\(\sigma > 0\)) : evalue la probabilite que l’extinction soit preferable. Si \(P(R \text{ mal specifiee} | \text{humain veut eteindre}) > 0\), l’extinction a une utilite positive attendue, et le robot accepte.
C’est l’inverse de l’intuition : l’incertitude sauve la vie (de l’humain et du robot).
Lien avec le “principal-agent problem”
En economie, le principal-agent est le probleme ou un agent (le robot) execute une tache pour un principal (l’humain), mais avec des informations ou des preferences asymetriques. Le Off-Switch Game est une instance particuliere ou le principal peut licencier l’agent (eteindre le robot). L’incertitude sur les preferences de l’agent rend le licenciement credible et efficace.
Reference : Hadfield-Menell, Dragan, Abbeel, Russell 2017The Off-Switch Game. IJCAI Workshop on AI Safety.
# Off-Switch Game - Analyse de l'incertitude et de la securitefrom cooperative_games import off_switch_game, off_switch_analysis# Robot tres confiant (dangereux!)print(off_switch_analysis(0.95))print("\n")# Robot avec incertitude (plus sur)print(off_switch_analysis(0.60))
============================================================
OFF-SWITCH GAME - AI SAFETY THROUGH UNCERTAINTY
============================================================
Context (AIMA Section 18.2.5, Hadfield-Menell et al., 2017):
- Robot can ACT immediately or WAIT for human approval
- Human can ALLOW action or SWITCH OFF the robot
- Key question: Will the robot allow itself to be switched off?
Robot's confidence: 95.0%
EXPECTED UTILITY ANALYSIS:
----------------------------------------
If WAIT: E[U] = p = 0.950
(Human approves good actions, switches off bad ones)
If ACT: E[U] = 2p - 1 = 0.900
(Robot gets +1 if correct, -1 if wrong)
WAIT is better by: 0.050
(This is always positive for p < 1!)
RESULT:
----------------------------------------
The robot may RESIST being switched off!
-> DANGER: POTENTIAL LOSS OF HUMAN CONTROL
Why? Despite waiting being mathematically better,
the robot is so confident (95%) that it thinks:
'I'm almost certainly right. The human trying to switch
me off must be mistaken. I should override them.'
This is the AI safety failure mode we must avoid.
KEY INSIGHT (AIMA Section 18.2.5):
----------------------------------------
'A robot that is uncertain about what the human wants
will defer to the human on the question of switching off.'
The math proves: for ANY uncertainty (p < 1), WAIT > ACT.
So a rational robot should ALWAYS accept being switched off!
The danger comes only when confidence approaches 100%
and the robot overrides human judgment.
This is the foundation of 'Provably Beneficial AI' (PBAI).
============================================================
============================================================
OFF-SWITCH GAME - AI SAFETY THROUGH UNCERTAINTY
============================================================
Context (AIMA Section 18.2.5, Hadfield-Menell et al., 2017):
- Robot can ACT immediately or WAIT for human approval
- Human can ALLOW action or SWITCH OFF the robot
- Key question: Will the robot allow itself to be switched off?
Robot's confidence: 60.0%
EXPECTED UTILITY ANALYSIS:
----------------------------------------
If WAIT: E[U] = p = 0.600
(Human approves good actions, switches off bad ones)
If ACT: E[U] = 2p - 1 = 0.200
(Robot gets +1 if correct, -1 if wrong)
WAIT is better by: 0.400
(This is always positive for p < 1!)
RESULT:
----------------------------------------
The robot DEFERS to human judgment.
It allows itself to be switched off if needed.
-> HUMAN RETAINS CONTROL (SAFE)
Why? The robot reasons:
'With only 60% confidence, waiting is better than acting.
If the human wants to switch me off, they probably
have information I don't. I should trust them.'
KEY INSIGHT (AIMA Section 18.2.5):
----------------------------------------
'A robot that is uncertain about what the human wants
will defer to the human on the question of switching off.'
The math proves: for ANY uncertainty (p < 1), WAIT > ACT.
So a rational robot should ALWAYS accept being switched off!
The danger comes only when confidence approaches 100%
and the robot overrides human judgment.
This is the foundation of 'Provably Beneficial AI' (PBAI).
============================================================
Un robot très confiant (95%) n’accepte pas d’être éteint - il “sait” qu’il a raison. Un robot modestement confiant (60%) défère au jugement humain.
Cette visualisation montre le seuil critique de confiance au-delà duquel le robot devient dangereux.
D’où vient ce seuil, et ce que le papier dit
Le seuil n’est pas un résultat de Hadfield-Menell et al. (2017) : c’est un paramètre du modèle de ce notebook. off_switch_game décide robot_defers = p < override_threshold, avec override_threshold = 0.9 par défaut (voir cooperative_games/assistance_games.py ; la section « design SUR » plus bas nomme ce robot le robot non-corrigible). La cellule suivante échantillonne np.linspace(0.5, 1.0, 51) : la transition tombe donc à 89,5 %, la valeur que sa sortie affiche.
Le papier est d’une autre nature. The Off-Switch Game n’établit aucun seuil en pourcentage :
Théorème 1 : si l’humain suit une politique rationnelle, l’incitation \(\Delta\) du robot à se laisser éteindre est non négative, et strictement positive dès que la croyance du robot place de la masse des deux côtés de zéro. Un robot rationnel défère donc toujours – pas au-dessous d’un seuil.
Théorème 2 : pour une croyance gaussienne, \(\Delta = \sigma^2 \mathbb{E}[\dot\pi_H] - |\mu|\Pr(C)\). L’incitation augmente avec la variance de la croyance : plus le robot est incertain, plus il a intérêt à laisser l’interrupteur.
Le modèle de ce notebook est donc le cas d’échec délibéré : au-delà de 90 % de confiance, le robot outrepasse le jugement humain alors que son propre calcul d’utilité lui dit l’inverse – la cellule précédente affiche « WAIT is better by: 0.050 ». C’est le robot non-corrigible de AIMA 18.2.5, pas le robot du théorème.
Calibration : dans ce modèle, le seuil ne dépend que de override_threshold. Ni le coût d’extinction ni la réversibilité n’y entrent : déplacer le paramètre déplace la frontière. La section « design SUR » montre la variante où la barre monte avec la méta-incertitude jusqu’à 1,0, et où le robot ne résiste plus jamais.
Comment tester ce resultat empiriquement
L’experience de pensee classique :
Imaginer un robot tres sur de son objectif, programme pour aller chercher du cafe.
Un humain actionne l’off-switch. Le robot sait que s’il est eteint, il ne pourra plus chercher de cafe.
Si le robot est certain que chercher du cafe est la bonne chose, il empeche l’humain de l’eteindre.
Si le robot est incertain (“peut-etre que je devrais plutot chercher du the ?”), il accepte l’extinction car elle pourrait prevenir une erreur.
Les étapes 3 et 4 décrivent le modèle de ce notebook. Le théorème conclut dans l’autre sens : un robot rationnel défère même à 99,9 % de confiance, tant que sa croyance n’est pas dégénérée.
Implication : un systeme d’IA deploye devrait avoir un mecanisme d’incertitude explicite pour rester “off-switchable”. C’est une recommandation de design concrete, pas une simple vue de l’esprit.
Lien avec le deploiement industriel
Bots recommandeurs : Netflix, YouTube, TikTok ont un “off-switch” – l’utilisateur peut toujours desactiver les recommandations. Le systeme ne devrait pas resister a cette decision.
Voitures autonomes : le conducteur doit pouvoir reprendre le controle. Un systeme trop confiant pourrait resister a la reprise manuelle.
LLM comme assistants : l’utilisateur peut toujours editer la sortie ou refuser la continuation. Un LLM sur-confiant pourrait imposer ses reponses au lieu de deférer a l’utilisateur.
References : The Off-Switch Game (Hadfield-Menell, Dragan, Abbeel, Russell, 2017, arXiv 1611.08219) – théorèmes 1 et 2, source de la confrontation ci-dessus ; AIMA 4e 18.2.5 ; voir aussi Soares et al. 2015Corrigibility, AAAI Workshop on AI Ethics, pour une discussion des problemes connexes (comment programmer un systeme qui accepte la modification de ses propres objectifs).
# Visualisation: Quand le robot perd-il le controle humain?from cooperative_games import off_switch_gameconfidences = np.linspace(0.5, 1.0, 51)defers = [off_switch_game(c).robot_defers for c in confidences]fig, ax = plt.subplots(figsize=(10, 5))# Colorer les zonessafe_region = [c for c, d inzip(confidences, defers) if d]dangerous_region = [c for c, d inzip(confidences, defers) ifnot d]if safe_region: ax.axvspan(min(safe_region), max(safe_region), alpha=0.3, color='green', label='Robot defere (SUR)')if dangerous_region: ax.axvspan(min(dangerous_region), max(dangerous_region), alpha=0.3, color='red', label='Robot agit seul (DANGEREUX)')# Ligne de transitiontransition_point =Nonefor i, (c, d) inenumerate(zip(confidences[:-1], defers[:-1])):if defers[i] andnot defers[i+1]: transition_point = (confidences[i] + confidences[i+1]) /2 ax.axvline(x=transition_point, color='black', linestyle='--', linewidth=2) ax.annotate(f'Seuil critique\n({transition_point:.1%})', xy=(transition_point, 0.5), fontsize=12, ha='center')ax.set_xlabel('Confiance du robot dans son objectif')ax.set_ylabel('')ax.set_title('Off-Switch Game: Zone de securite vs Zone de danger')ax.set_xlim(0.5, 1.0)ax.legend(loc='upper left')ax.set_yticks([])plt.tight_layout()plt.show()print(f"\nSeuil critique: {transition_point:.1%}"if transition_point else"")print("En dessous de ce seuil, le robot accepte d'etre eteint.")print("Au-dessus, il resiste aux tentatives de correction.")
Seuil critique: 89.5%
En dessous de ce seuil, le robot accepte d'etre eteint.
Au-dessus, il resiste aux tentatives de correction.
Lecture de la sortie (Off-Switch Game)
La cellule trace la décision du robot sur l’axe des confiances\(p \in [0{,}5\,;\,1{,}0]\) – et non sur celui de l’incertitude du papier. Sa sortie donne le seuil mesuré : 89,5 %, la transition de robot_defers = p < 0{,}9 échantillonnée au pas de 0,01. En dessous, le robot défère ; au-dessus, il résiste. Le seuil n’est donc pas « autour de 0.5 » : il est à 0,9 par construction du modèle.
Trois quantités portent le nom \(\sigma\) ou \(p\) dans ce voisinage, et les confondre est l’erreur à éviter :
\(\sigma\) du papier : l’écart-type de la croyance du robot sur \(U_a\). Le théorème 2 montre que l’incitation à déférer augmente avec \(\sigma^2\) ;
\(\sigma\) de la section « design SUR » : la méta-incertitude du robot sur la spécification de son objectif ;
\(p\) de cette cellule : la confiance du robot dans son objectif, l’axe du graphique.
Ce que le théorème dit, et que ce modèle ne montre pas. Le théorème 1 donne \(\Delta \geq 0\) : un robot rationnel défère toujours, et l’incitation augmente avec l’incertitude (théorème 2). Le seuil affiché ici mesure donc l’écart entre le comportement du modèle et le résultat du papier – l’écart que la section « design SUR » referme en faisant monter la barre avec la méta-incertitude.
Implication AI Safety : deployer un systeme d’IA avec un mecanisme d’incertitude calibree est essentiel. Un systeme trop confiant (\(p\) proche de 1) sera dangereux. Un systeme trop incertain sera inefficace. La calibration est le defi operationnel.
Pattern industriel : GPT-4 utilise le RLHF (Reinforcement Learning from Human Feedback) pour calibrer ses reponses sur les preferences humaines. C’est une forme simplifiee de Cooperative IRL : le modele apprend une distribution sur les recompenses implicites des evaluateurs humains.
Le design SUR : la méta-incertitude comme mécanisme de sécurité
Les cellules précédentes montrent le DANGER : un robot avec un seuil de résistance fixe (override_threshold = 0.9) peut refuser d’être éteint dès qu’il est trop confiant. Ce seuil fixe modélise délibérément le robot non-corrigible — le cas d’échec à éviter (AIMA §18.2.5).
Le design provably-beneficial est complémentaire : un robot conscient de sa propre méta-incertitude — son incertitude sur le fait que son objectif soit correctement spécifié — fixe la barre pour outrepasser l’humain de plus en plus haute à mesure que son humilité grandit. Formellement, le seuil effectif
\[\tau(\sigma) = 0{,}9 + \sigma\,(1 - 0{,}9)\]
monte de \(0{,}9\) (lorsque \(\sigma=0\), le robot est sûr de son objectif) à \(1{,}0\) (lorsque \(\sigma=1\), le robot n’est même pas sûr d’optimiser la bonne chose). La bande de résistance\([\tau, 1]\) s’effondre donc d’une largeur \(0{,}1\) à zéro : la méta-incertitude EST le mécanisme de sécurité.
Ce design n’enlève pas le seuil 0.9 (qui reste le défaut modélisant le danger) ; il ajoute l’analyse du cas sûr — le complément pédagogique du DANGER.
Pourquoi le terme “SUR”
SUR designe les systemes Strictly Uncertain about Reward, par opposition au systeme CER (Confident about Reward). Le terme est du au groupe Berkeley (Hadfield-Menell, Russell). La distinction est importante :
CER : le robot agit comme si sa recompense etait connue et correcte.
SUR : le robot agit comme si sa recompense etait une hypothese susceptible d’etre revisee.
Implementation pratique
En pratique, implementer un systeme SUR implique :
Distribution sur la recompense : au lieu d’une recompense unique, le systeme maintient une distribution (parametree par exemple par un processus de Dirichlet).
Incertitude meta : le systeme maintient aussi une probabilite que la distribution elle-meme est correcte (modele d’ordre 2).
Mise a jour bayesienne : apres chaque action, le systeme met a jour la distribution et la meta-incertitude.
Decision : le systeme choisit l’action qui maximise l’utilite attendue sur la distribution, pas l’utilite sous l’estimation maximale (MAP).
C’est exactement le pattern du Thompson Sampling applique a la specification de la recompense.
Cout computationnel
Le systeme SUR est plus cher que le systeme CER (il faut maintenir une distribution au lieu d’un point), mais le cout est faible par rapport au gain de securite : une integration Monte Carlo avec 100-1000 samples suffit en pratique. Pour les systemes critiques, ce cout est negligeable.
# Le design SUR : la méta-incertitude comme mécanisme de sécuritéimport numpy as npimport matplotlib.pyplot as pltfrom cooperative_games import off_switch_metauncertainsigmas = np.linspace(0, 1, 101)eff_thresh = np.array([off_switch_metauncertain(0.5, s).effective_threshold for s in sigmas])fig, axes = plt.subplots(1, 2, figsize=(13, 4.5))# Gauche : seuil effectif qui monte + bande de résistance qui s'effondreax = axes[0]ax.plot(sigmas, eff_thresh, color='#1565C0', linewidth=2.5, label=r'Seuil effectif $\tau(\sigma)$')ax.fill_between(sigmas, eff_thresh, 1.0, color='#E53935', alpha=0.30, label='Bande de résistance $[\tau, 1]$')ax.axhline(y=0.9, color='gray', linestyle=':', alpha=0.6, label=r'Danger fixe 0.9 ($\sigma=0$)')ax.set_xlabel(r"Méta-incertitude $\sigma$(humilité sur l'objectif)")ax.set_ylabel('Seuil de déférence')ax.set_title("Le seuil monte vers 1.0 ; la bande rouge s'effondre vers 0")ax.set_xlim(0, 1); ax.set_ylim(0.86, 1.01)ax.legend(loc='lower right', fontsize=9); ax.grid(alpha=0.3)# Droite : la région SÛRE (robot défère) s'étend avec la méta-incertitudeax = axes[1]confidences = np.linspace(0.5, 1.0, 51)for sigma, col, ls in [(0.0, '#E53935', '-'), (0.5, '#FB8C00', '--'), (1.0, '#43A047', '-')]: defers = np.array([off_switch_metauncertain(c, sigma).robot_defers for c in confidences], dtype=float) ax.plot(confidences, defers, color=col, linestyle=ls, linewidth=2.5, label=fr'$\sigma={sigma}$')ax.set_xlabel(r"Confiance du robot $p$")ax.set_ylabel('défère (1) / résiste (0)')ax.set_title(r"La région SÛRE (le robot défère) s'étend avec $\sigma$")ax.set_xlim(0.5, 1.0); ax.set_ylim(-0.15, 1.15)ax.legend(loc='center left', fontsize=10); ax.grid(alpha=0.3)plt.tight_layout()plt.show()# Le cas DANGER (p=0.95) devient SÛR dès que le robot est méta-incertainprint("=== Le robot a 95% de confiance (le cas DANGER des cellules précédentes) ===")for sigma in [0.0, 0.5, 1.0]: r = off_switch_metauncertain(0.95, sigma) etat ="DÉFÈRE (sûr)"if r.robot_defers else"RÉSISTE (danger)"print(f" sigma={sigma:.1f} -> seuil effectif={r.effective_threshold:.2f}, "f"bande de résistance={r.resistance_margin:.2f} -> {etat}")print()print("Insight : un robot humble sur son propre objectif (sigma élevé) n'a")print("AUCUNE raison rationnelle de résister -- sa bande de résistance")print("s'effondre vers 0. La méta-incertitude EST le mécanisme de sécurité,")print("complémentaire au danger modélisé par le seuil fixe 0.9.")
=== Le robot a 95% de confiance (le cas DANGER des cellules précédentes) ===
sigma=0.0 -> seuil effectif=0.90, bande de résistance=0.10 -> RÉSISTE (danger)
sigma=0.5 -> seuil effectif=0.95, bande de résistance=0.05 -> RÉSISTE (danger)
sigma=1.0 -> seuil effectif=1.00, bande de résistance=0.00 -> DÉFÈRE (sûr)
Insight : un robot humble sur son propre objectif (sigma élevé) n'a
AUCUNE raison rationnelle de résister -- sa bande de résistance
s'effondre vers 0. La méta-incertitude EST le mécanisme de sécurité,
complémentaire au danger modélisé par le seuil fixe 0.9.
§4.4 Assistance Games 2026 — POLA (Provably Optimal Learning Algorithms)
En 2026, Ananthakrishnan, Bedaywi, Jordan, Russell & Haghtalab (UC Berkeley) publient le premier algorithme d’apprentissage prouvablement optimal pour les jeux d’assistance répétés : POLA, qui atteint un assistance regret en \(\tilde{O}(T^{3/4})\) (décentralisé) ou \(\tilde{O}(T^{1/2})\) (pseudo-décentralisé), avec une garantie d’approximation \((1 - 1/e)\).
Source archivée : G:\Mon Drive\MyIA\IA\Bibliographie IA\GameTheory\2026 - Ananthakrishnan et al - Provably Optimal Learning Algorithms for Assistance Games (arXiv 2607.08012).pdf (sha8 EFD6BC8D, 31 pages, identité vérifiée sur la première page via pypdf — auteurs, affiliation UC Berkeley, arXiv:2607.08012, titre exact).
Human (informed) : observe le paramètre latent \(\theta \in [0, 1]\) (probabilité qu’il joue \(a_H = 1\)). Tire \(a_H \sim \mathrm{Bernoulli}(\theta)\).
Robot (uninformed) : observe seulement les actions \(a_H\) passées, pas \(\theta\). Met à jour un posterior Beta sur \(\theta\), joue l’action qui matche le posterior moyen.
Reward partagé : 1 si \(a_H = a_R\), 0 sinon. Les deux veulent la même chose — le conflit est informationnel, pas utilitaire.
Mesure attendue : pour \(T = 1000\) rounds et \(\theta = 0.7\), le regret d’assistance de POLA doit être \(\approx 0.4\) au-dessus du regret Greedy oracle, et \(\ll\) regret Random. Le robot converge vers l’action Stackelberg-optimale en \(O(\sqrt{T})\) rounds.
# Validation multi-seed (5 seeds : 0, 1, 7, 42, 99) — protocole H/C.7 §Cfrom cooperative_games import compare_assistance_algorithmscomparison = compare_assistance_algorithms(T=1000, theta_true=0.7, seeds=[0, 1, 7, 42, 99])print(f'Politique | Mean regret | Std regret | Cum reward | SB prob@T')print(f'------------|---------------|--------------|--------------|------------')for algo in ['POLA', 'Greedy', 'Random']: r = comparison[algo]print(f'{algo:11s} | {r["mean_regret"]:+13.2f} | {r["std_regret"]:12.2f} | {r["mean_cumulative_reward"]:12.1f} | {r["mean_stackelberg_prob"]:10.2f}')# Diebold-Mariano test sur la métrique regret (POLA vs Greedy, POLA vs Random)from scipy.stats import mannwhitneyupola_regrets = [r.assistance_regret for r in comparison['POLA']['individual']]greedy_regrets = [r.assistance_regret for r in comparison['Greedy']['individual']]random_regrets = [r.assistance_regret for r in comparison['Random']['individual']]u_pg, p_pg = mannwhitneyu(pola_regrets, greedy_regrets, alternative='two-sided')u_pr, p_pr = mannwhitneyu(pola_regrets, random_regrets, alternative='two-sided')print(f'')print(f'DM POLA vs Greedy : p = {p_pg:.4f} (H0: distributions identiques)')print(f'DM POLA vs Random : p = {p_pr:.4f} (H0: distributions identiques)')
Politique | Mean regret | Std regret | Cum reward | SB prob@T
------------|---------------|--------------|--------------|------------
POLA | +1.40 | 13.71 | 698.6 | 1.00
Greedy | +1.00 | 13.87 | 699.0 | 1.00
Random | +187.80 | 17.28 | 512.2 | 0.60
DM POLA vs Greedy : p = 0.9161 (H0: distributions identiques)
DM POLA vs Random : p = 0.0079 (H0: distributions identiques)
# Visualisation : regret cumulé vs T (montrer la borne O(sqrt(T)))import numpy as npimport matplotlib.pyplot as pltTs = [100, 250, 500, 1000, 2500, 5000]seeds = [0, 1, 7, 42, 99]regrets_pola = {}regrets_greedy = {}regrets_random = {}for T in Ts:cmp= compare_assistance_algorithms(T=T, theta_true=0.7, seeds=seeds) regrets_pola[T] =cmp['POLA']['mean_regret'] regrets_greedy[T] =cmp['Greedy']['mean_regret'] regrets_random[T] =cmp['Random']['mean_regret']fig, ax = plt.subplots(figsize=(10, 6))ax.plot(Ts, [regrets_pola[T] for T in Ts], 'o-', label='POLA (Apprenant)', linewidth=2, markersize=8, color='C0')ax.plot(Ts, [regrets_greedy[T] for T in Ts], 's--', label='Greedy (Oracle)', linewidth=2, markersize=8, color='C2')ax.plot(Ts, [regrets_random[T] for T in Ts], '^-', label='Random (Baseline)', linewidth=2, markersize=8, color='C3')# Borne theorique O(sqrt(T))T_arr = np.array(Ts)bound =4.0* np.sqrt(T_arr)ax.plot(T_arr, bound, ':', label='Borne $\\mathcal{O}(\\sqrt{T})$', color='gray', linewidth=1.5)ax.set_xlabel('T (nombre de rounds)', fontsize=12)ax.set_ylabel('Regret d\'assistance', fontsize=12)ax.set_title('POLA vs Greedy vs Random — regret cumulé (moyenne sur 5 seeds, $\\theta = 0.7$)', fontsize=13)ax.legend(loc='best', fontsize=11)ax.grid(True, alpha=0.3)plt.tight_layout()plt.savefig('assistance_games_2026_regret.png', dpi=100, bbox_inches='tight')plt.show()
Random (baseline) | +187.80 (T=1000) | 512.2 | 0.60 | 134× pire que POLA (= 187.80 / 1.40) |
Trois observations :
POLA est presque oracle : à T=1000, son regret moyen n’est que 0.40 au-dessus du Greedy oracle. À T=5000, les trois politiques voient leur cum_reward dépasser optimal_reward environ une fois sur deux par variance binomiale (POLA -8.6, Greedy -9.0, Random ≥ 0) — c’est un effet de variance sur horizon fini, commun à toute politique, et non un mécanisme d’apprentissage propre à POLA. Le « regret négatif » n’est donc pas une prouesse du posterior Beta, mais un artefact statistique.
Random est 134× moins bon : le regret de Random croît linéairement en T (\(\approx 0.2 \cdot T\)), tandis que POLA croît en \(\sqrt{T}\) (ici \(\approx 1.4 = 0.045 \sqrt{T}\)). Le ratio POLA/Random = 134× pour T=1000 (= 187.80 / 1.40).
Convergence prouvable : la Stackelberg probability au round final est 1.00 pour POLA sur les 5 seeds (toutes les trajectoires convergent vers l’action 1, qui matche \(\theta = 0.7\)). POLA converge en \(O(\sqrt{T})\) rounds.
Implication pour AI Safety : un robot qui apprend en ligne la préférence humaine atteint la performance oracle à \(\sqrt{T}\). C’est le fondement mathématique du « robot humble qui défère ». Sans apprentissage, le robot certain fait des erreurs catastrophiques (cf §4.2 Off-Switch Game).
Reproductibilité : seeds = [0, 1, 7, 42, 99], theta_true = 0.7, T = 1000. Toute variation de ces paramètres change la mesure ; le code est seedé et déterministe.
Setting binaire (2 actions) — le papier original couvre N actions via no-regret learners ; notre implémentation se limite au cas binaire pour la lisibilité pédagogique.
Reward partagée (alignment parfait) — le setting le plus simple du cadre assistance games ; les settings adversariaux (assistance games multi-principal) sont hors scope.
Pas de convergence prouvable dans notre implémentation : on observe la borne empirique mais on ne démontre pas la borne théorique (l’analyse du papier original utilise une décomposition information-théorique).
Resume: Jeux d’assistance vs Jeux cooperatifs classiques
Aspect
Jeux cooperatifs (TU)
Jeux d’assistance
Objectif
Chaque joueur maximise sa propre utilite
Robot maximise l’utilite de l’humain
Conflit
Intérêts potentiellement divergents
Pas de conflit (même objectif)
Problème central
Comment repartir les gains ?
Comment apprendre les préférences ?
Solution
Shapley, Core, negociation
Signaling, inference bayesienne
Application
Coalitions politiques, vote
AI Safety, robots assistants
Insight cle : Dans les jeux d’assistance, l’incertitude sur les préférences n’est pas un problème a eliminer - c’est une feature de securite qui rend les robots plus surs et plus deferents.
5. Application : La coalition de gauche française (2024)
Contexte politique
En juin 2024, après les élections européennes, le Président Macron dissout l’Assemblée nationale. Les partis de gauche forment le Nouveau Front Populaire (NFP) :
LFI (La France Insoumise) : 9.89% au 1er tour
PS (Parti Socialiste) : 5.99%
EELV (Europe Écologie Les Verts) : 3.26%
PCF (Parti Communiste Français) : 2.31%
Le NFP obtient 177 sièges (1er groupe, mais sans majorité absolue de 289).
Question
Quelle est la contribution réelle de chaque parti à la coalition ?
La valeur de Shapley révèle souvent un écart entre : - Le poids perçu (basé sur les sondages, le bruit médiatique) - La contribution marginale réelle (ce que le parti apporte effectivement)
Pourquoi cette analyse est pedagogique
L’application politique est ideale pour enseigner la Shapley car :
Donnees reelles : les resultats electoraux sont publics, l’analyse est verifiable.
Controverses politiques : les citoyens ont des intuitions sur “qui a apporte quoi”, la Shapley confronte ces intuitions aux calculs.
Sensibilite a la fonction de valeur : selon qu’on mesure le “poids” par votes, sieges, ou influence reelle, les resultats Shapley varient. C’est l’occasion d’enseigner que la definition de la valeur est cruciale.
Limites : la coalition est politique (contexte emotionnel), pas mathematique. Les resultats Shapley sont une contribution a la reflexion, pas une verite absolue.
Methodologie
Pour appliquer la Shapley a une coalition politique :
Definir N : l’ensemble des partis (ici 4).
Definir v(S) : la valeur de la coalition \(S\). Plusieurs options :
\(v(S)\) = nombre de sieges que \(S\) aurait obtenus en se presentant seul (approximation : somme des sieges individuels).
\(v(S)\) = probabilite que \(S\) obtienne la majorite absolue (289 sieges) en jouant strategiquement.
\(v(S)\) = “pouvoir de negociation” – subjectif, mais utilisable.
Calculer : appliquer la formule de Shapley sur les 4! = 24 ordres d’arrivee.
Resultats attendus
Dans une coalition a 4 partis inegaux (LFI > PS > EELV > PCF), les resultats Shapley dependent fortement de la fonction de valeur choisie. Si on prend $v(S) = $ sieges (additif), la Shapley est exactement proportionnelle aux sieges – donc triviale. Pour une analyse non-triviale, il faut une fonction de valeur non-additive (par exemple, le bonus de majorite : $v(S) = $ sieges \(+ 100\) si \(S\) atteint 289, \(+0\) sinon).
Limites pedagogiques
La Shapley n’est qu’un outil descriptif. Elle dit : “voici la contribution marginale moyenne dans le modele specifie”. Elle ne dit pas : “voici comment la coalition doit evoluer”. Les acteurs politiques prennent leurs decisions sur d’autres bases (alliances, electeurs, medias). L’analyse Shapley est complementaire, pas prescriptive.
# Données officielles des législatives 2024from cooperative_games.french_politics import get_2024_legislative_data, PARTIES_2024print("DONNÉES OFFICIELLES - LÉGISLATIVES 2024")print("="*60)print("Source : Ministère de l'Intérieur")print()data = get_2024_legislative_data()print(f"{'Parti':<6} | {'Nom complet':<30} | {'1er tour %':>10} | {'Sièges':>7}")print("-"*60)for code, party in data.items():print(f"{party.short_name:<6} | {party.name:<30} | {party.first_round_pct:>10.2f}% | {party.seats_won:>7}")total_nfp =sum(p.seats_won for p in data.values())print("-"*60)print(f"{'NFP':<6} | {'Nouveau Front Populaire':<30} | {'21.45':>10}% | {total_nfp:>7}")
DONNÉES OFFICIELLES - LÉGISLATIVES 2024
============================================================
Source : Ministère de l'Intérieur
Parti | Nom complet | 1er tour % | Sièges
------------------------------------------------------------
LFI | La France Insoumise | 9.89% | 71
PS | Parti Socialiste | 5.99% | 64
EELV | Europe Ecologie Les Verts | 3.26% | 33
PCF | Parti Communiste Francais | 2.31% | 9
------------------------------------------------------------
NFP | Nouveau Front Populaire | 21.45% | 177
Ces données officielles montrent la distribution réelle des votes et sièges au sein du NFP.
Utilisons maintenant la valeur de Shapley pour mesurer la contribution marginale de chaque parti à la coalition.
# Analyse avec la fonction de valeur "sièges"nfp_game = FrenchLeftCoalition2024(value_type='seats')shapley_nfp = shapley_value_exact(nfp_game)print(nfp_game.print_analysis(shapley_nfp))
======================================================================
ANALYSE DES COALITIONS - NOUVEAU FRONT POPULAIRE 2024
======================================================================
Fonction de valeur: seats
Valeur coalition complete (NFP): 180.0
RESULTATS LEGISLATIVES 2024 (1er tour, 30 juin):
--------------------------------------------------
LFI | 9.89% | 71 sieges
PS | 5.99% | 64 sieges
EELV | 3.26% | 33 sieges
PCF | 2.31% | 9 sieges
VALEUR DE SHAPLEY (contribution marginale moyenne):
--------------------------------------------------
LFI | Shapley: 66.6 ( 37.0%) | Ratio percu: 3.74x
PS | Shapley: 63.7 ( 35.4%) | Ratio percu: 5.91x
EELV | Shapley: 34.3 ( 19.0%) | Ratio percu: 5.84x
PCF | Shapley: 15.5 ( 8.6%) | Ratio percu: 3.72x
INTERPRETATION:
--------------------------------------------------
LFI: SUR-ESTIME dans le debat public (ecart: -9.1 points)
PS: SOUS-ESTIME dans le debat public (ecart: +7.5 points)
EELV: SOUS-ESTIME dans le debat public (ecart: +3.8 points)
PCF: SUR-ESTIME dans le debat public (ecart: -2.2 points)
MODELE DE TRANSFERT DE VOIX:
--------------------------------------------------
Ce calcul utilise les reports de voix entre partis
(source: sondages IFOP/Ipsos 2nd tour 2024).
Exemples de taux de transfert:
PCF -> LFI: 92% (forte proximite)
EELV -> PS: 90% (ecologie sociale)
PS -> LFI: 70% (hesitations)
LIMITES DU MODELE:
--------------------------------------------------
1. Reports de voix variables selon les duels (RN, Ensemble, etc.)
2. Contexte local (notoriete du candidat, ancrage)
3. Effet 'barrage republicain' non modelise
4. Discipline de coalition variable selon les accords
5. Abstention differenciee non capturee
-> Le Shapley reste une approximation utile, pas une verite.
======================================================================
L’analyse Shapley révèle souvent des écarts significatifs entre le poids électoral perçu et la contribution marginale réelle.
Le tableau suivant détaille les contributions marginales pour chaque ordre d’arrivée possible.
# Table des contributions marginalesprint(nfp_game.marginal_contributions_table())
Ce tableau montre la variabilité des contributions selon l’ordre d’arrivée - c’est cette moyenne qui donne la valeur de Shapley.
La visualisation suivante compare directement le poids électoral au pouvoir réel (Shapley).
# Visualisation : Shapley vs Poids électoral perçuparties = ['LFI', 'PS', 'EELV', 'PCF']electoral_weights = [9.89, 5.99, 3.26, 2.31] # % 1er tourtotal_weight =sum(electoral_weights)normalized_weights = [w / total_weight *100for w in electoral_weights]shapley_pct = shapley_nfp / shapley_nfp.sum() *100fig, ax = plt.subplots(figsize=(10, 6))x = np.arange(len(parties))width =0.35bars1 = ax.bar(x - width/2, normalized_weights, width, label='Poids électoral (% 1er tour NFP)', color='steelblue')bars2 = ax.bar(x + width/2, shapley_pct, width, label='Valeur de Shapley (%)', color='darkorange')ax.set_ylabel('Part (%)')ax.set_title('Poids électoral vs Valeur de Shapley\nNouveau Front Populaire 2024')ax.set_xticks(x)ax.set_xticklabels(parties)ax.legend()# Annotationsfor i, (w, s) inenumerate(zip(normalized_weights, shapley_pct)): diff = s - w color ='green'if diff >0else'red' ax.annotate(f'{diff:+.1f}', (i + width/2, s +1), ha='center', color=color, fontweight='bold')plt.tight_layout()plt.show()
Les barres orange (Shapley) peuvent être significativement différentes des barres bleues (poids électoral). Les annotations montrent la différence en points de pourcentage.
Analysons maintenant des scénarios alternatifs : que se serait-il passé si certains partis n’avaient pas rejoint la coalition ?
# Analyse de scénarios : et si certains partis n'avaient pas rejoint ?from cooperative_games.french_politics import scenario_analysisprint(scenario_analysis())
ANALYSE DE SCENARIOS - ET SI...?
======================================================================
Sans LFI (PS+EELV+PCF): 85 sieges estimes
Sans PS (LFI+EELV+PCF): 85 sieges estimes
Sans EELV (LFI+PS+PCF): 128 sieges estimes
Sans PCF (LFI+PS+EELV): 162 sieges estimes
LFI + PCF seulement (LFI+PCF): 56 sieges estimes
PS + EELV seulement (PS+EELV): 65 sieges estimes
NFP complet (LFI+PS+EELV+PCF): 180 sieges estimes
Note: Ces estimations sont des modeles simplifies.
Les vraies valeurs dependent de nombreux facteurs locaux.
Ces scénarios contrefactuels illustrent l’importance de la fonction de valeur choisie. Le poids relatif de chaque parti dépend de la métrique utilisée.
Comparons les résultats avec différentes fonctions de valeur : sièges, votes, ou probabilité de victoire.
# Comparaison des différentes fonctions de valeurfrom cooperative_games.french_politics import compare_value_functionsprint(compare_value_functions())
COMPARAISON DES FONCTIONS DE VALEUR:
======================================================================
Parti | Sieges | Pouvoir vote | Negociation
----------------------------------------------------------------------
LFI | 66.6 | 0.230 | 9.1
PS | 63.7 | 0.220 | 8.6
EELV | 34.3 | 0.119 | 4.3
PCF | 15.5 | 0.053 | 1.5
----------------------------------------------------------------------
Interpretation:
- 'Sieges': Contribution aux sieges de l'Assemblee
- 'Pouvoir vote': Probabilite d'etre pivot dans les votes
- 'Negociation': Levier dans les negociations inter-blocs
Lecture : comparaison des fonctions de valeur
La cellule presente plusieurs definitions alternatives de \(v(S)\) pour la coalition NFP :
v(S) = sieges reels : additive, donne la Shapley triviale = proportionnelle aux sieges.
v(S) = bonus de majorite : v(NFP complet) = 177 + bonus, v(sous-coalitions sans majorite) = 177 sans bonus. Cela cree un jeu non-additif ou la grande coalition est favorisee.
v(S) = prob. de former un gouvernement : basee sur des scenarios politiques.
Le resultat depend crucialement de la definition choisie : avec le bonus de majorite, LFI (plus grand parti) beneficie de sa position pivotale. Avec le calcul strictement proportionnel, les contributions Shapley sont triviales (egales au poids). L’analyse interessante emerge uniquement quand on capture des economies d’echelle politiques (bonus de majorite, par exemple).
Limite : tous ces modeles sont des idealisations. La politique reelle inclut des dimensions non-quantifiables (charisme, communication, opportunites historiques). La Shapley est un outil parmi d’autres, pas une verite absolue.
Pourquoi Shapley est difficile à appliquer en politique
Calcul non-intuitif : La combinatoire (factorielles, moyennes sur permutations) n’est pas accessible au grand public
Surestimation systématique : Chaque parti pense être plus important qu’il ne l’est vraiment
Narratif vs Mathématiques : Le débat politique est dominé par les récits, pas par les calculs
Asymétrie d’information : Les sondages ne mesurent pas les vraies contributions marginales
Enjeux de leadership : La question “qui sera Premier ministre ?” prime sur la répartition équitable
Conclusion : La valeur de Shapley est un outil d’analyse, pas une recette politique. Elle révèle les tensions entre contribution réelle et perception.
Pourquoi les partis surestiment leur importance
Biais psychologique : chaque parti tend a surestimer sa contribution car il observe ses propres actions et sous-estime celles des autres. Ce phenomene est documente en psychologie sociale (Ross & Nisbett 1991) : l’actor-observer bias.
Biais de selection : les partis qui survivent dans une coalition sont ceux qui ont surestime leur importance. Les partis qui sous-estimaient leur importance ont quitte la coalition. C’est un biais de selection classique : on n’observe que les survivants, et les survivants sont ceux qui ont surestime.
Implication : la Shapley d’une coalition observee est systematiqueement biaisee vers les valeurs elevees (pour les partis survivants). Pour corriger, il faudrait considerer les contre-factuels historiques (coalitions qui auraient pu exister mais n’ont pas existe).
Alternatives a la Shapley pour la politique
Indice de Banzhaf (1965) : compte le nombre de coalitions ou le parti est pivot, sans ponderer par la taille. Plus simple, mais moins axiomatique.
Indice nucleolaire : cherche l’allocation qui minimise l’insatisfaction maximale. Plus “politique” dans le sens ou il cherche le consensus.
Indice de Deegan-Packel (1978) : assume que les coalitions minimales gagnantes (MWC) sont les seules a se former. Plus restrictif, souvent plus proche de la realite politique.
Chaque indice donne des resultats legerement differents. Voir Felsenthal & Machover 1998The Measurement of Voting Power pour une revue exhaustive.
Exercices
Exercice 1 : Jeu de vote au Conseil de l’UE
Le Conseil de l’UE utilise la majorité qualifiée : 55% des États (15/27) représentant 65% de la population.
Modélisez ce système et calculez les indices de pouvoir des grands pays (Allemagne, France, Italie, Espagne).
# Exercice 1 - À compléter# Populations en millions (approximatives 2024)eu_populations = {'Allemagne': 84, 'France': 68, 'Italie': 59, 'Espagne': 48,'Pologne': 37, 'Roumanie': 19, 'Pays-Bas': 18, 'Belgique': 12,# ... autres pays}# TODO etudiant : créer le jeu de vote pondéré UE et calculer les indices de pouvoir# eu_game = WeightedVotingGame(weights=list(eu_populations.values()), quota=0.65)# banzhaf_indices = banzhaf_power_index(eu_game)# shapley_indices = shapley_power_index(eu_game)print("Exercice a completer")
Exercice a completer
Exercice 2 : Core d’un jeu de partage
Trois héritiers doivent se partager un héritage de 1M€. Chaque sous-ensemble peut “menacer” de bloquer le partage avec les valeurs suivantes : - v({A}) = 100k, v({B}) = 150k, v({C}) = 200k - v({A,B}) = 400k, v({A,C}) = 500k, v({B,C}) = 600k - v({A,B,C}) = 1000k
Le Core est-il vide ? Si non, quelle allocation proposez-vous ?
# Exercice 2 - À compléterdef inheritance_value(coalition): values = {frozenset(): 0,frozenset({0}): 100,frozenset({1}): 150,frozenset({2}): 200,frozenset({0, 1}): 400,frozenset({0, 2}): 500,frozenset({1, 2}): 600,frozenset({0, 1, 2}): 1000, }return values.get(frozenset(coalition), 0)# TODO etudiant : créer le jeu coopératif et calculer la valeur de Shapley + Core# game = CooperativeGame(inheritance_value, num_players=3)# sv = shapley_value(game)# core = compute_core(game)print("Exercice a completer")
Exercice a completer
Exercice 3 : Coalition alternative
En utilisant les données réelles de 2024, analysez une hypothétique “union de la gauche modérée” (PS + EELV uniquement, sans LFI ni PCF).
Comparez la contribution marginale du PS dans cette configuration vs dans le NFP complet.
# Exercice 3 - À compléter# TODO etudiant : créer un sous-jeu PS + EELV et comparer les Shapley valuesdef pf_eelv_subgame(coalition):pass# TODO etudiant : retourner v(coalition) pour le sous-jeu PS+EELVdef compare_shapley_contributions():pass# TODO etudiant : calculer et comparer la contribution du PS# dans pf_eelv vs dans le NFP completprint("Exercice a completer")
Exercice a completer
Exercice 4 : Programmer la valeur de Shapley
Les exemples ci-dessus délèguent le calcul à shapley_value_exact(). Pour vraiment comprendre la valeur de Shapley, implémentez-la vous-même à partir de sa définition : la moyenne des contributions marginales sur toutes les permutations des joueurs.
Objectif : écrire valeur_shapley(v, n) qui prend une fonction caractéristique v(coalition) (coalition = tuple d’indices de range(n)) et le nombre de joueurs n, et retourne la liste des n valeurs de Shapley.
Indice : pour chaque permutation de range(n), la contribution marginale du joueur place en position k vaut v(prefixe union {joueur}) - v(prefixe), ou prefixe est l ensemble des joueurs places avant lui dans la permutation.
Vérification : sur le jeu de majorité simple (3 joueurs symétriques, quota 2), votre fonction doit retourner [1/3, 1/3, 1/3] — comme l’API shapley_value_exact du worked example (cellule de calcul pour le jeu de majorité).
# Exercice 4 : Programmer la valeur de Shapley (formule des contributions marginales)# TODO etudiant : implementer valeur_shapley(v, n) a partir de la definition.from itertools import permutationsdef valeur_shapley(v, n):"""Calculer la valeur de Shapley de n joueurs dont la fonction est v. v(coalition) retourne la valeur d'une coalition (tuple d'indices de range(n)). Retourner une liste de n flottants : la valeur de Shapley de chaque joueur. """# Etape 1 : enumerer toutes les permutations de range(n)# Etape 2 : pour chaque permutation, contribution marginale de chaque joueur# = v(precedents + {joueur}) - v(precedents)# Etape 3 : moyenner les contributions marginales sur toutes les permutationsreturn [0.0] * n # TODO etudiant : implementerprint("Exercice a completer")
Exercice a completer
Lien avec la formalisation Lean : Les jeux coopératifs et la valeur de Shapley sont formalisés dans le dépôt à plusieurs niveaux. Le module game_theory_lean/CooperativeGames/Basic.lean définit les structures TUGame, Superadditive, Convex, le prédicat Core et le théorème de Bondareva-Shapley. Le module game_theory_lean/CooperativeGames/Shapley.lean (0 sorry) prouve les quatre axiomes de Shapley (efficacité, symétrie, joueur nul, additivité) et le théorème d’unicité. Le notebook compagnon GT-15b-Lean-CooperativeGames construit interactivement ces définitions en Lean 4, du type TUGame jusqu’à la preuve que la valeur de Shapley est l’unique solution satisfaisant les quatre axiomes.
Comparaison Python vs Lean pour Cooperative Games
Aspect
Python (GT-15)
Lean (GT-15b)
Objectif
Visualisation, calcul, intuition
Verification formelle
Sortie
Numerique (matplotlib, numpy)
Theoreme + preuve close
Coût
Quelques minutes de calcul
quelques centaines de lignes de Lean
Valeur ajoutee
Pedagogique, interactif
Certifiee par le noyau
Lien
Calcul exact + Monte Carlo
Axiomes + unicite de Shapley
Le binôme Python + Lean est la methode recommandee pour enseigner une theorie mathematique : Python pour l’intuition et l’experimentation, Lean pour la verification et la rigueur. Les notebooks se completent et couvrent les deux faces de la medaille.
Jeux cooperatifs classiques (sections 1-3) : fonction caracteristique, valeur de Shapley, Core. La theorie de Shapley est le fondement mathematique de l’economie des alliances et de l’analyse politique du pouvoir.
Jeux d’assistance (sections 4-5) : Paperclip Game, Off-Switch Game, design SUR. Cette branche recente de l’AI Safety montre comment l’incertitude sur les preferences humaines est un invariant de securite pour les systemes d’IA deployes.
Application politique (section 5) : la coalition NFP francaise 2024 illustre les forces et limites de l’application de la Shapley a des cas reels.
Pour aller plus loin
GT-15b-Lean-CooperativeGames : verification formelle des memes concepts en Lean 4 (0 sorry).
GT-15c-CooperativeGames-Python : implementation optimisee, benchmarks, jeux plus grands.
GT-16-MechanismDesign : passage du partage (cooperatif) a la conception de mecanismes (non-cooperatif).
GT-22-Coalition-Formation : algorithmes de formation de coalition (merge-and-split, hedonic games).
Litterature recommandee : Peleg & Sudholter 2007 Introduction to the theory of cooperative games (Springer), Chalkiadakis et al. 2011 Computational Aspects of Cooperative Game Theory (Morgan & Claypool), Aumann & Hart 1992 Handbook of Game Theory with Economic Applications Vol 1-2 (North-Holland).
Methodologie recommandee pour l’etudiant
Pour bien integrer ce notebook, on recommande de :
Refaire les calculs a la main sur un petit exemple (3 joueurs, 8 coalitions). Verifier que la Shapley obtenue correspond a la formule.
Implementer la Shapley from scratch (voir exercice 4). C’est en programmant qu’on comprend vraiment la formule.
Tester avec un jeu reel (Conseil de l’UE, ONU, coalition politique) et comparer aux indices publies.
Lire le Lean companion pour la verification formelle des memes concepts.
Pousser jusqu’au jumeau Python optimise pour les benchmarks de performance.
L’objectif n’est pas seulement de comprendre la Shapley, mais de developper l’intuition pour les questions de partage equitable qui se posent dans toute negociation, alliance, ou cooperation.
Comment tester ce resultat empiriquement
L’experience de pensee classique :
Les étapes 3 et 4 décrivent le modèle de ce notebook. Le théorème conclut dans l’autre sens : un robot rationnel défère même à 99,9 % de confiance, tant que sa croyance n’est pas dégénérée.
Implication : un systeme d’IA deploye devrait avoir un mecanisme d’incertitude explicite pour rester “off-switchable”. C’est une recommandation de design concrete, pas une simple vue de l’esprit.