Simulating network processes
The process of simulating processes (including epidemic processes) on networks is
quite involved and quite computationally expensive. epydemic
implements simulations
in a way that aims to be as easy as possible for programmers to specify while
also being as efficient as possible. There’s a tension between these two goals, for
which epydemic
tends to err on the side of simplicity: it’s better to be correct,
but slower, than to be wrong, faster.
The epydemic
simulation framework consists of a number of classes that you
sub-class to define the processes you want to simulate. There are three main classes
involved: processes, loci, and dynamics. We’ll describe each class individually,
and then show how they fit together.
Processes
The most important class is the Process
, which defines a stochastic process that
runs on a network. By “running on a network” we mean that the process defines the say that
the network evolves in time, which typically involves some or all of the following activities:
Changing the state of a node or edge, for example by changing the properties associated with them;
Adding or deleting nodes; and
Adding or deleting edges, also referred to a re-wiring.
There are lots of ways to define a network process. The most common for spidemic
simulation is using a compartmented model of disease where each node resides
in a different state (or compartment) that changes as the epidemic progresses. All such
processes in epydemic
sub-class CompartmenedModel
, and the library also
includes “reference” models for the most common kinds of epidemic process.
Loci
A Locus
is a collection of nodes or edges at which changes occur. The easiest way
to think of a locus is simply as a set of nodes or edges characterised by some property. A
process then defines events that occur at a locus, where an event is an action in the simulation
such as a node becoming infected, or recovering, or being added or deleted from the network.
Events are defined by stochastic processes.
Dynamics
A Dynamics
is a class that defines a particular way of performing a discrete-event
simulation. A dynamics describes the way in which a process is applied to evolve the network,
by choosing and firing events as defined by the process.
While it’s common (and indeed necessary) to define new process sub-classes, dynamics
can usually be treated just as “black box” frameworks whose inner workings seldom matter.
They can however be usefully sub-classed in some situations, for example to improve the performance
of simulations.
There are two kinds of dynamics currently supported by epydemic
:
for this tutorial we’ll use the most common,
StochasticDynamics
. (See Simulation dynamics for
an explanation of the different simulation dynamics available in
epydemic
.)
We’ll now show how to put all these classes together.