Closed plietar closed 7 months ago
All modified and coverable lines are covered by tests :white_check_mark:
Project coverage is 96.26%. Comparing base (
7e48608
) to head (ec584db
). Report is 1 commits behind head on master.:exclamation: Current head ec584db differs from pull request most recent head 9c7fcde. Consider uploading reports for the commit 9c7fcde to get more accurate results
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
Oh, can you change the destination to dev before merging? Didn't notice that before I approved. Thanks!
The simulation restoring feature required the number of events to be identical to the original simulation's. This has turned out to be too restrictive for our use cases in malariasimulation, where we want to resume the simulation with new interventions enabled, which come with new events.
I had originally hoped that this would be enough, and that we could run the first phase of the simulation with all the events present, even though they are unused. However there are interventions whose number of events depends on the parametrization of it, hence we cannot create a saved simulation state that fits all possible use cases when resuming.
The solution implemented here is to allow more events and variables to be introduced when resuming the simulation, on the condition that the objects are named when passed to
simulation_loop
. Without this requirement, given more objects than were saved, it would be ambigous which ones need to be restored and which ones are new.Additionally, the list of events and variables can now be structured using nested lists of objects. This has no impact on the way the simulation is executed, but it allows for more complicated simulations to be restored.
For example, this is a simplified example of what the list of events in malariasimulation might look like:
In this example, the top-level list is names, allowing the
mass_pev_doses
events to be absent during the warmup simulation and added only later when restoring. However, because the nested list of targeted events is not named, more events cannot be added to it.The names of the methods to save and restore state, together with the helper functions
save_object_state
andrestore_object_state
are tweaked and made public to allow this pattern to be reused in applications that have their own state to save, as demonstrated by the stateful.R file in malariasimulation.