瘟疫模拟相关知识总结

  • 总览
    • 模型
      • SI模型
      • SIS模型
      • SIR模型
      • SEIR模型
    • 马尔可夫链
      • 简介
      • 理解
      • 举个栗子
      • 需要注意
    • 实验设计
      • 实验群体:人
      • 实验思路
      • 代码搭建(暂)
        • 社区类(Community)
        • 人(People)
    • 参考资料

总览

模型

说明

  • Susceptibles: 易感者, 潜在的可感染人群
  • Exposed:潜伏者, 已经被感染但是没有表现出来的人群
  • Infectives: 感染者, 表现出感染症状的人
  • Resistances/Recovered: 抵抗者, 感染者痊愈后获得抗性的人

SI模型


传染病模型中最简单的是SI模型,一般用在像HIV这样不易救治的疾病。它将人群分为两种,一种是易感者(Susceptibles),易感者是健康人群,其人数用S表示,另一种是感染者(Infectives),即患者,其人数用I表示。若一个社区中的总人数为N,则N=S+I;

有 I个感染者整天到处溜达,每天碰到r个人,有β的概率会传染疾病,健康人比例为S/N。将以上所有量乘在一起就是每天新增感染病例,其微分方程形式为:


所以下一天的易感者和感染者的人数和前一天的易感者和感染者的人数相关,则每天的易感者和感染者的人数为:

SIS模型

SIS模型是指,建立在SI模型的基础上,但是期间有人治好了但是还是会反复感染,类似流感等疾病。

SIS模型比SI模型多了一个感染者I恢复健康的概率γ。

其微分方程表示如下:


每天的易感者和感染者变化如下:

SIR模型

如果人在康复后产生了抗体就不会再生病,这点就与上文所述的SIS模型不同。于是便有了SIR模型,此模型引入了康复者(Resistances/The Recovered),用R表示,并满足N=S+I+R。一旦变为康复者,就不会再被传染或者传染其他人,即没有再次变为易感者或者感染者的可能。

SIR模型微分方程如下:
![SIR微分方程](https://img-blog.csdnimg.cn/20200425213831896.png#pic_center

每天的人数变化方程如下:

SEIR模型

相比SIR模型,SEIR模型考虑了更加现实的情况:易感人群在一开始会经历一段潜伏期,一段时间之后出现症状,就像当下的新冠肺炎中的无症状感染者。SEIR模型相比SIR模型多出了潜伏者(The Exposed),潜伏者按照概率α转化为感染者。

微分方程如下:

每天的人数变化如下:

马尔可夫链

笔者对于马尔可夫链的了解限于课上老师的讲解,所以并不多,旨在整理,以备实验参考,一些内容参照(https://blog.csdn.net/bitcarmanlee/article/details/82819860)博客。

简介

马尔可夫链(Markov chain),又称离散时间马尔可夫链(discrete-time Markov chain),因俄国数学家安德烈·马尔可夫得名,为状态空间中经过从一个状态到另一个状态的转换的随机过程。该过程要求具备“无记忆”的性质:下一状态的概率分布只能由当前状态决定,在时间序列中它前面的事件均与之无关。这种特定类型的“无记忆性”称作马尔可夫性质。马尔科夫链作为实际过程的统计模型具有许多应用。
在马尔可夫链的每一步,系统根据概率分布,可以从一个状态变到另一个状态,也可以保持当前状态。状态的改变叫做转移,与不同的状态改变相关的概率叫做转移概率

理解

马尔可夫链,某一时刻状态转移的概率依赖于它的前一个状态。结合课上知识和博客的阅读,笔者理解为:如果一个城市每天的人口转出率一直为2%,转入率5%。假设今天城市有人口10000。明天城市中的人是(10000+100000.05-100000.02=10300),后天(10300+103000.05-103000.02=10609),即每天的人数只和前一天的人数有关,和大前天的人数没有一点关系。

举个栗子

现在有四个城市A,B,C,D,他们之间的人口迁入迁出有如下关系:其中A->A,B->B,C->C,D->D理解为没有进行城市间人口流动的人,A->B即城市A迁入城市B的人口,以此类推。

如上图所示,将城市理解为马尔可夫链中的状态,则现在共有四种状态:A,B,C,D。每一个状态都以一定概率转化到下一个状态。比如A城市人口以a2的比率转移到B城市。这个状态概率转化图可以以矩阵的形式表示。如果我们定义矩阵P某一位置P(i,j)的值为P(j|i)即在i状态下转移为j状态的概率。则得到马尔可夫模型的状态转移矩阵:

用Excel进行简单模拟

城市人数初始条件

状态转移矩阵

计算,容易得出下一个状态即上一个状态与转移矩阵对应条件下的矩阵相乘

结果,由下图可以看出A城市人口在不断减少,B城市人口逐渐增加,CD城市人口也在缓慢增加。

需要注意

马尔可夫链要能收敛,需要满足以下条件。像笔者只是将其用于瘟疫模拟则只考虑了下面的1,2,3点。

  1. 马尔可夫链可能的状态数是有限的;
  2. 状态间的转移概率需要固定不变;
  3. 从任意状态能够转变到任意状态;
  4. 不能是简单的循环,例如全是从x到y再从y到x。

实验设计

实验群体:人

实验思路

  1. 使用平台:暂定Processing;
  2. 模拟社区内和社区间的传染;
  3. 使用SEIR模型对社区内传染状况进建模;
  4. 使用马尔可夫链设定社区间的人群流动;
  5. 社区可分为超市、医院、住宅区。其对应的“每天碰到r个人”和“β的概率会传染疾病”中的r和β会有不一样的设定,如,r在超市社区内设置的数值会大,其β也会大;如果在医院则其β会减小,且会出现属性γ(感染者I转为治愈者R)。

代码搭建(暂)

社区类(Community)

class Community
{int id;//社区id,为人选择社区进行移动做准备int type;//社区种类,超市、医院、居民区等int x0;//社区x坐标int y0;//社区y坐标int cwidth;//社区长度int cheight;//社区宽度int population;//社区具有的起始人数,也可以初始化为 People population,暂时还没有尝试;int cIn;//社区转入人数int cOut;//社区转出人数float b;//Susceptible->Exposed 易感者到潜伏者转化率float a;//Exposed->Infectious  潜伏着到感染者转化率float t;//Infectious->Recoverd  感染者到治愈者转化率int r;//How many people the Infectious meet one day  感染者每天能够遇到的人数//position stuffsCommunity(int x,int y,int cwidth,int cheight){this.x0=x;this.y0=y;this.cwidth=cwidth;this.cheight=cheight;}//propertiesvoid Init(int id,int type,float b,float a,float t,int r){this.id=id;this.type=type;this.b=b;this.a=a;this.t=t;this.r=r;} void display(){//不同社区用不同颜色表示if(type==1)stroke(255,255,0);else if(type==2)stroke(255, 0, 0);else if(type==3)stroke(67, 216, 216);strokeWeight(5);noFill();rect(x0,y0,cwidth,cheight);}
}

人(People)

class People
{int id;//In which comuunityint pmove;//code decide to move to xx community//暂时没想好各个状态之间的转化率放在哪个类中//或是两个类都有,共同决定个体状态float b;//Susceptible->Exposedfloat a;//Exposed->Infectiousfloat t;//Infectious->Recoverdint r;//How many people the Infectious meet one dayPVector pos;//人的位置 PVector vel;//人的速度int stat;//1->S 2->E 3->I 4->RPeople(PVector pos){vel=new PVector(0,0);this.pos=pos;}void Init(int id,float b,float a,float t,int r,int stat){this.id=id;this.b=b;this.a=a;this.t=t;this.r=r;this.stat=stat;}void display(){noStroke();//Healthy Condition//不同状态的人(易感、潜伏、感染、免疫)用不同颜色标识if(stat==1)fill(89,227,35);else if(stat==2)fill(227,224,35);else if(stat==3)fill(240,99,14);else if(stat==4)fill(14,155,240);ellipse(pos.x,pos.y,10,10);}void update(){//位置更新//可能会实现的一些状态(看时间)://1 不了解疫情事态,随意走动,聚集//2 了解疫情事态后,人与人间保持距离//3 疫情期间松懈,导致的疫情走向}
}

参考资料

  • 关于传染病的数学模型有哪些:
    https://www.zhihu.com/question/367466399/answer/982597090

  • 传染病统计模型科普(SI、SIS、SIR、SEIR):
    https://www.bilibili.com/video/BV1j7411J7nL?p=2

  • 在家宅着也能抵抗肺炎!玩一玩SEIR传染病模型:
    https://zhuanlan.zhihu.com/p/104268573?night=1

  • 国际象棋中的马尔科夫链 :
    https://www.bilibili.com/video/BV1eW411J7iN?from=search&seid=9733953245734297955

  • 小白都能看懂的马尔可夫链详解:
    https://blog.csdn.net/bitcarmanlee/article/details/82819860

瘟疫模拟相关知识总结(传染病模型+马尔可夫链)相关推荐

  1. 决策规划算法相关知识之 POMDP模型

    (写给读者:本文旨在记录我自己对该算法(方法)的理解,用于面试中可能用得到的回答,因此尽量将该文写的口语化,尽量能懂,而不是高深的各种符号,但一些关键的公式还是会贴以加深记忆.) 思考问题及回答问题方 ...

  2. 【模型部署】风控模型部署相关知识

    风控模型部署相关知识 1 同步接口 & 异步接口 方法一:①进程数②进程池 异步处理 方法二: redis缓存数据库(中间件) mogodb数据库(监听) 2 json格式 3 app 4 模 ...

  3. 2022年贵州二级建造师建设工程法规及相关知识模拟题及答案

    题库来源:优题宝公众号 2022年贵州二级建造师建设工程法规及相关知识模拟题及答案,由优题宝公众号根据最新二级建造师大纲与历年真题汇总编写,包含二级建造师常考重点题型与知识点,有助于考生复习备考二级建 ...

  4. Unity模型导入相关知识

    文章目录 常见的模型格式 模型导入参数设置 Model页签 Scene设置 Meshes设置 Geometry设置 Rig页签 Animation Type:动画类型 Avatar化身信息设置 Ani ...

  5. 2022年二建《建筑工程法规及相关知识》模拟考试试题及答案

    题库来源:优题宝公众号 2022年二建<建筑工程法规及相关知识>模拟考试试题及答案,根据最新二建大纲与历年真题汇总编写,包含二建常考重点题型与知识点,有助于考生复习备考二建,取得好成绩. ...

  6. 【模拟电路】PN结的相关知识

    PN结的相关知识 0 前言 1 电压与空间电荷层的关系 2 温度与空间电荷层的关系 3 PN结的伏安特性 4 PN结的击穿特性 5 PN结的电容特性 0 前言 空间电荷层是不含有载流子的区域,即绝缘体 ...

  7. 瘟疫模拟——群体建模专题设计第一阶段

    瘟疫模拟--群体建模专题设计 主题 "瘟疫"主题的群体行为建模 第一阶段 技术预演与方案设计 新型冠状肺炎特征 关于新冠肺炎的一切 (回形针科普视频): 新型冠状病毒的受体和SAR ...

  8. 2020-03-22阅读笔记-考虑遗忘机制的企业隐性知识传播SIR模型研究

    本文系阅读上海工程技术大学杨湘浩等人发表在***中国管理科学*期刊上<考虑遗忘机制的企业隐性知识传播SIR模型研究>**所做的笔记,由于本人水品有限,如理解存在偏差,还请批评指正. 1.文 ...

  9. 你该知道的深度强化学习相关知识

    如今,机器学习(Machine Learning,ML)和人工智能(Artificial Intelligence,AI)的相关算法越来越深度地融合到了我们的社会与生活中,并且在金融科技.医疗保健.以 ...

最新文章

  1. Can't add more than 2 views to a ViewSwitcher
  2. 在NodeJS中操作文件常见的API
  3. 大数据与 AI 生态中的开源技术总结
  4. php pdo字符,PHP:(PDO)Mysql最有效的方式来添加字符串以返回db的值
  5. linux 线程优先级的高低和执行顺序的关系,混乱的Linux内核实时线程优先级
  6. android 勿扰模式代码,Android N Zen Mode (勿扰模式)设置流程
  7. mysql怎么回复.from的数据库_mysql怎么回复.from的数据库
  8. Python基础入门的必备知识点
  9. mysql cast报错_mysql数据库cast
  10. 在idea中使用@Test注解报错的解决方案
  11. SilverLight中的基本图形(转)
  12. java交接文档_如何写好交接文档
  13. IDEA 使用 hibernate
  14. vue router 嵌套、父子、多个路由跳转传值获取不到参数undefined
  15. python idle是什么_idle是什么意思
  16. STM32名字含义以及其与ARM公司的关系
  17. Dell EMC PowerEdge R740 服务器的驱动程序和固件更新
  18. 道路覆盖 (二分答案+状压DP)
  19. R语言-混合型数据聚类
  20. ASEMI大功率场效应管和三极管的区别

热门文章

  1. 狂刷这套Java并发编程面试题及答案(GitHub标星21.7K),五月收获美团/京东/字节Offer
  2. 【文献阅读】将VQA视作元学习(Damien Teney等人,ECCV,2018)
  3. 微信防屏蔽域名防封 爆红域名如何在微信打开
  4. ECH Firefox
  5. oracle中日期自动补全,没有数据自动补0
  6. 关于PMP认证的那些事儿
  7. 使用30元开发板UNO D1 R32构筑物联网开发环境
  8. 【我在异世界学Linux】Shell外壳程序以及权限的理解(粘滞位、umask)
  9. 召集众位挑战者-2021百威校园挑战赛4月火热开启!
  10. 来一起DIY一个人工智能实验室吧