Esempio n. 1
0
def IC(G_df, S, iter_num=3):
    '''
    Input: G_df: dataframe of edges ['followee','follower', 'prob']
           S: seedset
           iter_num: Number of total IC steps
           mc_num: Number of Monte-Carlo simulations
    Output: list of activated nodes
    '''
    g = nx.DiGraph()
    G = G_df[['followee', 'follower']].values
    weights = G_df['prob'].values
    g.add_edges_from(G, weights=weights)

    # Model configuration
    model = ep.IndependentCascadesModel(g)
    config = mc.Configuration()
    config.add_model_initial_configuration('Infected', S)

    # Edge configuration
    for e in g.edges:
        config.add_edge_configuration('threshold', e, 1)

    model.set_initial_status(config)

    iteration = model.iteration_bunch(iter_num)
    return iteration

    activated = []
    for i in range(iter_num):
        activated += [k for k, v in iteration[i]['status'].items() if v == 1]

    return list(set(activated))
Esempio n. 2
0
    def indipendent_cascade_model(self):
        '''
        Configuration and execution of the Indipendent Cascade Model algorithm, iteration is performed by itetration.

        Model execution is stopped when nodes are no longer influenced.
        '''

        model = ids.IndependentCascadesModel(self.__year_graph)

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

        for e in self.__year_graph.edges():
            threshold = self.cascade_threshold(e)
            config.add_edge_configuration('threshold', e, threshold)

        model.set_initial_status(config)

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

            lst = []
            for k in iteration.get('status'):
                if iteration.get('status')[k] == 1:
                    lst.append(k)

            if len(lst) == 0:
                break

            self.__influenced['iteration {0}'.format(
                iteration.get('iteration'))] = lst
Esempio n. 3
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
Esempio n. 4
0
    def test_independent_cascade_model(self):
        g = nx.erdos_renyi_graph(1000, 0.1)
        model = epd.IndependentCascadesModel(g)
        config = mc.Configuration()
        config.add_model_parameter('fraction_infected', 0.1)
        threshold = 0.1
        for e in g.edges():
            config.add_edge_configuration("threshold", e, 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)
Esempio n. 5
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
Esempio n. 6
0
    def test_independent_cascade_model(self):

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

            if isinstance(g, nx.Graph):
                for e in g.edges:
                    config.add_edge_configuration("threshold", e, threshold)
            else:
                edges = [(g.vs[e.tuple[0]]['name'], g.vs[e.tuple[1]]['name']) for e in g.es]
                for e in edges:
                    config.add_edge_configuration("threshold", e, 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)
Esempio n. 7
0
def model_IC(g, S, proba_list, steps):
    spread_simulations = []
    for k in range(steps):
        #        r.seed creo que solo en el THmodel para indiv threshol de cada nodo
        model = ep.IndependentCascadesModel(g)
        config = mc.Configuration()
        infected_nodes = S
        config.add_model_initial_configuration("Infected", infected_nodes)
        # Setting the edge parameters
        link = 0
        for e in g.edges():
            config.add_edge_configuration("proba", e, proba_list[link])
            link += 1
        model.set_initial_status(config)
        #        iterations = []
        while True:
            iteration = model.iteration()
            #           iterations.append(iteration)
            if iteration["iteration"] > 0 and (
                    iteration["status_delta"][0]
                    == 0) and (iteration["status_delta"][1]
                               == 0) and (iteration["status_delta"][2] == 0):
                break


#en caso de que se quiera ver la evolución de los infectados, sanos y recuperados
#        ina = []
#        acti = []
#        remo = []
#        for i in range(iteration["iteration"]):
#          ina.append(iterations[i]["node_count"][0])
#          acti.append(iterations[i]["node_count"][1])
#          remo.append(iterations[i]["node_count"][2])
#en caso de que se quiera ver la evolución de los infectados, sanos y recuperados
        spread_simulations.append(iteration["node_count"][2] - len(S))

    vexpected = np.mean(spread_simulations)
    #return iterations, ina, acti, remo, maxspread
    #return vexpected, spread_simulations
    return vexpected
Esempio n. 8
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)
Esempio n. 9
0
def find_diffusion_from_max_metrics(graph, node_list, time_step):
    # Model selection
    model = ep.IndependentCascadesModel(graph)
    node_position = nx.spring_layout(graph)

    # Model Configuration
    config = mc.Configuration()

    config.add_model_initial_configuration('Infected', node_list)
    # config.add_model_parameter('fraction_infected',0.1)

    # Setting the edge parameters
    threshold = 0.25
    for e in graph.edges():
        config.add_edge_configuration("threshold", e, threshold)

    model.set_initial_status(config)

    # Simulation execution
    iterations = model.iteration_bunch(time_step)

    susceptible = iterations[0].get('status')
    altered_nodes = dict()

    for ii in range(0, time_step):
        print(iterations[ii])
        if ii > 0:
            y = iterations[ii].get('status')
            susceptible = {
                ii: jj
                for ii, jj in susceptible.items() if ii not in y
            }

            result = dict(y.items() - susceptible.items())
            altered_nodes.update(result)

    infected_status = 1
    infected_nodes = []
    removed_nodes = []
    for node, status in altered_nodes.items():
        if status == infected_status:
            infected_nodes.append(node)
        else:
            removed_nodes.append(node)

    percentage_of_infected = (len(infected_nodes) + len(removed_nodes)) / int(
        nx.number_of_nodes(graph))

    # print(len(infected_nodes))
    # print(len(removed_nodes))
    # print(int(nx.number_of_nodes(graph)))
    print(percentage_of_infected)

    title = "The node status after " + str(time_step) + " time steps"
    susceptible_nodes = list(susceptible.keys())
    nx.draw_networkx_nodes(graph,
                           pos=node_position,
                           nodelist=susceptible_nodes,
                           node_size=20,
                           node_color="white",
                           label='Susceptible',
                           edgecolors="black")
    nx.draw_networkx_nodes(graph,
                           pos=node_position,
                           nodelist=infected_nodes,
                           node_size=20,
                           node_color="red",
                           label='Infected',
                           edgecolors="black")
    nx.draw_networkx_nodes(graph,
                           pos=node_position,
                           nodelist=removed_nodes,
                           node_size=20,
                           node_color="blue",
                           label='Removed',
                           edgecolors="black")
    nx.draw_networkx_edges(graph, pos=node_position)
    nx.draw_networkx_labels(graph, pos=node_position, font_size=10)
    plt.legend(scatterpoints=1)
    plt.title(label=title)
    plt.show()
Esempio n. 10
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)
Esempio n. 11
0
        score = float(ls[2])
        g.add_edge(source, to, weight=score)

# import ndlib.models.ModelConfig as mc

# # Model Configuration
# config = mc.Configuration()

# infected_nodes = [0, 1, 2, 3, 4, 5]
# config.add_model_initial_configuration("Infected", infected_nodes)

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

# Model selection
model = ep.IndependentCascadesModel(g)

# Model Configuration
config = mc.Configuration()
#config.add_model_parameter('fraction_infected', 0.1)
infected_nodes = ['70775228', '70775228', '70775228']
config.add_model_initial_configuration("Infected", infected_nodes)

# Setting the edge parameters
threshold = 0.5
for e in g.edges():
    config.add_edge_configuration("threshold", e, threshold)

model.set_initial_status(config)

print("start iteration")