def si_model(g, er_g, ba_g): print '\nSI MODEL SIMULATION' print 'MODEL CONFIGURATION' cfg = mc.Configuration() beta = float(raw_input('INFECTION RATE: ')) cfg.add_model_parameter('beta', beta ) cfg.add_model_parameter('percentage_infected', float(raw_input('PERCENTAGE INFECTED: '))) for_comparison = dict() for network in [g, er_g, ba_g]: model_si = si.SIModel(network) model_si.set_initial_status(cfg) iterations = model_si.iteration_bunch(200) trends_si = model_si.build_trends(iterations) if network is g: print 'Original graph' model_si.name = 'G' viz = DiffusionTrend(model_si, trends_si) viz.plot('../../report/images/spreading/si/diffusion.pdf') viz = DiffusionPrevalence(model_si, trends_si) viz.plot('../../report/images/spreading/si/prevalence.pdf') for_comparison['original_si'] = [model_si, trends_si] elif network is er_g: print 'ER graph' model_si.name = 'ER' viz = DiffusionTrend(model_si, trends_si) viz.plot('../../report/images/spreading/si/diffusion_er.pdf') viz = DiffusionPrevalence(model_si, trends_si) viz.plot('../../report/images/spreading/si/prevalence_er.pdf') for_comparison['er_si'] = [model_si, trends_si] else: print 'BA graph' model_si.name = 'BA' viz = DiffusionTrend(model_si, trends_si) viz.plot('../../report/images/spreading/si/diffusion_ba.pdf') viz = DiffusionPrevalence(model_si, trends_si) viz.plot('../../report/images/spreading/si/prevalence_ba.pdf') for_comparison['ba_si'] = [model_si, trends_si] viz = DiffusionTrendComparison([ for_comparison['original_si'][0], for_comparison['er_si'][0], for_comparison['ba_si'][0] ], [ for_comparison['original_si'][1], for_comparison['er_si'][1], for_comparison['ba_si'][1] ]) viz.plot("../../report/images/spreading/si/trend_comparison_beta{}.pdf".format(beta))
def test_visualize_prevalence(self): g = nx.erdos_renyi_graph(1000, 0.1) model = sir.SIRModel(g) config = mc.Configuration() config.add_model_parameter('beta', 0.001) config.add_model_parameter('gamma', 0.01) config.add_model_parameter("percentage_infected", 0.05) model.set_initial_status(config) iterations = model.iteration_bunch(200) trends = model.build_trends(iterations) # Visualization viz = DiffusionPrevalence(model, trends) viz.plot("prev.pdf") os.remove("prev.pdf")
def test_visualize_prevalence(self): g = nx.erdos_renyi_graph(1000, 0.1) model = epd.SIRModel(g) config = mc.Configuration() config.add_model_parameter('beta', 0.001) config.add_model_parameter('gamma', 0.01) config.add_model_parameter("percentage_infected", 0.05) model.set_initial_status(config) iterations = model.iteration_bunch(200) trends = model.build_trends(iterations) # Visualization viz = DiffusionPrevalence(model, trends) viz.plot("prev.pdf") os.remove("prev.pdf")
def diffusion_trend(ind): iterations, iterations_mitigations = evaluate.evaluate_individual( toolbox.compile(ind), m=model, traveler_set=travelers, mvc_set=minimal_vertex_cover, vert_avg_dist=vertex_average_distance, number_vertex_shortest=number_shortest_paths, Page_Rank=page_rank, Cluster_Coeff=cluster_coef, avg_degree=average_degree, short_dist=shortest_distances, avg_dist=average_distance, total_iterations=ITERATIONS, measure_every=MEASURE_EVERY, mitigations_per_measure=MITIGATIONS_PER_MEASURE, rollover=ROLLOVER, use_all=USE_ALL) trends = model.build_trends(iterations) # Visualization viz = DiffusionTrend(model, trends) viz.plot() viz = DiffusionPrevalence(model, trends) viz.plot() return iterations, trends
def test_visualize_dynamic(self): dg = dn.DynGraph() for t in past.builtins.xrange(0, 4): g = nx.erdos_renyi_graph(200, 0.05) dg.add_interactions_from(g.edges(), t) model = dsi.DynSIModel(dg) config = mc.Configuration() config.add_model_parameter('beta', 0.1) config.add_model_parameter("percentage_infected", 0.1) model.set_initial_status(config) iterations = model.execute_snapshots() trends = model.build_trends(iterations) # Visualization viz = DiffusionPrevalence(model, trends) viz.plot("prevd.pdf") os.remove("prevd.pdf")
def test_visualize_dynamic(self): dg = dn.DynGraph() for t in past.builtins.xrange(0, 4): g = nx.erdos_renyi_graph(200, 0.05) dg.add_interactions_from(g.edges(), t) model = dyn.DynSIModel(dg) config = mc.Configuration() config.add_model_parameter('beta', 0.1) config.add_model_parameter("percentage_infected", 0.1) model.set_initial_status(config) iterations = model.execute_snapshots() trends = model.build_trends(iterations) # Visualization viz = DiffusionPrevalence(model, trends) viz.plot("prevd.pdf") os.remove("prevd.pdf")
def simulate_spread(G, steps, threshold, infected_probability, simulation_beta, simulation_gamma, simulation_alpha, output): infected_nodes = [] exposed_nodes = [ node[0] for node in G.nodes(data=True) if node[1]['flaws'] > threshold ] # Take 1 at random and the rest with probability idx = np.random.choice(list(range(len(exposed_nodes))), size=1, replace=False)[0] infected_nodes.append(exposed_nodes.pop(idx)) infected_nodes_count = int(len(exposed_nodes) * infected_probability) if infected_nodes_count != 0: infected_idxs = np.random.choice(list(range(len(exposed_nodes))), infected_nodes_count) infected_nodes.extend(list(np.take(exposed_nodes, infected_idxs))) exposed_nodes = list(np.delete(exposed_nodes, infected_idxs)) susceptible_nodes = [ node for node_idx, node in enumerate(G.nodes()) if node_idx not in [*exposed_nodes, *infected_nodes] ] # Create model model = ep.SEIRModel(G) # Create configuration cfg = mc.Configuration() # Infection probability. cfg.add_model_parameter('beta', simulation_beta) # Infected -> Remove probability cfg.add_model_parameter('gamma', simulation_gamma) # Latent period cfg.add_model_parameter('alpha', simulation_alpha) # Set both infected and exposed nodes. # cfg.add_model_parameter('fraction_infected', 0.01) cfg.add_model_initial_configuration("Susceptible", susceptible_nodes) cfg.add_model_initial_configuration("Exposed", exposed_nodes) cfg.add_model_initial_configuration("Infected", infected_nodes) # Set the configuration model.set_initial_status(cfg) # Run multiple models trends = multi_runs(model, execution_number=10, iteration_number=steps, infection_sets=None, nprocesses=5) dt = DiffusionTrend(model, trends) dt.plot(filename=os.path.join(output, 'diffusion_trend.png')) dp = DiffusionPrevalence(model, trends) dp.plot(filename=os.path.join(output, 'diffusion_prevalence.png')) # Other run to show infected_nodes = list() for _ in range(10): model.reset() iterations = model.iteration_bunch(steps) for iteration in iterations: for k, v in iteration['status'].items(): if v == 3: infected_nodes.append(k) return Counter(infected_nodes)
import matplotlib.pyplot as plt import networkx as nx import json import warnings n = 271269 # n nodes p = 0.007286 w = [p * n for i in range(n)] # w = p*n for all nodes g = expected_degree_graph(w) # configuration model largest_subgraph1 = max(nx.connected_component_subgraphs(g), key=len) pos = nx.spring_layout(largest_subgraph1, k=0.05) nx.draw(largest_subgraph1, pos=pos, cmap=plt.cm.PiYG, edge_color="black", linewidths=0.3, node_size=60, alpha=0.6, with_labels=False) nx.draw_networkx(largest_subgraph1, pos=pos) plt.savefig('graphfinal2.png') model = ep.SIRModel(largest_subgraph1) cfg = mc.Configuration() cfg.add_model_parameter('beta', 0.05) # infection rate cfg.add_model_parameter('gamma', 0.05) # recovery rate cfg.add_model_parameter("percentage_infected", 0.01) model.set_initial_status(cfg) iterations = model.iteration_bunch(200, node_status=True) trends = model.build_trends(iterations) viz = DiffusionTrend(model, trends) viz.plot() viz = DiffusionPrevalence(model, trends) viz.plot()