病毒传播模拟实验2-清零还是共存?

简介: 两年前,我曾经用python写过一个病毒传播的模拟器,用一个简化的数学模型来演示病毒的传播,并用模拟实验解释了为什么做好个人防护、减少出行和对感染者集中隔离可以有效阻断病毒的传播。

大家好,这里是crossin


两年前,我曾经用python写过一个病毒传播的模拟器,用一个简化的数学模型来演示病毒的传播,并用模拟实验解释了为什么做好个人防护、减少出行和对感染者集中隔离可以有效阻断病毒的传播。


具体模拟逻辑和参数说明详见:

【实验模拟】对疫情,我们可以放松警惕了吗?


现在模拟一个传播性更强但致病性大减的病毒2号,看看不同的防疫模式会带来什么样的结果。


详细内容见视频:


病毒2号具有更强的传播性,但是致病性大幅降低。


除此之外还要2个重要的变化:

  1. 假设我们模拟的区域是一个非封闭城市,会不断有新增输入病例产生
  2. 被感染后康复的人,同样有可能再度被感染


调整之后进行模拟:(红色曲线为感染病例数,绿色为康复人数)


感染数 56297    病亡数 13


策略同之前一样,当病例到达一定数量就进行全面防控,清零后再解除。但因为有新增输入,所以疫情会出现反复。相比之前的病毒,同样策略下,感染人数要多出很多,但病亡人数却大大减少。


如果不采取防控措施呢?

感染数 89975    病亡数 1313


因为设定了重复感染的可能。即便所有人都感染了一遍,疫情也不会结束。由于感染人数太多,且不断重复感染,即便病亡率很小,最终造成的绝对病亡人数也很多。而这还只是我们限定的时间段内的结果。


从以上实验对比来看,对于这个病毒2号,启用全面防控的效果依旧要远远好过放任不管。


所以,清零要优于共存了吗?


要知道,良好的防疫措施是需要投入人力物力成本的。而对于很多人来说,不出门工作就意味着没有收入,整个社会的产出也随之减少。


将以上设定也加入到这个模拟实验中,抽象出资源总量这样一个数值:

  1. 每个人每天出行,可以产出1点资源
  2. 每个人每天消耗 0.5 点资源,如果进入发病期,再多消耗 0.1 点,重症多消耗 0.5 点
  3. 进入方舱每天额外消耗 0.1 点资源,入院消耗 0.3 点
  4. 另外,因为防控和检测都需要成本,所以从进入防控状态开始,每天每人消耗 0.1 点资源


然后,再来对比下上述两种模式。(浅绿浅红色的柱状图表示“资源总量”的变化)



正常时资源总量持续上升,在防控状态下,模型中资源总量会不断减少。疫情反复出现,曲线就反复的下降。



如果放弃管控限制,能出门工作的都照常出门,除非出现重症或进了医院。的确是可以在很大程度上缩小对资源增长的影响。但与无疫情时的增速还是不能比,而且如前面所说,这种方式带来的影响是会长期持续的。


经济发展虽不能和人的生命相提并论,但如果没有足够的经济实力作为后盾,高标准的防控也难以持续。况且,这里说的资源,还不仅仅是经济,也包括医疗资源、民生资源等等,过度的消耗一样可能带来次生伤害。


所以全面防控也不能说没有问题。


那有没有更好的防疫方式呢?还真有。就是现在很多城市在使用的方式:精准防控。


之前模拟时,一旦疫情达到一定规模,就限制所有人的出行。现在我把它优化一下,只隔离病例接触过的密接人群。


现实中,这个操作被称为流调。流调和检测难免出现遗漏,所以这里加一个概率参数,流调准确度。


感染数 13015    病亡数 3


在新的机制下,模拟出的效果要好很多,不但将疫情控制住了,对于资源的消耗也大幅降低。即使反复出现输入病例也在可控范围之内。


但是,又来但是了……这一操作的前提是,流调的准确度足够高,且效率足够快。


感染数 81078    病亡数 30


这里将流调准确率下调一点,一旦不能做到及时隔离被感染人群,漏洞就会越来越大,疫情越来越严重。


现在,你能不能告诉我,这样一个纯模拟的实验环境中,使用怎样一种策略才是最优解?


我不知道你们怎么想,至少我是无法给出一个完美的结论。


而如果放在现实中,这道题就更加复杂了。我们需要面对更多、更复杂的参数。你选择什么指标,采信哪种数据,决定了你将得出什么结论。就连我这个实验模型,如果微调几个参数,也有可能得出大相径庭的结果。


在这种情况下,我不是很理解为什么有些键盘前的 非专业人士可以很笃定说出一种方案胜过另一种方案。


病毒在变异,防疫的措施也需要不断更新,需要根据实际情况做科学的调整。过去全面清零未必等于将来一直要全面清零,假如将来要共存也不等于此刻就要共存。不应该把防疫问题变成一个站队的问题。


就我这个虚拟世界中的模拟实验中来说:

  • 任何一种极端的方案都不是一个好选择。
  • 无论采用合种方案,执行是否到位直接影响结果
  • 提高疫苗接种率,尤其是高危人群的接种率,就相当于降低了传播性和重症率,这不管对于哪种方案都是有效的。


另外,虽然没有在我们这个模型中体现,但同样很重要的一点就是对基本民生的保障。模拟程序中的“人”只是不用吃喝拉撒的数据,但放到现实中,这就是我们每个人的生活。


最后,虽然我没能给大家展示一个完美的解决方案,但是跑出了一个很糟糕的情况:


感染数 67608    病亡数 55


一开始,因为某些原因产生了大量病例,流调效率跟不上,却还依然不实事求是调整策略,把名义上的精准防控做成了实际上的不精准防控。后来实在严重了之后,仓促转为全面防控,却漏洞百出,时不时有阳性外溢,加上没有解决好基本生活保障,产生过多计划外的接触。


最终的结果就是:既消耗大量的资源,也没能控制住疫情,还让区域内的人不停受罪。若做成这样,那真的不如躺平算了,地球上有些国家和地区的确也是这么选择的。可你说,这是防疫策略本身的问题吗?


以上就是我个人基于这个病毒传播模型做的模拟实验和一些思考,程序是python写的,已经开源,你可以拿去自己调整参数运行。


视频中的所有结果和推论都只针对程序中的虚拟模型,不作为对现实情况的仿真。但希望能引起大家一些思考,可以更理性地去看待疫情和防疫,当然更希望疫情可以早日彻底结束,我们不需要再来讨论这事。


最后感叹一下,两年前的模拟实验1,曾经被人民日报转载:

数据模型告诉你,现在可以放松了吗?- 人民日报

两年后的模拟实验2,发都发不出来了:



感谢转发点赞的各位~

相关文章
|
7月前
|
存储 安全 数据安全/隐私保护
3.2 Windows驱动开发:内核CR3切换读写内存
CR3是一种控制寄存器,它是CPU中的一个专用寄存器,用于存储当前进程的页目录表的物理地址。在x86体系结构中,虚拟地址的翻译过程需要借助页表来完成。页表是由页目录表和页表组成的,页目录表存储了页表的物理地址,而页表存储了实际的物理页框地址。因此,页目录表的物理地址是虚拟地址翻译的关键之一。在操作系统中,每个进程都有自己的地址空间,地址空间中包含了进程的代码、数据和堆栈等信息。为了实现进程间的隔离和保护,操作系统会为每个进程分配独立的地址空间。在这个过程中,操作系统会将每个进程的页目录表的物理地址存储在它自己的CR3寄存器中。当进程切换时,操作系统会修改CR3寄存器的值,从而让CPU使用新的页
95 0
3.2 Windows驱动开发:内核CR3切换读写内存
|
NoSQL iOS开发 MacOS
记一次 rr 和硬件断点解决内存踩踏问题
借助 rr 来定位查询语句结果不一致的问题。
609 0
|
存储
驱动开发:内核读写内存多级偏移
让我们继续在`《内核读写内存浮点数》`的基础之上做一个简单的延申,如何实现多级偏移读写,其实很简单,读写函数无需改变,只是在读写之前提前做好计算工作,以此来得到一个内存偏移值,并通过调用内存写入原函数实现写出数据的目的。以读取偏移内存为例,如下代码同样来源于本人的`LyMemory`读写驱动项目,其中核心函数为`WIN10_ReadDeviationIntMemory()`该函数的主要作用是通过用户传入的基地址与偏移值,动态计算出当前的动态地址。
96 0
|
存储 小程序 C语言
条件分支和循环机制、标志寄存器及函数调用机制
条件分支和循环机制、标志寄存器及函数调用机制
74 0
驱动开发:内核读写内存浮点数
如前所述,在前几章内容中笔者简单介绍了`内存读写`的基本实现方式,这其中包括了`CR3切换`读写,`MDL映射`读写,`内存拷贝`读写,本章将在如前所述的读写函数进一步封装,并以此来实现驱动读写内存浮点数的目的。内存`浮点数`的读写依赖于`读写内存字节`的实现,因为浮点数本质上也可以看作是一个字节集,对于`单精度浮点数`来说这个字节集列表是4字节,而对于`双精度浮点数`,此列表长度则为8字节。
230 0
KONGSBERG RCU502 设置和访问数字的存储器指令
KONGSBERG RCU502 设置和访问数字的存储器指令
80 0
KONGSBERG RCU502 设置和访问数字的存储器指令
西门子S7-1200的运动控制功能、系统使能指令块、错误确认指令块、回参考点或设置参考点指令块的参数含义
今天我们来介绍西门子S7-1200的运动控制功能。西门子S7-1200的运动控制指令是通过使用相关工艺数据块和CPU的专用脉冲串输出来控制轴的运动。
西门子S7-1200的运动控制功能、系统使能指令块、错误确认指令块、回参考点或设置参考点指令块的参数含义
|
异构计算
FPGA(6)--7段显示译码器的加法计数器
FPGA(6)--7段显示译码器的加法计数器
202 1
FPGA(6)--7段显示译码器的加法计数器
|
存储 前端开发 rax
【CSAPP】x86-64的中央处理单元16个存储64位值的通用目的寄存器
【CSAPP】x86-64的中央处理单元16个存储64位值的通用目的寄存器
133 0
【CSAPP】x86-64的中央处理单元16个存储64位值的通用目的寄存器
西门子S7-1200移动指令编程实例,移动和块移动指令、填充指令、交换 指令的作用是什么?
西门子S7-1200的移动指令包括移动和块移动指令、填充指令、交换指令。
西门子S7-1200移动指令编程实例,移动和块移动指令、填充指令、交换 指令的作用是什么?