利用MATLAB仿真创新网络演化过程的程序及其说明.docx
《利用MATLAB仿真创新网络演化过程的程序及其说明.docx》由会员分享,可在线阅读,更多相关《利用MATLAB仿真创新网络演化过程的程序及其说明.docx(20页珍藏版)》请在冰豆网上搜索。
利用MATLAB仿真创新网络演化过程的程序及其说明
第一部分程序:
获取不同δ值时的网络演化情况并保存成数据文件
clearall;clc;
N_delta_array=4;
Array_delta=[0.0005,0.001,0.0015,0.0025];
fornda=1:
N_delta_array
%%%%%%%Initialparameters
n0=20;%initialnumberofpoints
T=3000;%totalnumberofstepsneededrunning
m2=10;%numberofnewlinksforeachnewpoints
p_ini=0.5;%probabilityofinitiallinks
p_iso=0.01;%probabilityofisolatepointtobeselected
p_sat=0.0002;%probabilityofsaturatedpointtobeselected
delta=Array_delta(nda);%factorofincreasingresource
%%%%%%%Getinitialtotalnumber
N=n0;%initialtotalnumberofpoints
%%%%%%%Prepareemptyarraystosaveinformation
ti=zeros(N,1);%type
lij=zeros(N,N);%link
ki=zeros(N,1);%degree
mi=zeros(N,1);%resource
pij=zeros(N,N);%performance
wij=zeros(N,N);%weight
%%%%%%%%%%%%%%%%%
isolate=zeros(N,1);%isolatestate
saturation=zeros(N,1);%saturatedstate
Egt=zeros(T,1);%efficiencyofcooperation
Dgt=zeros(T,1);%varianceofcooperateefficiency
Lt=zeros(T,1);%averagelength
Zt=zeros(T,1);%aggregationfactor
Kt=zeros(T,1);%averagedegreeofnet
Vt=zeros(T,1);%varianceofKt
lt=zeros(T,1);%max(ki)-min(ki)
ut=zeros(T,1);%averageofthedifference
St=zeros(T,1);%numberofsizesateachstep
%%%%%%%Initializationbeforthefirststep
%%%%%%%%%%%%%%%%%%Initializetypesofeachpoints
fornti=1:
N
ti(nti)=fix(4*rand(1,1))+1;
ifti(nti)==4
ti(nti)=2;
end
end
%%couldorn'tbeconnected
could_cot=zeros(N,N);
forni=1:
N
fornj=1:
N
if(ni~=nj)&&((ti(ni)~=ti(nj))||((ti(ni)==2)&&(ti(nj)==2)))
could_cot(ni,nj)=1;
end
end
end
could_cot_ini=could_cot;
%%%%%%%%%%%%%%%%%%Initializelinks
por_i=rand(1,N);
tempones=ones(1,N);
key_lij=meshgrid(por_i,tempones)+meshgrid(por_i,tempones)';
key_lij=key_lij.*could_cot;
idx_ini=find(key_lij>2*(1-p_ini));
lij(idx_ini)=1;
could_cot=could_cot-lij;
%%%%%%%%%%%%%%%%%%Initializeweights
tempw=rand(1,N)*5*T;
wij=(meshgrid(tempw,tempones)+meshgrid(tempw,tempones)').*lij;
%%%%%%%%%%%%%%%%%Initializedegrees
ki=sum(lij)';
%%%%%%%%%%%%%%%%%%Initializeresources
mi=rand(N,1);
%%%%%%%%%%%%%%%%%%Initializeresources
pij=zeros(N,N);
%%%%%%%%%%%%%%%%%%%%%stepbysteprunning
fornt=1:
T
disp(['Step',num2str(nt),'isrunning']);
%%deletetheconnection
wij=wij-1;
idx_lost=find(wij<=0);
wij(idx_lost)=0;
lij(idx_lost)=0;
could_cot(idx_lost)=1;
could_cot=could_cot.*could_cot_ini;
ki=sum(lij)';
%%deletetheisolatedpoint
state_temp=(1-isolate).*(1-saturation);
idx_state=find(state_temp==0);
kitemp=ki;
kitemp(idx_state)=10^4;
idx_isolate=find(kitemp==min(kitemp));
key_isolate=zeros(N,1);
key_isolate(idx_isolate)=1;
key_isolate=key_isolate.*rand(N,1);
key_isolate=ones(N,1)-key_isolate;
idx_chk=find(key_isolateisolate(idx_chk)=1;
ki(idx_chk)=0;
lij(idx_chk,:
)=0;
lij(:
idx_chk)=0;
wij(idx_chk,:
)=0;
wij(:
idx_chk)=0;
could_cot(idx_chk,:
)=0;
could_cot(:
idx_chk)=0;
could_cot_ini(idx_chk,:
)=0;
could_cot_ini(:
idx_chk)=0;
%%markthesaturationpoint
state_temp=(1-isolate).*(1-saturation);
temp_sat=rand(N,1).*state_temp;
idx_sat=find(temp_sat>(1-p_sat));
saturation(idx_sat)=1;
could_cot(idx_sat,:
)=0;
could_cot(:
idx_sat)=0;
could_cot_ini(idx_sat,:
)=0;
could_cot_ini(:
idx_sat)=0;
%%addnewconnections
m1=fix(0.02*N);
number_codcot=sum(sum(could_cot))/2;
ifnumber_codcot<=m1
lij=lij+could_cot;
meshtemp=meshgrid(rand(1,N),ones(1,N));
wij=wij+5*T*could_cot.*(meshtemp+meshtemp');
could_cot=zeros(N,N);
else
KIM=meshgrid((ki+1).*mi,ones(1,N));
KIMS=KIM+KIM';
OP=could_cot.*KIMS.*tril(ones(N,N),0);
OPL=reshape(OP,1,N*N);
COPL=cumsum(OPL);
COP=reshape(COPL,N,N);
keynew=m1;
whilekeynew>0
keyone=rand(1,1)*COP(N,N);
IKA=find(COPL>keyone);
IK=IKA
(1);
KEY=COPL(IK);
idx_new1=find(COP==KEY);
idx_new2=find(COP'==KEY);
ifcould_cot(idx_new1)==1
lij(idx_new1)=1;
lij(idx_new2)=1;
could_cot(idx_new1)=0;
could_cot(idx_new2)=0;
wij(idx_new1)=rand(1,1)*10*T;
wij(idx_new2)=wij(idx_new1);
keynew=keynew-1;
end
end
end
%%addnewpoint
N=N+1;
ti_temp=ti;
ti=[ti;0];
ti(N)=fix(4*rand(1,1))+1;
ifti(N)==4
ti(N)=2;
end
mi=[mi;rand(1,1)];
isolate=[isolate;0];%isolatestate
saturation=[saturation;0];%saturatedstate
ki=[ki;0];
%%couldconnected
could_cot=[could_cot;zeros(1,(N-1))];
could_cot=[could_cot,zeros(N,1)];
could_cot_ini=[could_cot_ini;zeros(1,(N-1))];
could_cot_ini=[could_cot_ini,zeros(N,1)];
cd_N=zeros(1,N-1);
ifti(N)==2
could_cot(N,:
)=ones(1,N);
could_cot(:
N)=ones(N,1);
could_cot_ini(N,:
)=ones(1,N);
could_cot_ini(:
N)=ones(N,1);
could_cot(N,N)=0;
could_cot_ini(N,N)=0;
else
idx_newc=find(ti_temp~=ti(N));
zero_temp=zeros(1,N);
zero_temp(idx_newc)=1;
could_cot(N,:
)=zero_temp;
could_cot(:
N)=zero_temp';
could_cot_ini(N,:
)=zero_temp;
could_cot_ini(:
N)=zero_temp';
end
state_temp=(1-isolate).*(1-saturation);
idx_state=find(state_temp==0);
could_cot(N,idx_state)=0;
could_cot(idx_state,N)=0;
could_cot_ini(N,idx_state)=0;
could_cot_ini(idx_state,N)=0;
%%%%%link
lij=[lij;zeros(1,(N-1))];
lij=[lij,zeros(N,1)];
wij=[wij;zeros(1,(N-1))];
wij=[wij,zeros(N,1)];
number_couldfornew=sum(could_cot(N,:
));
ifnumber_couldfornew<=m2
lij(N,:
)=could_cot(N,:
);
lij(:
N)=could_cot(:
N);
wij(N,:
)=10*T*could_cot(N,:
).*rand(1,N);
wij(:
N)=wij(N,:
)';
could_cot(N,:
)=zeros(N,1);
could_cot(:
N)=zeros(1,N);
else
K1=(ki+1).*mi;
CK1=cumsum(K1);
key_newlink=m2;
whilekey_newlink>0
KEY=rand(1,1)*CK1(N);
idx_new_array=find(CK1>KEY);
idx_new=idx_new_array
(1);
ifcould_cot(N,idx_new)==1
lij(N,idx_new)=1;
lij(idx_new,N)=1;
could_cot(N,idx_new)=0;
could_cot(idx_new,N)=0;
wij(N,idx_new)=rand(1,1)*10*T;
wij(idx_new,N)=wij(N,idx_new);
key_newlink=key_newlink-1;
end
end
end
%%Refreshdata
%%Refreshdegrees
ki=sum(lij)';
%%Refreshresource
mi=mi.*(1+delta*(ki+1)/(sum(ki)+N));
%%Getperformance
tempones=ones(1,N);
meshmi=meshgrid(mi,tempones);
meshmj=meshmi';
pij=sqrt(meshmi.*meshmj).*lij;
Egt(nt)=sum(sum(pij))/(N*(N-1)/2);
Dgt(nt)=sum(sum((pij-Egt(nt)).^2))/(N*(N-1)/2);
St(nt)=sum(ki);
end
dij=finddij(lij);
N1=length(find(sum(dij)>0));
L=sum(sum(dij))/(N1*(N1-1));
zi=zeros(N,1);
forni=1:
N
lij_temp=lij(ni,:
);
idx_cop=find(lij_temp==1);
k_cop=length(idx_cop);
ifk_cop>1
cop_temp=lij(idx_cop,:
);
cop=cop_temp(:
idx_cop);
fai=sum(sum(cop))/2;
zi(ni)=2*fai/(k_cop*(k_cop-1));
end
end
Z=(sum(zi))/N1;
save(['Data3000_delta',num2str(delta),'.mat']);
end
第二部分程序:
从第一部分程序运行得到的数据文件中提取相关信息并作图,给出演化形成网络的相关信息
clearall;clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
n0=20;
T=3000;
NT=n0+T;
T_Array=1:
T;
NT_Array=1:
NT;
N_delta_array=4;
Array_delta=[0.0005,0.001,0.0015,0.0025];
Color_Array=['b','g','r','c'];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
StDelta=zeros(T,N_delta_array);
EgtDelta=zeros(T,N_delta_array);
DgtDelta=zeros(T,N_delta_array);
kiDelta=zeros(NT,N_delta_array);
ziDelta=zeros(NT,N_delta_array);
dijDelta=zeros(NT,NT,N_delta_array);
KDelta=zeros(1,N_delta_array);
VDelta=zeros(1,N_delta_array);
LDelta=zeros(1,N_delta_array);
UDelta=zeros(1,N_delta_array);
ZDelta=zeros(1,N_delta_array);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
loadData3000_delta0.0005.mat;
run=1
StDelta(:
1)=St;
EgtDelta(:
1)=Egt;
DgtDelta(:
1)=Dgt;
kiDelta(:
1)=ki;
ziDelta(:
1)=zi;
dijDelta(:
:
1)=dij;
KDelta
(1)=sum(ki)/NT;
VDelta
(1)=sqrt((sum(ki-KDelta
(1)).^2)/NT);
N1=length(find(sum(dij)>0));
L=sum(sum(dij))/(N1*(N1-1));
LDelta
(1)=L;
ZDelta
(1)=(sum(zi))/N1;
temp=0;
forniuij=1:
N
fornjuij=1:
N
ifniuij~=njuij
temp=temp+abs(ki(niuij)-ki(njuij));
end
end
end
UDelta
(1)=temp/sum(ki);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
loadData3000_delta0.001.mat;
run=2
StDelta(:
2)=St;
EgtDelta(:
2)=Egt;
DgtDelta(:
2)=Dgt;
kiDelta(:
2)=ki;
ziDelta(:
2)=zi;
dijDelta(:
:
2)=dij;
KDelta
(2)=sum(ki)/NT;
VDelta
(2)=sqrt((sum(ki-KDelta
(1)).^2)/NT);
N1=length(find(sum(dij)>0));
L=sum(sum(dij))/(N1*(N1-1));
LDelta
(2)=L;
ZDelta
(2)=(sum(zi))/N1;
temp=0;
forniuij=1:
N
fornjuij=1:
N
ifniuij~=njuij
temp=temp+abs(ki(niuij)-ki(njuij));
end
end
end
UDelta
(2)=temp/sum(ki);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
loadData3000_delta0.0015.mat;
run=3
StDelta(:
3)=St;
EgtDelta(:
3)=Egt;
DgtDelta(:
3)=Dgt;
kiDelta(:
3)=ki;
ziDelta(:
3)=zi;
dijDelta(:
:
3)=dij;
KDelta(3)=sum(ki)/NT;
VDelta(3)=sqrt((sum(ki-KDelta
(1)).^2)/NT);
N1=length(find(sum(dij)>0));
L=sum(sum(dij))/(N1*(N1-1));
LDelta(3)=L;
ZDelta(3)=(sum(zi))/N1;
temp=0;
forniuij=1:
N
fornjuij=1:
N
ifniuij~=njuij
temp=temp+abs(ki(niuij)-ki(njuij));
end
end
end
UDelta(3)=temp/sum(ki);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
loadData3000_delta0.0025.mat;
run=4
StDelta(:
4)=St;
EgtDelta(:
4)=Egt;
DgtDelta(:
4)=Dgt;
kiDelta(:
4)=ki;
ziDelta(:
4)=zi;
dijDelta(:
:
4)=dij;
KDelta(4)=sum(ki)/NT;
VDelta(4)=sqrt((sum(ki-KDelta
(1)).^2)/NT);
N1=length(find(sum(dij)>0));
L=sum(sum(dij))/(N1*(N1-1));
LDelta(4)=L;
ZDelta(4)=(sum(zi))/N1;
temp=0;
forniuij=1:
N
fornjuij=1:
N
ifniuij~=njuij
temp=temp+abs(ki(niuij)-ki(njuij));
end
end
end
UDelta(4)=temp/sum(ki);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Array_delta=[0.0005,0.001,0.0015,0.00