def create_connectivity(agents, p, type='undirected_random'): properties = {'graph_type' : type, 'connection_probability' : p} conn = gg.create_graph_type(agents, properties)[0] for agent1 in conn.nodes(): agent1.connect_to(conn.neighbors(agent1)) if type in ['hierarchy', 'collaborative']: return (1, len(agents)) else: cc_conn = nx.connected_components(conn) ## return the number of connected components and ## the size of the largest connected component return (len(cc_conn), len(cc_conn[0]))
if __name__ =="__main__": p = {} gtypes = [('erdos_renyi_graph', 20, 0.15, 3)] #gtypes = [('random', 20, 0.15, 3), \ #('random', 200, 0.03, 3), \ #('watts_strogatz_graph', 20, 0.1, 5), \ #('watts_strogatz_graph', 200, 0.01, 8), \ #('barabasi_albert_graph', 20, 0.1, 10), \ #('barabasi_albert_graph', 200, 0.01, 20), \ #] #gtypes = [('watts_strogatz_graph', 40, 0.1, 3), \ #('watts_strogatz_graph', 40, 0.1, 8), \ #('watts_strogatz_graph', 40, 0.1, 15), \ #] for (g,x,y,z) in gtypes: p['graph_type'] = g p['num_agents'] = x p['connection_probability'] = y p['num_nodes_to_attach'] = z ag = range(p['num_agents']) (conn, stats) = gg.create_graph_type(ag,p) print (p) print ("Connected components:", stats['num_cc']) histogram(stats, 20*(1+int(p['num_agents']/60)))
def run_simulation_one_graph(properties, outfile): facts = range(properties["num_facts"] + properties["num_noise"]) agents = [] for i in xrange(properties["num_agents"]): agents.append( Agent.Agent( properties["willingness"], properties["competence"], properties["num_facts"], properties["num_noise"], properties["spamminess"], properties["selfishness"], properties["trust_used"], properties["inbox_trust_used"], properties["trust_filter_on"], ) ) ## Create agent graph conn, stats = gg.create_graph_type(agents, properties) for agent1 in conn.nodes(): agent1.connect_to(conn.neighbors(agent1)) nodes_to_try = top_nodes(stats) # print "Nodes", nodes_to_try for current_agent in nodes_to_try: # print "New node", current_agent agents[current_agent].capacity = 50 ##set one agent to high capacity node_stats = current_agent_stats(current_agent, stats) ## Distribute facts to agents for i in facts: for j in xrange(properties["agent_per_fact"]): ## find a random agent, and distribute fact i k = random.randint(0, properties["num_agents"] - 1) agents[k].add_fact(i) ## Initialize agents to send everything that they think is valuable ## in their outbox for agent in agents: agent.init_outbox() action_list = [] all_stats = ss.SimulationStats( properties["num_facts"], properties["num_noise"], stats["num_cc"], stats["largest_cc"] ) ##actual simulation starts here for i in xrange(properties["num_steps"]): x = one_step_simulation(agents) action_list.append(x) if i % 100 == 0: all_stats.update_stats(agents, i) summary_results = all_stats.process_sa() results = {} results["setup"] = properties results["total_filtered"] = summary_results["total_filtered"] results["num_cc"] = summary_results["num_cc"] results["size_lcc"] = summary_results["size_lcc"] results["summary_results"] = summary_results results["all_sa"] = all_stats.sa results["all_comm"] = all_stats.comm results["all_sa0"] = all_stats.sa0 results["all_comm0"] = all_stats.comm0 results["steps"] = all_stats.steps results["node_stats"] = node_stats add_to_output(results, outfile) for agent in agents: agent.clear() agent.capacity = 1
def run_simulation_one_graph(properties, outfile): facts = range(properties['num_facts']+properties['num_noise']) agents = [] all_results = [] for i in xrange(properties['num_agents']): agents.append ( SimpleAgent.SimpleAgent(properties['willingness'],\ properties['competence'],\ properties['num_facts'],\ properties['num_noise'],\ properties['spamminess'],\ properties['selfishness'],\ properties['trust_used'],\ properties['inbox_trust_used'],\ properties['trust_filter_on'], twitter_model = properties['twitter_model'])) ## Create agent graph conn, stats = gg.create_graph_type(agents, properties) for agent1 in conn.nodes(): agent1.connect_to(conn.neighbors(agent1)) nodes_to_try = top_nodes (stats) #print "Nodes", nodes_to_try for current_agent in nodes_to_try: #print "New node", current_agent if current_agent != -1: agents[current_agent].capacity = 10 ##set one agent to high capacity node_stats = current_agent_stats (current_agent, stats) agent_to_track = current_agent else: node_stats = {} agent_to_track = 0 ## Distribute facts to agents for i in facts: for j in xrange(properties['agent_per_fact']): ## find a random agent, and distribute fact i k = random.randint(0,properties['num_agents']-1) agents[k].knowledge.add(i) ## Initialize agents to send everything that they think is valuable ## in their outbox for agent in agents: agent.init_outbox() #action_list = [] all_stats = ss.SimpleSimulationStats(properties['num_facts'],\ properties['num_noise'],\ stats['num_cc'], stats['largest_cc'], \ properties['sa_increment'],\ agent_to_track) ##actual simulation starts here for i in xrange(properties['num_steps']): x = one_step_simulation(agents) #action_list.append(x) if i%properties['statistic_taking_frequency'] == 0: all_stats.update_stats(agents,i) summary_results = all_stats.process_sa() results = {} results['setup'] = properties results['graph_type'] = properties['graph_type'] results['total_filtered'] = summary_results['total_filtered'] results['num_cc'] = summary_results['num_cc'] results['size_lcc'] = summary_results['size_lcc'] results['summary_results'] = summary_results results['all_sa'] = all_stats.sa results['all_comm'] = all_stats.comm results['all_sa0'] = all_stats.sa0 results['all_comm0'] = all_stats.comm0 results['steps'] = all_stats.steps results['node_stats'] = node_stats add_to_output(all_results, results, outfile) for agent in agents: agent.clear() agent.capacity = 1 flush_results(all_results, outfile)
def run_simulation_one_graph(properties, outfile): facts = range(properties['num_facts'] + properties['num_noise']) agents = [] all_results = [] for i in xrange(properties['num_agents']): agents.append ( SimpleAgent.SimpleAgent(properties['willingness'],\ properties['competence'],\ properties['num_facts'],\ properties['num_noise'],\ properties['spamminess'],\ properties['selfishness'],\ properties['trust_used'],\ properties['inbox_trust_used'],\ properties['trust_filter_on'], twitter_model = properties['twitter_model'])) ## Create agent graph conn, stats = gg.create_graph_type(agents, properties) for agent1 in conn.nodes(): agent1.connect_to(conn.neighbors(agent1)) nodes_to_try = top_nodes(stats) #print "Nodes", nodes_to_try for current_agent in nodes_to_try: #print "New node", current_agent if current_agent != -1: agents[ current_agent].capacity = 10 ##set one agent to high capacity node_stats = current_agent_stats(current_agent, stats) agent_to_track = current_agent else: node_stats = {} agent_to_track = 0 ## Distribute facts to agents for i in facts: for j in xrange(properties['agent_per_fact']): ## find a random agent, and distribute fact i k = random.randint(0, properties['num_agents'] - 1) agents[k].knowledge.add(i) ## Initialize agents to send everything that they think is valuable ## in their outbox for agent in agents: agent.init_outbox() #action_list = [] all_stats = ss.SimpleSimulationStats(properties['num_facts'],\ properties['num_noise'],\ stats['num_cc'], stats['largest_cc'], \ properties['sa_increment'],\ agent_to_track) ##actual simulation starts here for i in xrange(properties['num_steps']): x = one_step_simulation(agents) #action_list.append(x) if i % properties['statistic_taking_frequency'] == 0: all_stats.update_stats(agents, i) summary_results = all_stats.process_sa() results = {} results['setup'] = properties results['graph_type'] = properties['graph_type'] results['total_filtered'] = summary_results['total_filtered'] results['num_cc'] = summary_results['num_cc'] results['size_lcc'] = summary_results['size_lcc'] results['summary_results'] = summary_results results['all_sa'] = all_stats.sa results['all_comm'] = all_stats.comm results['all_sa0'] = all_stats.sa0 results['all_comm0'] = all_stats.comm0 results['steps'] = all_stats.steps results['node_stats'] = node_stats add_to_output(all_results, results, outfile) for agent in agents: agent.clear() agent.capacity = 1 flush_results(all_results, outfile)
plt.show() if __name__ == "__main__": p = {} gtypes = [('random', 20, 0.15, 3), \ ('random', 200, 0.03, 3), \ ('watts_strogatz_graph', 20, 0.1, 5), \ ('watts_strogatz_graph', 200, 0.01, 8), \ ('barabasi_albert_graph', 20, 0.1, 10), \ ('barabasi_albert_graph', 200, 0.01, 20), \ ] gtypes = [('watts_strogatz_graph', 40, 0.1, 3), \ ('watts_strogatz_graph', 40, 0.1, 8), \ ('watts_strogatz_graph', 40, 0.1, 15), \ ] for (g, x, y, z) in gtypes: p['graph_type'] = g p['num_agents'] = x p['connection_probability'] = y p['num_nodes_to_attach'] = z ag = range(p['num_agents']) (conn, stats) = gg.create_graph_type(ag, p) print p print "Connected components:", stats['num_cc'] histogram(stats, 20 * (1 + int(p['num_agents'] / 60)))