Interventions
Interventions are configured in the simulation input JSON. Age-specific lists must contain one value per age group and use the same age-group order as the population and disease-model data.
Non-Pharmaceutical Interventions
NPIs reduce transmission by age group for specified days and locations.
"non_pharma_interventions": [
{
"name": "School Closure",
"day": "20",
"duration": "10",
"location": "48113,48141",
"effectiveness": ["0.9", "0.9", "0.0", "0.0", "0.0"]
}
]
Parameter |
Required |
Description |
|---|---|---|
|
Yes |
Human-readable intervention name retained with the scenario configuration. |
|
Yes |
Integer simulation day on which the intervention begins. Day 0 is the first simulation day. |
|
Yes |
Number of consecutive days the intervention remains active. |
|
Yes |
Comma-separated county or node identifiers. Use |
|
Yes |
Transmission reduction for each age group, expressed from |
When interventions overlap, their effectiveness is combined as:
For example, two overlapping interventions with effectiveness 0.5 produce a
combined effectiveness of 0.75, not 1.0.
Stockpile Targeting
Vaccine and antiviral stockpile models can serve anyone in the configured eligible population when there are enough released doses, daily capacity, and eligible people available. A scenario may instead target a subgroup to ask how much impact that group-specific strategy has. In that case, people outside the configured age/risk eligibility cannot receive the intervention, even if doses remain unused.
Age/risk eligibility is fixed for the scenario. The simulator does not
currently model staged vaccine rollout between subgroups, such as high-risk
people first and then everyone later. To compare target groups, run separate
scenarios with different age_risk_priority_groups, release timing, and
stockpile amounts.
Vaccines
The supported vaccine model identity is stockpile-age-risk. It releases
doses from a stockpile and vaccinates susceptible people according to age,
hospitalization-risk group, adherence, and daily capacity.
Stockpile releases are deterministic. The configured vaccine_stockpile
amount is a fixed count entering the allocation process on its effective day;
the model does not draw a random number of released doses. Doses are then
transferred where eligible supply, capacity, adherence, and susceptible
headroom allow.
Matching observed coverage and vaccine effectiveness can require additional fitting. The generated state influenza schedules use a simplified fully-protected-equivalent approach:
set modeled effectiveness against infection to
1.0;multiply observed coverage by the strain-season effectiveness estimate;
release that reduced number as the effective stockpile.
For example, 100 observed vaccinations with 20% effectiveness become 20
modeled doses with 100% effectiveness. This avoids applying the same
effectiveness twice. For custom scenarios, users may instead release all 100
doses and set vaccine_effectiveness to 0.2.
Vaccine effectiveness is used by the disease and travel models. When no effectiveness values are configured, both default to age-specific zeros.
"vaccine_model": {
"identity": "stockpile-age-risk",
"parameters": {
"age_risk_priority_groups": ["0.0", "0.5", "1.0", "1.0", "0.5"],
"vaccine_adherence": ["0.70", "0.75", "0.80", "0.85", "0.90"],
"vaccine_effectiveness": ["0.50", "0.50", "0.50", "0.50", "0.50"],
"vaccine_effectiveness_hosp": ["0.80", "0.80", "0.80", "0.80", "0.80"],
"vaccine_capacity_proportion": "0.10",
"vaccine_eff_lag_days": "14",
"vaccine_half_life_days": "60",
"vaccine_stockpile": [
{"day": "0", "amount": "1000"},
{"day": "30", "amount": "500"}
]
}
}
Parameter |
Required |
Default |
Description |
|---|---|---|---|
|
Yes |
None |
Vaccine allocation strategy. The supported value is |
|
No |
All |
Eligibility for each age and hospitalization-risk group. Allowed values are |
|
Yes for stockpile allocation |
None |
Proportion of each age group willing to be vaccinated, from |
|
No |
All |
Age-specific reduction in susceptibility to infection, from |
|
No |
All |
Age-specific reduction in hospitalization risk, from |
|
No |
|
Maximum fraction of a node’s total population that can be vaccinated per day. |
|
No |
|
Nonnegative number of days between a stockpile release and its effective availability. Negative values are changed to 0. |
|
No |
|
Positive stockpile half-life in days. Use |
|
No |
Empty list |
Doses released. Each entry requires an integer simulation |
The age_risk_priority_groups values mean:
Value |
Eligible people in that age group |
|---|---|
|
No one. |
|
People in the high-risk hospitalization group only. |
|
Everyone in both low- and high-risk hospitalization groups. |
These values are eligibility gates, not staged priority levels. For example,
you can configure high-risk people in every age group plus everyone in a
65-and-older age group by setting the younger age groups to 0.5 and the
65-and-older age group to 1.0. People in age groups set to 0.0, and
low-risk people in age groups set to 0.5, will not be vaccinated in that
scenario. There is no built-in rollout that later opens eligibility to those
groups; choose the target population and release schedule before the run.
Vaccination moves people from the unvaccinated susceptible subgroup to the corresponding vaccinated susceptible subgroup. It does not directly move people between disease compartments, and vaccine protection does not currently wane. Disease compartments are time-varying states; age, risk, and vaccination group are demographic attributes retained throughout the simulation.
Stockpile day is the release day, while
day + vaccine_eff_lag_days is the day those doses become effective and
available for allocation. Unused doses roll forward to the next simulation
day.
The strategy first divides a release among nodes in proportion to each node’s
eligible population. Within a node, it then allocates doses among eligible
age/risk groups. Population-size allocation and age/risk targeting are
therefore two stages of the same stockpile-age-risk strategy, not separate
model identities. These allocation steps use deterministic proportional
allocation with integer rounding; they do not add additional stochastic noise.
vaccine_adherence is a lifetime ceiling for each age group. A value of 0.6
means at most 60% of that age group can be moved into the vaccinated subgroup,
even if additional stock remains.
Initial infections are seeded into the unvaccinated exposed group and cannot
be vaccinated. For example, if 100 of 1,000 people are initialized in E, no
more than the remaining 900 susceptible people can receive day-0 vaccine,
before applying age/risk eligibility and adherence limits.
A seasonal campaign does not require a separate vaccination model. Represent
it as a sequence of dated vaccine_stockpile releases. Release days may be
negative when a campaign begins before simulation day 0; after applying
vaccine_eff_lag_days, any effective day before zero is reassigned to day 0.