A public good is non-rival (one person's use doesn't diminish another's) and non-excludable (you can't stop people from using it). National defense, street lighting, clean air. The free rider problem: everyone wants the good, nobody wants to pay. Markets underprovide public goods because individual incentives diverge from collective benefit.
Four types of goods
Goods are classified along two dimensions: rivalry and excludability. Public goods occupy the corner where both are absent.
Excludable
Non-excludable
Rival
Private good (food, clothing)
Common resource (fish stocks, clean air)
Non-rival
Club good (cable TV, toll road)
Public good (national defense, streetlights)
The free rider problem
If you can enjoy the benefit without paying, why pay? Each individual has an incentive to free-ride on others' contributions. If everyone reasons this way, the good never gets provided. This is why public goods typically require government provision or other collective action mechanisms.
A common resource (rival but non-excludable) gets overused because each individual captures the full benefit of use but shares the cost of depletion. Overfishing, overgrazing, traffic congestion. Hardin's 1968 essay framed it as inevitable without property rights or regulation. Elinor Ostrom showed communities can self-govern commons through norms and institutions.
Scheme
; Tragedy of the commons: shared pasture; Each herder adds cattle; overgrazing depletes the commons
(define max-capacity 100)
(define n-herders 5)
(define (pasture-quality total-cattle)
(max 0 (- 1.0 (/ total-cattle max-capacity))))
(define (herder-profit cattle total-cattle)
(* cattle (pasture-quality total-cattle)))
; Each herder's optimal individual choice; vs socially optimal allocation
(define social-optimum (/ max-capacity 2)) ; maximize total profit
(define per-herder-social (/ social-optimum n-herders))
(display "Pasture capacity: ") (display max-capacity) (newline)
(display "Social optimum (total cattle): ") (display social-optimum) (newline)
(display "Per herder (social): ") (display per-herder-social) (newline)
; But each herder wants to add more; Individual best response given others at social optimum
(define others-cattle (* (- n-herders 1) per-herder-social))
(display "If others graze ") (display others-cattle) (display " total:") (newline)
(display " Profit at social share (10): ")
(display (herder-profit 10 (+ others-cattle 10))) (newline)
(display " Profit at greedy share (20): ")
(display (herder-profit 20 (+ others-cattle 20))) (newline)
(display " Incentive: graze more than your share")
Python
# Tragedy of the commons simulation
max_cap = 100
n_herders = 5def quality(total):
returnmax(0, 1.0 - total / max_cap)
def profit(my_cattle, total):
return my_cattle * quality(total)
# Start at social optimum, simulate drift
cattle = [10] * n_herders # social optimum = 50 totalfor rnd inrange(5):
total = sum(cattle)
profits = [profit(c, total) for c in cattle]
q = int(quality(total) * 100) / 100.0print("Round " + str(rnd) + ": cattle=" + str(cattle) + ", total=" + str(total) + ", quality=" + str(q))
# Each herder adds 2 (greedy)
cattle = [c + 2for c in cattle]
total = sum(cattle)
q = int(quality(total) * 100) / 100.0print("Final: total=" + str(total) + ", quality=" + str(q))
print("Commons depleted by individual rationality")