Schematex
causalloop·Sterman, Business Dynamics (2000)·urban-planning, systems-thinking·complexity 2/3·since v0.8.0

Urban traffic congestion (two balancing loops)

The classic system-dynamics counterintuitive result — widening roads induces demand. The engine enumerates the feedback loops and classifies each reinforcing or balancing by link polarity.

For the policy / planning analyst

Open in Playground →
causalloop·§
↘ preview
100%
Urban traffic congestion Causal loop diagram "Urban traffic congestion": 6 variables, 7 causal links. 2 feedback loops: 0 reinforcing (R), 2 balancing (B). B1 "Congestion brake" (balancing, 1 negative link): Travel speed → Driving attractiveness → Number of cars → Congestion → Travel speed. B2 "Transit substitution" (balancing, 1 negative link): Number of cars → Congestion → Public transit use → Number of cars. Not in any loop: Road capacity. Urban traffic congestion + + + + + B1 Congestion brake B2 Transit substitution Road capacity Travel speed Driving attractiveness Number of cars Congestion Public transit use
UTF-8 · LF · 10 lines · 399 chars✓ parsed·2.9 ms·6.2 KB SVG

What this shows

The system-dynamics model behind one of the most counterintuitive results in transport policy: widening a road does not durably cut congestion, because faster travel makes driving more attractive, which pulls more cars onto the road until it clogs again. Two balancing loops fight the build-up — congestion itself slows travel and dampens demand, and congestion pushes commuters onto public transit, which removes cars.

The engine classifies the loops by polarity rather than asking you to. It walks the signed graph, enumerates each elementary cycle, and counts the negative links: both feedback loops here carry an odd number of negative links, so both come back balancing (B) and are numbered B1, B2. That even/odd classification — Sterman's textbook rule — is the analysis a drawing tool skips, and it is what explains why the system settles back to congestion no matter how much capacity is added.

Causal loop syntax