Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release 0.1.16 #197

Merged
merged 2 commits into from
Apr 16, 2024
Merged

Release 0.1.16 #197

merged 2 commits into from
Apr 16, 2024

Conversation

plietar
Copy link
Member

@plietar plietar commented Apr 16, 2024

No description provided.

plietar added 2 commits April 12, 2024 17:22
… simulation. (#194)

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.

When a new object is included in the simulation, its `restore_state`
method is called with a NULL argument. This is needed because events,
even new ones, still need to set their internal timestep variable.

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:
```
list(
 mda_administer = Event$new(),
 mass_pev_doses = list(
  TargetedEvent$new(n),
  TargetedEvent$new(n),
  TargetedEvent$new(n)
 )
)
```

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` and `restore_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.

[stateful.R]: https://github.com/mrc-ide/malariasimulation/blob/b3376d33cda29cc5e4d7217fefad4b367f9f9167/R/stateful.R
@plietar plietar requested a review from giovannic April 16, 2024 10:05
@plietar plietar merged commit ecf2a68 into master Apr 16, 2024
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants