Run a simulation where event listeners take precedence over processes for state changes.

simulation_loop(
  variables = list(),
  events = list(),
  processes = list(),
  timesteps
)

Arguments

variables

a list of Variables

events

a list of Events

processes

a list of processes to execute on each timestep

timesteps

the number of timesteps to simulate

Examples

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       3       1       0
#> 3        3       2       2       0
#> 4        4       2       2       0
#> 5        5       1       3       0