Nordstrom, Introduction to Game Theory ยท Section 4.2 ยท CC BY-SA 4.0
The two most famous non-zero-sum games. In the Prisoner's Dilemma, defecting dominates but mutual cooperation pays better. In Chicken, swerving is safe but going straight wins if the other swerves. Both show how individual rationality can produce collective irrationality.
Prisoner's Dilemma: defect dominates
Each prisoner can confess (defect) or stay quiet (cooperate). Whatever the other does, confessing gives a better personal outcome. So both confess, ending up at (8, 8) years. But mutual silence would give (1, 1). The dominant strategy leads to a worse outcome for everyone.
Scheme
; Prisoner's Dilemma: find the dominant strategy; Payoffs are years in prison (lower is better)
(define (pd-payoff me other)
(cond
((and (eq? me 'confess) (eq? other 'confess)) 8)
((and (eq? me 'confess) (eq? other 'quiet)) 0.25)
((and (eq? me 'quiet) (eq? other 'confess)) 10)
((and (eq? me 'quiet) (eq? other 'quiet)) 1)))
; Check: is confess dominant?; Against confess: confess=8, quiet=10; Against quiet: confess=0.25, quiet=1; Confess is better in both cases (lower years)
(display "vs confess: confess=")
(display (pd-payoff 'confess 'confess))
(display ", quiet=")
(display (pd-payoff 'quiet 'confess))
(newline)
(display "vs quiet: confess=")
(display (pd-payoff 'confess 'quiet))
(display ", quiet=")
(display (pd-payoff 'quiet 'quiet))
(newline)
(display "confess dominates? ")
(display (and (< (pd-payoff 'confess 'confess)
(pd-payoff 'quiet 'confess))
(< (pd-payoff 'confess 'quiet)
(pd-payoff 'quiet 'quiet))))
Chicken: two equilibria, no dominant strategy
Two drivers race toward each other. Swerving avoids disaster but looks weak. Going straight wins big if the other swerves, but if both go straight, catastrophe. Unlike PD, neither strategy dominates: your best move depends on what the other does. There are two Nash equilibria, one favoring each player.
Scheme
; Chicken: check for dominated strategies and Nash equilibria
(define (chicken-payoff me other)
(cond
((and (eq? me 'swerve) (eq? other 'swerve)) 0)
((and (eq? me 'swerve) (eq? other 'straight)) -1)
((and (eq? me 'straight) (eq? other 'swerve)) 10)
((and (eq? me 'straight) (eq? other 'straight)) -100)))
; No dominated strategy:; vs swerve: swerve=0, straight=10 -> straight better; vs straight: swerve=-1, straight=-100 -> swerve better
(display "vs swerve: swerve=")
(display (chicken-payoff 'swerve 'swerve))
(display ", straight=")
(display (chicken-payoff 'straight 'swerve))
(newline)
(display "vs straight: swerve=")
(display (chicken-payoff 'swerve 'straight))
(display ", straight=")
(display (chicken-payoff 'straight 'straight))
(newline)
; Nash equilibria: no player can improve by switching
(define (nash? s1 s2)
(let ((other-s1 (if (eq? s1 'swerve) 'straight 'swerve))
(other-s2 (if (eq? s2 'swerve) 'straight 'swerve)))
(and (>= (chicken-payoff s1 s2) (chicken-payoff other-s1 s2))
(>= (chicken-payoff s2 s1) (chicken-payoff other-s2 s1)))))
(display "(swerve, straight) Nash? ")
(display (nash? 'swerve 'straight))
(newline)
(display "(straight, swerve) Nash? ")
(display (nash? 'straight 'swerve))
(newline)
(display "(swerve, swerve) Nash? ")
(display (nash? 'swerve 'swerve))
Python
# PD and Chicken payoffs in Pythondef pd(me, other):
payoffs = {
("confess","confess"): 8, ("confess","quiet"): 0.25,
("quiet","confess"): 10, ("quiet","quiet"): 1
}
return payoffs[(me, other)]
def chicken(me, other):
payoffs = {
("swerve","swerve"): 0, ("swerve","straight"): -1,
("straight","swerve"): 10, ("straight","straight"): -100
}
return payoffs[(me, other)]
# PD: confess dominatesfor other in ["confess", "quiet"]:
print(f"vs {other}: confess={pd('confess',other)}, quiet={pd('quiet',other)}")
# Chicken: Nash equilibria
strategies = ["swerve", "straight"]
for s1 in strategies:
for s2 in strategies:
alt1 = "straight"if s1 == "swerve"else"swerve"
alt2 = "straight"if s2 == "swerve"else"swerve"
nash = chicken(s1,s2) >= chicken(alt1,s2) and chicken(s2,s1) >= chicken(alt2,s1)
if nash:
print(f"Nash: ({s1}, {s2}) -> ({chicken(s1,s2)}, {chicken(s2,s1)})")
The key difference
PD has one Nash equilibrium and it is Pareto-dominated: both players would prefer mutual cooperation but can't get there. Chicken has two Nash equilibria, both asymmetric: coordination is the problem, not defection. PD models arms races. Chicken models brinksmanship.
Nordstrom uses years in prison as PD payoffs (lower is better), which is the original formulation. Many textbooks flip the sign and use utility (higher is better). The Nash equilibrium analysis is identical either way. Chicken payoffs here follow Nordstrom's convention: +10 for winning, -1 for swerving alone, -100 for mutual crash.