Exemplo n.º 1
0
    def test_config(self):
        for g in get_graph(True):
            model = epd.ThresholdModel(g)
            config = mc.Configuration()
            config.add_model_parameter('fraction_infected', 0.1)
            config.add_model_initial_configuration("Infected", [1, 2, 3])
            config.add_node_set_configuration("partial", {1: 1, 2: 2})
            try:
                model.set_initial_status(config)
            except:
                pass

            if isinstance(g, nx.Graph):
                edges = list(g.edges)
                nodes = list(g.nodes)
            else:
                edges = [(g.vs[e.tuple[0]]['name'], g.vs[e.tuple[1]]['name'])
                         for e in g.es]
                nodes = g.vs['name']

            config.add_edge_set_configuration("partial",
                                              {e: 1
                                               for e in edges[:10]})
            try:
                model.set_initial_status(config)
            except:
                pass

            config.add_node_set_configuration("partial", {n: 1 for n in nodes})
            config.add_edge_set_configuration("partial", {e: 1 for e in edges})
            model.set_initial_status(config)

        for g in get_graph():
            model = opn.MajorityRuleModel(g)
            config = mc.Configuration()
            config.add_model_parameter("percentage_infected", 0.2)
            try:
                model.set_initial_status(config)
            except:
                pass

        for g in get_graph(True):
            model = epd.IndependentCascadesModel(g)
            config = mc.Configuration()
            config.add_model_parameter('percentage_infected', 0.1)
            try:
                model.set_initial_status(config)
            except:
                pass

        for g in get_graph(True):
            model = epd.ThresholdModel(g)
            config = mc.Configuration()
            config.add_model_parameter('percentage_infected', 0.1)
            try:
                model.set_initial_status(config)
            except:
                pass
Exemplo n.º 2
0
    def test_config(self):
        g = nx.erdos_renyi_graph(99, 0.1)
        model = epd.ThresholdModel(g)
        config = mc.Configuration()
        config.add_model_parameter('fraction_infected', 0.1)
        config.add_model_initial_configuration("Infected", [1, 2, 3])
        config.add_node_set_configuration("partial", {1: 1, 2: 2})
        try:
            model.set_initial_status(config)
        except:
            pass

        config.add_edge_set_configuration("partial",
                                          {e: 1
                                           for e in list(g.edges)[:10]})
        try:
            model.set_initial_status(config)
        except:
            pass
        config.add_node_set_configuration("partial", {n: 1 for n in g.nodes})
        config.add_edge_set_configuration("partial", {e: 1 for e in g.edges})
        model.set_initial_status(config)

        g = nx.complete_graph(100)
        model = opn.MajorityRuleModel(g)
        config = mc.Configuration()
        config.add_model_parameter("fraction_infected", 0.2)
        try:
            model.set_initial_status(config)
        except:
            pass

        g = nx.erdos_renyi_graph(1000, 0.1)
        model = epd.IndependentCascadesModel(g)
        config = mc.Configuration()
        config.add_model_parameter('fraction_infected', 0.1)
        try:
            model.set_initial_status(config)
        except:
            pass

        g = nx.erdos_renyi_graph(1000, 0.1)
        model = epd.ThresholdModel(g)
        config = mc.Configuration()
        config.add_model_parameter('fraction_infected', 0.1)
        try:
            model.set_initial_status(config)
        except:
            pass
Exemplo n.º 3
0
def model (net, frac_inf, threshold, iter):
    # Defines the model type, specification and implementation. 
    # The function uses the network input in net as the main input
    # for the threshold model. Then the rest of parameters are 
    # specified in the model configuration: 
    # frac_inf: Initial fraction of infected nodes. 
    # threshold: Fraction of active neighbours necessary to change 
    # a node's state to active. 
    # iter: Number of iterations to run from the dynamical process. 

    # Model impolementation
    model = ep.ThresholdModel(net)

    # Model Configuration: initial conditions
    config = mc.Configuration()
    config.add_model_parameter('fraction_infected', frac_inf)

    for i in net.nodes():
        config.add_node_configuration("threshold", i, threshold)

    model.set_initial_status(config)

    # Simulation execution
    iterations = model.iteration_bunch(iter)
    trends = model.build_trends(iterations)

    return [model, iterations, trends]
Exemplo n.º 4
0
    def tipping_model(self):
        '''
        Configuration and execution of the Tipping Model algorithm, iteration is performed by iteration.
        
        Model execution is stopped when nodes are no longer influenced.
        '''

        model = ids.ThresholdModel(self.__year_graph)

        config = mc.Configuration()
        config.add_model_initial_configuration("Infected", self.__seed)

        for n in self.__year_graph.nodes():
            threshold = self.tipping_threshold(n)
            config.add_node_configuration('threshold', n, threshold)

        model.set_initial_status(config)

        self.__influenced = dict()
        while True:
            iteration = model.iteration()
            if len(iteration.get('status')) == 0:
                break

            self.__influenced['iteration {0}'.format(
                iteration.get('iteration'))] = []
            for k in iteration.get('status'):
                if iteration.get('status')[k] == 1:
                    self.__influenced['iteration {0}'.format(
                        iteration.get('iteration'))].append(k)
Exemplo n.º 5
0
def simulate_cascade(graph_path, threshold):
    g = nx.read_weighted_edgelist(graph_path, delimiter=";")
    model = ep.ThresholdModel(g)
    config = mc.Configuration()
    seed_nodes = find_seeds(g)
    config.add_model_initial_configuration(
        "Infected", seed_nodes)  # only seed nodes start as infected
    for i in g.nodes():
        config.add_node_configuration(
            'threshold', i,
            threshold)  # set threshold to be the same for all nodes
    model.set_initial_status(config)
    iterations = model.iteration_bunch(50)  # execute 50 iterations
    return iterations
Exemplo n.º 6
0
    def test_threshold_model(self):
        g = nx.erdos_renyi_graph(1000, 0.1)
        model = epd.ThresholdModel(g)
        config = mc.Configuration()
        config.add_model_parameter('fraction_infected', 0.1)

        threshold = 0.2
        for i in g.nodes():
            config.add_node_configuration("threshold", i, threshold)

        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)
Exemplo n.º 7
0
    def test_threshold_model(self):
        for g in get_graph(True):
            model = epd.ThresholdModel(g)
            config = mc.Configuration()
            config.add_model_parameter('fraction_infected', 0.1)

            threshold = 0.2
            if isinstance(g, nx.Graph):
                nodes = g.nodes
            else:
                nodes = g.vs['name']
            for i in nodes:
                config.add_node_configuration("threshold", i, threshold)

            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)
Exemplo n.º 8
0
def watts_model_ba_network(m, threshold, fraction_infected, iteration_num):
    # change these two parameters
    # num_neighbors = 1
    # threshold = 0.5
    # fraction_infected = 0.1
    # iteration_num = 30

    # Network topology
    #g = nx.erdos_renyi_graph(1000, 0.1)
    g = nx.barabasi_albert_graph(1000, m)
    # Model selection
    model = ep.ThresholdModel(g)
    # Model Configuration
    config = mc.Configuration()
    config.add_model_parameter('fraction_infected', fraction_infected)
    # Setting node parameters
    for i in g.nodes():
        config.add_node_configuration("threshold", i, threshold)

    model.set_initial_status(config)
    # Simulation execution
    iterations = model.iteration_bunch(iteration_num)
    return model, iterations
Exemplo n.º 9
0
    def test_optional_parameters(self):

        for g in get_graph(True):
            model = epd.ThresholdModel(g)
            config = mc.Configuration()
            config.add_model_parameter('fraction_infected', 0.1)
            model.set_initial_status(config)
            iterations = model.iteration_bunch(10)
            if isinstance(g, nx.Graph):
                config.add_node_set_configuration("test", {n: 1 for n in g.nodes})
                config.add_edge_set_configuration("etest", {e: 1 for e in g.edges})
            else:
                config.add_node_set_configuration("test", {n: 1 for n in g.vs['name']})
                edges = [(g.vs[e.tuple[0]]['name'], g.vs[e.tuple[1]]['name']) for e in g.es]
                config.add_edge_set_configuration("etest", {e: 1 for e in edges})

            self.assertEqual(len(iterations), 10)

            model = epd.KerteszThresholdModel(g)
            config = mc.Configuration()
            config.add_model_parameter('adopter_rate', 0.4)
            predefined_blocked = [0, 1, 2, 3, 4, 5]
            config.add_model_initial_configuration("Blocked", predefined_blocked)
            config.add_model_parameter('percentage_infected', 0.1)
            model.set_initial_status(config)
            iteration = model.iteration()
            blocked = [x for x, v in future.utils.iteritems(iteration["status"]) if v == -1]
            self.assertEqual(blocked, predefined_blocked)

            model = epd.IndependentCascadesModel(g)
            config = mc.Configuration()
            config.add_model_parameter('percentage_infected', 0.1)
            model.set_initial_status(config)
            iterations = model.iteration_bunch(10)
            self.assertEqual(len(iterations), 10)

            model = epd.ProfileModel(g)
            config = mc.Configuration()
            config.add_model_parameter('percentage_infected', 0.1)

            model.set_initial_status(config)
            iterations = model.iteration_bunch(10)
            self.assertEqual(len(iterations), 10)

            model = epd.ProfileThresholdModel(g)
            config = mc.Configuration()
            config.add_model_parameter('fraction_infected', 0.1)
            model.set_initial_status(config)
            iterations = model.iteration_bunch(10)
            self.assertEqual(len(iterations), 10)

            model = epd.ThresholdModel(g)
            config = mc.Configuration()
            config.add_model_parameter('fraction_infected', 0.1)
            model.set_initial_status(config)
            iterations = model.iteration_bunch(10)
            self.assertEqual(len(iterations), 10)

            model = epd.KerteszThresholdModel(g)
            config = mc.Configuration()
            config.add_model_parameter('adopter_rate', 0.4)
            config.add_model_parameter('percentage_blocked', 0.1)
            config.add_model_parameter('fraction_infected', 0.1)
            model.set_initial_status(config)
            iterations = model.iteration_bunch(10)
            self.assertEqual(len(iterations), 10)
Exemplo n.º 10
0
g = nx.DiGraph()

with open('twitter_graph.txt', 'r') as f:
    for row in f:
        row = row.rstrip()
        if not row:
            continue
        
        ls = row.split()
        source = ls[0]
        to = ls[1]
        score = float(ls[2])
        g.add_edge(source, to, weight=score)

# Model selection
model = ep.ThresholdModel(g)
config = mc.Configuration()
infected_nodes = ['70775228', '17845620', '512355630', '14191945', '211955846', '121858259', '54981205', '26143624', '20050047', '20801235']
config.add_model_initial_configuration("Infected", infected_nodes)

# Setting the edge parameters
threshold = 0.5
for i in g.nodes():
    if i not in node_scores:
        threshold = random.uniform(0, 1)
    else:
        threshold = node_scores[i]
    config.add_node_configuration("threshold", i, threshold)

model.set_initial_status(config)
Exemplo n.º 11
0
    def test_optional_parameters(self):
        g = nx.erdos_renyi_graph(1000, 0.1)
        model = epd.ThresholdModel(g)
        config = mc.Configuration()
        config.add_model_parameter('fraction_infected', 0.1)
        model.set_initial_status(config)
        iterations = model.iteration_bunch(10)
        config.add_node_set_configuration("test", {n: 1 for n in g.nodes()})
        config.add_edge_set_configuration("etest", {e: 1 for e in g.edges()})

        self.assertEqual(len(iterations), 10)

        model = epd.KerteszThresholdModel(g)
        config = mc.Configuration()
        config.add_model_parameter('adopter_rate', 0.4)
        predefined_blocked = [0, 1, 2, 3, 4, 5]
        config.add_model_initial_configuration("Blocked", predefined_blocked)
        config.add_model_parameter('fraction_infected', 0.1)
        model.set_initial_status(config)
        iteration = model.iteration()
        blocked = [
            x for x, v in future.utils.iteritems(iteration["status"])
            if v == -1
        ]
        self.assertEqual(blocked, predefined_blocked)

        model = epd.IndependentCascadesModel(g)
        config = mc.Configuration()
        config.add_model_parameter('fraction_infected', 0.1)
        model.set_initial_status(config)
        iterations = model.iteration_bunch(10)
        self.assertEqual(len(iterations), 10)

        model = epd.ProfileModel(g)
        config = mc.Configuration()
        config.add_model_parameter('fraction_infected', 0.1)
        model.set_initial_status(config)
        iterations = model.iteration_bunch(10)
        self.assertEqual(len(iterations), 10)

        model = epd.ProfileThresholdModel(g)
        config = mc.Configuration()
        config.add_model_parameter('fraction_infected', 0.1)
        model.set_initial_status(config)
        iterations = model.iteration_bunch(10)
        self.assertEqual(len(iterations), 10)

        model = epd.ThresholdModel(g)
        config = mc.Configuration()
        config.add_model_parameter('fraction_infected', 0.1)
        model.set_initial_status(config)
        iterations = model.iteration_bunch(10)
        self.assertEqual(len(iterations), 10)

        model = epd.KerteszThresholdModel(g)
        config = mc.Configuration()
        config.add_model_parameter('adopter_rate', 0.4)
        config.add_model_parameter('percentage_blocked', 0.1)
        config.add_model_parameter('fraction_infected', 0.1)
        model.set_initial_status(config)
        iterations = model.iteration_bunch(10)
        self.assertEqual(len(iterations), 10)
Exemplo n.º 12
0
import matplotlib.pyplot as plt
import csv

flight_data_col = ['Source', 'Destination']
flight_data_df = pd.read_csv('flight_data.csv',
                             names=flight_data_col,
                             skiprows=[0])
flight_data_df['Source'] = flight_data_df['Source'].astype("string")
flight_data_df['Destination'] = flight_data_df['Destination'].astype("string")

original_data = nx.from_pandas_edgelist(flight_data_df,
                                        source='Source',
                                        target='Destination',
                                        create_using=nx.DiGraph())

model = ep.ThresholdModel(original_data)

config = mc.Configuration()
config.add_model_parameter('fraction_infected', 0.10)

threshold = 0.25
for i in original_data.nodes():
    config.add_node_configuration("threshold", i, threshold)

model.set_initial_status(config)

iterations = model.iteration_bunch(200)

trends = model.build_trends(iterations)

viz = DiffusionTrend(model, trends)