HomeArticlesTransport & Urbanism

Simulating Urban Sprawl with a Cellular Automaton

How a 4-state grid of local rules — no planning department required — reproduces density rings, commercial corridors and sprawl.

mysimulator teamUpdated June 2026≈ 7 min read▶ Open the simulation

A city grown from a grid of simple rules

Cellular-automaton city models replace a planning department with a grid and a handful of local rules. Each cell in an 80×54 array holds one of a small number of states — empty, residential, commercial, industrial — and at every time step, every cell looks at its neighbourhood and decides whether to change state, purely from local information: what fraction of its neighbours are already developed, how close it is to existing commercial cells, how far it sits from the model's implicit centre or transport corridor.

live demo · a 4-state urban cellular automaton growing outward● LIVE

This is the same style of model behind UGM/SLEUTH (Clarke's landmark urban growth model, calibrated against real satellite land-use data for cities worldwide) and countless academic land-use-change simulators: no cell 'knows' the city's master plan, yet running the local rule for enough generations reproduces recognisable macro-scale patterns — rings of density around a core, commercial strips along transport corridors, industrial clustering — purely from bottom-up interaction.

Growth rate and the sprawl radius

Two parameters dominate the qualitative outcome. A growth-rate parameter sets how many new cells convert from empty to developed each generation — low values produce a slowly densifying, compact core; high values produce fast, scattered development that only fills in gaps later. A sprawl-radius parameter controls how far a new development can appear from existing development: a small radius forces contiguous growth, cell by cell outward from what already exists (compact, defensible, low-infrastructure-cost growth); a large radius allows leapfrog development — new cells appearing well beyond the current edge, which is exactly how real low-density, car-dependent sprawl tends to expand, jumping past agricultural land to cheaper parcels further out and leaving gaps that fill in later.

for each empty cell c:
  n_dev = fraction of c's neighbours already developed
  d_core = distance from c to the nearest existing development
  p_convert = growth_rate * f(n_dev) * g(d_core, sprawl_radius)
  if random() < p_convert:
     c becomes residential, then may reclassify to commercial/industrial
     based on proximity to existing commercial/industrial cells

Zoning as an emergent pattern, not a rule

Nothing in the base ruleset says 'do not build a factory next to a house' — yet distinct commercial and industrial clusters emerge anyway, because commercial cells are seeded to prefer growing adjacent to other commercial cells (agglomeration: businesses cluster near customers and each other) while residential growth is repelled by proximity to industrial cells (nobody wants to live downwind of one, encoded as a lower conversion probability near industrial neighbours). The segregation of land uses that real zoning ordinances mandate by law turns out to be reproducible as a self-reinforcing pattern from nothing more than local preference gradients — a striking parallel to Schelling's segregation model in a completely different domain.

What the model gets right, and where it breaks down

CA urban-growth models reproduce strikingly realistic macro patterns — ring growth, corridor-following strips, edge sprawl — with a tiny rule set, and their simplicity makes them fast enough to run thousands of stochastic realisations for uncertainty analysis, which is exactly how SLEUTH is used in practice to forecast metropolitan land use decades ahead. What they systematically miss is anything that requires actual decision-making beyond a neighbour count: land prices, zoning law, transportation investment decisions, and individual developer economics all get folded into a handful of tuned probability parameters rather than modelled directly, so a CA model is best read as a generator of plausible spatial patterns, not a predictor of a specific city's actual future.

Frequently asked questions

How can a city 'grow' without anyone planning it in the simulation?

Each grid cell only looks at its immediate neighbours and applies the same simple conversion rule every generation — no cell has access to a master plan. Recognisable large-scale patterns like density rings and commercial corridors emerge purely from many local interactions repeating over time, the same way flocking or crystal growth patterns emerge from local rules.

What's the difference between growth rate and sprawl radius?

Growth rate controls how fast empty cells convert to developed cells overall — how quickly the city fills in. Sprawl radius controls where new development can appear relative to existing development: a small radius forces contiguous, compact expansion; a large radius allows leapfrog development far from the current edge, mimicking real low-density sprawl.

Why do commercial and industrial zones separate without an explicit zoning rule?

The model gives commercial cells a higher probability of appearing next to other commercial cells (businesses cluster near customers) and gives residential cells a lower probability of appearing next to industrial cells. Those two local preferences alone are enough to produce clearly separated land-use clusters, similar in spirit to Schelling's segregation model.

Try it live

Everything above runs in your browser — open City Growth CA and change the parameters while it is running. Nothing is installed, nothing is uploaded, the whole model lives in one tab.

▶ Open City Growth CA simulation

What did you find?

Add reproduction steps (optional)