搜索
您的当前位置:首页小世界网络简介及及MATLAB建模

小世界网络简介及及MATLAB建模

来源:世旅网


小世界网络MATLAB建模

1.简介

小世界网络存在于数学、物理学和社会学中,是一种数学图的模型。在这种图中大部份的结点不与彼此邻接,但大部份结点可以通过任一其它节点经少数几步就可以产生联系。若将一个小世界网络中的点代表一个人,而联机代表人与人之间是相互认识的,则这小世界网络可以反映陌生人通过彼此共同认识的人而起来产生联系关系的小世界现象。

在日常生活中,有时你会发现,某些你觉得与你隔得很“遥远”的人,其实与你“很近”。小世界网络就是对这种现象的数学描述。用数学中图论的语言来说,小世界网络就是一个由大量顶点构成的图,其中任意两点之间的平均路径长度比顶点数量小得多。除了社会人际网络以外,小世界网络的例子在生物学、物理学、计算机科学等领域也有出现。许多经验中的图可以用小世界网络来作为模型。因特网、公路交通网、神经网络都呈现小世界网络的特征。 小世界网络最早是由邓肯·瓦茨(Duncan Watts)和斯蒂文·斯特罗加茨(Steven Strogatz)在1998年引进的,将高聚合系数和低平均路径长度作为特征,提出了一种新的网络模型,一般就称作瓦茨-斯特罗加茨模型(WS模型),这也是最典型的小世界网络的模型。

由于WS小世界模型构造算法中的随机化过程有可能破坏网络的连通性,纽曼(Newman)和瓦茨(Watts)提出了NW小世界网络模型,该模型是通过用“随机化加边”模式来取代WS小世界网络模型构造中的“随机化重连”。

在考虑网络特征的时候,使用两个特征来衡量网络: 特征路径长度和聚合系数。

特征路径长度(characteristic path length):在网络中,任选两个节点,连同这两个节点的最少边数,定义为这两个节点的路径长度,网络中所有节点对的路径长度的平均值,定义为网络的特征路径长度。这是网络的全局特征。

聚合系数(clustering coefficient):假设某个节点有k个边,则这k条边连接的节点之间最多可能存在的边的个数为k(k-1)/2,用实际存在的边数除以最多可能存在的边数得到的分数值,定义为这个节点的聚合系数。所有节点的聚合系数的均值定义为网络的聚合系数。聚合系数是网络的局部特征,反映了相邻两个人之间朋友圈子的重合度,即该节点的朋友之间也是朋友的程度。

我们可以发现规则网络具有很高的聚合系数,大世界(large world,意思是特征路径长度很大),其特征路径长度随着n(网络中节点的数量)线性增长,而随机网络聚合系数很小,小世界(small world,意思是特征路径长度小),其特征路径长度随着log(n)增长中说明,在从规则网络向随机网络转换的过程中,实际上特征路径长度和聚合系数都会下降,到变成随机网络的时候,减少到最少。但这并不是说大的聚合系数一定伴随着大的路径长度,而小的路径长度伴随着小的聚合系数,小世界网络就具有大的聚合系数,而特征路径长度很小。试验表明,少量的short cut的建立能够迅速减少特征路径长度,而聚合系数变化却不大,因为某一个short cut的建立,不仅影响到所连接的节点的特征路径长度,而且影响到他们邻居的路径长度,而对整个网络的聚合系数影响不大。这样,少量的short cut的建立就能使整个网络不知不觉地变成小世界网络。

实际的社会、生态、等网络都是小世界网络,在这样的系统里,信息传递速度快,并且少量改变几个连接,就可以剧烈地改变网络的性能,如对已存在的网络进行调整,如蜂窝电话网,改动很少几条线路,就可以显著提高性能。

2.小世界网络构成原则

WS小世界网络的构成原则为:从一个环状的规则网络开始,网络含有N个结点,每个结点向与它最近邻的K个结点连出K条边,并满足N>>K>>In(N)>>1。随后进行随机化重连,以概率p随机地重新连接网络中的每个边,即将边的一个端点保持不变,而另一个端点取为网络中随机选择的一个节点。其中规定,任意两个不同的节点之间至多只能有一条边,并且每一个节点都不能有边与自身相连。这样就会产生pNK/2条长程的边把一个结点和远处的结点联系起来。改变p值可以实现从规则网络(p=0)向随机网络(p=1)转变。

NW小世界网络的构成原则为:从一个环状的规则网络开始,网络含有N个结点,每个结点向与它最近邻的K个结点连出K条边,并满足N>>K>>In(N)>>1。随后进行随机化加边,以概率p在随机选取的一对节点之间加上一条边。其中,任意两个不同的节点之间至多只能有一条边,并且每一个节点都不能有边与自身相连。改变p值可以实现从最近邻耦合网络(p=0)向全局耦合网络(p=1)转变。在p足够小和N足够大时,NW小世界模型本质上等同于WS小世界模型。

3.MATLAB建模

建立一个初始节点数为20的NW网络。MATLAB程序如下:

function matrix = SW()

%By 201121250314

tic

N=20;m=4;% 初始化网络数据

p=0.1;% 以概率p=0.1在随机选取的一对结点之间加上一条边

matrix=sparse([],[],[],20,20,0);% 创建一个20*20的全0稀疏矩阵

%建立初始的环状的规则网络

%结点网络有N个节点

%每个结点向与它最近邻的m个结点连出边

%求出邻接矩阵

for i=m+1:N-m

for j=i-m:i+m

matrix(i,j)=1;

end

end

for i=1:m

for j=1:i+m

matrix(i,j)=1;

end

end

for i=N-m+1:N

for j=i-m:N

matrix(i,j)=1;

end

end

for i=1:m

for j=N-m+i:N

matrix(i,j)=1;

matrix(j,i)=1;

end

end

%逆时针的边重连,从节点到N-m-1

for i=1:N-m-1

for j=i+1:i+m

r=rand(1);% 随机选取一个数

if r<=p

unconect=find(matrix(i,:)==0);% 取出邻接矩阵中的非0元素位置

M=length(unconect);% 求出非0元素个数

r1=ceil(M*rand(1));% 正向取整

matrix(i,unconect(r1))=1;

matrix(unconect(r1),i)=1;% 连接这一对点

%matrix(i,j)=0; matrix(j,i)=0;% 加上这个是SW小世界网络

end

end

end

%逆时针的边重新连接,从节点N-m到N-1

for i=N-m+1:N-1

for j=[i+1:N 1:i- N+m]

r=rand(1);

if r<=p

unconect=find(matrix(i,:)==0);

r1=ceil(length(unconect)*rand(1));

matrix(i,unconect(r1))=1;

matrix(unconect(r1),i)=1;

%matrix(i,j)=0;matrix(j,i)=0;

end

end

end

%逆时针的边重新连接,节点N

for i=N

for j=1:m

r=rand(1);

if r<=p

unconect=find(matrix(i,:)==0);

r1=ceil(length(unconect)*rand(1));

matrix(i,unconect(r1))=1;

matrix(unconect(r1),i)=1;

matrix(i,j)=0;matrix(j,i)=0;

end

end

end

%恢复小世界网络的邻接矩阵

for m=1:N

matrix(m,m)=0;% 去掉自身节点形成的环

end

%存储邻接矩阵

%save data matrix;

toc %计算程序耗时

end

上述程序建立了一个NW小世界网络,求出了其邻接矩阵,用tu_plot()函数画出邻接矩阵的图,就得出了该小世界网络的图形。

function tu_plot(rel,control)

%由邻接矩阵画连接图,输入为邻接矩阵rel,必须为方阵;

%control为控制量,0表示画出的图为无向图,1表示有向图。默认值为0

r_size=size(rel);

%a=size(x)返回的是一个行向量,该行向量第一个元素是

%x的行数,第2个元素是x的列数

if nargin<2 %nargin是用来判断输入变量个数的函数

control=0; %输入变量小于2,即只有一个,就默认control为0

end

if r_size(1)~=r_size(2)%行数和列数不相等,不是方阵,不予处理

disp('Wrong Input! The input must be a square matrix!');

return;

end

len=r_size(1);

rho=10;%限制图尺寸的大小

r=2/1.05^len;%点的半径

theta=0:(2*pi/len):2*pi*(1-1/len);

[pointx,pointy]=pol2cart(theta',rho);

theta=0:pi/36:2*pi;

[tempx,tempy]=pol2cart(theta',r);

point=[pointx,pointy];

hold on

for i=1:len

temp=[tempx,tempy]+[point(i,1)*ones(length(tempx),1),point(i,2)*ones(length(tempx),1)]; plot(temp(:,1),temp(:,2),'r');

text(point(i,1)-0.3,point(i,2),num2str(i));%画点

end

for i=1:len

for j=1:len

if rel(i,j)

link_plot(point(i,:),point(j,:),r,control); %连接有关系的点

end

end

end

set(gca,'XLim',[-rho-r,rho+r],'YLim',[-rho-r,rho+r]);

axis off

function link_plot(point1,point2,r,control)%连接两点

temp=point2-point1;

if (~temp(1))&&(~temp(2))

return;%不画子回路

end

theta=cart2pol(temp(1),temp(2));

[point1_x,point1_y]=pol2cart(theta,r);

point_1=[point1_x,point1_y]+point1;

[point2_x,point2_y]=pol2cart(theta+(2*(thetapoint_2=[point2_x,point2_y]+point2;

if control

arrow(point_1,point_2);

else

plot([point_1(1),point_2(1)],[point_1(2),point_2(2)]);

end

得出NW小世界网络的图像如下:

4.分析 由于采用的是随机加边的模式,故,每次得到的图形细节都有所不同。程序中,如果加入去除随机加边的原边,即随机重连,就可以得到SW小世界网络。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top