Epidemiology is the science of how diseases spread on populations. Research by medical scientists and mathematicians working in this area has over the years provided many insights into disease mechanics; giving governments and health organizations knowledge useful in prevention and vaccination strategies.
Traditionally the models used were compartmental: systems of ordinary differential equations expressing the relation between groups of homogeneous entities. While such models provide an understanding of general disease dynamics, the realization that the actual interaction structure between group members may play a critical role has caused a shift in epidemiology - as indeed in many other fields - towards network-based models.
In this talk I present a framework for network simulations written in Python and used in studies of HIV prevention and treatment strategies. The original motivation behind the work is simulation of disease processes but the software itself is not constrained to this field, and can be used for more general network models. Processes may be defined either using a simple configuration language, or as a python class. Simulations run on single computers or on clusters of machines.
The simulation module provides the main loop, handles configuration, and executes the process on the network. It is initialized using an extended ini-language allowing for inter-parameter dependencies and ranges. A basic cluster computing extension allowing for distribution of simulations on to computing grids is also provided.
The Process class, in its most general form, simply provides an interface specification, most notably to the state and topology updating methods called by the simulation. Creating a process is then a question of implementing the corresponding methods. The package also provides a process class hierarchy, with increasingly specific assumptions regarding the class of models. For the case where a node state transition probability is a simple expression involving nearest neighbour states there is a special scriptable process. This class reads transition rules for node (and edge) states and attributes (projections of states) from file and constructs the corresponding process object.
This structure provides a good platform for prototyping and testing network simulation models. The process definition can, for a broad range of models, be expressed using a set of transition rule strings, or if desired for speed, or out of complexity, implemented as a Python class.
I give an overview of the main components of the software framework, provide some examples on how to implement processes for different type of models taken from epidemiology, and show the application in HIV research.
|||Exploring network structure, dynamics, and function, using NetworkX; Hagberg A., Swart P., and Schult D., SciPy 08 - Proceedings of the 7th Python in Science Conference, 2008.|