docs/dgp/07-parameters.md

# 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`.