def test_kertesz_model_predefined_blocked(self): for g in get_graph(True): 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) 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) iteration = model.iteration() blocked = [ x for x, v in future.utils.iteritems(iteration['status']) if v == -1 ] self.assertEqual(blocked, predefined_blocked)
def test_kertesz_model(self): g = nx.complete_graph(100) 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) 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_kertesz_model_predefined_blocked(self): g = nx.complete_graph(100) 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) threshold = 0.2 for i in g.nodes(): config.add_node_configuration("threshold", i, threshold) 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)
def test_kertesz_model(self): for g in get_graph(): 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) 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 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)
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)
# # The Kertesz Threshold model was introduced in 2015 by `Ruan` et al. [1] and it is an extension of the Watts threshold model [2]. # # We set the initial infected as well blocked node sets equals to the 10% of the overall population, assign a threshold of 0.25 to all the nodes and impose an probability of spontaneous adoptions of 40%. # # - [1] Z. Ruan, G. In ̃iguez, M. Karsai, and J. Kertész, “Kinetics of social contagion,” Phys. Rev. Lett., vol. 115, p. 218702, Nov 2015. # - [2] D.J. Watts, “A simple model of global cascades on random networks,” Proceedings of the National Academy of Sciences, vol. 99, no. 9, pp. 5766–5771, 2002. # In[18]: # Network topology g = nx.erdos_renyi_graph(1000, 0.1) # Model selection th_model = ep.KerteszThresholdModel(g) # Model Configuration 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) # Setting node parameters threshold = 0.25 for i in g.nodes(): config.add_node_configuration("threshold", i, threshold) th_model.set_initial_status(config) # Simulation execution