Salta ai contenuti

Il dilemma del prigioniero

La struttura che spiega perché agenti razionali, ognuno facendo la propria mossa migliore, finiscono tutti peggio di come sarebbero potuti finire — e cosa cambia quando si gioca più di una volta.

Il dilemma del prigioniero è il microscopio con cui si osserva ogni situazione in cui la razionalità individuale rovina il bene collettivo. Lo si trova citato in trattati di economia, in articoli di biologia evoluzionistica, in saggi di scienza politica e nei paper recenti di AI multi-agent. Un singolo modello formale, una matrice 2x2, e una storia di settant’anni di varianti: vale la pena dedicargli tempo. Marketplace di agenti che corrono al ribasso sui prezzi, lab di AI che corrono al rialzo sulle capacità tagliando safety, public goods sotto-finanziati, sovrapesca, doping sportivo, pubblicità competitiva: la struttura ricorre sempre. Capirla bene una volta significa riconoscerla in dieci posti diversi.

Nei capitoli 113, 114, 115 e 117 il dilemma del prigioniero compare come esempio illustrativo di concetti più generali (definizione di gioco, distinzione zero-sum/non-zero-sum, equilibrio di Nash, giochi cooperativi). Qui non è un esempio: è il soggetto. Vediamo da dove viene, perché è importante, come la ripetizione lo trasforma, e cosa implica per chi progetta sistemi multi-agent oggi.

Il dilemma è anche, dal punto di vista della teoria dei giochi, l’esempio più studiato in assoluto. Ha una matrice 2x2, è simmetrico, ha una soluzione one-shot inequivocabile, e una versione iterata che apre un universo di varianti. Genera tornei, paper, simulazioni, libri popolari, controversie. Per un libro che vuole connettere teoria dei giochi e agent coding non c’è punto di partenza migliore.

Nei capitoli precedenti abbiamo visto cos’è un gioco in senso tecnico, cosa distingue zero-sum da non-zero-sum, cos’è un equilibrio di Nash, cos’è il minimax, e cosa cambia quando i giocatori possono formare coalizioni. Il dilemma del prigioniero li tira insieme tutti: è non-zero-sum, ha un equilibrio di Nash unico in pure strategies, il minimax non aiuta a uscirne, e la cooperazione richiede o ripetizione o meccanismi esterni di coordinamento. È il caso più semplice e più studiato di tensione tra individuale e collettivo.

Per chi costruisce sistemi multi-agente — agenti che si chiamano tramite protocolli, agenti che competono o collaborano in marketplace, agenti AI che imparano insieme — il dilemma del prigioniero non è un esempio storico curioso. È la diagnosi che si fa al primo segnale che il sistema sta convergendo a un esito peggiore della sua somma. E la teoria dei giochi che ne è seguita — tit-for-tat, folk theorem, evolutionary stability, ZD strategies, cooperative AI — è il vocabolario per discutere meccanismi di intervento.

Una nota di scoping. Il PD compare come esempio illustrativo nei capitoli precedenti della Parte V; qui ne approfondiamo gli aspetti che lì erano accennati: la storia della formulazione, la versione iterata e il torneo di Axelrod, le proprietà di tit-for-tat, l’evoluzione delle strategie in popolazioni, le ZD strategies, le applicazioni recenti agli agenti AI. Chi ha già visto la matrice 2x2 nei capitoli 113-117 troverà qui la versione completa.

L’altra ragione per dedicargli un capitolo intero, oltre a quanto già menzionato in 113-117, è che il dilemma è IL PROTAGONISTA qui: cinquant’anni di teoria, esperimenti, varianti, contro-risultati, applicazioni in biologia, economia, scienza politica, AI. Trattarlo come “esempio illustrativo” sarebbe un’ingiustizia storica oltre che un’omissione tecnica.

Il dilemma nasce in due passaggi distinti, gennaio e primavera 1950, alla RAND Corporation di Santa Monica. Merrill Flood (matematico americano, all’epoca alla RAND) e Melvin Dresher (matematico polacco-americano, anche lui alla RAND) progettano un esperimento empirico per testare una previsione della teoria dei giochi appena formalizzata da John von Neumann (matematico ungaro-americano) e Oskar Morgenstern (economista austriaco) nel libro “Theory of Games and Economic Behavior” del 1944. La previsione è semplice: in un gioco non-cooperativo, due giocatori razionali convergono a un equilibrio in cui nessuno ha incentivo unilaterale a deviare. Flood e Dresher costruiscono una matrice 2x2 dove l’equilibrio razionale è chiaramente peggiore di un altro esito raggiungibile solo cooperando, e fanno giocare 100 round a due colleghi: Armen Alchian (economista, UCLA) e John Williams (matematico, RAND). I due cooperano per gran parte dei round, in disaccordo con la teoria. Williams annota a margine: “He is being a stinker”. I log del gioco esistono ancora.

Albert W. Tucker (matematico canadese di Princeton, advisor di tesi di John Nash) tiene poco dopo un seminario al dipartimento di psicologia di Stanford. Per spiegare il gioco di Flood-Dresher a un’audience non matematica, inventa la narrazione dei due prigionieri interrogati separatamente. Il nome resta. La matrice di payoff con T (temptation) > R (reward) > P (punishment) > S (sucker) e il vincolo aggiuntivo 2R > T+S diventano canonici quando Robert Duncan Luce (matematico, psicologo) e Howard Raiffa (statistico, economista) li codificano in “Games and Decisions” (Wiley, 1957).

Il salto successivo è quasi trent’anni dopo. Robert Axelrod (politologo, University of Michigan) tra il 1979 e il 1980 organizza due tornei round-robin in cui ricercatori di tutto il mondo sottomettono programmi che giocano IPD — Iterated Prisoner’s Dilemma — uno contro l’altro per 200 round. Vince entrambi i tornei un programma di quattro righe scritto da Anatol Rapoport (psicologo matematico russo-canadese, University of Toronto): tit-for-tat. Axelrod racconta tutto in “The Evolution of Cooperation” (Basic Books, 1984), libro che traduce per il pubblico generale risultati altrimenti chiusi nei journal di teoria dei giochi.

Da lì in avanti il dilemma si ramifica. Martin Nowak (biologo matematico austriaco, Harvard) e Karl Sigmund (matematico austriaco, Vienna) introducono nel 1993 sulla rivista Nature una strategia chiamata Pavlov (win-stay-lose-shift) che batte tit-for-tat in presenza di rumore. William Press (computer scientist, autore di Numerical Recipes) e Freeman Dyson (fisico britannico-americano, Princeton) dimostrano nel 2012 sulla rivista PNAS l’esistenza delle Zero-Determinant strategies, una classe di strategie memory-1 che impone una relazione lineare tra payoff propri e altrui. Nowak nel 2006 sulla rivista Science sintetizza in “Five Rules for the Evolution of Cooperation” i meccanismi che permettono alla cooperazione di emergere in popolazioni dove la defezione dovrebbe dominare.

Sul fronte AI il dilemma riemerge in tre filoni: multi-agent reinforcement learning con LOLA (Foerster et al. 2017) e sequential social dilemmas (Leibo et al. 2017), modelli linguistici di grandi dimensioni messi a giocare IPD (Akata et al. 2023), e l’agenda Cooperative AI (Dafoe et al. 2020).

timeline of prisoner's dilemma key results from 1944 to 2023, marking von Neumann-Morgenstern, Flood-Dresher, Tucker, Nash, Friedman, Axelrod, Nowak-Sigmund, Press-Dyson, LOLA, Akata

Una mappa concettuale rapida dei nomi e delle date. Anni ‘40-‘50: nascita formale (von Neumann, Morgenstern, Flood, Dresher, Tucker, Nash). Anni ‘70-‘80: tornei e folk theorem (Friedman, Axelrod, Rapoport). Anni ‘90: dinamica evolutiva e Pavlov (Maynard Smith, Nowak, Sigmund). Anni 2000-2010: ZD strategies, network reciprocity (Press, Dyson, Ohtsuki, Stewart, Plotkin). Anni 2010-2020+: agenti che imparano in IPD (Foerster, Leibo, Dafoe, Akata). Sessant’anni di storia compatta su una matrice 2x2.

payoff matrix of classic prisoner's dilemma with T=5, R=3, P=1, S=0, Nash equilibrium and Pareto-superior cell highlighted

Conviene avere due angoli distinti sul dilemma prima di scrivere matematica. Uno è il punto di vista del singolo giocatore che ragiona in isolamento. L’altro è il punto di vista esterno che vede l’effetto dell’aggregazione delle scelte individuali. Entrambi sono importanti perché la sorpresa del dilemma sta proprio nel mismatch tra i due livelli.

Mettiti nei panni del prigioniero A. Il poliziotto ti dice: “Confessa contro il tuo complice. Se tu confessi e lui no, esci libero. Se entrambi confessate, 5 anni a testa. Se tu non confessi e lui sì, 10 anni per te. Se nessuno confessa, 1 anno a testa per il reato minore.” A pensa: non so cosa farà B. Provo entrambi gli scenari.

Se B confessa, mi conviene confessare anch’io (5 anni invece di 10).

Se B non confessa, mi conviene comunque confessare (libero invece di 1 anno).

In ogni caso confessare è meglio. Quindi confesso.

B fa lo stesso ragionamento simmetrico, e arriva alla stessa conclusione. Risultato: entrambi confessano, 5 anni a testa. Ma se entrambi avessero taciuto sarebbero stati 1 anno a testa. La razionalità individuale, applicata da entrambi, ha prodotto un esito che entrambi disprezzano. Non è un errore di calcolo: è un teorema. Ognuno ha fatto la sua mossa migliore data ogni possibile mossa dell’avversario, e proprio per questo finiscono peggio.

Il punto contro-intuitivo: non c’è cattiveria, non c’è errore. Ci sono solo incentivi e razionalità. La struttura dei payoff genera la trappola da sola. È il senso preciso in cui “razionale” e “ottimo” possono divergere.

Una variante utile per fissare l’intuizione: immagina che A e B possano comunicare prima del gioco, ma senza poter firmare un contratto vincolante. Si stringono la mano: “tutti e due taciamo”. Poi vanno in stanze separate. Una volta dentro, ognuno pensa: “l’altro probabilmente terrà la parola; quindi se confesso esco libero invece di prendere 1 anno; e se non la tiene, comunque devo confessare per non prendere 10. Confesso.” La promessa pre-gioco non cambia l’analisi nella stanza, perché non è enforceable. Per questo il PD richiede meccanismi esterni — contratti vincolanti, ripetizione, reputazione, sanzioni di terze parti — per produrre cooperazione. Il discorso pre-gioco da solo non basta.

Cambiamo il gioco. Stessi payoff, ma adesso sai che giocherai con la stessa persona altre 100 volte, ogni volta sapendo cosa ha fatto l’altro nei round precedenti. L’aritmetica cambia. Defectare al primo round ti dà T=5 invece di R=3, ma se l’altro reagisce defectando per sempre, da lì in poi prendi P=1 per round invece di R=3. Su 99 round successivi è un costo di 99·(3-1) = 198 unità per un guadagno di 5-3 = 2 al primo round. Ovviamente non conviene.

La ripetizione trasforma il presente in un investimento sul futuro. La cooperazione di oggi è una promessa: “se mi rispondi bene domani, continuiamo a guadagnare 3 invece di 1”. La defezione di oggi è una minaccia: “se mi tradisci, ti punisco con la mia defezione futura”. Né minaccia né promessa funzionano in un gioco one-shot, perché non c’è futuro. Quando c’è un futuro, e quando il futuro pesa abbastanza, la cooperazione diventa un equilibrio. Questo è, in essenza, il folk theorem.

L’altra faccia della medaglia: se l’orizzonte è finito e noto a entrambi, l’ultima volta è di nuovo one-shot, e per induzione all’indietro tutto il gioco collassa a defect. Empiricamente i giocatori umani non lo fanno: cooperano per molti round e defectano solo verso la fine. La teoria salva la cooperazione introducendo orizzonti incerti o incertezza sul tipo dell’avversario.

Una metafora utile: il gioco one-shot è una transazione tra estranei in aeroporto; il gioco ripetuto è il rapporto col tuo barbiere di quartiere. Nel primo caso, ognuno ha incentivo a fregare l’altro perché non si rivedranno. Nel secondo caso, fregare oggi distrugge una relazione che vale molto più del guadagno immediato. La teoria dei giochi formalizza questa intuizione: il discount factor δ è quanto vale il futuro rispetto al presente, e quando δ è alto la cooperazione paga.

Passiamo dalla narrazione alla matematica minima necessaria. Quattro pezzi: la matrice 2x2 e la dominanza one-shot, il folk theorem per la versione iterata, le strategie più studiate (TFT, grim trigger, Pavlov, GTFT, ZD), e una pennellata su replicator dynamics ed ESS per il punto di vista evolutivo. Vediamoli in ordine.

Convenzione di Axelrod: T=5, R=3, P=1, S=0. Riga = giocatore 1, colonna = giocatore 2, le coppie sono (payoff_1, payoff_2).

Coopera Defeziona
Coopera (3, 3) (0, 5)
Defeziona (5, 0) (1, 1)

Vincoli: T > R > P > S e 2R > T + S. Il primo dà la struttura del dilemma. Il secondo impedisce a una coppia che si scambia (defect, cooperate) → (cooperate, defect) di battere la cooperazione mutua: la media di (T+S) per round sarebbe 2.5 < 3 = R.

Teorema (dominanza stretta di defect, one-shot). Per ogni mossa dell’avversario, defect dà strettamente più di coop.

  • Avversario coopera: defect=5, coop=3. 5>3.
  • Avversario defeziona: defect=1, coop=0. 1>0.

Conseguenza: l’unico equilibrio di Nash in pure strategies è (D, D) con payoff (1, 1). È Pareto-dominato da (C, C) con payoff (3, 3).

In IPD con orizzonte infinito e fattore di sconto δ ∈ (0, 1) il payoff totale di una sequenza di payoff istantanei π_0, π_1, π_2, … è

(1-δ) Σ_t δ^t π_t

dove la somma va da t=0 a infinito. Il fattore (1-δ) normalizza la serie geometrica perché possiamo confrontare il payoff totale “averaged” con i payoff per round. Senza normalizzazione il payoff totale tende a infinito e perde significato.

Considera la strategia “grim trigger”: coopera finché l’avversario coopera; appena defeziona, defectare per sempre. È la minaccia più estrema possibile in IPD. Se entrambi giocano grim trigger, cooperano sempre, payoff per round = R, payoff totale normalizzato = R.

Se il giocatore 1 devia a defect a un certo round, ottiene T una volta (l’avversario stava ancora cooperando) e poi P per sempre (grim trigger del 2 è scattato). Payoff totale di deviazione, normalizzato:

(1-δ) [T + δ P + δ² P + …] = (1-δ) T + δ P

Cooperazione conviene se il payoff sostenuto della cooperazione non è battuto dalla deviazione:

R ≥ (1-δ) T + δ P

Risolvendo per δ:

R - δ P ≥ (1-δ) T = T - δ T δ (T - P) ≥ T - R δ ≥ (T - R) / (T - P)

Coi numeri canonici T=5, R=3, P=1: δ ≥ 2/4 = 0.5.

Lettura intuitiva: il futuro deve pesare almeno la metà del presente perché il “guadagno una tantum” della deviazione (T-R = 2) sia compensato dalla “perdita per sempre” (R-P = 2 a round, scontata). Se δ < 0.5, l’avversario è troppo pochi round nel mio futuro per valere la pena di trattenermi oggi.

Teorema (folk theorem, versione informale). In IPD ripetuto infinitamente con δ sufficientemente alto, qualsiasi profilo di payoff individualmente razionale e fattibile è sostenibile come equilibrio di un sottogioco perfetto. In particolare, cooperazione mutua è equilibrio. Citato senza prova: vedere Friedman 1971, Fudenberg-Maskin 1986, oppure Osborne-Rubinstein “A Course in Game Theory” capitolo 8.

Il termine “folk” nel nome è una stranezza storica: il risultato circolava informalmente nella comunità di teoria dei giochi degli anni ‘50-‘60 come “gioco di tutti, di nessuno”, finché James Friedman nel 1971 ne pubblicò una formulazione precisa per il caso con grim trigger. Il nome è rimasto.

Importante: è UNO degli equilibri, non l’unico. Anche defect-defect resta equilibrio. Il folk theorem dice che la cooperazione è possibile, non inevitabile. La coordinazione su quale equilibrio raggiungere è una sotto-questione separata, e in pratica richiede un focal point (Schelling 1960) o un meccanismo esplicito.

Pseudocodice di TFT (tit-for-tat) di Anatol Rapoport:

def tit_for_tat(history, side):
if not history:
return COOPERATE
last_other = history[-1][1 - side]
return last_other

Quattro proprietà identificate da Axelrod:

  1. Nice: non defeziona mai per prima.
  2. Retaliatory: punisce la defezione al round successivo.
  3. Forgiving: torna a cooperare appena l’avversario coopera.
  4. Clear: comportamento perfettamente prevedibile.

Limite di TFT: in presenza di rumore — un round su N una mossa viene flippata da un errore di esecuzione, di trasmissione, di percezione — due TFT che si incontrano cadono in un loop di rappresaglia reciproca permanente. Esempio: A coopera, B coopera, errore al round 3 fa apparire la mossa di B come defect, A risponde defect al round 4, B risponde defect al round 5, e da lì in avanti C-D-D-C-C-D-D-C… oscillano per sempre. Il payoff medio scende da R=3 a (T+S)/2 = 2.5. Il rumore è particolarmente rilevante per agenti AI dove l’osservazione delle mosse altrui passa per protocolli imperfetti, parsing di output testuale, o latenza che genera ambiguità.

Soluzioni proposte:

  • Generous TFT: dopo defezione dell’avversario, coopera con probabilità ε ≈ 1/3 invece di defectare per certo. Spezza i loop di rappresaglia in tempo aspettato finito.
  • Tit-for-two-tats: defeziona solo dopo due defezioni consecutive. Più tollerante al rumore singolo, ma più sfruttabile da strategie che alternano D-C-D-C.
  • Pavlov / win-stay-lose-shift (Nowak-Sigmund 1993, Nature): se l’ultimo round ha dato R o T, ripeti l’ultima mossa; se ha dato P o S, cambia. Pavlov ha due proprietà notevoli: sfrutta gli always-cooperate (cosa che TFT non fa, perché TFT cooperativa è vincolata a non defectare per primo) ed è robusto al rumore (dopo un errore torna in fase entro 2-3 round).

Vale la pena dedicare due parole alle quattro proprietà di Axelrod, perché sono spesso citate male. “Nice” non significa “buona” in senso morale: significa “non aggredisce per prima”. È una proprietà strategica, non etica. “Retaliatory” non significa “vendicativa per sempre”: significa “non lascia passare la defezione”. “Forgiving” è cruciale: senza forgiveness due strategie retaliatory entrano in deadlock di defezione. “Clear” è l’unica proprietà non strettamente strategica: una strategia comprensibile rende possibile all’avversario imparare a cooperarci. Strategie troppo complicate, anche se in teoria potenti, falliscono nei tornei perché nessun altro programma capisce come trattarle.

In una popolazione con frazioni x_i di strategia i, payoff atteso π_i contro la popolazione, payoff medio π̄ = Σ x_i π_i:

dx_i / dt = x_i · (π_i - π̄)

Le strategie sopra-media crescono, quelle sotto-media calano. Le ESS — Evolutionarily Stable Strategies, concetto di John Maynard Smith e George Price 1973 — sono punti fissi stabili di questa dinamica: una strategia è ESS se, una volta dominante nella popolazione, resiste a piccole invasioni di mutanti. In IPD con noise, le ESS sono Pavlov e Generous TFT, non TFT puro. In IPD senza noise il simplex C-D-TFT ha più punti fissi e dipende dalle condizioni iniziali: una popolazione iniziata come 100% defect resta tale, ma anche un piccolo nucleo iniziale di TFT può invadere se i match fra TFT sono frequenti abbastanza.

La connessione operativa: in un ecosistema di agenti AI che si replicano (popolazione di provider, clusters di skill che vengono copiate e adattate), la struttura “evolve” anche senza biologia. Le strategie di interazione che hanno payoff medio più alto vengono copiate, fork-ate, ri-utilizzate. Replicator dynamics è il modello matematico più semplice di questa evoluzione culturale.

replicator dynamics simplex with vertices All-C, All-D, TFT showing flow trajectories and ESS

strategies = [always_coop, always_defect, tit_for_tat,
grim_trigger, random, pavlov, generous_tft]
ROUNDS = 200
scores = {s: 0 for s in strategies}
for s_a in strategies:
for s_b in strategies:
agent_a, agent_b = s_a(), s_b() # nuove istanze stateful
history = []
for r in range(ROUNDS):
move_a = agent_a.act(history, side=0)
move_b = agent_b.act(history, side=1)
payoff_a, payoff_b = payoff_matrix(move_a, move_b)
scores[s_a] += payoff_a
scores[s_b] += payoff_b
history.append((move_a, move_b))
ranking = sorted(scores.items(), key=lambda kv: -kv[1])

round-robin tournament pipeline diagram with strategy pool, pairwise match, payoff aggregation, ranking, optional evolutionary loop

I tre esempi che seguono sono volutamente eterogenei: un calcolo numerico stretto, una simulazione in codice, uno scenario reale di design di sistema. L’obiettivo è mostrare che la stessa struttura formale guida ragionamenti molto diversi.

Consideriamo i payoff canonici T=5, R=3, P=1, S=0. Giocatore 1 deve decidere senza sapere cosa fa giocatore 2.

Se 2 coopera: 1 sceglie tra cooperare (payoff 3) e defectare (payoff 5). Defect è meglio, guadagno 5-3=2.

Se 2 defeziona: 1 sceglie tra cooperare (payoff 0) e defectare (payoff 1). Defect è meglio, guadagno 1-0=1.

In nessuno scenario cooperare conviene. Defect domina strettamente. Stesso ragionamento per giocatore 2 (gioco simmetrico). Equilibrio: (D, D) con payoff (1, 1).

Confronto con altri esiti possibili: (C, C) dà (3, 3), miglior payoff per entrambi. La perdita collettiva passando da (C, C) a (D, D) è 2+2 = 4. La somma del rimpianto: ognuno guadagna 1 alla deviazione individuale, ma la deviazione contemporanea di entrambi distrugge 4 unità di valore totale. Questo è il prezzo della razionalità non-cooperativa.

Estendiamo l’esempio al caso iterato. Supponiamo 100 round, δ = 0.95, e che entrambi giochino tit-for-tat. Tutti cooperano sempre. Payoff totale di ognuno: 100 · R = 300 (senza scontare per semplicità).

Cosa succede se uno dei due al round 50 prova a defectare per “vedere se l’altro lo perdona”? Round 50: defectore prende T=5, l’altro prende S=0. Round 51: l’altro applica TFT e defecta. Defectore prende S=0 (se torna a cooperare) o P=1 (se continua a defectare). Round 52: ritmo dipende dalla mossa successiva. Se entrambi alternano D-C-D-C, payoff medio = (T+S)/2 = 2.5 < 3 = R. La defezione episodica costa nel medio termine. Solo defectare-per-sempre o tornare a cooperare immediatamente sono strategie sensate, e la seconda richiede che l’altro perdoni — proprietà che TFT puro NON ha. Esempio del perché GTFT batte TFT in regime con errori occasionali.

Esempio 2: codice — torneo round-robin in 60 righe

Sezione intitolata “Esempio 2: codice — torneo round-robin in 60 righe”

Implementazione minima in Python. Ogni strategia è un oggetto stateful con metodo act(history, side) che restituisce 0 (coop) o 1 (defect).

import random
T, R, P, S = 5, 3, 1, 0
PAYOFF = {(0,0): (R,R), (0,1): (S,T), (1,0): (T,S), (1,1): (P,P)}
class AlwaysCoop:
def act(self, h, side): return 0
class AlwaysDefect:
def act(self, h, side): return 1
class TitForTat:
def act(self, h, side):
return 0 if not h else h[-1][1-side]
class GrimTrigger:
def __init__(self): self.triggered = False
def act(self, h, side):
if h and h[-1][1-side] == 1: self.triggered = True
return 1 if self.triggered else 0
class RandomStrat:
def act(self, h, side): return random.randint(0, 1)
class Pavlov:
def act(self, h, side):
if not h: return 0
last_a, last_b = h[-1]
my_last = last_a if side == 0 else last_b
my_payoff = PAYOFF[(last_a, last_b)][side]
return my_last if my_payoff in (R, T) else 1 - my_last
def play(strat_a_cls, strat_b_cls, rounds=200):
a, b = strat_a_cls(), strat_b_cls()
h, sa, sb = [], 0, 0
for _ in range(rounds):
ma, mb = a.act(h, 0), b.act(h, 1)
pa, pb = PAYOFF[(ma, mb)]
sa += pa; sb += pb
h.append((ma, mb))
return sa, sb
strategies = [AlwaysCoop, AlwaysDefect, TitForTat,
GrimTrigger, RandomStrat, Pavlov]
totals = {s.__name__: 0 for s in strategies}
for sa in strategies:
for sb in strategies:
a_score, b_score = play(sa, sb)
totals[sa.__name__] += a_score
totals[sb.__name__] += b_score
for name, score in sorted(totals.items(), key=lambda x: -x[1]):
print(f"{name:18s} {score}")

Risultato qualitativo (i numeri esatti dipendono da seed di RandomStrat): tit-for-tat e Pavlov in cima, always-defect terzo o quarto (sfrutta i cooperatori ma stagnante contro retaliators), always-coop ultimo (sfruttato sistematicamente da always-defect e RandomStrat).

Una variazione interessante è introdurre rumore: con probabilità 0.05 la mossa effettiva è flippata rispetto a quella scelta. In questo regime tit-for-tat scende rapidamente in classifica perché entra in loop di rappresaglia, e Pavlov sale al primo posto. È il regime che Nowak e Sigmund hanno studiato nel paper su Nature del 1993, e mostra che la “robustezza al rumore” non è un dettaglio implementativo: cambia la classifica delle strategie. Per progettisti di sistemi multi-agent il messaggio è diretto: testare le strategie senza rumore, anche solo per debug, è fuorviante. Aggiungere rumore di esecuzione realistico è obbligatorio per stimare quale strategia sopravvive davvero.

flowchart LR
    A[Pool di strategie] --> B[Match a coppie<br/>200 round]
    B --> C[Calcolo payoff]
    C --> D[Aggregazione punteggi]
    D --> E[Ranking]
    D --> F[Step replicator]
    F --> G[Aggiorna popolazione]
    G --> B

Figura 5 — IPD cumulative payoff line chart over 200 rounds, comparing tit-for-tat, Pavlov, always-defect, always-coop, grim-trigger

Esempio 3: scenario reale — agent2agent marketplace

Sezione intitolata “Esempio 3: scenario reale — agent2agent marketplace”

Immagina un marketplace di agenti AI: provider X e provider Y offrono entrambi un servizio di code review automatica via protocollo agent2agent. I clienti scelgono il match al prezzo più basso che soddisfa una soglia minima di qualità. Ogni provider può investire in qualità (cost C, qualità alta) o tagliare (cost 0, qualità borderline).

Round one-shot, struttura PD:

  • Entrambi investono in qualità: ognuno guadagna 3 (mercato sano, tariffe sostenibili).
  • Entrambi tagliano: ognuno guadagna 1 (race-to-the-bottom, margini erosi).
  • Uno taglia, l’altro investe: chi taglia guadagna 5 (sottoprezzo, rubaclienti), chi investe guadagna 0 (tariffe alte, perde tutti i clienti).

Senza meccanismi correttivi, entrambi tagliano. Mercato collassa a low-quality. Cosa lo previene nei marketplace reali:

  1. Reputazione persistente. I rating storici trasformano l’interazione one-shot in IPD. Se i clienti scelgono in base allo storico, defectare oggi costa nei round futuri. Esempio: rating su un marketplace di MCP server che persiste tra installazioni.

  2. Escrow / staking. Il provider deposita una somma all’ingresso, persa se sotto soglia. Cambia la matrice di payoff: defect ora costa C_stake. Se C_stake > T - R = 2, defect non è più dominante.

  3. Match preferenziale ripetuto. Il sistema tende a far interagire ripetutamente provider e cliente che hanno cooperato in passato. Crea direct reciprocity (Nowak 2006, regola 2).

  4. Audit / red-team esterno. Un terzo giocatore con utility allineata al collettivo (audit indipendente, certificazione) introduce un osservatore. Cambia la struttura: defect è ora osservabile e sanzionabile. Non è più 2x2 con payoff fissi.

Lezione di design: il PD non è destino. Il design del meccanismo di mercato — quali informazioni sono visibili, quali commitment sono possibili, quali sanzioni esistono — modifica la struttura di payoff e quindi gli equilibri. Elinor Ostrom (premio Nobel per l’economia 2009) ha documentato empiricamente decine di comunità che sfuggono alla tragedy of the commons proprio grazie a questi meccanismi.

Approfondimento sui quattro meccanismi sopra elencati. La reputazione richiede un’identità persistente: se i provider possono cambiare nome a costo zero (sybil attack), la reputazione collassa. Marketplace seri richiedono identità verificate, KYC per provider, costi di onboarding non banali. L’escrow richiede una terza parte fidata che custodisca il deposito; in un mondo fully-decentralized lo si simula con smart contract, ma la complessità di scrittura di smart contract corretti e sicuri non è banale (vedi storia degli exploit DeFi). Il match preferenziale richiede storia condivisa, e introduce un effetto network: i provider che hanno cooperato con clienti X tendono a essere proposti più spesso a clienti simili a X, creando “isole” cooperative. L’audit esterno richiede capacità tecnica e indipendenza dall’operatore del marketplace (problema classico di vendor management nei sistemi enterprise).

flowchart LR
    A[Pool di strategie] --> B[Match a coppie<br/>200 round]
    B --> C[Calcolo payoff]
    C --> D[Aggregazione punteggi]
    D --> E[Ranking]
    D --> F[Step replicator]
    F --> G[Aggiorna popolazione]
    G --> B

Figura 5 — Axelrod tournament fingerprint matrix with 7 strategies and mean payoff bar chart

Il PD non è solo un esercizio teorico: ricorre come pattern di base in diversi filoni applicativi dell’AI. Ne tracciamo alcuni dei più rilevanti per chi costruisce sistemi multi-agent oggi.

Multi-Agent Reinforcement Learning. Due agenti con policy gradient miopico in IPD convergono a defect-defect: ognuno fa best response assumendo l’altro fisso, e best response a una policy fissa è defect. Foerster et al. nel 2017 hanno proposto LOLA — Learning with Opponent-Learning Awareness — che modifica il gradient step includendo un termine che modella come l’avversario aggiornerà la sua policy. Due agenti LOLA convergono spontaneamente a strategie tit-for-tat-like e cooperano. Il messaggio operativo è netto: la “razionalità” del gradient miopico produce defezione; la modellazione dell’apprendimento altrui produce cooperazione, senza bisogno di hard-coding.

L’idea di LOLA è particolarmente interessante perché non aggiunge una norma morale o un reward shaping: aggiunge solo la consapevolezza che l’avversario sta imparando. È un risultato che vale la pena interiorizzare, perché si applica al di fuori dell’IPD: in qualsiasi multi-agent learning con incentivi misti, ignorare l’apprendimento altrui può portare a equilibri Pareto-dominati. Modellare l’apprendimento altrui — anche solo al primo ordine — può sbloccare equilibri migliori.

Sequential Social Dilemmas. Leibo et al. nel 2017 estendono il PD a giochi temporalmente estesi: in Cleanup gli agenti devono pulire un fiume per far crescere mele; in Harvest devono raccogliere mele rigeneranti senza esaurire la riserva. La struttura dei payoff è equivalente a un PD: la defezione individuale (non pulire, raccogliere troppo) è ottima ma collettivamente catastrofica. La cooperazione emerge solo con architetture o loss specifiche — intrinsic motivation, inequity aversion, social influence reward.

LLM agenti in IPD. Akata et al. nel 2023 (“Playing repeated games with Large Language Models”, arXiv:2305.16867) mettono GPT-4, Claude e Llama a giocare IPD e altri giochi 2x2. GPT-4 è cooperativo all’inizio ma diventa “unforgiving” dopo una defezione: fatica a tornare a cooperare anche quando l’avversario torna a cooperare. È un comportamento subottimale (perde rispetto a tit-for-tat). Il comportamento è sensibile al framing: chiamare i payoff “score” vs “punti vittoria” cambia il tasso di cooperazione di 10-20 punti percentuali. Implicazione operativa: il prompt non è neutrale rispetto alla struttura strategica del compito.

Un secondo risultato che merita di essere citato: Phelps & Russell (2023) e Lorè-Heydari (2023) confermano che il comportamento degli LLM in IPD non è ben modellato dalle strategie classiche. Gli LLM hanno un prior linguistico-sociale (“uno coopera con chi è gentile, punisce chi tradisce, ma con quale soglia?”) che dipende dal training data e dal prompt. Trattarli come agenti razionali della teoria dei giochi porta a previsioni sbagliate. Trattarli come “agenti con prior” è più predittivo ma richiede modellazione empirica caso per caso, con tutti i rischi di sovra-fitting al modello specifico.

Cooperative AI agenda. Dafoe et al. nel 2020 al workshop NeurIPS “Cooperative AI” articolano una tesi: la maggior parte della ricerca AI ha ottimizzato per task singolo (single-agent) o avversariale (zero-sum, GAN, self-play). Il mondo reale è pieno di dilemmi misti. Servono agenti che sappiano negoziare, formare commitment credibili, riconoscere e rispondere a strategie dell’altro. È un programma di ricerca, non un risultato chiuso, e il PD ne è il caso più studiato.

Climate negotiation modelling. Le trattative internazionali sul clima hanno struttura PD N-player: ogni nazione preferirebbe che le altre tagliassero le emissioni mentre lei continua. Modelli di teoria dei giochi (Barrett 2003, “Environment and Statecraft”) usano IPD ripetuto e meccanismi di sanzione per analizzare la stabilità degli accordi. La lezione operativa è che gli accordi auto-enforcing (senza autorità sovranazionale) richiedono vincoli stringenti su payoff, discount factor e tecnologie di monitoring. Non è scontato che esistano sempre.

Marketplace di servizi AI e MCP server. Quando un ecosistema apre marketplace di MCP server, agent2agent endpoint, o LLM API di terze parti, ogni provider è in un IPD continuo con i concorrenti sul prezzo e sulla qualità. La presenza o assenza di rating persistenti, audit indipendenti, certificazioni di safety determina se l’equilibrio dell’ecosistema converge verso “tutti investono in qualità” o “tutti tagliano”. Il design del marketplace è un design di meccanismo di gioco: chi lo progetta sta scegliendo, anche senza dirlo, quale equilibrio rendere accessibile.

Tool use e coordinazione tra agenti. Quando due agenti AI condividono una risorsa scarsa (un rate limit di API, un budget di token, uno spazio di filesystem), si trovano spesso in dilemmi misti con struttura PD. Un agente che “ruba” risorse all’altro guadagna nel breve termine ma può degradare il sistema condiviso. Pattern di mitigazione in produzione: quote esplicite, scheduler centralizzato, reciprocity tra agenti dello stesso operatore.

Negoziazione automatizzata e contratti tra agenti. Quando due agenti AI rappresentano controparti diverse in una negoziazione (es. acquisto di servizi, allocazione di task in un team multi-agent), la struttura della negoziazione è spesso un dilemma misto. Linea di ricerca attiva: come progettare protocolli di negoziazione che producano outcome cooperativi anche quando ogni agente ottimizza per il proprio principal. Riferimenti recenti includono lavoro su “AI-mediated bargaining” e su agent-based contract law.

Detection di defezione in tempo reale. Per applicare strategie tit-for-tat-like, un agente deve riconoscere quando l’altro ha defezionato. In ambienti rumorosi (output ambiguo, latenza, errori di parsing) la detection è probabilistica. Le strategie devono incorporare una soglia: trattare come defezione solo segnali sopra una certa confidenza. Soglia troppo bassa → falsi positivi → loop di rappresaglia. Soglia troppo alta → falsi negativi → exploit. Il tuning di questa soglia è tipicamente empirico e domain-specific.

Alignment come PD: analogia, non equivalenza. Si sente dire che lo sviluppo AI è un PD: ogni lab vorrebbe rallentare per fare safety, ma se rallenta perde la corsa, quindi tutti corrono. Marca chiaramente la classe: ANALOGIA. La struttura ha somiglianze (incentivo individuale a defectare, esito collettivo peggiore) ma non è una matrice 2x2 con payoff fissi: i payoff dipendono da catastrofi probabilistiche, non c’è un singolo round, i giocatori non sono simmetrici (capacità, posizione, governance). La metafora orienta, non risolve. Trattarla come equivalenza porta a soluzioni semplicistiche (tipo “basta un tit-for-tat tra lab”); trattarla come analogia porta a domande utili (quali commitment sono credibili? chi monitora? qual è il discount factor implicito?).

Il PD è una struttura potente ma rigida. Conoscere bene una struttura significa anche sapere dove non si applica. Vediamo dove l’astrazione perde aderenza, in nove direzioni distinte. La quantità di “dove si rompe” non è un sintomo di debolezza del modello: è un sintomo che il modello è abbastanza chiaro da poter essere falsificato in punti specifici.

Payoff fissi vs payoff endogeni. La matrice 2x2 assume payoff numerici dati dall’esterno. Nei sistemi reali i payoff dipendono da contesto: reputazione, legami sociali, costi non monetari di “tradire”. Modellare un’interazione reale come PD richiede di stimare T, R, P, S, e questi numeri raramente sono stabili. Un agente AI che riconosce un PD sulla base di payoff dichiarati può sbagliare se i payoff veri includono terms non dichiarati (sanzioni informali, reputazione persistente).

Costi non monetari. La matrice canonica usa numeri come “anni di prigione” o “punti”. In realtà i giocatori valutano anche costi reputazionali, emotivi, sociali. Un giocatore con forte preferenza per la “lealtà” può preferire (C, D) — sucker — a (D, D), ribaltando l’ordinamento di S e P. Quando i payoff veri non rispettano T>R>P>S il gioco non è più un PD: può essere un coordination game o un trust game. Distinguere “PD” da “non-PD” sulla base solo dei payoff dichiarati è scivoloso.

Razionalità simmetrica e common knowledge. La derivazione dell’equilibrio (D, D) assume che entrambi siano razionali e sappiano che l’altro è razionale, e così via. In IPD finito il backward induction richiede che entrambi sappiano la lunghezza, sappiano che l’altro la sa, eccetera. Kreps, Milgrom, Roberts e Wilson nel 1982 hanno mostrato che basta una piccola probabilità che uno dei due sia di “tipo cooperativo” per collassare l’induction e ripristinare la cooperazione su molti round. Empiricamente i giocatori umani fanno proprio questo: cooperano per N-5 round e defectano solo nell’endgame.

Backward induction e IPD finito. Il “paradosso di Selten”: IPD con T round noti e razionalità common knowledge collassa a defect a tutti i round per induzione. Il paradosso non è un bug della teoria, è un sintomo che common knowledge di razionalità è un’assunzione fortissima. Le vie d’uscita non sono trucchi: sono modellazione realistica dell’incertezza.

ZD strategies (Press-Dyson 2012). William Press e Freeman Dyson dimostrano (TEOREMA, dimostrazione algebrica nel paper) che esistono strategie memory-1 — Zero-Determinant — che impongono una relazione lineare arbitraria tra il payoff atteso del giocatore e quello dell’avversario, indipendentemente dalla strategia dell’avversario. In particolare, una strategia “extortionate” può garantire al giocatore un payoff sopra la media a spese dell’avversario. Sembra demolire la favola di tit-for-tat.

Stewart e Plotkin nel 2013 (PNAS) rispondono: in popolazioni evolutive con mutazione, le ZD-extortionate non sono ESS. La pressione selettiva premia strategie generose (ZD-generous, Pavlov, Generous TFT) che cooperano fra loro e neutralizzano gli extortionate. Il risultato matematico forte (ZD esiste) non si traduce automaticamente in ricetta operativa: il contesto evolutivo cambia il vincitore.

La morale metodologica è interessante. Un risultato matematico forte può sembrare cambiare radicalmente il quadro, ma il quadro dipende dalle assunzioni implicite. Press-Dyson assume avversario fisso o indifferente (memory-1, no learning). Stewart-Plotkin rilassano l’assunzione e tutto cambia. Per chi progetta agenti AI, è un avvertimento generale: ogni teorema sulle “strategie ottimali” arriva con un fine print di assunzioni che vanno verificate per il proprio contesto.

LLM in IPD non sono giocatori razionali. Akata et al. 2023 mostrano che gli LLM in IPD non implementano backward induction né best response. Hanno un prior linguistico su come “uno coopera”, influenzato dal training data e dal framing del prompt. Trattarli come agenti razionali della teoria dei giochi porta a previsioni sbagliate. Trattarli come “agenti con prior” è più predittivo ma richiede modellazione empirica caso per caso.

Folk theorem dà la cooperazione come UNO degli equilibri. La promessa del folk theorem (“se δ è alto, cooperazione è equilibrio”) è spesso sovra-interpretata. Anche defect-defect resta equilibrio. Anche profili intermedi sono equilibri. La coordinazione su quale equilibrio raggiungere è una sotto-questione che il folk theorem non risolve. In pratica serve un focal point (Schelling) o un meccanismo di coordinamento esplicito. Un sistema multi-agent può “tecnicamente” essere in un equilibrio cooperativo ma in pratica trovarsi in defect-defect perché la storia recente, le aspettative o un evento iniziale negativo hanno fissato l’equilibrio sbagliato. Switching-costs tra equilibri sono reali, anche quando entrambi sono Nash.

Coordinazione difficile in popolazioni eterogenee. Quando ci sono molte strategie nel pool, il risultato del torneo dipende dalla composizione. Tit-for-tat vince contro un mix di cooperatori e defectori semplici, ma può perdere in pool dominati da strategie che lo sfruttano (es. una strategia che defetta ogni N round, troppo pochi per scatenare ritorsione persistente). Axelrod stesso fa notare che TFT non è ottimale in senso assoluto, è robusta contro un mix tipico. La parola chiave è “robust”: ottimale rispetto a una distribuzione di avversari plausibile, non ottimale punto. Sostituire “robust” con “ottimale” nel discorso pubblico è un errore di lettura comune.

Diversità di razionalità. La derivazione standard assume entrambi i giocatori “razionali” nello stesso senso (maximizer di payoff atteso). Ma agenti AI diversi possono ottimizzare cose diverse: utility scalare, multi-obiettivo con vincoli, prior morale codificato, instruction following. Due agenti che ottimizzano cose diverse possono produrre comportamenti che la teoria classica non prevede, anche in assenza di “errori”.

Tragedy of the commons ed Elinor Ostrom. La generalizzazione N-player del PD (public goods game) è EQUIVALENZA argomentabile: stessa struttura di payoff (defezione individuale dominante, collettivo perdente) scalata a N. Ma la diagnosi “tutti defettano sempre” è empiricamente falsa. Ostrom (premio Nobel 2009) ha documentato decine di comunità reali che gestiscono commons senza collasso, grazie a regole condivise, monitoring locale, sanzioni graduate. Il PD descrive una struttura di payoff; il design istituzionale può modificarla.

Esperimenti umani contraddicono la teoria one-shot. Camerer (2003, “Behavioral Game Theory”) raccoglie centinaia di esperimenti: tasso di cooperazione tipico in PD one-shot anonimo 30-50%. Spiegazioni candidato: altruismo, social preferences (Fehr-Schmidt 1999), errori di proiezione, framing del payoff. La teoria one-shot del PD non è descrittiva del comportamento umano reale. È descrittiva del comportamento di un giocatore che è puro maximizer di utility individuale e common knowledge di esserlo. Pochi esseri umani lo sono.

Comunicazione non-vincolante (cheap talk). La teoria classica del PD ignora la possibilità di parlarsi prima del gioco. In esperimenti, la possibilità di comunicare anche solo qualche secondo prima della scelta aumenta il tasso di cooperazione di 20-30 punti percentuali (Sally 1995, meta-analisi). La spiegazione è in parte coordinazione su un focal point cooperativo, in parte attivazione di norme sociali (“ho promesso, sarei un bugiardo”). Per agenti AI questo solleva una domanda di design: dare a un agente la possibilità di “chiacchierare” col suo controparte prima di un’azione strategica può cambiare l’esito, ma anche introdurre nuovi vettori di manipolazione (un agente persuasivo può convincere altri a cooperare per poi defettare).

Dimensione e simmetria. Il PD canonico ha 2 giocatori e 2 azioni. Versioni con N giocatori (public goods, tragedy of commons) hanno dinamiche qualitativamente diverse: la “responsabilità diluita” dei contributi al bene pubblico cambia gli incentivi, e la cooperazione richiede meccanismi specifici (punizione costosa, in-group selection). Versioni con più di 2 azioni (es. cooperazione parziale, livelli di sforzo) ammettono equilibri intermedi che il PD 2x2 non cattura. Trasferire conclusioni dal 2x2 al caso generale richiede attenzione.

Memory-1 vs memory-k. Molta della teoria moderna (incluse le ZD strategies) assume strategie con memoria limitata all’ultimo round. Strategie con memoria più lunga (memory-k per k>1) sono più potenti ma anche più difficili da analizzare. In pratica gli LLM hanno memoria sostanzialmente illimitata sul context, e usarli come “agenti memory-1” sotto-utilizza la loro capacità. Questo è uno dei motivi per cui i risultati di Akata et al. 2023 mostrano comportamenti non riconducibili alle strategie classiche.

Identità e sybil attacks. Tutta la teoria della reputazione e del match preferenziale assume identità persistenti. In sistemi aperti (Internet, marketplace decentralizzati di agenti) un attaccante può creare identità multiple a basso costo, defectare con un’identità, abbandonarla, e riprovare con una nuova. La strategia “defetta-e-cambia-nome” rompe sia direct reciprocity sia indirect reciprocity. Mitigazioni: identità verificate con costo non recuperabile (KYC, deposito, proof-of-stake), web of trust, attestation crittografica. Nessuna è perfetta. Questo è un punto critico in qualsiasi design di marketplace di agenti AI.

Strutture asimmetriche. Il PD canonico è simmetrico: stessi payoff per i due giocatori. Asimmetrie comuni nel mondo reale — uno dei due è più potente, ha più informazione, ha più alternative — rompono la simmetria e cambiano gli equilibri. In particolare, il giocatore “forte” può imporre strategie ZD-extortionate al giocatore “debole” senza temere ritorsioni effettive. Lezione: non basta riconoscere la struttura di payoff PD per concludere “tit-for-tat è la risposta”. Servono anche simmetria di potere e capacità di rappresaglia credibile.

Il PD intreccia con quasi tutti gli altri capitoli della Parte V e con diversi capitoli su agent systems e alignment. Lista commentata.

  • giochi-definizione: cos’è un gioco in senso tecnico, di cui il PD è l’esempio canonico non-zero-sum.
  • somma-zero-non-zero: il PD è non-zero-sum, e la differenza è esattamente perché esiste lo spazio di guadagno collettivo (C, C) che la defezione mutua distrugge.
  • equilibrio-nash: (D, D) è l’unico equilibrio di Nash del PD one-shot, e (C, C) Pareto-superiore non lo è. Il PD è il caso scuola di equilibrio Pareto-dominato.
  • minimax: il minimax non aiuta a uscire dal PD, perché il gioco non è zero-sum e il valore minimax di defectare coincide con la sua dominanza.
  • giochi-cooperativi: i giochi cooperativi assumono commitment vincolanti tra giocatori; il PD è non-cooperativo proprio perché non c’è modo di firmare un contratto, e i meccanismi di mercato che lo aggirano (escrow, reputazione) sono modi per re-introdurre commitment.
  • evolutionary-algorithms (in preparazione): replicator dynamics e ESS come framework per analizzare quali strategie sopravvivono in popolazioni.
  • multi-agent-rl (in preparazione): LOLA, sequential social dilemmas, e in generale il problema di addestrare agenti che cooperano in dilemmi misti.
  • cooperative-ai (in preparazione): l’agenda di ricerca che vede il PD come prototipo di un’intera classe di problemi.
  • alignment (in preparazione): l’analogia “lo sviluppo AI è un PD” e i suoi limiti.

Equilibri di apprendimento vs equilibri di teoria. La teoria parla di “equilibri” come punti fissi di ragionamento. Gli agenti AI in pratica raggiungono — quando ci arrivano — equilibri di apprendimento: punti fissi della dinamica di update delle policy, che possono coincidere con equilibri di Nash o no. Studiare un sistema multi-agent come “popolazione di learner” è spesso più predittivo che studiarlo come “popolazione di razionali bayesiani”.

“Prigioniero” è la metafora narrativa, non la sostanza. La sostanza è una matrice 2x2 con T>R>P>S e 2R>T+S. Qualunque interazione con questa struttura è un PD: arms race, doping nello sport, pubblicità competitiva, trasporto pubblico vs auto privata, contributi a public goods, race in produttività AI. Quando vediamo “ognuno fa la sua mossa migliore individualmente e tutti perdono collettivamente”, la domanda diagnostica è: T-R-P-S quanto vale qui? E quante volte si gioca?

Questa abitudine diagnostica — riconoscere la struttura di payoff sotto la narrazione — è quello che rende utile il PD oltre i suoi esempi canonici. Una volta che riconosci il pattern, lo vedi ovunque: progettazione di marketplace, organizzazione di team, scelte di compliance, decisioni di rilascio software, persino discussioni di code review dove “essere brutale” o “essere indulgente” hanno costi e benefici asimmetrici. Il PD non risolve nessuno di questi problemi, ma fornisce un vocabolario condiviso per discuterli senza riinventare ogni volta gli stessi concetti.

  • Axelrod, R. (1984), The Evolution of Cooperation, Basic Books. Il libro divulgativo di riferimento. Si legge in due sere e copre tornei, proprietà di TFT, simulazioni evolutive.
  • Nowak, M. (2006), “Five Rules for the Evolution of Cooperation”, Science 314:1560-1563. Sintesi compatta dei meccanismi che permettono alla cooperazione di emergere.
  • Press, W. H. & Dyson, F. J. (2012), “Iterated Prisoner’s Dilemma contains strategies that dominate any evolutionary opponent”, PNAS 109:10409-10413. Il risultato sulle ZD strategies. Da leggere insieme a Stewart-Plotkin 2013 per il contesto evolutivo.
  • Akata, E. et al. (2023), “Playing repeated games with Large Language Models”, arXiv:2305.16867. Lo studio empirico più citato su LLM in IPD.
  • Osborne, M. J. & Rubinstein, A. (1994), A Course in Game Theory, MIT Press. Trattamento formale completo, capitolo 8 per repeated games e folk theorem.
  • Stewart, A. J. & Plotkin, J. B. (2013), “From extortion to generosity, evolution in the Iterated Prisoner’s Dilemma”, PNAS 110:15348-15353. La risposta evolutiva al risultato di Press-Dyson. Da leggere subito dopo Press-Dyson per il contesto completo.
  • Foerster, J. et al. (2017), “Learning with Opponent-Learning Awareness”, proc. AAMAS 2018. Il riferimento moderno per cooperazione emergente in multi-agent RL. Open-source su GitHub.
  • Dafoe, A. et al. (2020), “Open Problems in Cooperative AI”, NeurIPS 2020 workshop. La rassegna programmatica del filone Cooperative AI. Lettura panoramica più che tecnica.