Skip to content

A simulator for the covid-19 infection over time

License

Notifications You must be signed in to change notification settings

LiuLab-CSRC/nCov-model

 
 

Repository files navigation

nCov-model

Spreading simulation for coronavirus or other epidemics.

结论放前:控制疫情的最终手段是降低易感人群的密度或者接触频率。不断传播是病毒活下去的唯一方法。只要病毒的致死率不是100%,或者说人体对它的抵抗能力超过其本身的传播能力时,疫情就会慢慢消亡。只是不同的防疫策略,导致的损失将大相径庭。

P.S.由于最近英国政府的“群体免疫论”甚嚣尘上,我就此表达一下看法。所谓“群体免疫”,即群体中恢复不易感的人群达到一定比例,可以阻断病毒的传播链,这本质上也是降低了易感人群的密度。但是这样做的代价是巨大的,无数生命将因此死去。我们明明有更好的方法达到同样的效果,疫区整体隔离、民众自我隔离、远程办公、远程上学,这些手段虽然会降低工作效率,但极快地降低了人与人之间的接触,从而达到消亡病毒的目的。

在人类发展的过程中,疫情无时无刻的存在着。古代人类医学水平底下,面对疫情只能听天由命,以巨大的死亡代价赢得了免疫人群数量的增长以及人口密度的下降,病毒也就乖巧地销声匿迹。但是,后天免疫是无法遗传的,我们的子孙依然会面临相同的问题。历观数千年中与传染病的斗争历史,人类在某些疾病上已经大获全胜,但方法只有一种,即接种疫苗,人工地获得后天免疫。所谓“群体免疫”这种放弃疗法,和数千年前的人类做法没有任何区别,理论上可以阻断病毒的传播,但在伦理道德上是无法接受的。我想来想去,觉得这种方法也就对于遏制计算机病毒的传播能有一些启示了。

说明

整个项目分为两部分,第一部分为简单马尔可夫模型的推导,即 markov-naive.py 文件;第二部分为粒子状态的类蒙卡模拟,即particle_simulation.py 和 particle_simulation_config.py。

1. 简单马尔可夫模型

顾名思义,整个模型通过参数规定不同状态之间的转移率来实现演变,且每个状态只与其前面的一个或多个状态有关。该模型的架构比较简单,可做大概模拟。

(1) 状态说明:

  • N :所有状态的总人数
  • A :普通易感
  • B :无症状感染
  • C :有症状感染
  • D :医疗隔离
  • E :恢复/不易感
  • F :死亡

(2) 参数说明:

(主要参数如下图) markov-model

另外,考虑状态变化的时间分布,我们使用一个最简单的截断方法,即:

  • 开始产生医疗隔离的时间:gamma_start
  • 无症感染开始产生自愈的时间:alpha_1_start
  • 医疗隔离开始产生治愈的时间:alpha_2_start
  • 医疗隔离开始产生死亡的时间:alpha_3_start
  • 感染开始出现症状的时间:beta_3_start

(3) 结果展示: markov-results

结果显示出基本的指数上升与下降趋势。

2. 粒子近似蒙特卡洛模拟

所谓“近似”,指的是在模拟中不考虑粒子的空间分布信息。主要影响是,正常易感人群被感染的过程依旧是马尔可夫过程。而对于其他状态之间的转化,不同粒子则有不同的表现,是蒙卡过程。

(1) 状态说明

  • N :所有状态总人数
  • E :正常易感
  • A0 :无症潜伏
  • A1 :无症传播
  • S :发病传播
  • Q :确诊隔离/医疗介入
  • R :恢复/不易感
  • D :死亡

(2) 参数说明

(主要参数如下图) particle-model

考虑到疾病的传播对公共区域人群密度的影响,模型设置人群密度变化量“PD”,该量为一个 [0~1] 之间的浮点数,作用在beta_A1和beta_S上。在SEIR模型中,人群密度项表示为“E/N”,在实际情况中,该值十分接近1(例如武汉一千万人,感染八万人,E/N>0.99),不能正确描述公共区域人群密度的变化。故在本模型中,PD值采用tanh或sigmoid函数描述,与感染人数百分比和死亡率呈负相关。

另外,状态间转移的时间分布全部使用高斯分布拟合,可以指定分布的“平均时间”(mu)和“标准差”(sigma)。例如从A1到S的发生时间满足均值为“mu_A1_to_S”、标准差为“sg_A1_to_S”的高斯分布。不同个体即为分布的采样。

(3) 结果展示 particle-result

根据多次实验的结果,我们得到的结论是,对疫情防控起到至关重要的行为是降低公共区域人群密度,也即减少易感群体中人与人之间的接触。尽管对发病群体的隔离也很重要,但在本模型中,如果不降低易感人群密度,仅仅隔离发病者,由于潜伏期的存在,最终结果依然是全部感染

Releases

No releases published

Packages

No packages published

Languages

  • Jupyter Notebook 90.7%
  • Python 9.3%