Example #1
0
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))
Example #2
0
    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")
Example #3
0
    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")
Example #4
0
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
Example #5
0
    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")
Example #6
0
    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")
Example #7
0
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()