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

name

Yes

Human-readable intervention name retained with the scenario configuration.

day

Yes

Integer simulation day on which the intervention begins. Day 0 is the first simulation day.

duration

Yes

Number of consecutive days the intervention remains active.

location

Yes

Comma-separated county or node identifiers. Use "0" to apply the intervention to every node.

effectiveness

Yes

Transmission reduction for each age group, expressed from 0.0 to 1.0. A value of 0.9 reduces transmission for that age group by 90%.

When interventions overlap, their effectiveness is combined as:

\[E_{\mathrm{combined}} = E_A + (1-E_A)E_B.\]

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:

  1. set modeled effectiveness against infection to 1.0;

  2. multiply observed coverage by the strain-season effectiveness estimate;

  3. 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

identity

Yes

None

Vaccine allocation strategy. The supported value is "stockpile-age-risk".

age_risk_priority_groups

No

All 1.0

Eligibility for each age and hospitalization-risk group. Allowed values are 0.0, 0.5, and 1.0, as defined below.

vaccine_adherence

Yes for stockpile allocation

None

Proportion of each age group willing to be vaccinated, from 0.0 to 1.0. Supply beyond the adhering eligible population rolls forward.

vaccine_effectiveness

No

All 0.0

Age-specific reduction in susceptibility to infection, from 0.0 to 1.0.

vaccine_effectiveness_hosp

No

All 0.0

Age-specific reduction in hospitalization risk, from 0.0 to 1.0. Used by disease models that include hospitalization, such as SEIHRD and SEITHRD.

vaccine_capacity_proportion

No

1.0

Maximum fraction of a node’s total population that can be vaccinated per day.

vaccine_eff_lag_days

No

0

Nonnegative number of days between a stockpile release and its effective availability. Negative values are changed to 0.

vaccine_half_life_days

No

null

Positive stockpile half-life in days. Use null to disable decay. This affects unused doses, not vaccinated people.

vaccine_stockpile

No

Empty list

Doses released. Each entry requires an integer simulation day and a dose amount. Entries with the same effective day are combined.

The age_risk_priority_groups values mean:

Value

Eligible people in that age group

0.0

No one.

0.5

People in the high-risk hospitalization group only.

1.0

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.

Antivirals

The supported antiviral model identity is stockpile-age-risk. Anyone in compartment T is Treated and assumed to be receiving an antiviral. The stockpile model moves eligible people into T according to available doses, age/risk eligibility, daily capacity, and compartment priority.

Antiviral stockpile releases are also deterministic. The configured antiviral_stockpile amount is a fixed count available on that simulation day, not a random draw. People are transferred into T only where eligible people and available doses exist; unused doses roll forward according to the stockpile rules.

For routine treatment after symptom onset, prioritize I in SEITRS or only IS in SEITHRD. Allow E, IA, or IP to receive antivirals only when modeling post-exposure prophylaxis or treatment of exposed close contacts. CDC guidance notes that clinical benefit is greatest when influenza antivirals are administered early, especially within 48 hours of illness onset; see the CDC clinician summary.

The daily compartment models do not prioritize people by time already spent in an eligible compartment. Scenario parameters can account for delayed or incomplete treatment through stockpile timing, capacity, eligibility, rel_inf_T_to_I or rel_inf_T_to_IS, and T_to_R_days.

Prophylactic treatment changes the meaning of time in T: people moved from E, IA, or IP may spend more calendar time in treated states than people treated only after entering IS. The current stockpile model treats eligible compartment members directly. It does not yet model a separate proportion or multiplier of household contacts treated per infectious person. If you want a symptomatic treatment scenario, use ["IS"] for SEITHRD; include earlier compartments only when testing prophylaxis, such as treatment of family members or close contacts.

"antiviral_model": {
  "identity": "stockpile-age-risk",
  "parameters": {
    "age_risk_priority_groups": ["0.0", "0.5", "1.0", "1.0", "0.5"],
    "compartment_priority": ["IS"],
    "antiviral_effectiveness_hosp": "0.25",
    "antiviral_capacity_proportion": "0.10",
    "antiviral_half_life_days": "30",
    "antiviral_stockpile": [
      {"day": "0", "amount": "1000"},
      {"day": "14", "amount": "500"}
    ]
  }
}

Parameter

Required

Default

Description

identity

Yes

None

Antiviral allocation strategy. The supported value is "stockpile-age-risk".

age_risk_priority_groups

No

All 1.0

Eligibility for each age and hospitalization-risk group. Allowed values are 0.0, 0.5, and 1.0, with the same meanings as vaccination.

compartment_priority

No

["I"]

Disease compartments whose members can receive treatment, in treatment order within a demographic group. Every label must exist in the selected disease model.

antiviral_effectiveness_hosp

No

1.0

SEITHRD reduction in hospitalization risk for treated people, from 0.0 to 1.0, relative to the untreated IS -> H realized proportion. The default means complete protection from hospitalization; a value of 0.25 means 25% risk reduction, or 75% relative risk.

antiviral_effectiveness_death

Required for SEAITRD antivirals

None

SEAITRD reduction in mortality risk for treated people, from 0.0 to 1.0, applied to the T -> D mortality intensity. A value of 0.25 means 25% risk reduction, or 75% relative risk.

antiviral_capacity_proportion

No

1.0

Maximum fraction of a node’s total population that can begin treatment per day.

antiviral_half_life_days

No

null

Positive stockpile half-life in days. Use null to disable decay. This affects unused doses, not people already in T.

antiviral_stockpile

No

Empty list

Dose releases. Each entry requires an integer simulation day and a dose amount. Same-day entries are combined and negative days are reassigned to day 0.

Common eligible compartments are:

Disease model

compartment_priority example

SEITRS, stochastic or deterministic

["I", "E"]

SEITHRD routine treatment

["IS"]

SEITHRD prophylaxis scenario

["IS", "IP", "IA", "E"]

SEAITRD

["I"]

The stockpile parameters control movement into T. Disease model parameters control what happens after treatment begins:

Disease parameter

Model

Description

T_to_R_days

SEITRS, SEITHRD, and SEAITRD

Average number of days from treated to recovered. Required for SEAITRD because T is required.

rel_inf_T_to_I

SEITRS

Infectiousness of T relative to untreated I.

rel_inf_T_to_IS

SEITHRD

Infectiousness of T relative to symptomatic IS.

I_to_R_days, I_to_D_invdays, and highrisk_death_multiplier

SEAITRD

Untreated recovery duration, low-risk mortality rate, and high-risk mortality multiplier.

antiviral_effectiveness_death

SEAITRD

Reduction in treated T -> D mortality risk.

For SEITRS and SEITHRD, no one enters T without stockpile allocation. There are no disease-rate parameters that move people into treatment. In SEITHRD, treated people can still be hospitalized; antiviral_effectiveness_hosp reduces the T -> H realized risk rather than removing it. For example, if untreated symptomatic people have a 10% eventual hospitalization proportion, antiviral_effectiveness_hosp = 0.25 makes the treated eventual hospitalization proportion 7.5%.

In SEAITRD, T is required by the disease model but still stockpile-constrained as a treatment state: untreated trajectories bypass T, and released doses create resource-constrained I -> T treatment. SEAITRD uses separate I_to_R_days and T_to_R_days values, so a 2-day reduction in treated infectious duration should be encoded directly as a shorter T_to_R_days.

See Antiviral Stockpile Model for validation rules, allocation behavior, and model-specific details.

See NPI And Vaccine Mathematics for the NPI overlap equation, vaccine stockpile allocation, adherence headroom, decay, rounding, and effectiveness equations.