基于自研《病毒传播模型模拟游戏》的数据推演成果

释放双眼,带上耳机,听听看~!

就在前些日子,北京迎来了新的疫情升级,楼下社区大门全部紧闭,进出严格检查,但是北京的大街上仍然人头窜动,要知道首都北京是中国人口集中和流动最密集的城市之一,如果感染性强、潜伏期长的病毒爆发,后果不堪设想,那么今天我给大家看一个我自己完成的模拟程序,来展示一个病毒传播造成的可怕景象。

这个程序借助了游戏引擎的渲染能力,直观的展示人们的行为和病毒传播过程,要想真正完善做出完整的版本,可能要经历多次迭代,现在看到的这个视频是第一个程序版本,在我原本的计划中,是完成这个模拟器的全部功能,再作视频的,但是随着开发推进,发现这项工程确实庞大,经历了四天的周期,也只是完成了基础逻辑,大量的时间用在架构设计,以符合规则足够简单,扩展足够方便,组件足够丰富的特点,关于开发过程,我已经撰写日志发布到了专栏,从初期设计到开发完成,如果你想了解后续迭代和开发过程分享,请关注我别错过,那么我们先看看第一个版本的成果吧。

我们知道要做一个游戏,必须设计它的核心玩法,而做一个模拟系统,那就要把核心规则设计清楚,在这里我通过归纳总结,核心规则一共就三条:

  • 1、有宿主的病毒会定时向所在场所复制自己,复制的病毒在存活期内,会尝试入侵附近的其他健康宿主
  • 2、宿主会处在在一个场所中,依据随机意愿和世界活跃度,离开场所前往其他场所一段时间后返回
  • 3、场所视为一个封闭空间,病毒和宿主一直处于一个场所中,世界等同于大场所,场所下面可以拥有子场所

这三条规则基本描述的模拟结构

第一个版本,是一个完全没有治疗和隔离措施的模拟展示版本,可以调整的参数并不多,大家现在看到的是一个三维空间,一个小亮点是一个人,多个小亮点组合并在一起围绕的,是处于家庭场所的群体,现在的数据是100个家庭,整个世界30%的活跃度,也就是说,有30%的人会随机的外出活动,而且世界会一直保持这个数值比率,在程序开始时,只有1个0号病人随机设置在世界上,很快他就把周围的人给感染了,大概经历了模拟时间的6天运行,感染率已经到达99%,由于设定的是7天潜伏,而宿主拥有不同的健康数据,发病12-17天后健康数值,消耗殆尽直至死亡,发病之后白点就变成了红点,逐渐变暗,现在我们看到,在模拟世界中,不到一个月的时间,100个家庭全部死亡。

我觉得这个结果实在太可怕了,对于数据进行了调整,仍然是100个家庭,但是我将个人抵抗力提高到了40%,也就是说一个人被传染的概率只有60%的情况下,100%的人口感染也只是用了35天,最终第60天所有人口全部死亡。

为了验证一个人的出行率是否会对传染有影响,我现在调整了一下数值,只有10%的出行率和0%的抵抗率,结果惊人的发现,到达99%以上的感染,居然也只用了16天,我觉得是不是计算出问题了?经过排查模拟程序是没有bug的,于是再次降低出行比率,这次到5%进行模拟,到达20天后一直处于80%以下,一晃到了第30天,瞬间从80%提高到了99%,此时死亡人数已经接近了原有人口的一半,也就是说之前的缓慢增速,虽然被出行比率稍微影响,但是其传染仍然在进行,只是前期没那么快,随着死亡人数的激增,这个比率瞬间被放大,结果到了第30天,就只有1个人没有被感染而已,直到第46天模拟人口全部死亡。

下面我用了另外的数据测试,如果大家的抵抗力都很强,每次病毒攻击的时候,只有10%的可能性感染,并且这次外出率调整到10%,模拟结果是什么样的呢?在第104天,以人口死亡率97%的代价让病毒彻底没了宿主,活下来了10个人,然而在20%的出行率情况下,第60天,模拟器里398个人口中,只有2个人没有被感染,这两个幸运儿最终熬到了第80天,让病毒彻底没了宿主,当然了,在这个版本中,人口一旦死亡,它就会连同它所携带的病毒直接在世界上消失,现实世界中可能情况比这个还复杂。

我们是不是觉得,只有10%的被感染率很低了吧,但是模拟器中我清晰的观察到,只要有携带者不停散播,病毒虽然仅有10%的概率,但它一直没有停止尝试入侵,终归是可以入侵成功的,只是时间问题,需要说明是,在这个版本中,暴露在空间中的病毒,入侵行为也仅仅是模拟世界中10分钟一次,它只在其中存活60分钟,也就是说它只能尝试6次入侵的频率。

从第一个版本可以看出来限制出行的效果是多么的显著,在一个没有任何治愈条件和隔离措施的世界里,病毒传播的速度是多么的惊人,当我很满意的得出这个结论,觉得可以告一段落得时候,一个测试立即让我发现这个版本的缺陷,那就是样本太少,我把模拟数据提高到了1000个家庭,大约有4000多人的时候,得出来的结论,和前面100个家庭400左右人口的结果大相径庭,在20%的出行率情况下,病毒携带者可能不一定被随机到出门,而且我还设定了他一旦开始发病就更不愿意出门了,所以它只是在传染自己所在家庭场所的其他宿主,很快他们就死光了,这个很显然不太现实,我于是把出行率改到了70%,虽然浏览器已经卡成了幻灯片,但是可以看得出,感染速度是以比较缓慢的速度在增长,一直没有停止,最终用了161天,以病毒宿主全部死亡的结果,结束了这场浩劫,仅剩了2个模拟人口生存下来,他们在最后的一段日子里,由于世界空间比较大,几乎没有和病毒携带者有交集,从而活到了最后,这说明一件非常严肃的事,我们从两组数据中可以看出来,互相接触越频繁的群体,越容易被感染,数量小的测试,虽然只有30%的在外活动率,加上组合数的阶乘取样,也就是说他们的接触范围,远远小于整体人数的30%,却只需要模拟6天就被全部感染,30天内全部死亡,数量级大的测试数据中,100天的模拟虽然没有达到100%感染,但是已经死掉了60%以上的人口,最终99%的人口仍然逃脱不了死亡的命运,这个差异就是源于互动频繁程度不高,外出访问的场所不集中造成的,所以可以看出,我们的国家对待疫情的措施是多么精准,对于密切接触的人进行追踪,每个公共场所设立检查站甚至登记个人信息,都是这场战役的出色决策。

以上是这个版本的模拟程序结果,如果你感兴趣,可以在视频简介或置顶评论里面,了解到如何取得,和参与测试本程序,最主要的是,点个关注我,更新不错过,在未来我将丰富这个程序的,让它能够具备更多的模拟功能,也欢迎一起交流模拟算法,我们可以在虚拟世界中进行演算记录数据。

某次模拟中的第141天,当我以神的姿态暂停了程序运行,点开某一个病毒的繁衍ID序列,从第0号开始到达它的编号,是多么惊人数字,现实世界没有神能暂停新冠病毒的程序,这仍然需要全体人类的共同努力才能战胜它,我是Nowpaper,人类加油,中国加油!

academic

病毒传播模拟游戏制作日志(三)

2020-6-23 11:45:48

academic

高度概括的艺术灵感在游戏设计中的应用

2020-6-27 18:11:27

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
有新私信 私信列表
有新消息 消息中心
搜索