Skip to content

Latest commit

 

History

History
113 lines (71 loc) · 5.02 KB

README.md

File metadata and controls

113 lines (71 loc) · 5.02 KB

Optimized Gillespie algorithms for the simulation of Markovian epidemic processes on large and heterogeneous networks: SIS-OGA

This code is part of the article "Optimized Gillespie algorithms for the simulation of Markovian epidemic processes on large and heterogeneous networks" [ArXiv].

license language

NetworkX implementation

Versions

Fortran implementation - for performance

Python implementation - learn and use

(this) NetworkX Python implementation - range of options

GA Fortran implementation - Statistically exact, but NOT optimized

Citation

Full bibliographic details: Computer Physics Communications 219C (2017) pp. 303-312

DOI information: 10.1016/j.cpc.2017.06.007

@article{COTA2017303,
title = "Optimized Gillespie algorithms for the simulation of Markovian epidemic processes on large and heterogeneous networks",
journal = "Computer Physics Communications",
volume = "219",
number = "",
pages = "303 - 312",
year = "2017",
note = "",
issn = "0010-4655",
doi = "http://dx.doi.org/10.1016/j.cpc.2017.06.007",
url = "http://www.sciencedirect.com/science/article/pii/S0010465517301893",
author = "Wesley Cota and Silvio C. Ferreira",
keywords = "Complex networks",
keywords = "Markovian epidemic processes",
keywords = "Gillespie algorithm",
abstract = "Numerical simulation of continuous-time Markovian processes is an essential and widely applied tool in the investigation of epidemic spreading on complex networks. Due to the high heterogeneity of the connectivity structure through which epidemic is transmitted, efficient and accurate implementations of generic epidemic processes are not trivial and deviations from statistically exact prescriptions can lead to uncontrolled biases. Based on the Gillespie algorithm (GA), in which only steps that change the state are considered, we develop numerical recipes and describe their computer implementations for statistically exact and computationally efficient simulations of generic Markovian epidemic processes aiming at highly heterogeneous and large networks. The central point of the recipes investigated here is to include phantom processes, that do not change the states but do count for time increments. We compare the efficiencies for the susceptible–infected–susceptible, contact process and susceptible–infected–recovered models, that are particular cases of a generic model considered here. We numerically confirm that the simulation outcomes of the optimized algorithms are statistically indistinguishable from the original GA and can be several orders of magnitude more efficient."
}

Synopsis

This code is a implementation of the SIS-OGA algorithm, as detailed in our paper. It receives as input a NetworkX graph object and the dynamical parameters.

For performance, see https://github.com/wcota/dynSIS (Fortran implementation)

Installation

Python 3 is required, and also the NumPy and NetworkX libraries.

Use

Import:

import networkx as nx
import dynSIS

After defining the NetworkX graph, just call

dynSIS.dyn_run(<nx.graph_Object>, <output_file_path>, <number_of_samples>, <infection_rate>, <maximum_time_steps>, <fraction_of_initial_infected_vertices>)

where <output_file_path> will be written with the average density of infected vertices versus time.

Examples

example_karate.py

This uses the Karate Club network generated by NetworkX. To run, just use

python example_karate.py <output_file>

and type the asked parameters.

example_read.py

You need to provide a file containing the list of edges (in and out, two collumns). ID of the vertices must be enumerated sequentially as 1, 2, 3,..., N, where N is the total number of vertices of the network. Here, we assume undirected and unweighted networks without multiple neither self connections.

Consider, for example, a network with N=5 vertices represented by:

1,2
1,3
2,4
2,5
3,4

Examples of datasets and their specifications are available at http://wcota.me/dynSISdatasets.

To run, just use

python example_read.py <edges_file> <output_file>

and type the asked parameters.

Alternatively, use (Linux):

bash run_read.sh <edges_file> <output_file> <number of samples> <infection rate lambda> <maximum time steps> <fraction of infected vertices (initial condition)>

Example:

bash run_read.sh edges/s01.edges.dat "s01.lb0.002_100-samples.dat" 100 0.002 1000000 0.5

License

This code is under GNU General Public License v3.0.