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
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
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]
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)
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
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)
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)
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
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)
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)
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)
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)