# Default parameters
All values below are encoded in `src/iohmm_evac/params.py`. Each is overridable
via the CLI (`--set` for fine-grained dotted paths, or a `--config` TOML
file). See [`cli.md`](../cli.md) for examples.
## Transition logits
The current defaults (Build 1.7):
| Row | α | β coefficients |
|---------|------|------------------------------------------------------------------------------------------------------|
| UA → AW | -6.5 | β_vol=1.5, β_mand=2.5, β_rho=0.5, β_r=0.4, β_tau=1.0 |
| AW → UA | -3.0 | (constant only) |
| AW → PR | -6.0 | β_mand=2.0, β_rho=0.6, β_pi=1.5, β_r=0.5, β_v=0.6, β_tau=1.5 |
| PR → ER | -5.5 | β_mand=1.5, β_tau=2.0, β_negc=1.5, β_r=0.4, β_v=0.8 |
| PR → SH | -6.0 | β_negr=0.6, β_negv=0.8 |
| ER → SH | -3.0 | β_tir=1.2, β_negc=1.0 |
### Two-step calibration (Builds 1.6 → 1.7)
The α constants reached their current values through two iterations.
**Build 1.6** lowered the α constants on UA→AW, AW→PR, PR→ER, and PR→SH
substantially from Build 1.5 (which had them at `-5.0`, `-4.0`, `-3.5`,
`-5.0`). The Build-1.5 values made the rows too eager: even with
`vol_t = mand_t = 0` the forecast-driven `β_rho · ρ_{i,t}` and time-progress
`β_tau · τ_t/T` terms pushed per-step transition probability into the
few-percent range, which compounded over 120 hours into a population that
had effectively finished evacuating before the voluntary order ever fired —
the Build-1.5 cumulative departure share crossed 0.5 by t≈20 and saturated
by t≈60.
The Build-1.6 table:
| Row | α |
|---------|------|
| UA → AW | -7.0 |
| AW → PR | -7.0 |
| PR → ER | -6.5 |
| PR → SH | -6.0 |
**Build 1.7** dialed in mobilization speed. Build 1.6 fixed the
premature-evacuation regression but over-corrected: median departure landed
22 hours after the mandatory order, peak EnRoute occupancy was only 5
hours before landfall, and ~5% of households failed to reach shelter. Real
evacuations show median mobilization 6–12 hours post-mandatory and peak
movement 24+ hours before landfall, so UA→AW, AW→PR, and PR→ER were each
softened by 0.5–1.0 logit units. PR→SH and ER→SH were left alone: the
sheltered-in-place share and the in-ER → in-shelter timing were already
healthy.
The β coefficients have been unchanged across all three builds. Calibration
has lived entirely in the α intercepts.
## Other defaults
| Parameter | Default | Notes |
|---------------------|---------|-------|
| `N_cap` | 1500 | Network-capacity denominator for `c_t`. |
| `v_free` | 40 km/h | Free-flow speed used in ER displacement. |
| `congestion_penalty`| 0.6 | Speed loss multiplier under congestion. |
| `shelter_capacity` | 3000 | Held for later builds; unused by the DGP itself. |
## Tuning notes
If Fig. 3 (the chapter's headline state-share plot) doesn't look right, the
following knobs are usually the culprits:
* **Too few households reach SH by landfall:** lower `α[PR→ER]` (more
negative ⇒ fewer departures), or raise `β_tau` on the same row to accelerate
late-stage departures.
* **Congestion never bites:** lower `N_cap` or raise `β_negc`. Watch for
`ER→SH` slowing down too — both rows share the parameter.
* **Departures cluster too early:** delay the warning orders (`voluntary_hour`,
`mandatory_hour`).
* **Targeted-messaging effect is invisible:** increase
`targeted_zone_multiplier` or run with more seeds — the effect is concentrated
in zone A only.
The recommended workflow for tuning is to run a small grid through
`iohmm-evac config dump --scenario X | tee a.toml`, edit `a.toml`, and re-run
with `--config a.toml`.