一、小世界网络www

分布满足幂律的无标度网络有一个奇特的性质——“小世界”特性,虽然WWW中的页面数已超过80亿,但平均来说,在WWW上只需点击19次超链接,就可从一个网页到达任一其它页面。“小世界”现象在社会学上也称为“六度分离”。所以小世界是一种现象,其主要描述了同等规模节点的随机网络,具有较短的平均路径长度和较大的聚类系数特征的网络模型。

考虑到现实中单独使用小世界网络上的疾病传播模型极少,大多为无标度网络模型。在此展示的小世界网络基本模型,主要来源于NetLogo模型库中的Small Worlds

其主要界面如下:

调整总节点个数后可以对模型进行运行:

在上述模型基础上进行改进(SEIR模型)

假设人与人间构成了 BA 网络,人类社会组织存在小世界性、无标度性;而个体间存在差异,结点的度服从幂律分布。由此将小世界和无标度网络模型相结合构建的模型。

基本界面及运行结果如下:

模型假设感染者不会死亡,只会传染其他易感染者或者被隔离并治愈。模型假设康复者体内含有抗体,不会再感染病毒;模型假设潜伏者没有被收治,感染者会被收治,被收治的感染者会一直占用医院隔离区域;模型假设被隔离的感染者无法再感染其他人;模型假设患者只能通过医院收治再被治愈。通过对比仿真绘图我们可以发现,人们如果不进行隔离而去接触许多人的话,被感染的人数峰值会大很多而且会提前,如果大家都减少活动范围,自己宅在家中,潜伏者和感染者那两条线就几乎消失了,这就是为什么说,在病毒蔓延之际,采用自我隔离的方法是控制疫情最有效的措施之一。

话不多说,上源码(在NetLogo运行中务必完整设计页面布局,滑块与按钮不能少,不然会提示)

turtles-own[stateinitial-xcorinitial-ycorexposed-startreceived?cured?
]globals[remain-hospital-segregation-area]to setupclear-allreset-tickscreate-turtles population[set shape "circle"set initial-xcor (random-xcor * 0.95)set initial-ycor (random-ycor * 0.95)setxy initial-xcor initial-ycorset received? 0become-susceptible]ask n-of initial-infectious-num turtles[become-exposed]set remain-hospital-segregation-area hospital-patient-segregation-area
endto goask turtles [move-turltesspreadtransform]received-and-curedtick
endto received-and-curedlet current-time ticksif current-time >= (receive-cure-response-time + latent-time)[ask n-of remain-hospital-segregation-area patches [if receive-rate >= random-float 1[ ;;receive-rate影响收治效率let agents turtles-hereif count agents > 0[ask one-of agents[if state = 2 and received? = 0 [if remain-hospital-segregation-area > 0 [set remain-hospital-segregation-area (remain-hospital-segregation-area - 1)set received? 1recovery]]]]]]let has-infected-not-cure turtles with [state = 2 and received? = 1 and cured? = 0]let num count has-infected-not-cureif num > 0 [ask has-infected-not-cure [recovery]]]
endto move-turltesifelse human-flow-range = 0[fd 0][if random-float 1 < 0.2[set heading random 360]ifelse (distancexy initial-xcor initial-ycor) < human-flow-range[fd 1][facexy initial-xcor initial-ycorfd 1]]
endto spreadlet touch-agents other turtles-hereif count touch-agents >= 1[if (state = 1 or state = 2) and received? = 0 [ask touch-agents with [state = 0][infect-turtles]]]
endto transformif state = 1[let current-ticks ticksif current-ticks - exposed-start >= latent-time[if transform-rate >= random-float 1 [become-infected]]]
endto recoveryif state = 2 and recovery-rate >= random-float 1 [become-recovered]
endto infect-turtlesif infection-rate >= random-float 1[become-exposed]
endto become-susceptibleset state 0set color green
endto become-exposedset state 1set color yellowset exposed-start ticks
endto become-infectedset state 2set color redset cured? 0
endto become-recoveredset state 3set color blueset cured? 1
end

二、无标度网络模型

无标度网络具有严重的异质性,其各节点之间的连接状况(度数)具有严重的不均匀分布性:大多数“普通”节点拥有很少的连接,而少数“热门”节点拥有极其多的连接,网络中的“热门”节点称作枢纽节点(Hub)。少数Hub点对无标度网络的运行起着主导的作用。从广义上说,无标度网络的无标度性是描述大量复杂系统整体上严重不均匀分布的一种内在性质。无标度网络的重要特征为:其节点度分布服从幂律分布。

传统的SIR模型与无标度网络模型进行结合,未加改进

将感染者、疑似感染者和康复者三者的关系进行了仿真与可视化。

由运行结果我们可以明显的看出,类似于我们的新冠肺炎疫情:随着时间的增长,感染者在逐步增多,但是从出现感染者时我们便会人为干预疾病的传播,这时会有少数的康复者,那么当感染者到峰值以后康复者的数量也在逐步增加,最终感染者数量趋近于0,而康复者数量在逐渐增多:而当出现第一例感染者时,与之相关的就会有大多数疑似感染者,而当我们人为干预后,患病率逐步下降,所以疑似感染者也在逐步下降

源码如下:

turtles-own
[infected?resistant?virus-check-timer
]to setupclear-allset-default-shape turtles "circle"make-node nobodymake-node turtle 0reset-ticks
endto goask links [ set color gray ]make-node find-partnertickif layout? [ layout ]
endto setup2ask turtles [set infected? falseset resistant? false]ask n-of initial-outbreak-size turtles[ become-infected ]reset-ticks
endto set-all-susceptibleask turtles [set color blue]
endto remove-infectedask turtles with [color = red][set color blue]
endto spreadif all? turtles [not infected?][ stop ]ask turtles[set virus-check-timer virus-check-timer + 1if virus-check-timer >= virus-check-frequency[ set virus-check-timer 0 ]]spread-virusdo-virus-checkstick
endto make-node [old-node]create-turtles 1[set color blueif old-node != nobody[ create-link-with old-node [ set color green ]move-to old-nodefd 8]]
endto-report find-partnerreport [one-of both-ends] of one-of links
endto resize-nodesifelse all? turtles [size <= 1][ask turtles [ set size sqrt count link-neighbors ]][ask turtles [ set size 1 ]]
endto layoutrepeat 3 [let factor sqrt count turtleslayout-spring turtles links (1 / factor) (7 / factor) (1 / factor)display]let x-offset max [xcor] of turtles + min [xcor] of turtleslet y-offset max [ycor] of turtles + min [ycor] of turtlesset x-offset limit-magnitude x-offset 0.1set y-offset limit-magnitude y-offset 0.1ask turtles [ setxy (xcor - x-offset / 2) (ycor - y-offset / 2) ]
endto-report limit-magnitude [number limit]if number > limit [ report limit ]if number < (- limit) [ report (- limit) ]report number
endto become-infectedset infected? trueset resistant? falseset color red
endto become-susceptibleset infected? falseset resistant? falseset color blue
endto become-resistantset infected? falseset resistant? trueset color grayask my-links [ set color gray - 2 ]
endto spread-virusask turtles with [ infected? ][ ask link-neighbors with [not resistant?][ if random-float 100 < virus-spread-chance[ become-infected ] ] ]
endto do-virus-checksask turtles with [infected? and virus-check-timer = 0][if random 100 < recovery-chance[ifelse random 100 < gain-resistance-chance[ become-resistant ][ become-susceptible ]]]
end

三、随机网模型

与普通网络图比较,随机网络具有以下几个特点:

  1. 随机网络的箭线和节点不一定都能实现,实现的可能性取决于节点的类型和箭线的概率系数;

  2. 随机网络中各项活动的时间可以是常数,也可以是服从某种概率分布的密度函数,更具有不确定性;

  3. 随机网络中可以有循环回路,表示节点或活动可以重复出现;

  4. 随机网络中的两个中间节点之间可以有一条以上箭线;

  5. 随机网络中可以有多个目标,每个目标反映一个具体的结果,即可以有多个起点或终点

传统的随机网络(如ER模型),尽管连接是随机设置的,但大部分节点的连接数目会大致相同,即节点的分布方式遵循钟形的泊松分布,有一个特征性的“平均数”。连接数目比平均数高许多或低许多的节点都极少,随着连接数的增大,其概率呈指数式迅速递减。故随机网络亦称指数网络。随机图中一个有趣的性质是,当节点的平均度数达到1的时候,网络中就会出现一个明显的巨大部分(giant component)本模型主要来源于NetLogo模型库中的Giant Component

假设一个团体中有很多的个体,之后两个人随机的认识并且成为朋友,那么随着时间的推移,这个团体会变成什么样子呢?该模型将此情景很好的模拟了出来。

左下角表示度中心性,也就是每个节点和其他多少个节点直接相连,可以理解为一个人交到了多少个好朋友。统计结果显示,当度中心度到达1左右的时候,也就是每个人都有一个好朋友之后,网络中最大的成分会爆炸性增长,也就是说认识朋友的圈子会快速的增加。如果在中途统计网络中所有人员交朋友的数量,我们会发现这个数量实际上是符合正态分布的。

而基于随机网模型的疾病扩散是以随机分布的方式,随机结合,但是同样也是以一个人为基准,其余随机连接的仿真模型。

随着周数的增加,感染者的人数在不断增加,但是随着人为干预的效果逐渐增加,治愈的和有免疫力的人数也在不断增加,类似于生物学中的拮抗作用,此时感染者的人数就开始下降了,最终趋近于0,健康的人和有免疫力的人都在不断增加,疾病传播得到有效的抑制。与其他网络模型不同的是,我们可以看到随机网的是基于一个人,以此为基准随机产生的关系进行传播 。

源码源码!在这里!

turtles-own[ sick?remaining-immunitysick-timeage ]globals[ %infected%immunelifespanchance-reproducecarrying-capacityimmunity-duration ]to setupclear-allsetup-constantssetup-turtlesupdate-global-variablesupdate-displayreset-ticks
endto setup-turtlescreate-turtles number-people[ setxy random-xcor random-ycorset age random lifespanset sick-time 0set remaining-immunity 0set size 1.5get-healthy ]ask n-of 10 turtles[ get-sick ]
endto get-sickset sick? trueset remaining-immunity 0
endto get-healthyset sick? falseset remaining-immunity 0set sick-time 0
endto become-immuneset sick? falseset sick-time 0set remaining-immunity immunity-durationask my-links [ die ]
endto setup-constantsset lifespan 50 * 52set carrying-capacity 300set chance-reproduce 1set immunity-duration 52
endto goask turtles [get-oldermoveif sick? [ recover-or-die ]ifelse sick? [ infect ] [ reproduce ]]update-global-variablesupdate-displaytick
endto update-global-variablesif count turtles > 0[ set %infected (count turtles with [ sick? ] / count turtles) * 100set %immune (count turtles with [ immune? ] / count turtles) * 100 ]
endto update-displayask turtles[ if shape != turtle-shape [ set shape turtle-shape ]set label ifelse-value show-age? [ floor (age / 52) ] [ "" ]set color ifelse-value sick? [ red ] [ ifelse-value immune? [ grey ] [ green ] ] ]stop-inspecting-dead-agentsif watch-a-person? and subject = nobody[ watch one-of turtles with [ not hidden? ]clear-drawingask subject [ pen-down ]inspect subject ]if not watch-a-person? and subject != nobody[ stop-inspecting subjectask subject[ pen-upask my-links [ die ] ]clear-drawingreset-perspective ]
endto get-olderset age age + 1if age > lifespan [ die ]if immune? [ set remaining-immunity remaining-immunity - 1 ]if sick? [ set sick-time sick-time + 1 ]
endto movert random 100lt random 100fd 1
endto infectask other turtles-here with [ not sick? and not immune? ][ if random-float 100 < infectiousness[ get-sickif self = subject[ create-link-with myself[ set color redset thickness .3 ] ] ] ]
endto recover-or-dieif sick-time > duration[ ifelse random-float 100 < chance-recover[ become-immune ][ die ] ]
endto reproduceif count turtles < carrying-capacity and random-float 100 < chance-reproduce[ hatch 1[ set age 1lt 45 fd 1pen-upget-healthy ] ]
endto-report immune?report remaining-immunity > 0
endto startupsetup-constants
end

写在最后

本程序使用NetLogo6.2.0版本,可以从 NetLogo 6.2.0下载地址 下载

超全NetLogo多主体仿真建模(小世界WWW+无标度网络+随机网)内含源码+界面设计+程序分析相关推荐

  1. 复杂网络作业1——随机生成三种网络(小世界、无标度、ER随机)

    主要是调用调用networkx和random库(可以直接构建网络.然后利用random随机生成相应数据) plt.show()可以生成相应的图片 小世界网络中要注意邻接个数必须是偶数 版本1:直接生成 ...

  2. 基于小世界网络/无标度网络/复杂网络进行SEIR病毒传播仿真研究

    在老师的指导下,完成了一次小小研究:学者观点 | 从复杂网络理论分析为何这场战"疫"如此艰苦,著作权为天津大学管理与经济学部所有,如需引用请事先联系 PiperLiu@qq.com ...

  3. 无标度网络/幂律分布、小世界网络

    无标度网络.幂律分布这两个概念都是指复杂网络中的度 分布不均匀 通俗点说就是80/20原则,枢纽节点很少,但是却连接着大量的节点,而大量的非枢纽节点却只有不多的几个连接. 小世界网络: 虽然有50个节 ...

  4. 复杂网络之无标度网络与小世界网络生成程序

    近日需要用到无标度网络与小世界网络,早上用matlab写了这两种网络的matlab程序,放在这,有用者可以拿去用,请自己验证正确性后使用. 共有三个文件,swnet.m 是sw小世界模型        ...

  5. 基于小程序开发的宝可梦图鉴小程序源码课程设计毕业设计

    源码地址:基于小程序开发的宝可梦图鉴小程序源码课程设计毕业设计 宝可梦是一款备受喜爱的游戏,其丰富的剧情和可爱的角色深受玩家们的喜欢.而对于宝可梦爱好者来说,一款好的宝可梦图鉴是必不可少的.今天,我来 ...

  6. 【GPS仿真】基于matlab GPS信号捕获跟踪【含Matlab源码 2126期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[GPS仿真]基于matlab GPS信号捕获跟踪[含Matlab源码 2126期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式 ...

  7. 微信读书登陆界面java_(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好...

    转载地址:(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 一.环境搭建 相关环境软件:JDK1 ...

  8. 最新Xpay全开源无授权免签约支付系统源码V3.1版本

    正文: 最新Xpay全开源无授权免签约支付系统源码V3.1版本,系统有非常详细的安装文档,程序是属于JAVA开发的,其它的就没什么介绍的了,有兴趣的自行去体验吧. 程序: wwuth.lanzouy. ...

  9. 基于OpenGL的雷达P显的系统设计与仿真 PPI_雷达仿真_雷达模拟器_雷达目标_雷达ppi_PPI显示器_源码

    基于OpenGL 开发的雷达P显 可以设置各种参数 源码下载链接 PPI_雷达仿真_雷达模拟器_雷达目标_雷达ppi_PPI显示器_源码-C++文档类资源-CSDN下载

  10. (微信小程序)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好

    转载地址:(微信小程序)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 作者:Happy王子乐 个人网站(整理 ...

最新文章

  1. thinkpad x230评测_全新改变超长续航 ThinkPad X230评测
  2. Extjs不错的博客
  3. 云计算管理工具:根植热土
  4. 软件项目管理案例教程(第三版)课后习题及答案
  5. android 开门动画,Android之高仿微信“开门动画”(六)
  6. Python入门的学习心得
  7. listing directory /
  8. 【OpenCV 例程300篇】48. 直方图处理之彩色直方图匹配
  9. 编译原理(龙书第二版)--怎么求FOLLOW集
  10. 呼叫中心中间件(mod_cti基于FreeSWITCH)-排队(ACD 话务分配)接口
  11. [考研政治]唯物史观-xp
  12. 视频编解码——视频编解码器工作原理
  13. 第22届中国国际地面材料及铺装技术展览会
  14. PID闭环控制算法解析(最透彻)
  15. 开源的.NET系统推荐
  16. 2022年团体程序设计天梯赛初体验【个人题解L1-L2】
  17. 常用CAD快捷键命令大全
  18. Loopring(路印协议)——去中心化交易协议真的有未来吗?
  19. STM32驱动HC-SR04超声波模块
  20. Eclipse美(黑)化攻略

热门文章

  1. 企业网络安全区域划分的原则和方法
  2. 半导体存储器件原理概述
  3. 泪目了,一位轮椅上的清华博士师兄
  4. IOI2015部分题解
  5. 10个程序员实用但偏执的 Java 编程技巧
  6. 13.6.1 PDF 偏执狂
  7. 【无标题】PHP小皮中出现拒绝访问(使用密码:YES)
  8. c语言字符串求n的阶乘,C语言求n的阶乘(n!)
  9. Dragdealer拖动组件
  10. ms sqlserver sap ase 数据库server-client通讯协议 TDS