首页 > 编程语言 >Momiria:基于计算机程序模拟的疫情传播实验

Momiria:基于计算机程序模拟的疫情传播实验

时间:2023-03-04 23:23:25浏览次数:42  
标签:计算机程序 口罩 疫情 int 感染 Momiria 实验 人数

基于计算机程序模拟的疫情传播实验

Momiria

摘要:通过设计计算机程序模拟疫情传播机理,通过调控参数进行对比试验、并对实验数据进行函数拟合、数学建模,由此总结出疫情防控的有效措施。

关键词:计算机模拟实验 疫情传播 疫情防控 程序设计

1 引言

​ 岁在庚子,新冠疫情席卷中华大地。随着全球经济一体化加快,人与人之间接触越来越频繁,加之日趋严重的环境污染,传染病给人类带来的危害越来越大。本文基于统计数据,设计了计算机程序对疫情传播进行模拟,并进行一系列对照实验。

​ 该实验使用的计算机语言是C++,鉴于可读性只放关键代码并加以阐述,以便没有编程基础的读者阅读。

2 模拟实验前的准备工作

2.0 资料查询

​ 通过查询资料得知: 不戴口罩时的传染率约为90%,而携带者、健康者都戴口罩时传染率约为1.5% [1]

2.1 相关参数声明

2.1.1 传染率

\[设传染率为p\\ 该参数指在密切接触的情况下,健康者被携带者传染的概率 \\ 根据统计数据,可将其细分为以下参数:\\ p_0 --指在携带者、健康者皆不戴口罩情况下的传染率\\ p_1——指在携带者、健康者都戴口罩情况下的传染率 \]

2.1.2 社会活动性

\[设社会活动性为s(s ∈ N)\\ 该参数指每人每天在不被隔离的情况下密切接触的人数。 \]

2.1.3 参数声明的代码部分

double p0, p1;//这些变量是小数
int s;//这些变量是整数

2.1.4 其他变量的代码部分

int n; //人数
int tot;//感染人数
int day = 0;//第几天
struct {
	int ill_d ;//记录这个人在第几天被感染, -1为健康
	int flag; // 记录这个人的状态,0为健康,1为已感染; 
	int control; //此人是否居家隔离, 0为否, 1为是 
} people[100010]; //记录每个人的状态

3 模拟实验

3.1 实验一 毫无防范意识的社会

​ 设想这样一个社会:人人从不洗手也不戴口罩,没有任何疫情管控措施,感染病毒后依旧正常活动,医生给予病人拥抱。

3.1.1 实验初始化

\[设人数n=100000,s=10\\ p_0=90 % \]

	n = 100000; s = 10;
	p0 = 0.9;

	people[1].ill_d = 1, people[1].flag = 1, tot = 1;
//设第一个人是零号感染者
int next[500]; //储存每个人接触的人的序号信息

3.1.2 实验流程

​ 经过时间一天天的推移,每天每个人都会随机与s个不同的人进行接触,接触时进行一次概率为p0的传染判定。直到所有人都被传染实验停止。

while(tot != n) 
	{
    	for (int i = 1; i <= n; i ++ ){
			if (people[i].ill_d == day) people[i].flag = 1; //判断当天是否发病
		}
		for (int i = 1; i <= n; i++) 
		{
			
			//随机模拟每天接触到哪些人 
			for(int j = 1; j <= s; j++) {
				next[j] = random(n);
			}
			//统计接触到的人有多少被感染的人
			int count = 0;
			for(int j = 1; j <= s; j++) {
				if(people[next[j]].flag == 1) {
					count++;
				}
			}
			//判定这个人是否被感染
			if(count > 0 && people[i].flag == 0 ) {
				double randnumber = (double) rand() / RAND_MAX; //产生0-1的随机小数
				double probability = 1;//被感染的概率
				for (int j = 1; j <= count; j++) {
					probability *= (1-p0); 
				} 
				probability = 1 - probability;
				if (randnumber <= probability ) {//如果被感染 
					tot++;
					people[i].ill_d = day + 1;
				} 
			}
		}
		day++; 
		cout << "第"<<day <<"天,感染人数为"<<tot<<endl; 
	}

3.1.3 实验结果

第1天,感染人数为30
第2天,感染人数为294
第3天,感染人数为1872
第4天,感染人数为9038
第5天,感染人数为36589
第6天,感染人数为83879
第7天,感染人数为99356
第8天,感染人数为99999
第9天,感染人数为100000

​ 实验结果是非常惊人的!在第9天,全部人都被感染了。

image

​ 拟合出来的函数是:

\[y=61.191e^{1.0018x} \]

3.2 实验二 减少人员间接触

​ 预设一个交通不发达的社会,人人都不戴口罩,但相对实验一的社会人们间接触大大减少了。

​ 该实验与实验一仅有参数上的不同:社会活动性 s 设为3

3.2.3 实验结果

​ 全体感染时是第14天。

第1天,感染人数为10
第2天,感染人数为43
第3天,感染人数为129
第4天,感染人数为368
第5天,感染人数为985
第6天,感染人数为2628
第7天,感染人数为6843
第8天,感染人数为17028
第9天,感染人数为38413
第10天,感染人数为69976
第11天,感染人数为93563
第12天,感染人数为99608
第13天,感染人数为99996
第14天,感染人数为100000

image

​ 拟合出来的函数是:

\[y=18.454e^{0.7338x} \]

​ 很遗憾 ,虽然限制社会活动起到了一定作用,但不戴口罩很快全体都感染了。

3.3 实验三 人人带口罩

​ 该实验与实验一仅有参数上的不同:即将p0改为p1即可。

​ 经过查询, 设定p1为1.5%

3.3.3 实验结果

​ 全体感染时是第197天。

image

​ 拟合出来的函数是:

\[y = 57.874e^{0.0496x} \]

​ 实验数据显示,与不戴口罩相比,全体戴口罩能显著减缓疫情的传播。

3.4 实验四 严格的社会管控模式

​ 预设一个管控严格的社会:人与人之间交流较少、人人戴口罩、在生病的第五天会自觉进行居家隔离(即每位传染者只有四天的机会传播病毒.)

3.4.1 实验初始化

\[设人数n=100000,s=5\\p_1=1.5% \]

3.4.2 实验流程

​ 代码大部分与实验一相同。不同的是初始化以及接触到传染人数的判断:

		for (int i = 1; i <= n; i ++ ){ 
			if (people[i].ill_d == day) people[i].flag = 1;
			if (people[i].ill_d == day + 4) people[i].control = 1; //感染第五天后开始自我隔离
		}
		int count = 0;
		for(int j = 1; j <= s; j++) {
			if(people[next[j]].flag == 1 && people[next[j]].control == 0){
             //当接触到的携带者没有自我隔离时才会记录 
				count++;
			}
		}

3.4.3 实验结果

​ 全体感染时是第456天。

image

​ 从折线图可以看出,数据已经不适宜用指数函数拟合,而是更贴近一次函数。拟合的函数是:

\[y=273.67x-16321 \]

​ 从指数函数退化到线性函数,这是一个非常振奋人心的变化!这告诉我们居家隔离的重要性。

4 总结

​ 从以上实验中我们可以总结出以下几点指导疫情传播的结论:

1.戴口罩对控制疫情转播十分有效

2.居家隔离对控制疫情传播十分有效

3.控制人员流动对控制疫情传播有效果,但比不上以上两个措施

5 致谢

​ 这篇花费了我几乎整个寒假的数学建模作业终于告一段落。

​ 首先,将我最诚挚的谢意献给我的数学导师——【】老师。他渊博的知识,深厚的学术功底和独到的见解给了我莫大的帮助。他严谨的学风、孜孜不倦的钻研和勤奋进取的精神令我终生难忘。感谢【】老师为我创造了良好的学习环境,感谢老师在我的求学生涯中指导我如何为人、处事、做学问。

​ 衷心感谢【】的全体老师,在过去两年的生活、学习和实践中,班主任【】老师与各个任课老师给予了我很多关怀和帮助,从他们身上,我学到了很多宝贵的品质和精神。他们不仅指导我们的学习,也关心我们的生活,教我们为人处事,使我在理论上和实践上都得到了很多锻炼的机会。在整个论文的写作期间,从选题,设计到论文的最终成稿阶段都渗透着他们巨大的心血,在他们的帮助下,我才能顺利地完成论文的撰写。

​ 衷心感谢Martin同学。感谢他在生活中对我的帮助,感谢他们在这篇论文中的合作。特别是Martin同学在撰写期间给了我巨大的支持和帮助,在此表示诚挚的谢意。

​ 最后感谢我的家人对我的关心和鼓励。

6 参考文献

​ [1] Yafang Cheng et al., (2021), Face masks effectively limit the probability of SARS-CoV-2 transmission, Science, DOI: 10.1126/science.abg6296

标签:计算机程序,口罩,疫情,int,感染,Momiria,实验,人数
From: https://www.cnblogs.com/Martin-MHT/p/17179469.html

相关文章