HomeSociety & EconomicsCongestion Pricing — Wardrop Equilibrium

🚦 Congestion Pricing — Wardrop Equilibrium

Congestion pricing simulation of Pigou's two-route network: drivers choose between a congestible tolled road and a slower constant-cost free road, settling into a Wardrop user equilibrium. Adjust the toll and see total travel time vs. the system optimum.

Society & Economics3DEasy60 FPS
congestion-pricing ↗ Open standalone

🚦 Congestion Pricing — Wardrop Equilibrium

Watch a stream of drivers repeatedly compare a short congestible road, which slows as it fills, against a longer road whose travel time never changes — Pigou's 1920 example. With no toll they all pile onto the congestible road; a well-chosen toll splits them and moves the selfish outcome onto the social optimum.

🔬 What It Demonstrates

Drivers act as selfish optimizers, each choosing the route with the lowest personal generalized cost (travel time plus toll converted to time). Because a driver joining the congestible road ignores the delay they add for everyone already on it, self-interested choices produce more total travel time than a coordinated system optimum would: at the default settings all 70 cars/min take the congestible road for 18 minutes each, whereas an even 35/35 split would average 14.5 minutes.

🎮 How to Use

Raise the toll slider and watch drivers shift onto the free constant-cost road as the tolled road becomes relatively expensive; click "Set Pigouvian Toll" to auto-apply the marginal-cost toll (about $2.33 at the defaults), which drives the equilibrium exactly onto the 50/50 system optimum and closes the optimality gap to zero. Toggle the Braess shortcut to add an extra congestible link.

💡 Did You Know?

Singapore's Electronic Road Pricing scheme, introduced in 1998, was one of the first real-world Pigouvian congestion tolls; London and Stockholm followed with cordon-based pricing that cut inner-city traffic volumes by 15-20% within a year.

About Congestion Pricing — Wardrop Equilibrium

This simulation models the classic congestion-pricing problem from transportation economics, in the form Arthur Pigou gave it in 1920: a fixed stream of drivers must choose between a short road that congests (its travel time here is 4 + 0.2x minutes at a flow of x cars per minute) and a longer road whose travel time is a constant 18 minutes however many cars use it. The congestible road is the one that carries the toll. Left alone, drivers behave selfishly, each picking whichever route currently offers the lower personal cost, and the system settles into a Wardrop user equilibrium — a state where no driver can reduce their own travel time by switching routes, even though the total travel time across all drivers is higher than it needs to be. The simulation lets you raise or lower the toll and watch the equilibrium shift, and it computes the Pigouvian toll that would make selfish behaviour coincide with the socially optimal traffic split.

The underlying theory was formalized by John Glen Wardrop in 1952 and extended by Pigou's earlier insight that a tax equal to the marginal external cost a driver imposes on others can align private incentives with social welfare. Real-world implementations — Singapore's Electronic Road Pricing, London's Congestion Charge, and Stockholm's cordon tolls — have all measurably reduced inner-city traffic volumes and travel times, making this one of the most empirically validated applications of microeconomic theory to public policy. The simulation also lets you toggle a Braess's-paradox shortcut, illustrating the counterintuitive result that adding road capacity can sometimes make everyone's commute worse.

Frequently Asked Questions

What is a Wardrop equilibrium?

A Wardrop equilibrium (or user equilibrium) is a traffic pattern in which every driver has chosen the route that minimizes their own travel cost given everyone else's choices, so that all routes actually used between an origin and destination have equal (and minimal) travel cost, while any unused route would be more expensive. It describes the outcome of decentralized, selfish route choice rather than any centrally coordinated plan.

How do I use this simulation?

Drivers continuously re-evaluate the two roads and drift toward whichever is currently cheaper, converging to equilibrium within a few seconds; with the toll at zero they all end up on the congestible tolled road. Raise the Toll slider to make it less attractive and watch the free-route share rise; raise Demand to intensify congestion; click "Set Pigouvian Toll" to auto-apply the toll that minimizes total system travel time, and toggle the Braess shortcut to add an extra congestible link.

What is the Pigouvian toll shown in the chart?

The Pigouvian toll is the marginal external cost a driver imposes on others by joining the congestible (tolled) road - the flow already on it multiplied by the extra minute-per-car the newcomer adds, evaluated at the system optimum - converted into a dollar toll via the value-of-time slider. At the default 70 cars/min and $20 per hour that is 0.2 x 35 = 7 minutes of delay imposed on others, about $2.33. Charging exactly this amount makes each driver's private cost equal to the true social cost of their trip, which causes the selfish Wardrop equilibrium to coincide with the system-optimal traffic split that minimizes total travel time.

Why does the user equilibrium differ from the system optimum?

At the user equilibrium, each driver minimizes only their own travel time, ignoring the extra delay their presence adds to every other driver sharing the congested road. The system optimum instead minimizes total travel time across all drivers, which requires fewer cars on the congestible road than selfish behaviour would produce: here 35 cars/min rather than all 70, cutting total travel time from 1260 to 1015 car-minutes, a saving of about 19 percent. This gap between individually rational and collectively optimal outcomes is a textbook example of a negative externality, similar to overfishing a shared resource.

What is Braess's paradox and why does it matter here?

Braess's paradox, described by Dietrich Braess in 1968, shows that adding a new road (or route capacity) to a network can increase everyone's travel time if it changes the equilibrium routing in an unfavourable way. In this simulation, toggling the shortcut link lets some traffic bypass part of the free route's delay, but because more drivers pile onto that link it becomes congested itself, and the aggregate equilibrium travel time can rise even though a new option was added. Removing certain roads in cities including Seoul and New York has measurably reduced congestion for exactly this reason.

Has congestion pricing worked in real cities?

Yes. Singapore's Electronic Road Pricing (1998, evolved from a 1975 paper-license scheme) reduced peak-hour traffic by roughly 10-15%. London's Congestion Charge (2003) cut traffic entering the charging zone by about 15% in its first years. Stockholm ran a seven-month trial congestion tax in 2006 that reduced traffic by 20% and, after a referendum, made the charge permanent; follow-up studies found the reduction persisted for years, evidence that tolling reshapes long-run travel behaviour rather than just short-term route choice.

Why does everyone crowd onto the tolled road when the toll is zero?

Because with no toll it is the faster road for any individual driver at every flow up to the full demand: the congestible road takes 4 + 0.2x minutes, which stays below the constant 18 minutes of the free road until it is carrying all 70 cars/min. Each driver therefore has a private incentive to join it, and nobody is left on the free road. That is Pigou's point: the selfish equilibrium wastes time even though no single driver is behaving irrationally. Once a toll is charged the equilibrium is self-correcting - too many drivers on the tolled road makes it slow and expensive, so traffic flows back to the free road until the two generalized costs are equal, which at the Pigouvian toll is exactly the 50/50 optimum.

Is congestion pricing regressive against lower-income drivers?

This is a genuine equity concern raised in the transportation-economics literature: a flat toll represents a larger share of income for lower-income drivers, potentially pricing them off faster routes regardless of how urgently they need to travel. Many real-world schemes address this with revenue recycling — using toll income to fund public transit, provide rebates, or lower other taxes — which can make the overall policy progressive even though the toll itself is regressive in isolation. This simulation does not model income heterogeneity directly but the value-of-time slider approximates how differently drivers might weigh the same toll.

How does this relate to Vickrey's bottleneck model?

William Vickrey's 1969 bottleneck model is a complementary framework that tolls congestion in the time dimension rather than across parallel routes: drivers choose when to depart, and a time-varying toll spreads departures to eliminate queueing delay while preserving the same equilibrium travel cost for all users. This simulation's route-choice framework and Vickrey's departure-time framework are the two classic building blocks of congestion-pricing theory, and modern dynamic tolling systems (like variably priced express lanes) combine elements of both.

What are current research frontiers in congestion pricing?

Active areas include distance- and emissions-based dynamic tolling that adjusts in real time using traffic sensor data, equity-aware pricing schemes that pair tolls with targeted rebates for low-income commuters, integration with autonomous-vehicle routing where fleets can be centrally coordinated toward system-optimal rather than user-optimal patterns, and mobility-as-a-service platforms that internalize the congestion externality by pricing trips dynamically across modes rather than per road segment.

⚙ Under the hood

Drivers choose between a free congested route and a faster tolled one, settling into a Wardrop equilibrium — tune the toll to trigger Braess's paradox.

economicsgame theorytransportationurban policy

3D · Three.js / WebGL renderer · 60 FPS target · runs fully client-side, no install

What did you find?

Add reproduction steps (optional)