Exemplo n.º 1
0
def random_neighbor(G, i):
    l = neighbors(G, i)
    return random.choice(l) if len(l) > 0 else None
def main(args):

    if len(args) != 1:
        sys.exit("Usage: python origianl.py <graphml file>")
    
    C=3
    L=6 #损失值
    select_strength=1 #选择强度
    fname = args[0]
    G = networkx.read_graphml(fname)
    G = networkx.convert_node_labels_to_integers(G)
    
    '''
        给每个参与者初始化投资额,利用之前initial_investment.npy文件
    '''
    a=[]    
    defender = [Defender(i) for i in range(0, len(G))]
    for i in range(len(G)):
        defender[i].set_degree(G.degree()[i])
    for i in range(len(G)):
        if defender[i].get_degree()<2:
            defender[i].set_investment(random.uniform(0,0.2))
        elif defender[i].get_degree()<4 and defender[i].get_degree()>=2:
            defender[i].set_investment(random.uniform(0.2,0.4))
        elif defender[i].get_degree()<6 and defender[i].get_degree()>=4:
            defender[i].set_investment(random.uniform(0.4,0.6))
        elif defender[i].get_degree()<8 and defender[i].get_degree()>=6:
            defender[i].set_investment(random.uniform(0.6,0.8))
        elif defender[i].get_degree()>=8:
            defender[i].set_investment(random.uniform(0.8,1))
        a.append(defender[i].get_investment())
    numpy.save('initial_investment.npy',a)
    
    
    for i in range(len(G)):
        sum_weight=0.0+defender[i].get_degree()
        for j in neighbors(G,i):
            sum_weight+=defender[j].get_degree()
        defender[i].set_weight((defender[i].get_degree())/sum_weight)
    
    
    #pdb.set_trace() 
    '''开始演化博弈'''  
    for i in range(300):    
        #计算每个参与者的风险和收益  
        for j in range(0,len(G)):
            sum=0
            for k in neighbors(G,j):
                sum = sum+defender[k].get_weight()*defender[k].get_investment()
            defender[j].set_risk(math.exp(-sum-defender[j].get_weight()*defender[j].get_investment()))
            defender[j].set_payoff(-C*defender[j].get_investment()-L*defender[j].get_risk())
        
        if i==0:
            pp=0
            for jo in range(0,len(G)):
                pp=pp+defender[jo].get_payoff()
            print pp
        
        '''更新策略'''       
        for jj in range(0,len(G)):
            jjj=random_neighbor(G, jj)          
            if defender[jj].get_payoff() < defender[jjj].get_payoff():
                imitation_probabily=1.0/(1+math.exp((-select_strength)*(defender[jjj].get_payoff()-defender[jj].get_payoff())))
                if random.random() <= imitation_probabily:
                    defender[jj].set_investment_update(((defender[jj].get_degree()+0.1)/defender[jjj].get_degree()+0.1)*defender[jjj].get_investment())
                else:
                    defender[jj].set_investment_update((defender[jj]).get_investment())
            else:
                (defender[jj]).set_investment_update((defender[jj]).get_investment())
        
        
        for jjjj in range(0,len(G)):
            defender[jjjj].set_investment(defender[jjjj].get_investment_update())
            
        '''
    for j in range(0,len(G)): 
        print defender[j].get_investment()
        
        '''
        
        p=0
        for j in range(0,len(G)):
            p=p+defender[j].get_payoff()
        print p  
Exemplo n.º 3
0
def main(args):

    if len(args) != 1:
        sys.exit("Usage: python add_mechanism.py <graphml file>")

    C = 3
    L = 6  #损失值
    select_strength = 1  #选择强度
    fname = args[0]
    G = networkx.read_graphml(fname)
    G = networkx.convert_node_labels_to_integers(G)
    '''
        给每个参与者初始化投资额,利用之前initial_investment.npy文件
    '''
    a = numpy.load('initial_investment.npy')
    defender = [Defender(i) for i in range(0, len(G))]
    for i in range(len(G)):
        defender[i].set_investment(a[i])
        defender[i].set_degree(G.degree()[i])
    #pdb.set_trace()

    for i in range(len(G)):
        sum_degree = 0.0 + defender[i].get_degree()
        for j in neighbors(G, i):
            sum_degree += defender[j].get_degree()
        defender[i].set_weight((defender[i].get_degree()) / sum_degree)
    '''开始演化博弈'''
    for i in range(300):
        #计算每个参与者的风险和收益
        for j in range(0, len(G)):
            sum = 0
            neighbors_num = 0
            sum_weight = 0.0 + defender[j].get_weight()
            for k in neighbors(G, j):
                neighbors_num += 1
                sum_weight += defender[k].get_weight()
                sum = sum + defender[k].get_weight(
                ) * defender[k].get_investment()
            defender[j].set_risk(
                math.exp(-sum - defender[j].get_weight() *
                         defender[j].get_investment()))
            defender[j].set_payoff(-C * defender[j].get_investment() -
                                   L * defender[j].get_risk())
            defender[j].set_ave_neighbor_invest(
                (defender[j].get_weight() * defender[j].get_investment() + sum)
                / sum_weight)

        if i == 0:
            pp = 0
            for jo in range(0, len(G)):
                pp = pp + defender[jo].get_payoff()
            print pp

        for jj in range(len(G)):
            taxsum = 0
            for kk in neighbors(G, jj):
                ksum = 0
                for kkk in neighbors(G, kk):
                    if kkk != jj:
                        ksum = ksum + defender[kkk].get_weight(
                        ) * defender[kkk].get_investment()
                defender[kk].set_tax(
                    L * (defender[kk].get_risk() -
                         math.exp(-defender[kk].get_weight() *
                                  defender[kk].get_investment() - ksum -
                                  defender[jj].get_weight() *
                                  defender[jj].get_ave_neighbor_invest())))
                taxsum = taxsum + defender[kk].get_tax()

            defender[jj].set_addtax(taxsum)
            defender[jj].set_payoff(defender[jj].get_payoff() - taxsum)
        '''更新策略'''
        for jjj in range(0, len(G)):
            jjjj = random_neighbor(G, jjj)
            if defender[jjj].get_payoff() < defender[jjjj].get_payoff():
                imitation_probabily = 1.0 / (1 + math.exp(
                    (-select_strength) *
                    (defender[jjjj].get_payoff() - defender[jjj].get_payoff()))
                                             )
                if random.random() <= imitation_probabily:
                    defender[jjj].set_investment_update(
                        ((defender[jjj].get_degree() + 0.1) /
                         defender[jjjj].get_degree() + 0.1) *
                        defender[jjjj].get_investment())
                else:
                    defender[jjj].set_investment_update(
                        (defender[jjj]).get_investment())
            else:
                (defender[jjj]).set_investment_update(
                    (defender[jjj]).get_investment())

        for jjjjj in range(0, len(G)):
            defender[jjjjj].set_investment(
                defender[jjjjj].get_investment_update())
        '''
    for j in range(0,len(G)): 
        print defender[j].get_investment()
        
        '''
        p = 0
        for j in range(0, len(G)):
            p = p + defender[j].get_payoff() + defender[j].get_addtax()
            defender[j].set_tax(0.0)
            defender[j].set_addtax(0.0)
        print p
    '''    
Exemplo n.º 4
0
def neighbors_():
    '''Functional equivalent to <Graph>.neighbors(<v>)'''
    g = Graph([(1, 2), (2, 3)])
    print(function.neighbors(g, 2))  # [1, 3]