瘟疫模拟——技术预演与方案设计

前期的资料调研

新冠病毒受体是血管紧张转化酶2,通过粘膜细胞传播(嘴唇、眼皮、鼻腔、口腔)。
在密切接触的人群之中,通过喷嚏、咳嗽、平静的说话等方式传播。大部分感染者七天内发病,病毒的平均潜伏期是5.2天。
新冠肺炎病毒的传播途径主要为飞沫传播,碰触到人类粘膜,比如眼睛,嘴唇,鼻孔等部位进行感染,而戴口罩可以有效防止飞沫传播,虽然不同口罩的防护作用不同,但实际上根据飞沫病毒的直径大小,其实各种口罩都能够防住80%以上的飞沫,因此戴口罩,无论是哪一种口罩,远比不戴口罩要强得多,N95/KN95是最好的,可以隔绝95%以上。
洗手很重要,病毒在玻璃、塑料、金属上可以存活两天,而在你的手触摸的时候会传播到你的手上,再从你的手传染给自己,所以洗手,洗久一点。
湖北省早期病死率高达44.4%(医疗资源紧张,重症才确诊),其他地区病死率1.1%(医疗资源充足)。
R0在2-3之间,R0,基本传染数,意味着不在干预的情况下,感染者传染的平均人数。
人类的赞歌就是勇气的赞歌,赞给那些还在认真工作的人们,希望2020年,我们还有更多的勇气。

设计方案

实验主题: 学校开学,学生返校,如果在返校的路上,有同学不幸感染了新冠病毒,学校和学生采取不同的措施,会在返校后校园里面产生怎么样的影响(即最终会有多少人会感染)?

采取措施细节: 是否戴口罩以及戴口罩的防护效果、控制返校人数为多少人、出行限制情况即是否允许出门或者一天允许多少人出门;后续可能再去添加的变量:隔离情况、治愈情况等。
这些不同的措施,我们对应到参数上,就是实验人数(返校人数)、保护有效性和采取保护措施人数(是否戴口罩以及戴口罩的防护效果)、每天外出人数(出行限制)。另外,返校途中有多少人感染也可以作为控制条件,比如10000个人里面可以设置1个人感染了,也可以设置10个人感染了,是实验可控制变量。

实验结束条件: 感染人数30天内不再增加(成功)或者感染人数占总返校人数的50%(失败).

实现方式: 通过改变参数,以可视化的方式展现出结果。

实验意义: 通过对于出现风险状况以及采取不同措施的模拟,评估风险值,寻找同学们在安全与开展学习生活工作等活动之间的平衡点,从而保证同学们可以在足够安全的状况下开展活动。

技术预演

通过Python的random模块进行随机概率的实现,建立模型,实验实现模拟。
人类个体模型属性:编号、状态、保护措施、外出情况
编号:用来区分每个人类模型的标识
状态:分为三种,健康为0,感染为1
保护措施:未采取保护措施为0,采取保护措施为1
外出情况:不外出为0,外出为1

代码展示
import random as r
#实验模型
human=[]
#实验人数
hunman_number=-1
#感染概率
infected=0
#保护措施
protect=0
#采取保护措施
human_protect=0
#每天外出人数
human_out=0
#保护者id
protect_id=[]
#外出者id
out_id=[]
#所有人id
human_id=[]
#感染者id
virus_id=[]
#函数,收集信息
def get_info():print("*********************")#global改变全局变量global hunman_number,infected,protect,quarantine,human_out,human_protect#实验人数hunman_number=int(input("实验人数:"))#感染概率infected=float(input("疾病感染概率(0~1):"))if infected>1 or infected<0:print("感染概率在0到1之间")get_info()#保护措施有效性protect=float(input("保护有效性(0~1):"))if protect>1 or protect<0:print("保护概率在0到1之间")get_info()#采取保护措施人数human_protect=int(input("采取保护措施人数:"))if human_protect>hunman_number or human_protect<0:print("采取措施人数不可超过实验人数")get_info()#外出人数human_out=int(input("每天外出人数:"))if human_out>hunman_number or human_protect<0:print("外出人数不可超过实验人数")get_info()
#函数,创建模型
def creat_mod():global human,human_id,protect_id,virus_id#循环创建指定人数的实验个体,并将id存储。for id in range(0,hunman_number):#id、state、protect、outhuman.append([id,0,0,0])human_id.append(id)#采取保护措施人数id的集合,数据为对实验总体进行随机重排列,再选择一定量输出。protect_id=r.sample(human_id,human_protect)#循环更改实验个体for id in protect_id:#0为未采取保护措施,1为采取保护措施human[id][2]=1#原理同上virus_id=r.sample(human_id,int(human_protect*0.0005)+1)for id in virus_id:#0为健康,1为感染human[id][1]=1
#函数,实验
def experiment():global out_idfail=int(hunman_number*0.50)print("*****************************")print("实验开始,失败条件感染人数:",fail)day=0while True:#计数器清零count=0#统计感染人数for i in human_id:if human[i][1]==1:count+=1human[i][2]=1human[i][3]=0#外出人数out_id=r.sample(human_id,human_out)for id in out_id:human[id][3]=1#统计结果print(day,"天感染人数",count)#新的一天开始day+=1#判断是否继续实验##实验结束if count>=fail:print("gameover->",day)break#循环找朋友for id in out_id:#随机选择朋友friend_id=r.choice(human_id)#若均感染,则跳过if human[id][1]==1 and human[friend_id][1]==1:pass#一方感染else:#判断感染contagion(id,friend_id)
#函数,判断是否感染
def contagion(id_1,id_2) :global human#感染概率contagion_p=0#第一个id为健康if human[id_1][1]==0:#采取保护措施if human[id_1][2]==1:contagion_p=infected*(1-protect)#未采取保护措施else:contagion_p=infected#是否感染human[id_1][1]=pick(contagion_p)#第二个id为健康的人else:if human[id_2][2]==1:contagion_p=infected*(1-protect)else:contagion_p=infectedhuman[id_2][1]=pick(contagion_p)
#函数,选择函数
def pick(contagion_p):#选择select=[1,0]#概率choose=[contagion_p,1-contagion_p]x = r.uniform(0 ,1)cumprob = 0.0for item , item_pro in zip(select , choose):cumprob += item_proif x < cumprob:breakreturn item
def main():get_info()creat_mod()experiment()
#程序入口
if __name__ == '__main__':main()

同时提交了COVID19.py文件.

效果展示

瘟疫模拟——技术预演与方案设计(Python技术预演)相关推荐

  1. 学习Python技术有哪些优势?

    人工智能在近几年的发展是非常快速的,说到人工智能,我们不得不想到Python技术,人工智能与Python技术有着密切的关系,那么具体我们来看看学习Python技术它有哪些优势? 学习Python技术有 ...

  2. 学习Python技术,怎么才能更好找到工作

    很多人学习一门新技术的原因都是想找一份好的工作,[Python]语言火爆的时代,[Python编程]技术成了很多人都想学的一门技术,那学习Python技术,怎么才能更好的找到工作呢?[Python培训 ...

  3. Python技术,我们这一年...

    文 | Python技术团队 来源:Python 技术「ID: pythonall」 2020庚子年于世界.国家.个人都是艰难并难忘的一年,于 Python 技术团队是成长的一年,因为坚持,我们做到从 ...

  4. python做图像识别该学什么专业,郑大自动化学生来达内培训学Python技术,获1.2万月薪担任AI图像识别...

    由于人工智能时代的来临,加之数据分析的广泛应用,Python语言火爆全球.相比于其他语言,Python开发效率更高.运行速度更快.功能更强大!有人说:Python可能是所有语言里最符合成为人类对编程期 ...

  5. 牛逼了!90后小哥,只用了5年时间就成为了Python技术大牛

    点击"开发者技术前线",选择"星标????" 在看|星标|留言,  真爱 今天给大家推荐一位Python技术大牛,90后,自学Python,第一份工作就拿到高薪 ...

  6. 逼自己玩命学了3个多月,吃透了Python技术核心!分享给你,让你今年进个大厂!...

    魔幻的2020年,疫情下就业大受影响,很多岗位缩招,而数据分析相关工作岗位(如数据分析师.数据挖掘师等岗位)却在增加.非专业数据分析岗位(如运营.市场.销售等岗位)也要求"数据分析" ...

  7. python个人博客搭建说明书_技术分享|利用Python Django一步步搭建个人博客(二)...

    原标题:技术分享|利用Python Django一步步搭建个人博客(二) Hello,欢迎来到我们的"利用Python Django一步步搭建个人博客"系列的第二部分.在第一部分中 ...

  8. Python技术栈与Spark交叉数据分析双向整合技术实战--大数据ML样本集案例实战

    版权声明:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客.QQ邮箱地址:1120746 ...

  9. python技术点总结_Python技术点总结,碰到问题再也不用慌了!

    对于一个刚开始学习Python或者刚步入Python工作岗位的人来说,总会碰到各种各样的问题,而这其实都是很正常的,今天我们把在Python工作或者学习中常碰到的一些技术点总结一下 ,希望对你有所帮助 ...

  10. 0基础学python难吗-零基础入门学习Python技术难不难?

    原标题:零基础入门学习Python技术难不难? 近几年对python人才爆发式需求,导致很多人转行进入python开发行业,现如今Python这门语言的就业前景会非常好.相对于其他来说,它语法简单易读 ...

最新文章

  1. Python+Anaconda中库的安装
  2. 技术面试的时候应该了解公司点什么
  3. c语言linux打印运行时间(耗时) gettimeofday()、timeval、<sys/time.h>
  4. adams2015安装教程
  5. 程序员面试100题之十三:求二叉查找树的镜像
  6. Entity Framework Code First模式基础知识及入门实例01
  7. 手机能打开的表白代码_手机拍照还能加文字?打开这个自带按钮,一键就能添加方便...
  8. random_state的值如何选_DC轴流散热风扇如何选择更合理?
  9. ArcGIS 的 http://localhost:8399/arcgis/rest/services 无法打开,显示404 的解决办法
  10. 对聚集表查询的时候,未显式指定排序列的时候,默认查询结果的顺序一定是按照聚集索引顺序排序的吗...
  11. 跨程序提供及获取内容
  12. 杭电 2016 计算机组成原理,杭电计算机组成原理多功能ALU设计实验
  13. clark变换和park变换【1】
  14. 云服务器上Mongodb被拖库,黑客向我勒索0.015 BTC
  15. 黑马python入门笔记(部分)
  16. html div自动换行代码,css自动换行_css
  17. TimestampUtil时间处理工具类
  18. r语言做绘制精美pcoa图_R语言:Bary-Curtis PCoA
  19. 分布式电商项目十四:Vue前端框架简介及使用
  20. 排球分组循环交叉编排_第九届“理工杯”学生排球比赛正式拉开帷幕

热门文章

  1. ios kb转m_字节、kb、M怎么换算
  2. cherry MX-BOARD 3.0 拆解
  3. 产品读书《周鸿祎-我的互联网方法论》
  4. pandas 选择数据与条件筛选iloc/loc/filt
  5. 微信小程序 转发功能的实现
  6. tableau中快速实现环比增长率计算
  7. 使用腾讯云OCR文字识别
  8. Excel工作日日历
  9. 弹球小游戏c语言编程,scratch丨(1) 弹球小游戏
  10. scratch基础讲解与小游戏制作(接水果)