Beispiel #1
0
    def test_trend_comparison(self):

        # Network topology
        g = nx.erdos_renyi_graph(1000, 0.1)

        # Model selection
        model = sir.SIRModel(g)

        # Model Configuration
        cfg = mc.Configuration()
        cfg.add_model_parameter('beta', 0.001)
        cfg.add_model_parameter('gamma', 0.02)
        cfg.add_model_parameter("percentage_infected", 0.01)
        model.set_initial_status(cfg)

        iterations = model.iteration_bunch(200)
        trends = model.build_trends(iterations)

        model1 = si.SIModel(g)
        cfg = mc.Configuration()
        cfg.add_model_parameter('beta', 0.001)
        cfg.add_model_parameter("percentage_infected", 0.01)
        model1.set_initial_status(cfg)

        iterations = model1.iteration_bunch(200)
        trends1 = model1.build_trends(iterations)

        viz = DiffusionTrendComparison([model, model1], [trends, trends1])

        viz.plot("trend_comparison.pdf")
        os.remove("trend_comparison.pdf")
Beispiel #2
0
    def test_trend_comparison(self):

        # Network topology
        g = nx.erdos_renyi_graph(1000, 0.1)

        # Model selection
        model = epd.SIRModel(g)

        # Model Configuration
        cfg = mc.Configuration()
        cfg.add_model_parameter('beta', 0.001)
        cfg.add_model_parameter('gamma', 0.02)
        cfg.add_model_parameter("percentage_infected", 0.01)
        model.set_initial_status(cfg)

        iterations = model.iteration_bunch(200)
        trends = model.build_trends(iterations)

        model1 = epd.SIModel(g)
        cfg = mc.Configuration()
        cfg.add_model_parameter('beta', 0.001)
        cfg.add_model_parameter("percentage_infected", 0.01)
        model1.set_initial_status(cfg)

        iterations = model1.iteration_bunch(200)
        trends1 = model1.build_trends(iterations)

        viz = DiffusionTrendComparison([model, model1], [trends, trends1])

        viz.plot("trend_comparison.pdf")
        os.remove("trend_comparison.pdf")
Beispiel #3
0
def sir_model(g, er_g, ba_g, g_stat):
    print '\nSIR MODEL SIMULATION WITH GAMMA ' + g_stat.upper() + ' THAN BETA'
    print 'MODEL CONFIGURATION'

    beta = float(raw_input('INFECTION PROBABILITY: '))
    gamma = float(raw_input('REMOVAL PROBABILITY: '))

    if g_stat == 'smaller':
        while gamma >= beta:
            print 'ERROR! GAMMA HAS TO BE SMALLER THAN BETA!'
            gamma = float(raw_input('REMOVAL PROBABILITY: '))
    else:
        while gamma <= beta:
            print 'ERROR! GAMMA HAS TO BE GREATER THAN BETA!'
            gamma = float(raw_input('REMOVAL PROBABILITY: '))

    cfg = mc.Configuration()
    cfg.add_model_parameter('beta', beta)
    cfg.add_model_parameter('gamma', gamma)
    cfg.add_model_parameter('percentage_infected',
                            float(raw_input('PERCENTAGE INFECTED: ')))

    for_comparison = dict()

    for network in [g, er_g, ba_g]:
        model_sir = sir.SIRModel(network)
        model_sir.set_initial_status(cfg)
        iterations = model_sir.iteration_bunch(200)
        trends_sir = model_sir.build_trends(iterations)

        if network is g:
            viz = DiffusionTrend(model_sir, trends_sir)
            viz.plot("../../report/images/spreading/sir/diffusion_"
                     + g_stat + ".pdf")
            for_comparison['original_sir'] = [model_sir, trends_sir]
        elif network is er_g:
            viz = DiffusionTrend(model_sir, trends_sir)
            viz.plot("../../report/images/spreading/sir/diffusion_er_"
                     + g_stat + ".pdf")
            for_comparison['er_sir'] = [model_sir, trends_sir]
        else:
            viz = DiffusionTrend(model_sir, trends_sir)
            viz.plot("../../report/images/spreading/sir/diffusion_ba_"
                     + g_stat + ".pdf")
            for_comparison['ba_sir'] = [model_sir, trends_sir]

    viz = DiffusionTrendComparison([
                            for_comparison['original_sir'][0],
                            for_comparison['er_sir'][0],
                            for_comparison['ba_sir'][0]
                         ],
                         [
                            for_comparison['original_sir'][1],
                            for_comparison['er_sir'][1],
                            for_comparison['ba_sir'][1]
                         ])
    viz.plot("../../report/images/spreading/sir/trend_comparison_"
             + g_stat + ".pdf")
Beispiel #4
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))
Beispiel #5
0
def sis_model(net, graph_name):
    print '\nSIS MODEL SIMULATION - ' + graph_name + ' network'

    for_comparison = dict()
    degrees = [d for n, d in net.degree]
    mean_k = sum(degrees)/len(degrees)

    for state in ['ENDEMIC', 'FREE']:
        print 'MODEL CONFIGURATION - ' + state + ' STATE'

        if state == 'ENDEMIC':
            beta = float(raw_input('INFECTION PROBABILITY: '))
            
            print 'MU HAS TO BE LESS THAN ' + str(beta*(mean_k+1))
            mu = float(raw_input('RECOVERY PROBABILITY: '))

            while mu >= (beta*(mean_k+1)):
                print 'ERROR! MU HAS TO BE LESS THAN ' + str(beta*(mean_k+1))
                mu = float(raw_input('RECOVERY PROBABILITY: '))
        else:
            print 'MU HAS TO BE GREATER THAN ' + str(beta*(mean_k+1))
            mu = float(raw_input('RECOVERY PROBABILITY: '))

            while mu <= beta*(mean_k+1):
                print 'ERROR! MU IS NOT GREATER THAN ' + str(beta*(mean_k+1))
                mu = float(raw_input('RECOVERY PROBABILITY: '))

        cfg = mc.Configuration()
        cfg.add_model_parameter('beta', beta)
        cfg.add_model_parameter('lambda', mu)
        cfg.add_model_parameter('percentage_infected',
                                float(raw_input('PERCENTAGE INFECTED: ')))
        model_sis = sis.SISModel(net)
        model_sis.set_initial_status(cfg)
        model_sis.name = str(graph_name)+"-"+state.lower()
        print model_sis.name

        iterations = model_sis.iteration_bunch(200)
        trends_sis = model_sis.build_trends(iterations)

        viz = DiffusionTrend(model_sis, trends_sis)
        viz.plot('../../report/images/spreading/sis/diffusion_' +
                 graph_name + '_' + state.lower() + '.pdf')
        for_comparison[state.lower() + '_state'] = [model_sis, trends_sis]

    viz = DiffusionTrendComparison([for_comparison['endemic_state'][0],
                                   for_comparison['free_state'][0]],
                                   [for_comparison['endemic_state'][1],
                                   for_comparison['free_state'][1]])
    viz.plot('../../report/images/spreading/sis/diffusion_' + graph_name +
             '_comparison.pdf')
Beispiel #6
0
def thr_model(g, er_g, ba_g):
    print '\nTHRESHOLD MODEL SIMULATION'
    print 'MODEL CONFIGURATION'

    cfg = mc.Configuration()
    cfg.add_model_parameter('percentage_infected',
                            float(raw_input('PERCENTAGE INFECTED: ')))
    thr = float(raw_input('THRESHOLD: '))

    for_comparison = dict()

    count = 0
    labels = ['G', 'ER', 'BA']
    for network in [g, er_g, ba_g]:
        model_thr = threshold.ThresholdModel(network)
        model_thr.name = labels[count]
        print model_thr.name
        count+=1
        
        for i in network.nodes():
            cfg.add_node_configuration("threshold", i, thr)

        model_thr.set_initial_status(cfg)
        iterations = model_thr.iteration_bunch(100)
        trends_thr = model_thr.build_trends(iterations)

        if network is g:
            viz = DiffusionTrend(model_thr, trends_thr)
            viz.plot("../../report/images/spreading/threshold/diffusion.pdf")
            for_comparison['original_thr'] = [model_thr, trends_thr]
        elif network is er_g:
            viz = DiffusionTrend(model_thr, trends_thr)
            viz.plot(
                    "../../report/images/spreading/threshold/diffusion_er.pdf")
            for_comparison['er_thr'] = [model_thr, trends_thr]
        else:
            viz = DiffusionTrend(model_thr, trends_thr)
            viz.plot(
                "../../report/images/spreading/threshold/diffusion_ba.pdf")
            for_comparison['ba_thr'] = [model_thr, trends_thr]

    viz = DiffusionTrendComparison([for_comparison['original_thr'][0],
                                   for_comparison['er_thr'][0],
                                   for_comparison['ba_thr'][0]], [
                                   for_comparison['original_thr'][1],
                                   for_comparison['er_thr'][1],
                                   for_comparison['ba_thr'][1]])
    viz.plot("../../report/images/spreading/threshold/trend_comparison.pdf")
Beispiel #7
0
cfg.add_model_parameter('beta', b)

infected_nodes3 = [37]
cfg.add_model_initial_configuration("Infected", infected_nodes3)
model2.set_initial_status(cfg)

# 3° Simulation execution
iterations = model2.iteration_bunch(it)
trends3 = model2.build_trends(iterations)
#trends3 = multi_runs(model2, execution_number=ex, iteration_number=it, nprocesses=4)
#--------------------------------------------------------------

# In[2]:


from ndlib.viz.mpl.TrendComparison import DiffusionTrendComparison
viz = DiffusionTrendComparison([model, model1, model2], [trends1, trends2,trends3], statuses=['Infected'])
viz.plot(percentile=90)
#viz.plot("img1.png",percentile=90)


# In[3]:


from ndlib.viz.mpl.PrevalenceComparison import DiffusionPrevalenceComparison
viz = DiffusionPrevalenceComparison([model, model1, model2], [trends1, trends2, trends3], statuses=['Infected'])
viz.plot(percentile=90)
#viz.plot("img2.png",percentile=90)

    nx.barabasi_albert_graph(1000, 8, seed=0),
    nx.newman_watts_strogatz_graph(1000, k=4, p=0.12, seed=0),
    nx.fast_gnp_random_graph(n=1000, p=0.20)
]

model_list = []
iteration_list = []
trend_list = []

for graph in G_list:
    model = ep.SIRModel(graph)
    model_list.append(model)
    config = mc.Configuration()
    config.add_model_parameter('beta', 0.1)
    config.add_model_parameter('gamma', 0.1)
    config.add_model_parameter('fraction_infected', 0.01)
    model.set_initial_status(config)

for i in range(3):
    iterations = model_list[i].iteration_bunch(100)
    iteration_list.append(iterations)
    trends = model.build_trends(iterations)
    trend_list.append(trends)

visual = DiffusionTrendComparison(
    [model_list[0], model_list[1], model_list[2]],
    [trend_list[0], trend_list[1], trend_list[2]],
    statuses=["Susceptible", "Infected", "Removed"])
plt.title(" BA vs SW vs Random")
result = visual.plot()