# Population synthesis
Per-household static covariates are sampled independently and held fixed for
the duration of the simulation. Defaults live on `PopulationParams` in
`src/iohmm_evac/params.py`; every parameter is overridable via the CLI.
| Field | Symbol | Distribution | Default range / params |
|------------------|-------------|-------------------------------------------------|----------------------------------------|
| Distance to coast | $d_i$ | Truncated Normal | μ=15, σ=10, [0.5, 50] km |
| Vehicle access | $v_i$ | Bernoulli | p=0.85 |
| Risk sensitivity | $r_i$ | Standard Normal | μ=0, σ=1 |
| Evacuation zone | $z_i$ | Deterministic from $d_i$ | A: d<5, B: 5≤d<20, C: d≥20 |
| Destination dist. | $\text{dest}_i$ | Uniform | [40, 100] km |
The truncated normal is sampled by rejection: oversample, drop out-of-bounds,
refill until full. For the default ranges the acceptance probability is high
enough that one or two iterations suffice.
## Rationale
* **Distance + zone**: the chapter wants behavioral heterogeneity that maps
cleanly onto a coarse "exposure" axis. A truncated normal keeps tails
reasonable; the zone discretization is what local emergency-management
agencies actually use.
* **Vehicle access**: a binary covariate that creates a meaningful sub-population
for which `PR→SH` is more attractive than `PR→ER`.
* **Risk sensitivity**: standard-normal $r_i$ provides continuous heterogeneity
for `UA→AW`, `AW→PR`, `PR→ER`.
* **Destination**: only used by households that actually evacuate, but stored for
every household so vectorization stays simple.
## Targeted-messaging hook
The `targeted_zone_multiplier` parameter scales local risk for households in
zone A. The targeted-messaging scenario sets it to 1.5; all other scenarios
leave it at 1.0.