简单复杂网络算法,运行效果好,效率高。
N=input('请输入最近邻耦合网络中节点的总数N:'); %%参数输入
K=input('请输入最近邻耦合网络中每个节点的邻居数K:');
if K > floor (N-1) | mod (K,2) ~=0
disp ('参数输入错误:K值必须是小于网络节点总数且为偶数的整数');
return;
end
angle=0:2*pi/N:2*pi-2*pi/N;x=100*sin(angle);y=100*cos(angle);%%生成各节点坐标
plot(x,y,'ro','MarkerEdgeColor','g','MarkerFaceColor','r','markersize',8);
hold on;
A=zeros(N);
for i=1:N %%生成最近邻耦合网络的邻接矩阵
for j=i+1:i+K/2
jj=j;
if j>N
jj=mod(j,N);
end
A(i,jj)=1;A(jj,i)=1;
end
end
p=input('请输入随机化重连的概率p:');
for i=1:N
for j=i+1:i+K/2
jj=j;
if j>N
jj=mod(j,N);
end
p1=rand(1,1);%%若生成的随机数小于p,则边进行随机化重连,否则不重连
if p1<p %%重连策略:断开原来的边,在未连的边中随机选择另一个节点与原节点连接
A(i,jj)=0;A(jj,i)=0;A(i,i)=inf;a=find(A(i,:)==0);
rand_data=randint(1,1,[1,length(a)]);
jjj=a (rand_data);A(i,jjj)=1;A(jjj,i)=1;A(i,i)=0;
end
end
end
for i=1:N %%开始画最近邻耦合网络
for j=i+1:N
if A(i,j)~=0
plot([x(i),x(j)],[y(i),y(j)],'linewidth',1.2);
hold on;
end
end
end
axis equal;
hold off