WS小世界网络构建实验(Matlab版)

WS小世界网络构建实验(Matlab版)

一.构造原理思路

1.小世界模型3个参数,N为点的数目,K表示每个点左边K/2个邻居,右边K/2个邻居,一共K个邻居,P代表每条边以多少概率重连

2.首先给定这三个参数

3.画出以圆为轮廓的N个点

4.给出邻接矩阵A,将初始图像(每个点和邻居有边)的边存放在这里(先不画出来,就存在矩阵里,到时候边改过后再画)

5.修改边(其实是修改邻接矩阵)

6.按照邻接矩阵画出最后的图像

二.代码解析

首先设定模型的初始的三个参数

N=100 // 给定一百个点

K=4 // 左右各两个邻居,一共4个邻居

p=0.1 // 每条边以0.1的概率重连

angle=0:2*pi/N:2*pi-2*pi/N

// 这里右边一部分不能取2*pi,不然就取了N+1个数,因为区间两边都算在内

// 如果你右边取2pi,我们是围成一个圆,这个2pi的点其实就是0这个点

// 这里只是取了100个角度,分摊2*pi这个圆

x=100*cos(angle)

y=100*sin(angle) // X取半径为100,角度为angle的圆上点的横坐标,注意这是个数组

plot(x,y,'ro','MarkerEdgeColor','g','MarkerFaceColor','r','MarkerSize',8)

//画出这100个点

//‘ro’在绘图时,只画红色的圈,xi和yi的交点

//‘g’点的边缘取绿色

//‘r’点的内部取红色

//‘8’标记大小为8

hold on //图像保持住,画出点,等等还要画线

以上的操作,生成的效果图如下:

initia_ws_fig

生成邻接矩阵,用来存储节点之间的关系

A=zeros(N) // 生成一个N行N列的0矩阵赋值给A,当做初始化的邻接矩阵

for i=1:N

for j=i+1:i+k/2 // 每次取当前点,并且问候右边两个邻居,给他们握手(互相加1)其实本例就是j=i+1:1+2

			`jj=j`       // j赋值给jj

			`if j>N`

					 `jj=mod(j,N)`  // 如果j的右边邻居超过N,要从0开始找他的邻居

			`end`

  `A(i,jj)=1`     

 `A(jj,i)=1`      // 邻接矩阵表现成我和这个邻居各加1,其实是个对称矩阵,在操作右上角的时候顺带操作左下角

`end`

end

// 为什么要把j给jj? jj是处理过的j,因为j有时候会超过N,要转一圈

// 这个时候我们的基础图完成了,接下来开始随机重连

// 把图存放在邻接矩阵

// inf为无穷大,若该节点自我相连,则取值无穷(inf为无穷大量,-inf为无穷小量), 在matlab程序执行时,即使遇到了以0为除数的运算也不会终止程序的运行,而只会给出一个‘除0’警告,并将结果赋值为inf,继续执行

p1=rand(1,1) // 生成一个1行1列的数赋值给p1
if p1<p //p1小于之前设定的p,这里选择p=0.1,说明以0.1的概率,需要修改边
A(i,jj)=0

A(jj,i)=0
A(i,i)=inf

a=find(A(i,:)==0) //找到A中i行所有等于0的,就是没和i相连的点,a数组存放着所有和当前点没有连接的点

rand_data=randi([1,length(a)],1,1) //1行1列,随机数,随机找一列

jjj=a(rand_data)

A(i,jjj)=1

A(jjj,i)=1

A(i,i)=0 //从inf恢复

end

end

end

for i=1:N

for j=i+1:N //遍历邻接矩阵的右上角

if A(i,j)~=0 //如果点i与点j之间有边(邻接矩阵中A(i,j)为1)

plot([x(i),x(j)],[y[i],y[j]],'linewidth',1.2) //在(x(i),y(i)),(x(j),y(j))之前生成边,线宽1.2

hold on

end

end

end

axis equal // 使横轴,纵轴相等

hold off

完整代码如下:

clear
clc
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;
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

%WS小世界网络的代码
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);
        if p1<p
            A(i,jj)=0;A(jj,i)=0;A(i,i)=inf;a=find(A(i,:)==0);
            rand_data=randi([1,length(a)],1,1);
            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

结果展示

在这里插入图片描述

部分代码引用出处

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

  • 8
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
WS世界网络是一种基于小世界网络理论和社交网络分析方法构建的在线社交网络。它是一种典型的“朋友的朋友就是朋友”的网络结构,其中节点之间的联系主要通过社交关系连接。 WS世界网络的信息传播机制主要包括以下几个方面: 1. 社交影响力传播:在WS世界网络中,每个节点都有其社交影响力,即其在社交网络中的影响力大小。当某个节点在社交网络中发布信息时,其社交影响力会影响到其邻居节点,从而促进信息在社交网络中的传播。 2. 群体影响力传播:WS世界网络中存在着不同的社交群体,每个群体内的节点之间具有较强的联系。当某个节点在其所在的社交群体中发布信息时,其所在群体的影响力也会促进信息在社交网络中的传播。 3. 热点话题传播:在WS世界网络中,某些话题可能会引起较大的关注度,在社交网络中广泛传播。当某个节点发布与热点话题相关的信息时,其信息可能会更容易被其他节点注意到,从而促进信息在社交网络中的传播。 4. 算法优化传播:WS世界网络中的信息传播机制还可以通过算法的优化进行改进。例如,可以通过社交网络分析方法确定节点的社交影响力大小,从而更有针对性地推广信息;还可以通过社交群体发现算法识别出关键的社交群体,并向其宣传信息,从而更有效地促进信息在社交网络中的传播。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值