Analysis of COVID-19 spreading using the extended SEIR model.
该模型描述一个国家的流行病传播过程。模型主题是一个图,节点代表城市,边表示城市间的人口迁移,节点内部演化采用扩展SEIR模型。模型定义如下:
参数解释如下:
该模型有以下特点:
-
相比于传统SEIR模型,此处我们使用模型增加了
$S\times E\to E$ 的过程,即潜伏期病毒携带者具有传染性; -
各节点的演化参数是
$(S,E,I,R,t)$ 的函数,而并非固定,可用于描述政府政策的介入、图自身的传播饱和等; -
节点的演化中包含时间相关的扰动项
$\nu:t\to \R$ ,用于描述某时刻的外生扰动,如超级传播者; -
节点演化包含外部注入与输出:这一部分与节点间人口迁移相联系,外部注入与输出同样也是
$(S,E,I,R,t)$ 的函数; -
采用格点地图,节点间定义距离
$r$ ,注入与输出同$r^{-2}$ 、两节点人口乘积、 SEIR 人口比例成正比,即引力模型: $$ \text{Migration}_{ij}=K\frac{\text{Population}_i\text{Population}j}{\text{Distance}{ij}^2} $$
模型使用 RK4 数值算法求解,确保模拟准确性。
- 强制戴口罩、鼓励在家办公、公共场所戒严:降低
$r$ (日均人际接触概率); - 精准隔离,跟踪初期感染者与密切接触者并将其隔离:降低
$\beta,h$ ; - 封城:目标城市与其他节点间的人口交换降至0;
- 核酸检测:目标城市与其他节点间交换的
$E,I$ 降至0; - 超级传播者:某时刻城市增加>10单位的
$I$ 注入;
-
SEIR 固定参数:$\theta$ (日均潜伏者发病概率),$\gamma$ (日均感染者痊愈概率),调查正常状态下的估计值
-
SEIR 可变参数:
$r$ (日均人际接触概率),$\beta$ (显性接触感染概率:每次$S$ 与$I$ 接触导致携带病毒的概率),$h$ (隐性接触感染概率:每次$S$ 与$E$ 接触导致携带病毒概率),调查正常状态/政策注入下的估计值 -
节点人口迁移:调查城市间人口迁移同城市人口与城市间距离的关系(SEIR各部分的迁移按比例计算,因此无需调查各部分的迁移)。但人口迁移中的各部分比例可能与城市比例不同,最好能调查一下武汉疫情爆发初期外逃人口中感染者的比例,用作模型参考
我们小组未能从文献中找到引力模型中迁移系数的报道,而利用各地市之间的客流量、距离进行回归的工作量太大(数据难以查找),本模拟中采用的格点模型结构本身就与现实不同,结果是半定量的,因此引力模型参数精确度要求度不高。我们决定从石家庄和邢台的人口、距离数据对
$K$ 进行估计:石家庄市人口 1103.12 万人(2019年) 邢台市人口 739.52 万人(2019年) 石家庄到邢台公路距离 127 km(高德地图,市中心间距) 假设石家庄和邢台之间每天的人口交换占邢台人口的0.3%(实在实在找不着数据了……)
计算得到
$K=0.04\ \text{万人}^{-1}\cdot{\rm km}^2$
- 输入:各城市SEIR各部初值 (
$H\times W\times4$ 矩阵),模拟时间范围,模拟时间步长,采样时间步长 - 输出:各城市SEIR各部采样时间下的人数 (
$N\times H\times W\times4$ 矩阵)
- 全国范围内SEIR人口随时间变化曲线,I 曲线峰值,以及 S 降至 50% 用时
- 各城市SEIR人口随时间变化曲线,I 曲线峰值,以及 S 降至 50% 用时
动画,描述各个节点感染情况随时间的变化
运行环境
python 3.7.4
numpy 1.16.5
pandas 0.25.1
matplotlib 3.1.1
在运行命令 python working.py 后,将出现results和reports两个文件夹,分别存储模型演化轨迹与图形、视频和表格文件。
test.py为示例模拟脚本,供有兴趣的研究者尝试。