Simulation {ABM}R Documentation

R6 class Create and represent a Simulation object

Description

The Simulation class inherits the Population class. So a simulation manages agents and their contact. Thus, the class also inherits the Agent class. So a simulation can have its own state, and events attached (scheduled) to it. In addition, it also manages all the transitions, using its addTransition method. ASt last, it maintains loggers, which record (or count) the state changes, and report their values at specified times.

Super classes

ABM::R6Agent -> ABM::R6Population -> R6Simulation

Methods

Public methods

Inherited methods

Method new()

Usage
Simulation$new(simulation = 0, initializer = NULL)
Arguments
simulation

can be either an external pointer pointing to a population object returned from newSimulation, or an integer specifying the population size, or a list

initializer

a function or NULL

Details

If simulation is a number (the population size), then initializer can be a function that take the index of an agent and return its initial state. If it is a list, the length is the population size, and each element corresponds to the initial state of an agent (with the same index). Run the simulation


Method run()

Usage
Simulation$run(time)
Arguments
time

the time points to return the logger values.

Details

the returned list can be coerced into a data.frame object which first column is time, and other columns are logger results, each row corresponds to a time point.

The Simulation object first collect and log the states from all agents in the simulation, then set the current time to the time of the first event, then call the resume method to actually run it.

Continue running the simulation

Returns

a list of numeric vectors, with time and values reported by all logger.


Method resume()

Usage
Simulation$resume(time)
Arguments
time

the time points to return the logger values.

Details

the returned list can be coerced into a data.frame object which first column is time, and other columns are logger results, each row corresponds to a time point.

The Simulation object repetitively handle the events until the the last time point in "time" is reached. ASt each time point, the logger states are collected in put in a list to return. Add a logger to the simulation

Returns

a list of numeric vectors, with time and values reported by all logger.


Method addLogger()

Usage
Simulation$addLogger(logger)
Arguments
logger,

an external pointer returned by functions like newCounter or newStateLogger.

Details

without adding a logger, there will be no useful simulation results returned. Add a transition to the simulation

Returns

the simulation object itself (invisible)


Method addTransition()

Usage
Simulation$addTransition(
  rule,
  waiting.time,
  to_change_callback = NULL,
  changed_callback = NULL
)
Arguments
rule

is a formula that gives the transition rule

waiting.time

either an external pointer to a WaitingTime object such as one returned by newExpWaitingTime or newGammaWaitingTime, or a function (see the details section)

to_change_callback

the R callback function to determine if the change should occur. See the details section.

changed_callback

the R callback function after the change happened. See the details section.

Details

If waiting.time is a function then it should take exactly one argument time, which is a numeric value holding the current value, and return a single numeric value for the waiting time (i.e., should not add time).

Formula can be used to specify either a spontaneous transition change, or a transition caused by a contact.

A spontaneous transition has the form from -> to, where from and to are state specifications. It is either a variable name holding a state (R list) or the list itself. The list can also be specified by state(...) instead of list(...)

For a spontaneous transition, the callback functions take the following two arguments

  1. time: the current time in the simulation

  2. agent: the agent who initiate the contact, an external pointer

A transition caused by contact, the formula needs to specify the states of both the agent who initiate the contact and the contact agent. The two states are connected by a + sign, the one before the

I + S -> I + list("E") ~ m

For a transition caused by a contact, the callback functions take the third argument: 3. contact: the contact agent, an external pointer

Returns

the simulation object itself (invisible)


Method clone()

The objects of this class are cloneable with this method.

Usage
Simulation$clone(deep = FALSE)
Arguments
deep

Whether to make a deep clone.


[Package ABM version 0.4.1 Index]