APP下载

公共场所传染性疾病扩散模型设计

2021-09-23赵安驰朱镇祥方忠进

电脑知识与技术 2021年24期

赵安驰 朱镇祥 方忠进

摘要:传染病会对人类社会产生重大影响,危害着人类健康。历史上出现过各种大大小小的传染疾病的案例,多次给人们生活和国家带来严重的影响,诸如SARS病毒、艾滋病等。这使得对传染病发病机理、传染规律和防治策略研究显得尤为重要。针对传染病带来的一类问题,该模型对病毒的扩散因素及扩散速率进行了分析与模拟。利用动画形象地表现出病毒扩散的速率,并将病毒扩散因素分离出作为可控变量,通过输入不同的可控因素变量值,从而观察出不同因素下病毒扩散的快慢程度。基于Java的扩散模型设计,展现了整个病毒扩散过程,为找出有效的防控措施提供基础。

关键词:传染性疾病;扩散模型;Java

针对2020年春节前后突然爆发新型冠状病毒肺炎,简称“新冠肺炎”,该病毒具有易扩散、难防控、传播快的特点。爆发以来,迅速扩散对全球经济、政治、文化、社会、生态等造成严重的打击,同时我国迅速采取封闭隔离的有效措施,研究人员致力于病毒研究,研制新冠疫苗,但是人们对病毒扩散模型还是了解不足。本文主要概述病毒扩散模型的设计、实现、测试三个方面,首先通过对病毒扩散调研分析,进行扩散模型进行设计,其次针对设计对程序的具体的算法进行完成,最后对程序产生的测试数据进行统计分析。

1病毒扩散模型的设计

经过调研病毒扩散主要由传染源、人口密度、病发率、人群流动快慢引起。由于人群流动和移动是不可控,使用标准正态分布的正负模拟人流动的意愿并通过取得两次不同的值使人进行小范围移动,通过输入的方式对传染源、发病率、城市人口的规模进行模拟:

传染源:初始化病毒感染者会影响人与人之间的传播速度;

发病率:模拟人的状态从潜伏到发病的概率,发病才会传播病毒;

城市规模:不同的城市人口不同人与人传播不尽相同,也影响着传播速度。

最后通过设置默认的病死率,极低的治愈率和城市区域进行病毒扩散的模拟。

整个扩散模型设计核心主要通过调研参数手动输入模拟如大小城市、戴口罩、隔离等不同情况下的产生的概率,判断人的状态进行动画的渲染,持续播放病毒扩散的过程。

2病毒扩散模型的实现

2.1 病毒扩散模型的基本原理

该扩散模型的实现主要基于Java GUI中的Swing组件完成,Swing包括了许多基础的图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表。Swing是一种轻量级的组件,可以在所有平台上采用统一的行为。开发环境是纯Java环境,Java的JDK环境可以为应用程序提供大量的API,给程序开发者提供了很好的开发环境。开发工具采用的是JetBrains公司研发的产品IDEA,搭建相关环境。IDEA开发工具为开发者提供了各种智能化设置,支持各类版本工具(git、svn)、Junit等工具。

扩散模型的UI界面设计以简洁易懂为主。主要分為四大部分进行展现:病毒扩散演示区,医院情况展示区,图例数据显示区以及控制因素设置区,如图1所示。其中最核心的组件是JFrame容器,在JFrame容器中可以放入不同的其他组件,可以是其他容器也可以是各种显示组件。相关容器可以设置其容器的相关属性。

病毒扩散演示区是由若干个小圆点组成,每一个小圆点代表城市中的居民,小圆点的移动代表了居民的流动。当两个小球的距离小于安全距离,就代表着居民处于可能被感染的状态,都会有一定概率感染病毒,感染率是由初始化手动进行设定的。小圆点处于感染状态下,每一次的移动都有一定概率传染给范围内的其他人,再通过居民自身的健康属性来重新设置其小圆点颜色,即小球的状态。小球移动的核心算法如图2所示。

医院情况展示区展示了当发生病毒感染后,医院收治患者的情况,主要体现在医院是否能够及时的治疗患者,是否能够容纳所有患者。结合图例数据显示区,可以更加清晰分析出此病毒传染的严重性有多大。图例数据显示区展现了经历的时间、城市的总人口、健康人数、潜伏期人数、发病者人数、已经隔离人数、病死人数以及空余病床和急需病床数。通过这些数据指标能够更好表现出病毒扩散的速率与传播范围。

控制因素设置区主要将病毒扩散的相关因素提取出来,通过针对不同的状况设置不同参数因素来观察病毒扩散过程不同时段的传播状况。

2.2 病毒扩散的算法过程

1)程序启动时,首先加载界面UI并初始化相关默认数据,主要包括动画演示区、图标展示区、菜单控制区。

2)在输入基本参数后,点击开始按钮。读取基本参数,初始城市人口基数、初始感染人数与病毒感染率,启动动画线程。通过设置的城市的人口基数随机渲染人所在的位置点,并随机在生成的所有人中取出某一个,让其状态为潜伏状态,如果已经是潜伏状态或以上更严重的状态继续取下一个人,循环直到满足设置的初始感染人数。如图4所示。

3)线程启动后,每0.1秒刷新一次画面,重新绘制城市中人口感染状况,并更新图标显示区的数据信息。根据每个点的状态不同从而绘制不同颜色的点,并更新点移动的位置。

①如果为死亡状态则不需要再进行处理;

②如果确认为确诊状态,且(世界时刻-确诊时刻)大于医院响应时间则送入医院治疗,此时继续判断医院床位是否充足,如果不充足报告床位所需数量;

③如果确认为确诊状态并且死亡时刻为0,随机产生一个数值,若此数值在病死率之间则通过死亡时间方差和死亡平均值取其正态分布得出死亡时间,否则不会被病死;

④如果为确诊状态或隔离状态,并且死亡时间到了世界时间,更改状态为死亡状态并回收床位;

⑤如果为隔离状态,随机产生一个数值,如果数值在治愈率之间则表示患者被治愈,更新状态为治愈状态,否则状态不变;

⑥如果为潜伏状态,则通过正态分布函数求得潜伏期时长的发病时间,若此时世界时间-感染时间大于潜伏期则更新状态为确诊状态,否则状态不变。