小世界网络中的SIRS传染病模型实现
来源:互联网 发布:电脑找不到windows 编辑:程序博客网 时间:2024/05/20 20:19
小世界网络
小世界网络模型是Watts和Strogatz于1998提出的一种描述现实社交关系网络的模型,该模型体现了现实社交网络中同质性和弱联系,使得“六度分隔”现象有了理论依据,解释了为什么两个陌生人之间通过少量的中间人就可以建立起联系。同质性意味着现实生活中存在大量的强三元闭包这类的结构,也就是彼此熟悉的人之间亲近的关系;弱联系意味着在除去每天接触的关系亲密的人之外,每个人的社交网络中还包括着一些距离较远的朋友,这些朋友在实现六度分隔理论中起到了至关重要的作用,这也就是小世界网络成功的地方。
SIRS传染病模型
该模型将动物状态分为三个类别:易感状态(S)、传染状态(I)、移出状态(R),易感状态的动物在与感染状态的动物接触过程中会以一定概率被传染状态的动物传染而患病;传染状态的动物可以一定的概率将疾病传染给接触到的动物;传染状态的动物在经历一段时间之后得到痊愈并且不再会收到感染,也不会对其他动物造成威胁,即相当于从整体中被移出的状态;在一段时间过后,移出状态的个体会再复原成为易感状态。在初始时一定比例的动物处于感染状态,剩余动物处于易受感染状态。
MATLAB实现
具体实现步骤如下:
首先建立小世界网络,假定网络中共有5000个节点,每个人和与其相邻的2k=6个的人之间形成联系,之后以0.1的概率消除某些边并随机建立数量相等的远程边,在这个过程中保证不形成重复的边和自环。
%create the small world network%initial parametern = 5000;k = 3;p = 0.1;mat = zeros(n);%initial the circlefor i=1:n for j=i+1:i+k jj = j; if jj>n jj = mod(jj,n); end mat(i,jj)=1;mat(jj,i)=1; endend%create weak connectionfor i=1:n for j=i+1:i+k jj = j; if jj>n jj = mod(jj,n); end p1 = rand(1); if p1<p mat(i,jj)=0;mat(jj,i)=0; mat(i,i) = inf; a = find(mat(i,:)==0); r = randi(length(a)); jjj = a(r); mat(i,jjj)=1;mat(jjj,i)=1; mat(i,i)=0; end endend
这段代码实现了上面建立的小世界网络的可视化,然而结果并不是很好看orz
xa = zeros(n*n,1);ya = zeros(n*n,1);k=1;for i=1:n for j=1:n if mat(i,j)==1 xa(k)=i; ya(k)=j; k=k+1; end endendscatter(xa,ya)
接下来在该小世界网络中运行传染病模型,由于构建的网络中节点数量较多,所以运行速度会非常慢。具体实现过程中,先随机选择了10%的节点使其感染疾病,之后在感染的过程中,对每个易感状态的个体计算其相邻节点中感染疾病的节点与全部节点的比例来作为这个个体被感染的概率。最后将每个时刻全部节点中感染疾病的比例进行了绘图。
state = zeros(n,1);sus = 1;infe = 2;recov = 3;t = zeros(n,1);ti = 4;tr = 5;to = ti+tr;inip = 0.1;%initialize the infectionfor i=1:n r = rand(1); if r<inip state(i) = infe; t(i) = 1; else state(i) = sus; t(i) = 0; endend%begin infectionperiod = 1000;rate = zeros(period,1);for k=1:period cnt = 0; for i=1:n if t(i)==0 neigh = find(mat(i,:)==1); neighn = length(neigh); neighi = length(find(state(neigh)==infe)); prob = neighi/neighn; r = rand(1); if r<prob t(i) = 1; else t(i) = 0; end elseif t(i)>=1 && t(i)<to t(i) = t(i)+1; elseif t(i)==to t(i) = 0; end if t(i) == 0 state(i) = sus; elseif t(i)>=1 && t(i)<=ti state(i) = infe; cnt=cnt+1; else state(i) = recov; end end rate(k) = cnt/n;endfor i=1:period plot(1:1:k, rate(1:k)); hold on end
模型运行结果
仿照了课本上的对该模型的探究,我对远程边形成概率p=0.01,0.2,0.5这个参数进行了探究,分别运行动态仿真结果如下:
在p=0.01时的运行结果:
在p=0.2时的运行结果:
在p=0.5时的运行结果:
可以看到与课本上的结果也是相符合的,在远程边数量较少的时候,传染病的传播呈现在小区域范围内局部震荡的现象;而当远程边数量较多时,疾病在传播呈现周期性震荡的特征。
- 小世界网络中的SIRS传染病模型实现
- WS小世界网络模型构造算法
- SIS传染病模型的C语言实现
- 004C语言 实现小世界网络
- 【美赛·算法】SEIR 传染病模型 及其实现
- 浅谈小世界网络
- 小世界网络
- 传染病?!
- 传染病模型系统动力学VENSIM模拟
- C 传染病模型(基础版)
- 小世界网络 Small-world networks
- 小世界网络的集体动力学
- python绘制ws小世界网络图形
- 随机网络-小世界网络(小世界网络的协同动力学)概述-(2)
- Web服务世界中的模型驱动体系结构
- 图论 二分图 小世界网络 语义网络
- 【复杂网络学习笔记】3:完整的小世界网络
- 小世界
- [Unity]已知圆点和射线 求射线与圆相交的一点
- Mac中打开命令行终端的方法
- 运算符重载
- Java实现-最大子数组差
- Cocos2d入门
- 小世界网络中的SIRS传染病模型实现
- Ubuntu下安装arm-linux-gcc-4.4.3.tar.gz (交叉编译环境)
- JSON与XML的区别比较
- 约瑟夫环问题
- 名企笔试:网易游戏雷火盘古2017实习生招聘笔试题(字符串编码)
- java运行环境总结
- 51nod 1479 小Y的数论题
- java冒泡排序
- File类文件操作全解