def simulate_sis_on_network(G): # Model Configuration cfg = mc.Configuration() cfg.add_model_parameter('beta', 0.05) cfg.add_model_parameter('lambda', 0.05) cfg.add_model_initial_configuration("Infected", random.sample(G.nodes, k=5)) # Model selection model = ep.SISModel(G) # Initialize the simulation model.set_initial_status(cfg) Si, Ii = [], [] for s in range(SIMULCOUNT): # Reset the model model.reset() # Simulation execution iterations = model.iteration_bunch(ITERCOUNT) # Collect results for figures S, I = [], [] for i in range(ITERCOUNT): iteration = iterations[i]['node_count'] S.append(iteration[0] / G.number_of_nodes()) I.append(iteration[1] / G.number_of_nodes()) Si.append(S) Ii.append(I) plot_spreading_figures(Si, Ii)
def test_sis_model(self): for g in get_graph(True): model = epd.SISModel(g) config = mc.Configuration() config.add_model_parameter('beta', 0.5) config.add_model_parameter('lambda', 0.2) config.add_model_parameter("fraction_infected", 0.1) model.set_initial_status(config) iterations = model.iteration_bunch(10) self.assertEqual(len(iterations), 10) iterations = model.iteration_bunch(10, node_status=False) self.assertEqual(len(iterations), 10)
def test_sis_model(self): g = nx.erdos_renyi_graph(1000, 0.1) model = epd.SISModel(g) config = mc.Configuration() config.add_model_parameter('beta', 0.5) config.add_model_parameter('lambda', 0.2) config.add_model_parameter("percentage_infected", 0.1) model.set_initial_status(config) iterations = model.iteration_bunch(10) self.assertEqual(len(iterations), 10) iterations = model.iteration_bunch(10, node_status=False) self.assertEqual(len(iterations), 10)
def test_initial_infected(self): for g in get_graph(True): model = epd.SISModel(g) config = mc.Configuration() config.add_model_parameter('beta', 0.5) config.add_model_parameter('lambda', 0.2) predefined_infected = [0, 1, 2, 3, 4, 5] config.add_model_initial_configuration("Infected", predefined_infected) model.set_initial_status(config) inft = [k for k, v in future.utils.iteritems(model.status) if v == 1] self.assertAlmostEqual(inft, predefined_infected) iterations = model.iteration_bunch(10) self.assertEqual(len(iterations), 10)
import networkx as nx import ndlib.models.ModelConfig as mc import ndlib.models.epidemics as ep from bokeh.io import output_notebook, show from ndlib.viz.bokeh.DiffusionTrend import DiffusionTrend # Network topology g = nx.erdos_renyi_graph(1000, 0.05) # Model selection model = ep.SISModel(g) # Model Configuration cfg = mc.Configuration() cfg.add_model_parameter('beta', 0.01) cfg.add_model_parameter('proability of return to S stage', 0.005) cfg.add_model_parameter("initial infected rate", 0.05) model.set_initial_status(cfg) # Simulation execution iterations = model.iteration_bunch(200) trends = model.build_trends(iterations) #visualize viz = DiffusionTrend(model, trends) p = viz.plot(width=550, height=550) show(p)
# plot SIS results from bokeh.io import show, output_notebook from ndlib.viz.bokeh.DiffusionTrend import DiffusionTrend # %% # to display SIS results plot inline in noteboook output_notebook() # %% [markdown] # ### a) Plot fractions of infected and susceptible nodes in terms of time # for infection rate $\beta = 0.1$ and recovery rate $\mu = 1$ # %% # Model selection model = ep.SISModel(graph) # Model Configuration cfg = mc.Configuration() cfg.add_model_parameter('beta', 0.2) cfg.add_model_parameter('lambda', 1) cfg.add_model_parameter("fraction_infected", 0.05) model.set_initial_status(cfg) # Simulation execution iterations = model.iteration_bunch(200) trends = model.build_trends(iterations) # plot fractions of infected and susceptible nodes in terms of time viz = DiffusionTrend(model, trends) p = viz.plot(width=600, height=600)
return cfg if __name__ == '__main__': g = nx.erdos_renyi_graph(1000, 0.1) num_iterations = int(input('Number of iterations for all models: ')) # 200 ############################################################### SIModel = ep.SIModel(g.copy()) SIModel.set_initial_status(get_si_params()) SI_iterations = SIModel.iteration_bunch(num_iterations) SI_trends = SIModel.build_trends(SI_iterations) visualize(SIModel, SI_trends, sub_dir='epidemics') SISModel = ep.SISModel(g.copy()) SISModel.set_initial_status(get_sis_params()) SIS_iterations = SISModel.iteration_bunch(num_iterations) SIS_trends = SISModel.build_trends(SIS_iterations) visualize(SISModel, SIS_trends, sub_dir='epidemics') SEISModel = ep.SEISModel(g.copy()) SEISModel.set_initial_status(get_seis_params()) SEIS_iterations = SEISModel.iteration_bunch(num_iterations) SEIS_trends = SEISModel.build_trends(SEIS_iterations) visualize(SEISModel, SEIS_trends, sub_dir='epidemics') SEIRModel = ep.SEIRModel(g.copy()) SEIRModel.set_initial_status(get_seir_params()) SEIR_iterations = SEIRModel.iteration_bunch(num_iterations) SEIR_trends = SEIRModel.build_trends(SEIR_iterations)