【Python数学建模】SEIR传染病模型的延伸:SIWR-CE经济模型,从简单的数学模型的角度去考虑防疫与经济发展的关系

写在前面:

上两篇文章链接为

【Python数学建模】SEIR传染病模型模型延伸-SEIDR模型(一),加入疫苗接种、政府管控、病毒变异等因素的影响

【Python数学建模】SEIR传染病模型模型延伸-SEIDR模型(二),加入外部输入等因素的影响,延伸模型

需要源代码的小伙伴可以移步到我的GitHub仓库https://github.com/moyuweiqing/SEIR-Model-extension 中进行获取,如果觉得我的文章或代码帮助到你的话,不妨在文章或GitHub代码中给我点个赞,谢谢大家!


一. SIWR传染病模型

1.1 模型定义

在上一篇文章中,我们从原始的SEIR传染病模型进行出发延伸模型,得到了一个基本的SEIDR模型,并考虑了多个因素通过影响模型的参数从而影响最终的模型效果。在这部分,将会考虑把经济发展引入进来,将模型从单纯的一个简单的传染病模型而转变为一个传染病和经济发展的模型。

第一部分,首先先简化一下原本的SEIDR模型,假设在一个相对封闭的社会中有且只有四种人:

S (Susceptible),易感者,指缺乏免疫能力健康人,与感染者接触后容易受到感染;

I (Infectious),患病者,指有传染性的病人,可以传播给 S,将其变为 I ;

W (White),大白,指大白,负责管理患病者 I 的人群, 从易感者 S 中来,数量随着患病者 I 的数量的变化而变化,成为大白时不会被感染,但从大白又还原回易感者时会感染;

R (Recovered),康复者,指病愈后具有免疫力的人。

此设定从基本的SIR模型中来,加入了大白这一特殊的人物设定,为了简化模型,我们不考虑过多的不同人群之间转化因素,因此,模型的基本参数如下:

参数参数解释
N总人口数
i0输入感染人数,即一开始的患病者人数
r0r0值,ji即一个患病人一天可以传染给多少人
r恢复天数,即从患病者转到康复者所需要的时间
s一个大白管几个人
Day观察期长度

该模型有如下前置假定:

  1. 康复者不会被二次感染;
  2. 大白不会被感染,有s个易感者变成患病者的时候,会有1个易感者立刻变成大白;
  3. 患病者在所有的感染期内均会有传染性。

 设定模型参数后,计算每日各类人群的数量,代码如下:

import math

N = 100000              # 总人口数
i0 = 1                  # 输入感染人数
r0 = 2                  # R0值,即一个传染源一天能传染多少人
r = 15                  # 恢复天数
s = 9                   # 一个大白管几个人
Day = 100               # 观察期长度

I = i0                  # I: illness     -> 得病者,初始值为输入感染人数
W = math.ceil(I / s)    # W: white       -> 大白
R = 0                   # R: recover     -> 恢复者
S = N - I - W - R       # S: susceptible -> 易感者,即易感人群

I_list = [I]
W_list = [W]
R_list = [R]
S_list = [S]

ill_dict = dict(zip(range(1, r + 1, 1), [0] * 15))
ill_dict[1] = 1

def ill_dis():
    global ill_dict
    recover = ill_dict[r]
    for i in range(r - 1, 0, -1):
        ill_dict[i + 1] = ill_dict[i]
    return recover

def cal_per_day(day):
    global I, W, R, S, ill_dict, I_list, W_list, R_list, E_list
    It = I * r0

    max_e = math.ceil(s / (s + 1) * S)        # 最大的可能新增感染数
    It = max_e if It > max_e else It
    Rt = ill_dis()

    I = I + It - Rt
    W = math.ceil(I / s)
    R = R + Rt
    S = N - I - W - R
    ill_dict[1] = It

    I_list.append(I)
    W_list.append(W)
    R_list.append(R)
    S_list.append(S)

    return I, W, R, S

 这里需要注意两个地方:

  1. 存在某一日最大感染量这个概念,举个例子,如果有目前有100个感染者,r0是20,那么这个时候就会有可能感染2000个人,但如果此时易感者只剩下了1000个人,此时理论上最大的感染人数为1000人,但由于我们同时限制了上面前置假设的第2点,故这1000人中,假定1个大白管9个人,此时这1000人将最终有900人感染,剩下的100人为大白。
  2. 在患病人群中,所有人都会有传染的可能性,一直过了r天之后变成康复者才没有传染性,这是一个方便计算的硬性设定。即所有的康复者都是经过了r天之后的患病者。

1.2 参数r0对模型的影响

对于上述的SIWR模型,我们暂时仅考虑r0值对模型的影响,在以下参数设定一致的情况下,我们考虑不同r0值对模型的影响:

参数设定值
N100000
i01
r15
s9
Day100

在r0=2的情况下,模型效果如下:

 在r0=20的情况下,模型效果如下:

可以看到, 模型的趋势几乎是一致的,感染人数呈指数级增长在r0=2的时候,单日感染峰值在第10天达到峰值,在第75天达到所有人感染,在第90天达到最高康复人数;在r0=20的时候,单日感染峰值在第4天达到峰值,在第68天达到所有人感染,在第83天达到最高康复人数。

有以下的部分需要我们去理解和思考:

  1. 该模型在当前的效果下,考虑的是一种人员完全流动、完全无政府干预和完全无自我约束的情况下的极端状态。
  2. 从模型效果来看,最终会感染的人数将会是N-1(或接近N-1,需要另外计算),而并不是以s:1的比例为最终的感染:未感染人数,理由如下:在第一次冲击时,最大的感染人人数与大白人数将会以s:1的比例形成,但随着时间推移,有感染者转化为康复者出院,此时大白的数量会减少,恢复回易感者的那部分大白将会被感染,最终只会有最后一批的大白不会被感染。这是此模型在不考虑任何人为行为下纯机械化分工导致的结果。
  3. 在该模型下,每日新增人数为指数级增长,将会在很短时间内达到单日感染的顶峰,此时对于现实情况下的情况来说具有指导意义,需要进一步思考分析。

二. SIWR-CE模型

2.1 模型定义

在上面模型的基础上,推广到经济层面,假定易感者S、患病者I、大白W、康复者R在该封闭社会中进行生产或消耗,其中,易感者S和康复者R对经济进行生产,患病者I和大白W对经济进行消耗,统计观察期内的经济生产净值情况。

其中,生产人员在单日的生产净值为Gc,消耗人员在单日的生产净值为Ge,每日的经济生产净值为:

Economy=(S+R) * Gc - (I+W) * Ge

 代码情况如下:

Gc = 1000               # 单人单日贡献值
Ge = 1000               # 单人单日消耗值

economy_list = []

def cal_economy(I, W, R, S):
    global alleconomy
    creation = (S + R) * Gc
    expenditrue = (I + W) * Ge
    economy_list.append(creation - expenditrue)

给定如下参数:

参数参数值
Gc1000
Ge1000

即,在一天中,经济的生产人一天会生产1000的经济净值,经济的消耗人一天会消耗1000的经济净值,在该情况下,计算模型在观察期内的总经济生产净值。

2.2 不同r0值下的总经济生产净值情况

在SIWR模型保持上述参数的前提下,给定上述的Gc和Ge值,计算不同情况下的观察期内的总经济生产净值。

在r0=2的情况下,每日的经济生产净值情况如下:

在r0=20的情况下,每日的经济生产净值情况如下:

 其中,r0=2的时候观察期内的总经济生产净值为6666670000,r2=2-的时候观察期内的总经济生产净值为6666690000,几乎相等。

r0对于在相对较长的一个经济观察期内并没有什么特别的影响,原因也容易分析,在这个设定中,几乎每个人都会被感染,每个人都至少会占用r(15)天的时间去消耗经济净值,此时该部分将会是15 * 100000 * 100 * 2000 = 30000000000,加上部分的人员将会在大白和患病者中间进行身份切换,故会有人将会占用比r(15)天更多的时间去消耗经济净值,故最后总的经济净值将会几乎相等。

但即便如此,由于该疫情冲击,该封闭环境内的经济净值比原先的要低33.33%,严重影响经济发展。


三. 后续拓展

由于时间紧迫,暂时只给出最基本的模型,后续会补充模型的参数,进一步发展模型。


四. 写在后面

以下为从模型的方法,从经济的角度去解释国家防疫措施的转变。

  1. 关于为什么放开。在模型中,N的定义为在某封闭社会中的总人口数,无论疫情情况有多严重,其也只是作用在总人口为N的封闭社会中,并不会延伸到外面。此时,在真实情况下,假设这个N是某一封控区域、N外面还有一个更大的社会环境(假设是G,代指我们国家),那么,可以理解的是,当N/G,即封控人数占社会总人数的比例在较小的一个数值内,那么即时N里面的经济发展受疫情影响有多严重,其对于我国的经济发展的影响总是较小的。这也可以解释为什么我国在疫情前一段时期,在严格精准严控疫情的情况下,经济依然能够得到发展。但是在当前奥密克戎大流行的环境下,疫情到处爆发,此时N/G值不断放大,直接作用在国家GDP的数值上,这时候对于GDP的影响是巨大的。
  2. 关于放开后的医疗挤兑。显然,如果一旦放开,几乎所有人到最后都会被感染,我们并不能控制最终的感染人数,但是我们可以控制的是模型中的感染速度。模型中的r0是一个患病人一天可以感染多少个人,显而易见的是,当r0>1时,每日新增的患病人数呈指数级增长,并在某一天瞬间达到峰值;但是当r0<1时,每日新增的患病人数并不会呈指数级增长,而会逐渐消退。当r0越大时,此时,某日新增的感染人数将会暴涨,这在现实情况中,会对医疗系统造成非常严重的冲击。模型中的r0均为实际情况的数据,r0=2时为普通流感的数值,r0=20时为奥密克戎的数值。但r0高并不代表实际的传染高,我们可以从个人防护的角度去控制实际的每日新增,戴好口罩,做好防护,可以降低实际的每日新增,至少在初期容易造成医疗挤兑的情况下,不要被感染。
  3. 经济发展和疫情管控。毫无疑问,人民生命至上。在疫情前期传染性较弱但毒性较强的情况下,优先保证人民健康是首要的。但是在奥密克戎大流行的今天,依然进行疫情管控是会有问题的,此时会付出高量的经济发展为代价。另一方面,长时间的封控会带来严重的社会治安安全隐患,我们毕竟不是像模型那样的数字那样去转化。一旦一个社会卫生安全问题发展到一个社会治安问题时,所考虑的就不能仅仅考虑疫情管控和经济发展两方面了。

看到这,你是否会对于我国对于防疫政策的放开,和疫情防控的发展有了一个新的认识。

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

moyuweiqing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值