基于 NetLogo 的人群中疾病传播模型的动态模拟研究

目录

1 模型的描述和假设

1.1 界面设计分析

1.2 模型信息与代码详解

2 实验设计与结果

2.1可调参数及运行设计

2.2各个参数变化对运行过程和结果的影响

3 结论

4 可执行程序文件:


本文的实验基于NetLogo开发一个人群中疾病传播的动态模拟模型,并通过操纵各种参数来评估这些参数对传播过程的影响。通过该模型,我们能够研究不同因素,如程序运行时间、初始感染人数、人口规模、接种率、传播率和死亡率,对疾病传播的影响。

通过本研究的结果,我们将能够深入了解疾病在人群中的传播动态,并探索各种因素如何相互作用以及对传播过程的影响。这些洞察将为制定有效的公共卫生策略和控制措施提供重要依据,以应对传染病爆发和传播的挑战。

通过基于NetLogo的人群中疾病传播的动态模拟研究,我们将能够揭示与疾病传播相关的关键因素,为疾病预防和控制提供更可靠的支持和指导。

相关可运行程序在文末。

1 模型的描述和假设

1.1 界面设计分析

首先对NetLogo程序界面的各个设计进行初步的分析,如下图1-1,整体界面分为三个部分,最左边为按钮区,中间为模型演示区域,右边为运行过程和结果的展示,包括各种数据和变化曲线图。内容方面分为四个部分,第一首先是控制运行的按钮,开始/重置,以及运行/暂停,执行一个时间单位(一天),从运行开始时观察一个病例的运动变化,运行初始化时加入多少感染病例,运行时间长度(总时间单位)。第二是显示程序运行过程中各类人群运动过程的影响和变化,如一个感染者是如何从一个点传染给易感染人群的,如何在局部产生影响最终影响整个群体。第三是四个滑块,疫苗接种率,疾病传播率,死亡率。第四是各类人群数的变化曲线,可看到易感染人数、感染人数、康复或者健康者人数在整个时间线上变化的过程。

1.2 模型信息与代码详解

首先,定义了turtles和patches的属性。在NetLogo中,turtles是代表个体(人)的对象,而patches是代表地图上的格子。这些属性定义了每个turtle(人)和每个patch(格子)所拥有的变量。在这种情况下,patches不拥有任何属性,而turtles拥有三个变量:day表示感染天数,infected表示是否感染,susceptible表示是否易感。已经接种疫苗的人群为不会感染也不易感染,即infected=false and susceptible =false;未接种疫苗的人群为易感染人群而还未感染,即infected=false and susceptible=true;感染人群为infected=true and susceptible=true;康复的感染人群infected=false and susceptible=false。最后死亡人群因为已死亡所以在存活人群中减掉。

1.2.1 setup过程

接下来是setup过程,该过程在初始化模型时被调用。这是模型的设置阶段,它会设置初始的人口和地图属性。

(1)clear-all命令用于清空当前模型中的所有turtles和patches,以便重新开始模拟。

(2)setup-turtles过程用于创建表示模型中人口的turtles。根据设定的参数,人口被划分为未接种和已接种两组。具体地,根据接种率 (vaccination-rate),计算出未接种人口的数量并创建对应数量的turtles,将其颜色、大小、形状、感染状态、易感状态和位置进行初始化。

(3)setup-patches过程用于设置地图上的格子,这里是将格子的颜色设定为0。

(4)set watching false设置一个全局变量watching为false,用于控制数据观察。

(5)reset-ticks命令将模拟的时间步长重置为0。

to setup

  clear-all

  setup-turtles

  setup-patches

  set watching false

  reset-ticks

end

1.2.2 go过程

该过程在每个时间步长中被调用。这是模型的主要运行过程,它会在每个时间步长中进行一系列的操作。

在go过程中做以下几件事情:

(1)if ticks >= Days [stop]条件判断语句检查时间步长是否达到了预设的模拟天数(Days),如果达到则执行stop命令来停止模拟。

(2)move命令调用一个自定义的过程,用于在模型中移动turtles的位置。

(3)transmission命令调用一个自定义的过程,用于模拟传染过程。

(4)sickness命令调用一个自定义的过程,用于模拟疾病的发展过程。

(5)find-max-daily-cases命令调用一个自定义的过程,用于计算每日的最高病例数。

(6)tick命令将模拟的时间步长增加1。

to go

  if ticks >= Days [stop]

  move

  transmission

  sickness

  find-max-daily-cases

  tick

end

以上是关于该传染病爆发和疫苗接种模型中setup和go过程的详细解释。这些过程构成了模型的初始化和运行阶段。为了完整理解整个模型的功能和行为,还需要对其他例程进行详细阐述。

1.2.3各个例程的实现

(1)move 过程会对每个 turtle 进行操作。使用 ask turtles 命令来循环遍历每个 turtle,并对其执行下面的命令:

  1. right random 360:将 turtle 的角度设置为一个 0 到 360 的随机值,实现随机的旋转方向。
  2. forward 1:向前移动 1 个单位距离,模拟人的移动。

(2).add-an-infected-person 过程用于向模型中添加感染者。使用 create-turtles 命令创建了5个新的 turtles,并对每个 turtle 执行下面的命令:

  1. set color red:将 turtle 的颜色设置为红色,表示其为感染者。
  2. set size 1.25:将 turtle 的大小设置为 1.25。
  3. set shape "person-1":将 turtle 的形状设置为 "person-1",可以使用自定义的形状图片来表示 turtle。
  4. set day 0:将 turtle 的感染天数初始化为 0。
  5. set infected true:将 turtle 的感染状态设置为 true,表示该 turtle 是感染者。
  6. set susceptible true:将 turtle 的易感状态设置为 true,表示该 turtle 可以被感染。
  7. setxy random-xcor random-ycor:将 turtle 的位置随机初始化,使用 random-xcor 和 random-ycor 函数来生成随机的 x 和 y 坐标。

(3)transmission 过程用于模拟传播过程。首先,通过 ask turtles with [infected = true] 来循环遍历所有感染者,并执行下面的命令:

  1. let healthy-person one-of other turtles in-radius 1.5 with [susceptible = true]:随机选择一个距离当前感染者距离不超过 1.5 的健康人,该健康人必须满足易感状态为 true。
  2. if healthy-person != nobody:检查是否存在满足条件的健康人。如果存在满足条件的健康人,则执行下面的命令:
  • ask healthy-person:对被选择的健康人执行下面的命令。
  • if random 100 < Transmission-rate:以一定的传播率 Transmission-rate 的概率来确定是否将该健康人的感染状态设置为 true,即被感染。

(4)sickness 过程用于模拟疾病的进展。首先,通过 ask turtles with [infected = true] 来循环遍历所有感染者,并执行下面的命令:

    1. set day day + 1:将感染天数 day 加1。
    2. if day >= 15:检查感染天数是否达到 15 天。如果达到 15 天,则执行下面的命令:
  1. ifelse random 100 < mortality:以一定的死亡率 mortality 的概率来决定该感染者是否会死亡。

如果死亡,则执行下面的命令:

  • set LM LM + 1:记录死亡人数。
  • die:将该感染者从模型中移除。

       如果不死亡,则执行下面的命令:

  • set color white:将该感染者的颜色设置为白色,表示恢复健康。
  • set infected false:将该感染者的感染状态设置为 false。
  • set susceptible false:将该感染者的易感状态设置为 false,表示免疫。

(5)watch-an-infected-person 过程用于观察一个感染者。通过 watch one-of turtles with [infected = true] 命令,随机选择一个感染者进行观察。

(6)find-max-daily-cases 过程用于找到每日最高病例数。将当前感染人数与最大每日病例数进行比较,如果当前感染人数大于最大每日病例数,则更新最大每日病例数的值。

2 实验设计与结果

2.1可调参数及运行设计

(1)程序运行时间:运行时间长度可以在每次程序运行时开始初始化,单位为天,每一天都进行一次程序的运行和统计。

(2)初始化人群中感染病例数:在模型开始运行时,初始时刻存在的感染病例数量。您可以根据需要设定一个具体的数字来控制初始感染病例的数量。

(3)人群规模:这是指模拟运行中的人群总数。您可以设定一个具体的数字来控制人群的规模大小。

(4)人群疫苗接种率:人群中接种了疫苗的比例。您可以设定一个介于 0 和 1 之间的数值,表示疫苗接种率。例如,0.5 表示有一半的人群接种了疫苗。

(5)传染病传播率:传染病的传播能力,即一个感染者将疾病传播给其他人的概率。您可以设定一个介于 0 和 100 之间的数值,表示传播率的百分比。例如,传染率设为 50 表示传染病有一半的概率传播给其他人。

(6)死亡率:感染者由于传染病导致死亡的概率。您可以设定一个介于 0 和 100 之间的数值,表示死亡率的百分比。例如,死亡率设为 2 表示感染者有 2% 的概率因疾病死亡。

运行设计:根据需求和设定的参数,可以按照以下设计进行模型的运行:

  • 初始化人群和参数:根据设定的人群规模,创建相应数量的人群实例,并指定初始感染病例数。
  • 设定运行时间:确定模拟运行的总时长。

每天的模拟运行:

  • 感染传播:根据传染病传播率和当前感染者的位置,将传染病传播给周围的健康人。
  • 疫苗接种:根据疫苗接种率,将一部分健康人接种疫苗,降低感染风险。
  • 感染进展:根据感染天数和死亡率,更新感染者的状态,包括康复和死亡。
  • 统计信息:收集每天的感染人数、康复人数、死亡人数等信息。

模拟结束后,生成统计结果,包括每天的感染人数变化趋势、康复率、死亡率等。通过调整可调参数,例如初始化人群中感染病例数、疫苗接种率、传染病传播率和死亡率,您可以模拟不同的情况和策略来观察和比较感染疾病的影响。这样可以帮助评估和制定相应的防控措施,以便更好地应对传染病的传播。

2.2各个参数变化对运行过程和结果的影响

当不同参数发生变化时,对程序运行结果的影响可以更详细地解释如下:

(1)程序运行时间:

增加程序运行时间可以提供更多的模拟步骤,以更准确地捕捉传染病的传播过程。这可以揭示传染病在不同时期的传播速度变化,以及随着时间推移可能出现的峰值和下降趋势。相反,较短的程序运行时间可能无法充分观察传染病传播的长期影响,无法确定传染病的疫情走势。

(2)初始化人群中感染病例数:

初始感染病例数对传染病的传播速度和范围有直接影响。较多的感染病例数可能会导致爆发性的传播,尤其在初始阶段,传播速度可能非常快。这可能会导致传染病迅速在人群中传播,并且更多的人可能被感染。相反,较少的感染病例数可能会导致较慢的传播速度,传播范围可能较小。

在其他变量处在正常且不改变的状态下,只对初始化病例数数作修改。首先如下图,第一次初始化病例数为10人,第二次运行初始化病例数为50人,其他值为正常值,并执行。

病例数10vs50图

运行结果如下图,感染数不断上升,且有少部分死亡人数,在程序分别运行到第二十一天和第十天时感染人数达到了最大值,然后逐渐下降。可以明显看到每日最高病例数分别为99和215,且初始化病例数为50的在10天的时间就达到了最高值,传播速度和范围都有所增长。

 

(3)人群规模:

人群规模对传染病的传播范围和速度有显著影响。较大的人群规模增加了传染病传播的机会,因为更多的人可以接触到感染者。这可能导致更快速的传播和更广泛的感染范围。相比之下,较小的人群规模可能限制了传播范围,导致传播速度较慢,并且传播范围可能有限。

如下图,将人群规模增加到1000人,初始化病例数为5,与(2)中的一致,运行结果如下图:

与(2)中初始化病例数也为5的作对比,在人群总规模从500增加到1000,每日最高病例数从99人上升到了210人,死亡人数从55人上升到了127人。人群规模(人群密度)与初始化病例人数同样对结果影响巨大。

(4)人群疫苗接种率:

人群疫苗接种率的变化会直接影响传染病的传播风险。较高的接种率意味着更多的人获得了免疫防护,从而减少了感染者与易感人群的接触机会,降低了传染病的传播可能性。这可以导致传播速度的减缓和传播范围的缩小。相反,较低的接种率会增加感染者与易感人群的接触机会,导致传染病的传播风险增加。这可能导致更快速的传播和更广泛的感染。

接种率为85%运行结果

如上图与(2)中疫苗接种率为60%的运行结果有着明显的差别,每日最高病例数从99人下降到了28人,死亡人数从55人减少到了9人。

(5)传染病传播率:

传染病传播率决定了感染者传播给易感人群的概率。较高的传播率意味着感染者更容易传播疾病,导致更快速的传播速度和更广泛的感染范围。相反,较低的传播率降低了感染者传播疾病的概率,使得传播速度较慢,并且传播范围可能有限。

疾病传播率100%运行结果

如图,可见感染人数在13天内迅速上升到了150人,对比(2)中50%的传播率,单日最高病例上升了51人,死亡人数上升了13人。

(6)死亡率:

死亡率反映了感染者因传染病而死亡的概率。较高的死亡率意味着感染者更容易发展成为严重病例,并增加死亡风险。这将导致更严重的疫情和更高的死亡人数。相比之下,较低的死亡率意味着感染者更有可能康复,死亡风险降低。这将减少疫情的严重程度。

通过对这些参数进行变化和调整,可以进行不同传染病传播情景的模拟,评估控制措施的有效性,制定合理的防控策略,并了解在不同条件下传染病的传播动态和可能的结果。

患病死亡率90%运行结果

如图所示,对比(2)中死亡率为50%的结果,死亡人数从55上升到了150,差不多是原来的3倍,可见患病死亡率对死亡人数产生直接的影响。

3 结论

在这仿真模型中,我采用了一个仿真模型来分析人群中的疾病传播动态。通过操纵各种参数,如程序运行时间、初始感染人数、人口规模、接种率、传播率和死亡率,获得了关于这些因素对疾病传播的影响的宝贵洞察。

实验结果表明,程序运行时间对捕捉疾病传播的长期效应至关重要。较长的运行时间可以全面评估疫情的发展轨迹,从而确定高峰期并估计疾病的总体进程。相反,较短的运行时间可能限制我们观察疫情的完整程度。此外,初始感染人数对疾病传播的速度和范围有着重要影响。较高的初始感染数可能导致爆发性疫情,特别是在早期阶段,从而加速传播和增加感染人数。相反,较低的初始感染数可能减缓传播速度,限制疫情的规模。

人口规模是决定疾病传播动态的关键因素。较大的人口规模提供了更多的传播机会,促进了更快的传播和更广泛的感染。相反,较小的人口规模作为一种天然屏障,阻碍了传播速度,限制了疫情的规模。

得到结果还展现了接种率在减轻疾病传播风险中的重要性。较高的接种率意味着更高的免疫覆盖率,降低了易感人群与感染者接触的机会。这导致传播速度减慢和整体影响减小。相反,较低的接种率增加了传播风险,导致加速传播和更多感染。此外,传播率直接影响感染者向易感人群传播疾病的概率。较高的传播率增加了传播的可能性,导致更快的传播和更广泛的感染区域。相反,较低的传播率减少了传播的概率,导致传播速度减慢和更局部化的疫情。死亡率是疾病严重程度的关键指标。较高的死亡率表示更高的严重病例和增加的死亡风险。这导致疫情更严重,死亡人数更多。相反,较低的死亡率意味着更高的康复可能性和降低的死亡风险,导致较轻的疫情爆发。

最后,本仿真实验中的仿真模型为疾病传播动态的洞察提供了重要的可参考依据。通过操纵程序运行时间、初始感染、人口规模、接种率、传播率和死亡率等各种参数,能够研究这些因素对疾病传播的影响。这些发现对于理解传染病的传播以及制定有效的控制措施和政策具有重要意义。未来的研究应继续完善和扩展这个模型,以增进我们对疾病传播动态的理解,并优化公共卫生策略。

4 可执行程序文件:

https://www.aliyundrive.com/s/jJHEAdjTYEd

提取码: 2on1

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Maxlec

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

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

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

打赏作者

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

抵扣说明:

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

余额充值