WS小世界网络的仿真实现

🎀前言

1998年Watts和Strogatz在Nature上发表了题为《“小世界”网络的群体动力行为》,提出了小世界网络模型。在小世界网络中,其各节点之间的连接状况(度数)具有均匀分布性,网络中大部分的结点不与彼此邻接,但大部分结点可以从任一其他点经少数几步就可到达。若将一个小世界网络中的点代表一个人,而连结线代表人与人认识,则这小世界网络可以反映陌生人由彼此共同认识的人而连结的小世界现象。

小世界网络是一种介于规则网络和随机网络中的特殊网络。

🌂MATLAB代码

clc, clear, hold on
N = 5000; K = 4; p = 0.1; %N为网络节点总数,K为邻域节点个数,p为重连概率
t = 0:2*pi/N:2*pi-2*pi/N;  %生成最近邻耦合网络各节点坐标的参数方程的角度
x = 100*sin(t); y=100*cos(t);
plot(x,y,'ro','MarkerEdgeColor','g','MarkerFaceColor','r','markersize',6);
A=zeros(N);    %邻接矩阵初始化
for i=1:N      %该层循环构造最近邻K耦合网络的邻接矩阵
   for j=i+1:i+K/2
       jj=(j<=N)*j+(j>N)*mod(j,N); %如果j超过了N,要取除以N的余数
       A(i,jj)=1; A(jj,i)=1;
   end
end
for i= 1:N    %该层循环进行随机重连
   for j=i+1:i+K/2
       jj=(j<=N)*j+(j>N)*mod(j,N); 
       ChangeV=randi([1,N]); %产生随机整数,为可能重连的另外一个节点
       if rand<=p & A(i,ChangeV)==0 & i~=ChangeV  %重连的条件
          A(i,jj) = 0; A(jj,i) = 0; %删除原边
          A(i,ChangeV)=1; A(ChangeV,i)=1;  %重连新边
       end
   end
end
for i=1:N-1 
    for j=i+1:N
        if A(i,j)~=0
            plot([x(i),x(j)],[y(i),y(j)],'linewidth',1.2); 
        end
    end
end
%把邻接矩阵A转换为Pajek格式的数据,
%这里函数Matlab_to_Pajek是我们自己编写的函数。
Matlab_to_Pajek(A); 

🍔数据保存函数(用于分析、可视化等)

function Matlab_to_Pajek(A,k)  
%Matlab邻接矩阵A转换成Pajek数据的函数
%k是第k次转换,生成的文件命名成Pajek_datak.net,
%如果不输入第2个参数k,默认文件名为Pajek_data1.net
if nargin==1
    str='Pajek_data1.net';
else
    str=['Pajek_data',int2str(k),'.net'];
end
n=length(A); v=1:n;
fid=fopen(str,'w');  %创建纯文本文件Pajek_data.net
fprintf(fid,'%s%d\n','*Vertices  ',n); %写入字符串并换行
for i=1:n
   fprintf(fid,' %d  ',v(i));   %写入节点编号
   fprintf(fid,'"%d"\n',v(i));  %写入双引号节点字符串并换行
end
fprintf(fid,'%s\n%s\n','*Arcs','*Edges'); %写入两个字符串并各自换行
A=tril(A);  %截取邻接矩阵的下三角元素
[u,v]=find(A); n=length(u); %找非零元素,并计算个数
for i=1:n
    fprintf(fid,'  %d  %d  1\n',u(i),v(i));  %逐条边写入信息并换行
end
fclose(fid);

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉淀体育生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值