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.