Run a simulation where event listeners take precedence over processes for state changes.
a list of Variables
a list of Events
a list of processes to execute on each timestep
the number of timesteps to simulate
population <- 4
timesteps <- 5
state <- CategoricalVariable$new(c('S', 'I', 'R'), rep('S', population))
renderer <- Render$new(timesteps)
transition <- function(from, to, rate) {
return(function(t) {
from_state <- state$get_index_of(from)
state$queue_update(
to,
from_state$sample(rate)
)
})
}
processes <- list(
transition('S', 'I', .2),
transition('I', 'R', .1),
transition('R', 'S', .05),
categorical_count_renderer_process(renderer, state, c('S', 'I', 'R'))
)
simulation_loop(variables=list(state), processes=processes, timesteps=timesteps)
renderer$to_dataframe()
#> timestep S_count I_count R_count
#> 1 1 4 0 0
#> 2 2 2 2 0
#> 3 3 2 2 0
#> 4 4 0 3 1
#> 5 5 0 3 1