⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 evolutionary_game_wsls.m

📁 wsls在一个无标度网络上的进化博弈
💻 M
字号:
%function [Ave_P_list,std_P_list,Ave_ayoff_list]=evolutionary_game_WSLS(Nodes,b,step_num,times,fname)
%evolutionary game theory adopting prisoner's dilemma
%game payoff:[(R,R),(S,T);(T,S),(P,P)]:T=b,R=1,P=S=0
%See Ref.[Scale-free networks provide a unifying framework for the 
%emergence of cooperation]
%
%Input: Nodes-- N*N adjacent matrix
%       b -- the advantage of defectors for PD, b belongs to (1,2], larger
%            b standing for more defect
%      step_num -- generation number
%Output: Status_List -- step_num*1 vector, Status_List(i) is the number of
%                       vertices adoping cooperation strategy when the i-th
%                       step.
%       Vertex_status_list -- N*1 vector,Vertex_status_list(i) is the
%                             status of vertex i at step_num. 
%                             Vertex_status_list(i) is 1 for cooperation.
%       Vertex_payoff_list -- N*1 vector.Vertex_payoff_list(i) is the
%                             payoff of vertex i at step_num.
%Algorithm:O(Round*M)
%Write by rock on 06/01/04
%Write by rock on 06/07/03, changing interface and add Vertex_payoff_list
%Modified a bug on temp_Vertex_status_list=Vertex_status_list on 06/09.06;
%Modified on 08.08.14 for PGG
%Modified on 08.12.28 for WSLS
%研究目的:
%对于给定的PD(RSTP),个体i对于(CC,CD,DC,DD)采取C的概率为Prob=(p1,p2,p3,p4),则随着时间演化,什么样的P是最优的?没有变异!
%AllC:Prob=(1,1,1,1);AllD:Prob=(0,0,0,0);TFT:Prob=(1,0,1,0);GTFT:Prob=(1,1/3,1,1/3);WSLS:Prob=(1,0,0,1)
%
%1.初始化时,个体(0,1)随机选择Prob
%1.Game:
%当个体Porb_i=(pi1,pi2,pi3,pi4)与个体Porb_j=(pj1,pj2,pj3,pj4)相遇,则i的收益为:
%Payoff_ij=alpha*R+beta*S+gamma*T+theta*P;其中alpha/beta/gama/theta为转移矩阵相应列的和
%
%2.每个个体与邻居博弈,收益累计为Payoff_i=sum_j(payoff_ij)
%3.策略演化:
%Porb_j-->Porb_i=1/(1+exp(Payoff_i-Payoff_j)/K)
%
%程序伪码:
%
%输入:game参数(RSTP),网络结构,噪音K,Gen_num
%输出:P1_list,P2_list,P3_list,P4_list,Ave_P_list,delta_P_list,Total_Payoff_list
%
%流程
%
%参数:	P1_list,P2_list,P3_list,P4_list:N*1 list,分别存储每个个体的p1-p4参数
%	Ave_P_list:4*Gen_num,每一代的个体的ave_P
%	delta_P_list:4*Gen_num,每一代的个体P的方差
%	Total_Payoff_list:1*Gen_num,每一代种群的总收益
%
%初始化:个体i随机选择P1_i,P2_i,P3_i,P4_i
%
%for i=2:Gen_num
%	(1)Game:Pyaoff_i
%	(2)策略演化:P1_list,P2_list,P3_list,P4_list
%	(3)计算Ave_P_list,delta_P_list和Total_Payoff_list
%end

clear

TEST=1;
if TEST==1
    fname='HoER10000'    

    %Grid_Nodes=Grid_4_with_period_Growing(100,100);
    %Write_Matrix(Grid_Nodes,'Grid10000')
    %HoWS_Nodes=get_HoWS_Network2(Grid_Nodes,1);
    %Write_Matrix(HoWS_Nodes,'HoER10000')

    Nodes=spconvert(load([fname,'.adj']));

    b=2.5
    step_num=20; 
    TEST_Game=5;    
    times=1;
end


TEST_Game=5;
    
N=length(Nodes);
Degree=zeros(N,1);
Degree=full(sum(Nodes(1:end,:))');
ave_k=nnz(Nodes)/N;

[Row,Col,Weight]=find(Nodes);

%Similarity_Matrix=get_vertex_similarity(Nodes,1);
%payoff

if TEST_Game==1 %SG
    b=(b+1)/(2*b);
    T=b;
    R=b-0.5;
    P=0;
    S=b-1;
    D=T-P;
elseif TEST_Game==2 %PD
    T=b;
    R=1;
    P=0;
    S=0;
    D=T-S;
elseif TEST_Game==3 %Wang's SG
    T=1+b;
    R=1;
    P=0;
    S=1-b;
    D=T-S;
elseif TEST_Game==4 %PGG
    R=b;
    S=1.0;
elseif TEST_Game==5 %Axelrod's payoff matrix
    R=3;
    T=5;
    P=1;
    S=0;
end

Pay_matrix=[R,S,T,P];
K=0.1;%noise

P_list=rand(N,4);%[p1,p2,p3,p4]
P_list(:,3)=P_list(:,1)%reactive strategies,p1=p3
P_list(:,4)=P_list(:,2)%reactive strategies,p2=p4
Ave_P_list=zeros(step_num,4);
std_P_list=zeros(step_num,4);
Ave_Payoff_list=zeros(step_num,1);

Vertex_payoff_list=zeros(N,1);
temp_P_list=zeros(N,1);%Modified on 06.09.06

for i=1:step_num
    i
    Vertex_payoff_list(1:end)=0;

    base_neighbor=1;
    for j=1:N%play WSLS game
        Neighbor_j_num=Degree(j);
        Neighbor_j=zeros(Neighbor_j_num,1);
        Neighbor_j(1:Neighbor_j_num)=Row(base_neighbor:base_neighbor+Neighbor_j_num-1);    
        base_neighbor=base_neighbor+Neighbor_j_num;
        
       
        for h=1:Neighbor_j_num
            M=get_game_stochastic_matrix(P_list(j,:),P_list(Neighbor_j(h),:));
            Vertex_payoff_list(j)=Vertex_payoff_list(j)+sum(M*Pay_matrix')/4;
            
        end
    end
    
   
    %changing status list accoring to payoff_list
    base_neighbor=1;
    temp_P_list=P_list;%add on 06.09.06
    for j=1:N
        Neighbor_j_num=Degree(j);
        Neighbor_j=zeros(Neighbor_j_num,1);
        Neighbor_j(1:Neighbor_j_num)=Row(base_neighbor:base_neighbor+Neighbor_j_num-1);
        base_neighbor=base_neighbor+Neighbor_j_num;
        
        select_ID=ceil(rand(1)*Neighbor_j_num);
        y=Neighbor_j(select_ID);
        
        w=1/(1+exp(Vertex_payoff_list(j)-Vertex_payoff_list(y))/K);
        if w>rand(1)
            P_list(j,:)=temp_P_list(y,:);
        end        
    end
   
    Ave_P_list(i,:)=sum(P_list)/N;%zeros(step_num,4);
    std_P_list(i,:)=std(P_list);
    Ave_ayoff_list(i)=sum(Vertex_payoff_list)/N/ave_k;
    
    Ave_P_list(i,:)
    std_P_list(i,:)
    Ave_ayoff_list(i)
end

save([fname,'b',num2str(b*100),'_replicator',num2str(times)])

if TEST==1
    Color_Line=['r-';'b-';'g-';'m-'];
    figure
    for i=1:4
        plot([1:step_num],Ave_P_list(1:end,i),Color_Line(i,:));
        hold on
        xlabel('gen num')
        ylabel('p')
    end
    
    figure
    for i=1:4
        plot([1:step_num],std_P_list(1:end,i),Color_Line(i,:));
        hold on
        xlabel('gen num')
        ylabel('std p')
    end
    
    figure
    plot([1:step_num],Ave_ayoff_list(1:end),Color_Line(1,:));
    xlabel('gen num')
    ylabel('ave payoff')
end


return

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -