Add flexible Intervention<TSeq> API for reusable model interventions#187
Closed
Add flexible Intervention<TSeq> API for reusable model interventions#187
Intervention<TSeq> API for reusable model interventions#187Conversation
…integration Co-authored-by: gvegayon <893619+gvegayon@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Add a flexible API for interventions based on discussion
Add flexible Mar 12, 2026
Intervention<TSeq> API for reusable model interventions
Member
|
This PR was supposed to build some specs, but not implement. Closing. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Complex interventions (quarantine, isolation, contact tracing) are currently baked into individual model classes, making them impossible to reuse across models. This PR introduces an
Intervention<TSeq>base class that plugs into the simulation lifecycle likeGlobalEvent, but with a richer, structured interface.New:
Intervention<TSeq>base classinclude/epiworld/intervention-bones.hpp/intervention-meat.hpp:setup(Model*)Model::reset()update(Model*)run_globalevents()applies_to(Agent*, Model*)update()loopapply(Agent*, Model*)update()loopshould_release(Agent*, Model*)update()looprelease(Agent*, Model*)update()loopThe default
update()iterates all agents and calls these helpers in order. Subclasses may override any subset or overrideupdate()entirely for full control.clone_ptr()is virtual for correct polymorphic cloning.Model integration
config.hpp:Intervention<TSeq>forward decl +InterventionPtraliasmodel-bones.hpp/model-meat.hpp:interventionsvector;add_intervention(ref andshared_ptroverloads),get_intervention,rm_interventionModel::reset()callsintervention->setup(this)after initial state distributionModel::run_globalevents()dispatches interventions after existing global events, flushing the event queue between eachUsage
setup()is called on everyModel::reset()(including inrun_multiple); one-time operations likeadd_state()must be guarded by the implementor.Original prompt
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.