这是一个简单的Java程序,模拟病毒在人群中的传播以及模拟采用一定的防控措施的效果,进行比较。
主要思路是构建两类对象:人和空间,也就是People和Area类,二者之上均有一个整体调控的Whole类,最终通过Simulator类仿真实现。
人具有如下属性:ID标识,statement 当前状态,home 家的坐标,location 当前运动到的位置的坐标,isolated 是否被隔离,以及latencyTime,infectedTime,isolatedTime对应潜伏期,感染期,隔离期。 人具有的状态有:susceptible 易感状态、infected 已感染且能被检测、hidden 已感染但不能被检测且具有传染性、antibody 治愈后具有抗体、death 死亡 空间具有如下属性:locationX,locationY 空间的坐标,以及一个用于存储当前空间所有的人的集合peopleInTheArea。
人一次可以在以原始位置为中心的周围9个空间(包括原始位置)中随机运动,也可以向具体的某个空间运动(也就是人群聚集区),还可以回到初始的家中。 同时,根据Simulator中设定的潜伏周期、感染周期、隔离周期、感染率、死亡率、治愈率等等因素,人们能有相应的状态变化。 空间则是主要负责判断该空间的内的人员有没有被感染,计算对应距离的感染率以及在该空间有感染源的时候进行对周围空间的感染操作。
1、假设人们每天随机运动5次,并在一天的最后回到家中。 2、假设人们每天随机运动5次,并且每次都有一定的概率前往中心区域,并在一天的最后回到家中。
1、减少传播距离以及传染率(如:戴口罩) 2、对发病后一定天数的人群进行隔离
1、是否戴口罩 2、是否隔离
3、潜伏率 4、死亡率 5、治愈率 6、治愈且有抗体率(未显式定义) 7、感染周期
针对hidden人群:
8、继续潜伏率 9、死亡率(未显式定义) 10、治愈率 11、治愈且有抗体率
12、继续隔离率 13、死亡率(未显式定义) 14、治愈率 15、从发现感染到隔离的时间
16、中心区域的坐标 17、每次前往中心区域的概率
18、仿真总人数 19、初始随机感染人数 20、正方形区域大小的边长
1、处于每个状态的人群的数量
2、每个空间中包含的所有人员的信息(实现了接口)