Esempio n. 1
0
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]))
Esempio n. 2
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)))

Esempio n. 3
0
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)
Esempio n. 6
0
    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)))