分析:

进行复杂网络相关研究的基础,就是要构建适当的网络模型。这次选择用Matlab构建一个WS小世界网络练练手。

首先,为了方便数据处理,网络模型我们用邻接矩阵的表示,这样虽然看上去不太直观,但是对于矩阵运算是很友好的。

小世界网络分为两种:NW小世界网络和WS小世界网络。它们的构造都基于一个初试的最近邻耦合网络A:也就是网络中每个节点都与左右相邻的各K/2个节点相连,其中参数K满足N>>K>>lnN>>1(N为网络节点数)。在此基础上,NW小世界网络通过对A进行随机化加边实现网络构造,而WS小世界网络则通过随机的边重连进行网络构造。

WS小世界网络的随机边重连方法也非常容易理解:以概率p对网络中每一条边进行重连,其中新诞生的边必须满足是原网络中没有的边,且节点不能与自己相连。

步骤:

1、为了方便计算,在Matlab中我们用邻接矩阵A来表示网络,A的每一个元素A[m, n]表示节点m和节点n是否相连。

2、构造最近邻耦合网络。明显A是一个对称矩阵,因此我们只需要计算矩阵A的上三角部分(也就是只考虑每个节点与之相连的序号更大的节点),明显对于序号为m的节点来说,从m+1到min(m + K/2, N)的节点都是与它相连的。但是只考虑这部分节点是不全面的,因为对于N=10,K=6的网络来说,2号节点不仅要连接顺时针方向的3、4、5号,也要连接逆时针方向的9、10、1号节点,明显9和10号也属于需要计算的邻接矩阵上三角部分,因此对于节点m而言,满足(m-K/2+N)%N > m的节点也要被考虑在内。可能到这一步大家会很难想到如何去构造这样一个矩阵,但是如果你看到了一个已知最近邻耦合矩阵的样子,一定会豁然开朗。

上图就是N=16,K=8情况下的最近邻耦合矩阵A,很明显的看到:上三角部分刚好为1元素刚好可以构成主对角线往上的前K/2条对角线以及倒数K/2条对角线,因此我们可以直接在零矩阵的基础上直接加上这K条全1的对角线即可。最后,再将矩阵作对称处理。

A = sparse(N, N);

for i = 1 : K/2

A = A + diag(ones(1,N-i),i);

A = A + diag(ones(1, i), N-i);

end

A = A + A';

3、进行随机边重连。

为了后续对生成网络的进一步分析,这里采用不同的p进行随机重连以试验效果。对于一个确定的概率p,我们可以遍历所有的节点,再以概率p确定是否要将它作为待重连边的起点,当然我们也可以给N个节点分配(0, 1)的随机数,再以p作为分界一次性确定所有起点。

StartVs = find(rand(1, N) < p); %通过概率p在N个顶点中随机选择需要重连的边起点

确定了起点后,我们要在该起点所有存在的边中随机选择一条作为旧边,当然,对于邻接矩阵而言,我们要做的是选择该边对应的终点序号;选择好旧终点后,我们也需要确定一个新边对应的新终点,这个终点既不能是起点自身,也不能是与起点已经建立连接的点(因为不允许重复边的出现)。确定后,我们只需要对相应的邻接矩阵值进行更新即可。

值得注意的是,实际的操作中有几点需要注意:确定了起点不一定代表一定可以进行边重连,因为不能够保证起点对应的存在的边,也不一定有起点尚未连接的剩余终点,所以为了避免死循环,我们一定要给随机寻找的过程设置考虑临界条件。对于随机选点的过程,我这里采用在[1, N]取随机数的方法完成,因此为了避免死循环,我设置了两个count分别对新旧终点的找寻进行计数,一旦超过计数值,则默认为不存在满足条件的顶点,直接放弃这次边重连。(之所以可以放弃是因为小世界网络对边重连的次数微动不敏感,并不影响后续的研究)

源码

% WS小世界网络

P = [0, 0.0001, 0.0005, 0.001, 0.005, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 1];

for p = 1 : length(P) %对每一个P进行随机边重连,以构造不同耦合程度的网络

This_A = A;

StartVs = find(rand(1, N) < p); %通过概率p在N个顶点中随机选择需要重连的边起点

for i = 1 : length(StartVs)

v1 = StartVs(i);

%随机找重连边的旧终点

v2_old = fix(rand * N + 1);

count_v2_old = N; %计数器,防止死循环

while v2_old == v1 || This_A(v1, v2_old) ~= 1

v2_old = fix(rand * N + 1);

count_v2_old = count_v2_old - 1;

if count_v2_old <= 0

break;

end

end

%随机找重连边的新终点

v2_new = fix(rand * N + 1);

count_v2_new = N; %计数器,防止死循环

while v2_new == v1 || This_A(v1, v2_new) ~= 0

v2_new = fix(rand * N + 1);

count_v2_new = count_v2_new - 1;

if count_v2_new <= 0

break;

end

end

%检查新旧终点是否符合条件,不符合则直接放弃本次重连

if v2_old == v1 || This_A(v1, v2_old) ~= 1 || v2_new == v1 || This_A(v1, v2_new) ~= 0

break;

end

%检查完毕,进行边重连

This_A(v1, v2_old) = 0;

This_A(v2_old, v1) = 0;

This_A(v1, v2_new) = 1;

This_A(v2_new, v1) = 1;

end

end

下面展示一下WS小世界网络边重连的效果。

最近邻耦合网络 N=16 K=8

​​​

p=0.8进行边重连后

​​

​​​​​

matlab ws小世界网络,【MATLAB】构建WS小世界网络相关推荐

  1. 机器学习之贝叶斯网络(概率流动的影响性、有效迹(active--trail)、网络的构建)

      前面学习了朴素贝叶斯的原理,并且利用朴素贝叶斯原理对西瓜数据集3.0数据集进行了分类:朴素贝叶斯(Naive Bayes)原理+编程实现拉普拉斯修正的朴素贝叶斯分类器,今天我们更进一步,来探讨一下 ...

  2. 小世界网络matlab程序,小世界网络简介及及matlab建模.doc

    小世界网络简介及及matlab建模.doc 小世界网络MATLAB建模1简介小世界网络存在于数学.物理学和社会学中,是一种数学图的模型.在这种图中大部份的结点不与彼此邻接,但大部份结点可以通过任一其它 ...

  3. 复杂网络多局域世界模型matlab算法实现

    3.12多局域世界模型 3.12.1 多局域世界模型的构造方法 (1) 以概率p增加一个拥有m0个节点,e0条边的局域世界,代码如下: (2)选定一个已存在的局域世界,以概率q将一个新节点,以给定概率 ...

  4. matlab plv,一种基于微状态的脑功能网络构建方法与流程

    本发明涉及脑功能网络研究技术领域,更具体而言,涉及一种基于微状态的脑功能网络构建方法. 背景技术: 复杂网络作为近年来一种新兴的数据分析方法,被应用于各个方面.由于大脑是一个十分复杂的系统,不同神经元 ...

  5. 复杂网络系统matlab,复杂网络matlab

    无标度网络matlab建模_其它_工作范文_实用文档.实用文档复杂系统无标度网络研究与建模 XXX 南京信息工程大学 XXXX 系,南京 210044 摘要:21 世纪是复杂性的世界,...... 3 ...

  6. 网络matlab程序_【Matlab】官网资源盘点

    相关链接: 一个单身男博士的业余生活:技多不压身,解数独也可撩妹 手把手 | 使用 MATLAB 图像处理与深度学习解算数独 基于Matlab的杨氏双缝干涉实验模拟 基于Matlab的二维正方晶体马德 ...

  7. 异构网络环境matlab搭建代码,异构接入matlab

    在满足用户服务质量的同时,最小化系统的总功 率,以达到减少信道辐射干扰,并用 MATLAB 仿真出算法的有效性. 关键词:小基站异构网络,5G 系统 第一章 绪论 随着...... 欢迎访问 Gree ...

  8. 【小知识】MATLAB的App Designer与GUIDE

    本文翻译自Loren Shure(2018年7月25日)的博客文章<The State of App Building in MATLAB>,原文地址:https://blogs.math ...

  9. 无线传感器网络matlab仿真 书,matlab仿真无线传感器

    所以综合上述我们在进行节点定位时要学会做到取长补短的方法, 5 无线传感器网络节点定位算法的 matlab 仿真 合各算法的优点而形成更好的技术,得以实现更好的定位...... 无线传感器网络的设计与 ...

最新文章

  1. [C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现
  2. VS2015配置并运行汇编(一步一步照图做)【vs2017的链接在最后】
  3. Advanced Sci | 打破生成式深度学习限制:低量数据下的“one-shot”药设计法
  4. 【java】java自带的java.util.logging.Logger日志功能
  5. Silverlight实用窍门系列:47.Silverlight中元素到元素的绑定,以及ObservableCollection和List的使用区别...
  6. 红包雨效果html,js+css实现红包雨效果
  7. Redis pub/sub机制在实际运用场景的理解(转载)
  8. 亚马逊云计算业务上半年营收210亿美元
  9. 腾讯员工又双叒叕涨工资了,平均月薪已达7.4万
  10. C#中类的修饰符,this关键字和static关键字
  11. 精品软件 推荐 Acme CAD Converter 全能 CAD 文件转换器和免费 DWG 查看器
  12. 荣耀路由器w831刷linux,华为荣耀路由器登录入口:荣耀路由器WS831设置指南【图解】...
  13. 观察 | 家长焦虑,教培着急,暑期“培训热”今年还会持续吗?
  14. 电脑录屏怎么录全屏?win10电脑如何录屏
  15. 随机事件和概率及概率的性质
  16. 新一届学生必备神器——讯飞腕式录音笔R1
  17. 一个事物两个方面的对比举例_作比较的句子大全简短-对比的句子什么比什么重要-什么和什么做比较的句子...
  18. 2020 年了,微信公众号还有前途吗?
  19. 软件测试30K*16(总包50W+)入职offer,一位字节跳动女测试开发的自述
  20. 常用IT系统架构及DevOps介绍

热门文章

  1. git hook分支_Git hook(钩子文件)机制
  2. 如何制作新毛桃装机u盘
  3. AutoCad 基础概念
  4. 机器人庄园作文_五年级作文之梦幻探险记作文五年级
  5. pytest(四)--测试用例setup和teardown
  6. .net Exception HResult属性值汇总
  7. 补充卡巴使用中问题的解决方案
  8. 奥运会历史上最另类排行榜
  9. python中如何调用类的方法
  10. 香港CN2线路是什么意思?