예제 #1
0
    def test_comp_phaseplane(self):
        g = nx.barabasi_albert_graph(1000, 3)

        model = epd.SIRModel(g)
        config = mc.Configuration()
        config.add_model_parameter('beta', 0.05)
        config.add_model_parameter('gamma', 0.09)
        config.add_model_parameter("percentage_infected", 0.02)
        model.set_initial_status(config)
        iterations = model.iteration_bunch(1000)
        trends = model.build_trends(iterations)

        model1 = epd.SIRModel(g)
        config = mc.Configuration()
        config.add_model_parameter('beta', 0.02)
        config.add_model_parameter('gamma', 0.01)
        config.add_model_parameter("percentage_infected", 0.06)
        model1.set_initial_status(config)
        iterations = model1.iteration_bunch(1000)
        trends1 = model.build_trends(iterations)

        # Visualization
        viz = PhasePlaneComparison([model, model1], [trends, trends1],
                                   x="Susceptible",
                                   y="Infected")
        viz.plot("diffusion.pdf")
        os.remove("diffusion.pdf")
예제 #2
0
    def test_multi(self):

        vm = MultiPlot()

        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)
        viz = DiffusionTrend(model, trends)
        p = viz.plot()

        vm.add_plot(p)

        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)
        viz = DiffusionPrevalence(model, trends)
        p1 = viz.plot()

        vm.add_plot(p1)
        m = vm.plot()
        self.assertIsInstance(m, Column)
예제 #3
0
def func_obj(x, g):
    days = 30
    sirSj = list()
    sirS = list()
    sirI = list()
    sirR = list()
    Igerado = list()
    Rgerado = list()
    # Ready CSV
    arq = open("casos_sj2.csv")
    sirSjCsv = csv.DictReader(arq, fieldnames=["S", "I", "R"])

    i = 0
    for row in sirSjCsv:
        sirSj.insert(i, {
            "S": int(row['S']),
            "I": int(row['I']),
            "R": int(row['R'])
        })
        sirS.append(int(row['S']))
        sirI.append(int(row['I']))
        sirR.append(int(row['R']))
        i += 1

    # Model selection
    SIRModel = ep.SIRModel(g)
    # Model Configuration
    cfg = mc.Configuration()
    cfg.add_model_parameter('beta', 0.3)
    cfg.add_model_parameter('gamma', 0.05)
    cfg.add_model_parameter("fraction_infected", 0.008)
    SIRModel.set_initial_status(cfg)

    SIRModel.reset()

    cfg.add_model_parameter('beta', x[0])
    cfg.add_model_parameter('gamma', x[1])
    cfg.add_model_parameter("fraction_infected", 0.08)
    SIRModel.set_initial_status(cfg)
    iterations = SIRModel.iteration_bunch(days)
    #print(iterations)
    a = 0
    Igerado.clear()
    Rgerado.clear()
    matriz_gerada = np.zeros((days, 3), dtype=np.int)

    for v in iterations:
        matriz_gerada[a][0] = v['node_count'][0]
        matriz_gerada[a][1] = v['node_count'][1]
        matriz_gerada[a][2] = v['node_count'][2]
        Igerado.append(v['node_count'][1])
        Rgerado.append(v['node_count'][2])
        a = a + 1
    print(iterations)
    mseI = mean_squared_error(sirI, Igerado)
    mseR = mean_squared_error(sirR, Rgerado)
    rmseI = math.sqrt(mseI)
    rmseR = math.sqrt(mseR)
    f = (rmseI + rmseR) / 2
    return f
예제 #4
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")
예제 #5
0
def simulate_sir_on_network(G):
    # Model Configuration
    cfg = mc.Configuration()
    cfg.add_model_parameter('beta', 0.05)
    cfg.add_model_parameter('gamma', 0.05)
    cfg.add_model_initial_configuration("Infected", random.sample(G.nodes,
                                                                  k=5))

    # Model selection
    model = ep.SIRModel(G)

    # Initialize the simulation
    model.set_initial_status(cfg)

    Si, Ii, Ri = [], [], []
    for s in range(SIMULCOUNT):
        # Reset the model
        model.reset()

        # Simulation execution
        iterations = model.iteration_bunch(ITERCOUNT)

        # Collect results for figures
        S, I, R = [], [], []
        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())
            R.append(iteration[2] / G.number_of_nodes())
        Si.append(S)
        Ii.append(I)
        Ri.append(R)

    plot_spreading_figures(Si, Ii, Ri)
예제 #6
0
 def test_sir_model(self):
     for g in get_graph(True):
         model = epd.SIRModel(g)
         config = mc.Configuration()
         config.add_model_parameter('beta', 0.5)
         config.add_model_parameter('gamma', 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)
예제 #7
0
 def test_sir_model(self):
     g = nx.erdos_renyi_graph(1000, 0.1)
     model = epd.SIRModel(g)
     config = mc.Configuration()
     config.add_model_parameter('beta', 0.5)
     config.add_model_parameter('gamma', 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)
예제 #8
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)
     viz = DiffusionPrevalence(model, trends)
     p = viz.plot()
     self.assertIsInstance(p, Figure)
예제 #9
0
    def test_visualize(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 = DiffusionTrend(model, trends)
        viz.plot("diffusion.pdf")
        os.remove("diffusion.pdf")
예제 #10
0
    def test_multi_initial_set(self):
        # Network topology
        g = nx.erdos_renyi_graph(1000, 0.1)

        # Model selection
        model1 = epd.SIRModel(g)

        # Model Configuration
        config = mc.Configuration()
        config.add_model_parameter('beta', 0.001)
        config.add_model_parameter('gamma', 0.01)
        model1.set_initial_status(config)

        # Simulation multiple execution
        infection_sets = [(1, 2, 3, 4, 5), (3, 23, 22, 54, 2), (98, 2, 12, 26, 3), (4, 6, 9)]
        trends = multi_runs(model1, execution_number=4, iteration_number=100, infection_sets=infection_sets,
                            nprocesses=4)
        self.assertIsNotNone(trends)
예제 #11
0
    def test_multi(self):

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

        # Model selection
        model1 = epd.SIRModel(g)

        # Model Configuration
        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)
        model1.set_initial_status(config)

        # Simulation multiple execution
        trends = multi_runs(model1, execution_number=10, iteration_number=100, infection_sets=None, nprocesses=4)
        self.assertIsNotNone(trends)
예제 #12
0
import networkx as nx
import ndlib.models.epidemics as ep
import ndlib.models.ModelConfig as mc
from bokeh.io import output_notebook, show
from ndlib.viz.bokeh.DiffusionTrend import DiffusionTrend
from ndlib.viz.bokeh.DiffusionPrevalence import DiffusionPrevalence
from ndlib.viz.bokeh.MultiPlot import MultiPlot
import ndlib.models.epidemics.SISModel as sis
import ndlib.models.epidemics.SIModel as si
import ndlib.models.epidemics.ThresholdModel as th

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

# Model Selection
model = ep.SIRModel(g)

# Model Configuration
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)

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

viz = DiffusionTrend(model, trends)
p = viz.plot(width=400, height=400)
show(p)
예제 #13
0
import networkx as nx
import matplotlib.pyplot as plt
import ndlib.models.ModelConfig as mc
import ndlib.models.epidemics as ep

# Variables
N = 100
m = 3
iter_count = 1000

# Initiate Graph
G = nx.barabasi_albert_graph(N, m)
pos = nx.spring_layout(G)

# SIR Model
model = ep.SIRModel(G)

# Model Config
cfg = mc.Configuration()
cfg.add_model_parameter('beta', 0.01)
cfg.add_model_parameter('gamma', 0.005)
cfg.add_model_parameter('fraction_infected', 0.05)  # Initial Fraction Infected
model.set_initial_status(cfg)

# Lists for simulation and plotting
t = []
S = []
I = []
R = []
color_map = []
예제 #14
0
                        default=200,
                        help="Steps of simulation")
    parser.add_argument("--beta",
                        type=float,
                        default=0.05,
                        help="Infection rate")
    parser.add_argument("--gamma",
                        type=float,
                        default=0.005,
                        help="Death rate")
    parser.add_argument("--out_file", help="Out file filename")
    args = parser.parse_args()

    network = loadmat(args.dataset)["graph"]
    graph = nx.from_scipy_sparse_matrix(network)
    model = ep.SIRModel(graph)

    cfg = mc.Configuration()
    cfg.add_model_parameter('beta', args.beta)
    cfg.add_model_parameter('gamma', args.gamma)
    model.set_initial_status(cfg)

    with open(args.out_file, "w") as file:
        for i in range(network.shape[0]):
            for j in range(args.num_sims):
                model.reset([i])
                iterations = model.iteration_bunch(args.iters)
                trends = model.build_trends(iterations)
                data = trends[0]['trends']['node_count'][1]
                max_point = np.argmax(data)
                file.write(str(max_point) + " " + str(data[max_point]) + "\n")
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()