用Netlogo实现病毒传播对经济的影响分析

  • 一、基本考虑
  • 二、涉及要素
  • 三、计算思路
  • 四、程序设计
    • (一)界面设计
    • (二)具体代码
  • 五、结果分析
    • (一)“栅栏”模式
    • (二)“放羊”模式
  • 六、后续改进思路

一、基本考虑

新冠病毒的传播,已经形成了全球大流行。而针对新冠病毒的防治,各国政府的态度和策略在一开始区别是很大的。有些是举全国之力、以雷霆万钧之势抗击疫情,而有些则由于担忧大规模的隔离和禁足对经济产生的不良影响,一直犹豫不决。为了更直观的展示不同策略对经济可能产生的影响,需要定量化研究新冠疫情下不同策略的具体效果。

针对上面的需求,我们利用netlogo对相关问题进行建模。具体来说,我们考虑两种策略。一种是当新冠发生后,采取隔离和全员禁足的方式,我们称之为“栅栏”模式;另一种是不做隔离和禁足,人们还是按照之前的方式进行生活,我们称之为“放羊”模式。

二、涉及要素

具体在病毒传播方面,考虑的因素有以下几点:

  • 1.初始人数:可设置的范围是0~10000,模拟一个区域、城市或国家的全部人口;
  • 2.初始感染率:这里是一个假设的值,即程序开始运行时,城市中已感染的人数;(我们在这里建设为1%)
  • 3.感染率(无防护措施):这个值用来控制健康人员在没有任何防护措施下,与感染者接触后患病的几率;(我们在这里假设为80%)
  • 4.感染率(有防护措施):这个值用来控制健康人员在没有任何防护措施下,与感染者接触后患病的几率;(我们在这里假设为40%)
  • 5.死亡率:这是每天的死亡人数,占所有的患病人的比率;(我们在这里假设为千分之4)
  • 6.平均症状出现时间:这指的是每个感染者从感染开始到出现明显症状的时间;(我们在这里假设为7天)
  • 7.平均治愈时间:这个值指的是每个感染者从进入医院开始,到治愈出院的时间;(我们在这里假设为20天)

在与经济相关方面,我们考虑两个因素:

  • 1.平均每日GDP:这个值指的是正常活动的人,每天创造的GDP价值;(我们在这里假设为2)
  • 2.平均治疗花销:这个值指的是接受治疗的人,每天的花费;(我们在这里假设为9)

三、计算思路

在病毒传播方面,采用简化的模型,人与人之间的接触是随机事件,当感染者与正常人接触后,根据设定的感染率来判定正常人是否受到感染;感染者在感染超过7天后,被放倒医院内,医院里的人员不再互相感染;每天按照死亡率随机的从感染者中选择死亡的人员;在医院治愈的病人,超过20天后认为治愈出院,治愈后的人默认具备免疫能力,不再感染。

在经济方面,正常活动的人员每天按照设定的“平均每日GDP”产生GDP,并计入全部的GDP中;在医院救治的人员每天按照“平均治疗花销”消费资金,并计入全部治疗花销中。

在上面假设的“栅栏”模式中,我们的agent在有病患期间都不活动,即不产生任何GDP,在确认没有病患后继续活动;而“放羊”模式则是在整个期间人员都不停止活动,因此会一直产生GDP。
我们的目的就是比照在同样运行半年时间后,“栅栏”模式创造的价值(即总GDP减去总花销),与“放羊”模式创造的价值两者到底哪个更高。

四、程序设计

我们的程序使用的是最新的Netlogo 6.1.1,可以从以下地址下载:
http://ccl.northwestern.edu/netlogo/download.shtml
使用netlogo进行开发其实还是很简单的,软件本身就给提供了丰富的模型库示例可以参考,同时社区中还有很多做的很棒的资源。但netlogo语言和我们用的C#、Python都不太一样,所以如果没有其他语言基础的,相对还更好上手一些。关于netlogo的学习,推荐看它官方提供的用户手册,个人感觉就很好用了。

(一)界面设计

我们的程序界面如下:

其中左面是我们前面提到的,在程序运行中相关的各种变量。中间是我们agent运行的窗口,右面是两个统计窗口。
Netlogo的界面搭建还是很简单的,它提供了成型的控件,选择好后直接添加即可。这里要注意的是,控件中定义到的变量是可以直接在程序中使用的,所以一定不要用中文,否则后面写代码就要出问题了。
以我们其中的一个参数为例:

这是一个滑块变量,可以在程序中随时调整取值,看程序也可以看出,这个是当做一个全局变量直接使用的。
再比如下面这个统计框的设置:

这是在程序运行中,对相关变量进行统计的,可以自己定义画笔,按照程序的步长进行更新,按照什么条件统计哪些数据需要在更新命令中明确说明。

(二)具体代码

在代码中需要注意的有以下几点:

  • 一是程序的运行需要有初始的setup和循环运行的go,这是一般的netlogo程序都包含的两部分,通过设定响应的按钮来实现,在代码中要具体写程序逻辑;
  • 二是程序中的函数都是以“to 函数名”开始,以“end”来结尾;
  • 三是netlogo中最重要的就是“海龟”和“瓦片”两个概念,可以简单理解海龟就是agent,瓦片就是环境;对于这两个对象在netlogo中的具体相关参数和函数,可以自行查询手册;
  • 四是除了系统给定的参数外,我们还可以自行设定参数,例如海龟的相关参数,使用“turtles-own[]”来进行设定,全局变量使用“globals[]”来设定;同时还可以自定义不同的瓦片区域,利用瓦片的坐标范围来定义即可;
  • 五是在撰写代码中,还有一些需要注意的小地方,比如循环turtles时,die后面的不会执行;move-to是把某个turtles移动到指定的某个瓦片区域中;运算符和变量直接一定要用空格;统计选取等带条件时一定要用关键字with等。

具体代码较长,在这就不贴了,如果需要可以联系我!

五、结果分析

根据我们程序的运行后,相关结果如下所示:

(一)“栅栏”模式


可以看到,在“栅栏”模式下,总的患病人数大概在250~350之间;GDP的变化在隔离期内是没有增长的,总的GDP大致在2570000左右,而治疗费用的花销不到整个GDP的10%。

(二)“放羊”模式


在“放羊”模式下,总的患病人数达到了惊人的6000多人,占总人口的60%还多;GDP是一直在增长的,总量在2960000左右,而治疗花销的费用接近GDP总量的50%,也就是说产生的GDP有一半都用在治疗上了。
通过上述实验可以明显看出,虽然“放羊”模式产生的GDP总量的确略高于“栅栏”模式,但扣除花销后,产生的社会价值则远远低于“栅栏”模式。更不用说“放羊”模式中远远高于“栅栏”模式中的死亡人数了,毕竟生命的价值是绝不能用GDP来衡量的。

六、后续改进思路

虽然程序体现出了两种模式对经济影响的巨大差别。但其中的模型还有很多需要商榷的地方。
例如 经济模型的缺失(本程序中其实是没有经济模型的,特别是疫情对于不同产业结构、行业特点等经济影响的仿真),传播模型的粗陋(本程序中agent采用的是完全随机游走,这和实际生活中人的活动也是不一致的,这就导致很难模拟出社区传播这一特性),以及 二次传播的不合理(我们程序中默认的是治愈后不会再感染,而新冠对已治愈者是存在二次感染的)等等。这些都是后续需要持续改进的地方。

请从我的Github上进行代码下载https://github.com/samurasun/netlogo

用Netlogo实现病毒传播对经济的影响分析相关推荐

  1. 货币政策的目标、工具、中性利率、货币乘数及对宏观经济的影响分析

    货币政策分析 什么是货币 根据流动性的不同,可将货币划分为狭义货币和广义货币. 狭义的货币是流动性最好的货币形式,包括流动中的纸币和硬币作用.非银行机构发行的旅行支票,商业银行中的活期存款和其他可签发 ...

  2. python和netlogo软件模拟病毒传播仿真模型(一)

    目前国内在网络舆情仿真建模中所使用的仿真平台主要有 Netlogo.Anylogic.Matlab.Vensim 等,netlogo软件是一款比较通用的. 但是他是由logo语言构成,语言逻辑很让人抓 ...

  3. 病毒营销增长策略:Facebook和 Airbnb的5个病毒传播方法

    爆发式增长是指业务像指数一样飙升,创业和创新届经常称其为指数增长. 什么是指数增长? 为什么指数增长成为创业与创新业界的流行语?类似于「独角兽」. 指数增长的定义是在给定数量的相等时间间隔内的变化率. ...

  4. 点成分享| 空气卫生的重要性和病毒传播方式

    引言 本文为您从空气传播的感染途径角度出发,介绍净化空气的几种方法(重力沉降.过滤.加热.紫外杀菌),通过比较几种方法的使用场景,论证过滤和紫外线在空气净化的优势和可行性. 1 为什么空气卫生很重要? ...

  5. 基于轨迹数据的人口流向分析技术,精准病毒传播追踪

    2019年12月,我国出现了新型冠状病毒引发的多起病例,全国逐渐开启疫情防疫监控,严重地区甚至实施封闭管理.而此次疫情正好恰逢春运期间,大规模的跨地区人口流动会助长病毒传播,甚至传染到全球范围.因此, ...

  6. 文献记录(part52)--基于度相关性的病毒传播模型及其分析

    学习笔记,仅供参考,有错必纠 关键词:互联网拓扑:度相关性:病毒传播:DPR 算法:SIS-DVDI: 基于度相关性的病毒传播模型及其分析 摘要 近年来网络病毒传播已对网络安全构成严重威胁 . 研究表 ...

  7. 灰色产业链成病毒传播最大渠道 流量生意或迎来最后的疯狂

    咳咳 嗯 有段时间的 最近吗 都放暑假了 没有什么好更新的 最近我们都在关心2020微软的更新问题 对我们的这类人还是有些要求的 我也不想到时候大家再跌跟头 吃亏什么的 今天就讲解一下吧 声明:我暑假 ...

  8. 病毒传播建模SEIR与网络传播

    病毒传播建模SEIR与网络传播 转眼间,大三上半学期就过完了.趁着刚放假没几天,赶紧把在学校中的作业上传 一下.在网络空间安全数学基础中,老师讲了传播模型.这篇文章中,首先列出了老 师在传播模型一章中 ...

  9. 基于随机方法的新型肺炎病毒传播模型

    原来这篇文章我写在知乎上,但不知为什么,在搜索引擎上搜索不到,再搬回来. https://zhuanlan.zhihu.com/p/104332809 以前并没有接触过传染病模型,所以根据自己的理解, ...

  10. 局域网网中的病毒传播

    一.局域网病毒入侵原理及现象 一般来说,计算机网络的基本构成包括网络服务器和网络节点站(包括有盘工作站.无盘工作站和远程工作站).计算机病毒一般首先通过各种途径进入到有盘工作站,也就进入网络,然后开始 ...

最新文章

  1. ubuntu 下利用ndiswrapper安装无线网卡驱动
  2. android端与服务端差别,Android客户端和服务器端编程
  3. 环路的产生及RIP防环机制
  4. Java接口long类型精度丢失,解决前后端交互Long类型精度丢失问题
  5. 信息系统项目管理师论文_「高项论文」谨防信息系统项目管理师论文12个写作丢分点...
  6. 看一次广告听30分钟歌 你愿意为QQ音乐新功能买单吗?
  7. NSF和NSR技术原理
  8. Docker入门者手册
  9. NWT与HHTH两个公司的对比
  10. Listary Pro - 能极大幅度提高你 Windows 文件浏览与搜索速度效率的「超级神器」...
  11. 微信小程序体验版无法调用接口
  12. python字符串去掉最后的逗号_拼接字符串时去掉最后一个多余逗号
  13. FastAPI 是什么?
  14. ⌨RK61键盘使用方法
  15. Tesla Model S的设计失误
  16. python 日志输出为json格式文件_Py修行路 python基础 (二十一)logging日志模块 json序列化 正则表达式(re)...
  17. Esp32-diy桌面可交互机器人
  18. mysql association_Mybatis的一对多(collection)和一对一(association)查询
  19. [shell脚本] realtek平台 Mifi初始化时候,初始化wifi的黑白名单的sh脚本
  20. SpringBoot实现百度文库文档上传,通俗易懂适合萌新

热门文章

  1. 他是年薪几十万的微软工程师,现在却在成都街头收破烂......
  2. 服务器运行速度测试方法,服务器如何测试运行速度
  3. 什么是全文搜索引擎?
  4. WinCC Function TrendControl趋势图
  5. 报警c语言程序,PIC单片机警报声C程序
  6. why-not 和 why 问题简介
  7. 东芝自助结账设备市场份额增长近50%
  8. 通俗解释什么是NFT,NFT到底是什么
  9. 三层交换机划分VLAN
  10. 【谷歌地图--PlacesSDK集成】