Chapter 7: Stochastic Cellular Automata for Urban Growth
7.1 From PDEs to Discrete Cells
While PDEs provide elegant analytical results, real urban landscapes are discrete: individual parcels of land are either developed or not, and the state of each parcel depends on its neighbours. Cellular automata (CA) provide a natural framework for modelling such discrete spatial dynamics.
In a stochastic CA for urban growth, each cell\((i,j)\) on a lattice has a state\(s_{ij} \in \{0, 1\}\) (undeveloped or developed). At each time step, the transition probability depends on the states of neighbouring cells, land suitability, and a stochastic component.
7.2 Neighbourhood Definitions
Von Neumann Neighbourhood (4-connected)
The four orthogonal neighbours at Manhattan distance 1:
$$\mathcal{N}_{\text{vN}}(i,j) = \{(i\pm 1, j), (i, j\pm 1)\}, \qquad |\mathcal{N}_{\text{vN}}| = 4$$
Moore Neighbourhood (8-connected)
All eight neighbours including diagonals:
$$\mathcal{N}_{\text{M}}(i,j) = \{(i+\delta_i, j+\delta_j) : \delta_i, \delta_j \in \{-1,0,1\}, (\delta_i,\delta_j) \neq (0,0)\}, \qquad |\mathcal{N}_{\text{M}}| = 8$$
Extended Moore with Distance Weighting
For radius \(R\), the neighbourhood includes all cells within Chebyshev distance \(R\), with weights decaying with distance:
$$w_k = \frac{1}{d_k^\alpha}, \qquad d_k = \max(|\delta_{i,k}|, |\delta_{j,k}|)$$
where \(\alpha\) controls the distance decay (typically\(\alpha = 1\) or\(\alpha = 2\)).
7.3 Transition Probability
The neighbourhood influence on cell \((i,j)\) is the weighted average of neighbouring states:
$$\Psi_{ij} = \frac{\sum_{k \in \mathcal{N}} w_k \cdot s_k}{\sum_{k \in \mathcal{N}} w_k}$$
The transition probability for an undeveloped cell to become developed is:
$$P(s_{ij}: 0 \to 1) = f(\Psi_{ij}, \, z_{ij}, \, r_{ij})$$
where:
- • \(\Psi_{ij}\): neighbourhood influence (fraction of developed neighbours, distance-weighted)
- • \(z_{ij}\): land suitability (topography, soil, zoning — static or slowly varying)
- • \(r_{ij}\): stochastic perturbation (captures unmodelled heterogeneity)
A common functional form is the logistic (sigmoid):
$$P(0 \to 1) = \frac{1}{1 + \exp\left(-\beta_0 - \beta_1 \Psi_{ij} - \beta_2 z_{ij} - \beta_3 r_{ij}\right)}$$
Irreversibility Constraint
In most urban CA models, development is irreversible:\(P(1 \to 0) = 0\). Once land is urbanised, it stays urbanised. This introduces a fundamental asymmetry that drives the monotonic expansion of the urban boundary.
7.4 Statistical Properties of CA Growth
Stochastic urban CA produce fractal-like growth patterns. Key statistics include:
Urban Patch Compactness
$$C = \frac{4\pi A}{P^2}$$
where \(A\) is the urban area and\(P\) is the perimeter.\(C = 1\) for a circle;\(C \to 0\) for fractal sprawl.
Fractal Dimension
$$N(\epsilon) \sim \epsilon^{-D_f} \qquad \Rightarrow \qquad D_f = -\lim_{\epsilon \to 0} \frac{\ln N(\epsilon)}{\ln \epsilon}$$
Real cities typically have \(D_f \in [1.5, 1.9]\), indicating significant fractal structure at the urban-rural boundary.
7.5 Python: Stochastic CA Urban Growth
A full implementation of a stochastic CA with configurable Moore neighbourhood, land suitability, and sigmoid transition probability.
Stochastic CA: Urban Growth Simulation
PythonClick Run to execute the Python code
Code will be executed with Python 3 on the server
7.6 Fortran: High-Performance CA Core
A Fortran implementation of the CA core with periodic boundary conditions for performance-critical large-grid simulations.
Fortran: High-Performance Stochastic CA
FortranClick Run to execute the Fortran code
Code will be compiled with gfortran and executed on the server
7.7 Summary & Key Takeaways
- • Stochastic CA model urban growth on discrete lattices with probabilistic transition rules
- • Neighbourhood influence: \(\Psi_{ij} = \sum w_k s_k / \sum w_k\)
- • Transition probability: sigmoid function of neighbourhood influence, suitability, and noise
- • Moore (8-connected) vs von Neumann (4-connected) neighbourhoods produce different growth morphologies
- • CA naturally produce fractal urban boundaries with \(D_f \in [1.5, 1.9]\)