小世界网络
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.2 小世界网络
4.2.1 小世界网络简介
1998年, Watts和Strogatz 提出了小世界网络这一概念,并建立了WS模型。实证结果表明,大多数的真实网络都具有小世界特性(较小的最短路径)和聚类特性(较大的聚类系数)。传统的规则最近邻耦合网络具有高聚类的特性,但并不具有小世界特性;而随机网络具有小世界特性但却没有高聚类特性。因此这两种传统的网络模型都不能很好的来表示实际的真实网络。Watts和Strogatz建立的小世界网络模型就介于这两种网络之间,同时具有小世界特性和聚类特性,可以很好的来表示真实网络。
4.2.2 小世界模型构造算法
1、从规则图开始:考虑一个含有N个点的最近邻耦合网络,它们围成一个环,其中每个节点都与它左右相邻的各K/2节点相连,K是偶数。
2、随机化重连:以概率p随机地从新连接网络中的每个边,即将边的一个端点保持不变,而另一个端点取为网络中随机选择的一个节点。其中规定,任意两个不同的节点之间至多只能有一条边,并且每一个节点都不能有边与自身相连。
在上述模型中,p=0对应于完全规则网络,p=1则对应于完全随机网络,通过调节p的值就可以控制从完全规则网络到完全随机网络的过渡。
相应程序代码(使用Matlab实现)
ws_net.m (位于“代码”文件夹内)
function ws_net()
disp('小世界网络模型')
N=input('请输入网络节点数');
K=input('请输入与节点左右相邻的K/2的节点数');
p=input('请输入随机重连的概率');
angl e=0:2*pi/N:2*pi-2*pi/N;
x=100*cos(angl e);
y=100*sin(angl e);
pl ot(x,y,'r.','Markersize',30);
hol d on;
%生成最近邻耦合网络;
A=zeros(N);
disp(A);
for i=1:N
if i+K<=N
for j=i+1:i+K
A(i,j)=1;
end
else
for j=i+1:N
A(i,j)=1; end
for j=1:((i+K)-N) A(i,j)=1; end
end
if K
for j=i-K:i-1 A(i,j)=1;
end
else
for j=1:i-1
A(i,j)=1; end
for j=N-K+i:N A(i,j)=1; end
end
end
disp(A);
%随机化重连
for i=1:N
for j=i+1:N
if A(i,j)==1
pp=unifrnd(0,1); if pp<=p
A(i,j)=0; A(j,i)=0;
b=unidrnd(N); whil e i==b
b=unidrnd(N); end
A(i,b)=1; A(b,i)=1; end
end
end
end
%根据邻接矩阵连线
for i=1:N
for j=1:N
if A(i,j)==1
pl ot([x(i),x(j)],[y(i),y(j)],'linewidth',1); hol d on;
end
end
end
hol d off
aver_path=aver_pathl ength(A);
disp(aver_path);
4.2.3小世界网络模型平均路径长度与聚类系数
对于纯粹的规则网络,当其中连接数量接近饱和时,集聚系数很高,平均路径长度也十分短。例如完全耦合网络,每两个节点之间都相连,所以集聚系数是1,平均路径长度是1。然而,现实中的复杂网络是稀疏的,连接的个数只是节点数的若干倍,远远不到饱和。如果考虑将节点排列成正多边形,每个节点都只与距离它最近的2K 个节点相连,那么在K比较大时,其集聚系数为:
()()()()1323
2214K K C i K K --=≈-
虽然能保持高集聚系数,但平均路径长度为: ()4N l O N K ≈
= 平均路径长度与节点数成正比。纯粹的随机网络有着很小的平均路径长度,但同时集聚系数也很小。可是现实中的不少网络虽然有很小的平均路径长度,但却也有着比随机网络高出相当多的集聚系数。因此瓦茨和斯特罗加茨认为,现实中的复杂网络是一种介于规则网络和随机网络之间的网络。他们把这种特性称为现实网络的小世界特性,就是:
1. 有很小的平均路径长度:在节点数N 很大时,平均路径长度近似于随机网络;
2. 有很高的集聚系数:集聚系数大约和规则网络在同一数量级,远大于随机网络的集聚系数。
相应程序代码(使用Matlab 实现)
ws.m (位于“代码”文件夹内)
cl c;
cl ear all;
format long;
n=1000;
k=5;
L=zeros(14,20);
C=zeros(14,20);
for i=1:14
p(15-i,1)=1/2^(i-1);
end
% p=zeros(1,14);
% p1=zeros(14,20);
% LWS=zeros(14,1);
% CWS=zeros(14,1);
%%生成最近邻耦合网络
A=zeros(n);
for i=1:n
for j=i+1:i+k
jj=j;
if j>n
jj=mod(j,n);
end
A(i,jj)=1; A(jj,i)=1;
end