流行病模型(SIR Model)

article/2025/9/26 9:50:17

流行病模型(SIR Model)

by : ZhuoFei, Zhou

首先定义一个函数bernoulli(p)

#以概率p判断是否会被感染或恢复
function bernoulli(p::Number)if rand(1)[1] < preturn trueelsereturn falseend
end
bernoulli (generic function with 1 method)

恢复所需的时间函数recovery_time(p)

function recovery_time(p)if p ≤ 0throw(ArgumentError("p must be positive: p = 0 cannot result in a recovery"))endrecovered = falsedays = 0while !recoveredrecovered = bernoulli(p)days+=1endreturn days
end
recovery_time (generic function with 1 method)

测试一下这个函数的运行情况:

其中 p p p为治愈概率, N N N为人数:

function do_experiment(p, N)return [recovery_time(p) for _=1:N]
end
do_experiment(0.5, 20);

Model

每个病原体都有自己的内部状态,模拟其感染状态,即“易感”、“感染”或“恢复”。我们想把它们分别编码为值’ S ', ’ I ‘和’ R ':

@enum InFectionStatus S I R

对于每一个病毒,我们都希望跟踪它的感染状态以及它在模拟过程中感染的其他病毒的数量。定义一个新的数据结构来保存一个个体的所有信息,如下所示:

mutable struct Agentstatus::InFectionStatusnum_infected::Int64
endAgent() = Agent(S,0)
Agent
#Agent状态变化
function set_status!(agent::Agent, new_status::InFectionStatus)agent.status = new_statusreturn agent# your code here
end#Agent 数量变化
function set_num_infected!(agent::Agent, new_num::Int64)agent.num_infected = new_numreturn agent
endfunction generate_agents(N::Integer)agents = [Agent() for _ in 1:N]set_status!(first(rand(agents,1)), I)return agentsend
generate_agents (generic function with 1 method)
#感染概率和恢复概率
abstract type AbstractInfection end
struct InfectionRecovery <: AbstractInfectionp_infectionp_recovery
end

一个类型为S的Agent,类型为I的Agent。它实现了两个人之间的单一(单边)交互:

  • 如果“病原体”易受感染,而“来源”具有传染性,则“来源”以既定的感染概率感染“病原体”。如果“源”成功感染了另一个代理,则必须更新其“num_infected”记录。

  • 如果“病原体”被感染,则它以相应的概率恢复。

  • 否则,什么都不会发生。

function interact!(agent::Agent, source::Agent, infection::InfectionRecovery)if agent.status == S && source.status == Iif bernoulli(infection.p_infection)set_status!(agent,I)set_num_infected!(source,source.num_infected+1)endelseif agent.status == Iif bernoulli(infection.p_recovery)set_status!(agent,R)endend
endfunction step!(agents::Vector{Agent}, infection::AbstractInfection)agent,source = rand(agents,2)interact!(agent,source,infection)return agents
endfunction sweep!(agents::Vector{Agent}, infection::AbstractInfection)for _ in 1:length(agents)step!(agents, infection)endreturn agents
end
sweep! (generic function with 1 method)

模型的模拟函数:

function simulation(N::Integer, T::Integer, infection::AbstractInfection)tot_S = zeros(T)tot_I = zeros(T)tot_R = zeros(T)agents = generate_agents(N)for i in 1:Tsweep!(agents,infection)tot_S[i] = length(filter(agent -> agent.status==S,agents))tot_I[i] = length(filter(agent -> agent.status==I,agents))tot_R[i] = length(filter(agent -> agent.status==R,agents))end# your code herereturn (S=tot_S, I=tot_I, R=tot_R)
end
simulation (generic function with 1 method)

测试:

using Plots
N = 1000
T = 1000
sim = simulation(N, T, InfectionRecovery(0.02, 0.002))result = plot(1:T, sim.S, ylim=(0, N), label="Susceptible")
plot!(result, 1:T, sim.I, ylim=(0, N), label="Infectious")
plot!(result, 1:T, sim.R, ylim=(0, N), label="Recovered")

在这里插入图片描述

function repeat_simulations(N, T, infection, num_simulations)N = 100T = 1000map(1:num_simulations) do _simulation(N, T, infection)endendsimulations = repeat_simulations(100, 1000, InfectionRecovery(0.02, 0.002), 20)p = plot()
for sim in simulationsplot!(p, 1:1000, sim.I, alpha=.5, label=nothing)
end
mean_I = sum(reduce(hcat, map(sim -> sim.I, simulations)),dims=2)./length(simulations)
plot!(p, mean_I, linewidth=3, label="mean I")
plot!(p, ylabel = "# of Infectious Agents")
p

在这里插入图片描述


http://chatgpt.dhexx.cn/article/3MdVUkfU.shtml

相关文章

SIR模型与R模拟

SIR病毒模型R模拟 文章目录 SIR病毒模型R模拟[toc]1.SIR病毒模型2.R模拟 1.SIR病毒模型 SIR病毒模型的的三个字母分别为病毒传播过程中的三种状态&#xff0c;其中 S&#xff0c;表示易感染者&#xff0c;即没有被感染病毒的人群I&#xff0c;表示已感染者&#xff0c;即被感…

【python】SIR模型实现

SIR模型python实现 SIR模型是传染病模型中最经典的模型&#xff0c;其中S表示易感者&#xff0c;I表示感染者&#xff0c;R表示恢复者。SIR模型中&#xff0c;染病人群为传染的源头,他通过一定的几率把传染病传给易感人群,他自己也有一定的几率/可以被治愈并免疫,或者死亡;易感…

传染病模型(3)——SIR模型及matlab运行结果

前言 常见的传染病模型按照具体的传染病的特点可分为 SI、SIS、SIR、SIRS、SEIR 模型。其中“S”“E”“I”“R”的现实含义如下&#xff1a; S (Susceptible)&#xff0c;易感者&#xff0c;指缺乏免疫能力健康人&#xff0c;与感染者接触后容易受到感染&#xff1b; E (Exp…

关于SIR模型性质的进一步摘录

1 SIR模型的性质 又是成为SIR搬运工的一天。以下内容来自陈卫老师在《大数据网络传播模型和算法》。纯纯自我记录&#xff0c;不够美观不够细致&#xff0c;不喜欢看出门左拐。 1.1 SIR模型中的basic reproduction rate&#xff08;基础再生数&#xff09; R 0 R_0 R0​ 它是…

SIR模型II

SIR II (Epidemic modeling) by Zhuofei(fregoticloud.com) jupyter notebook link 在这个模型中&#xff0c;考虑一个在一定空间内的流行病模型。人只能与附近的人交互作用&#xff0c;所以给人在一定的空间里随机运动。 首先&#xff0c;在一个2维平面&#xff0c;随机游走&…

SIR信息传播模型

SIR信息传播模型 SIR模型及python复现SIR模型SIR数学模型传播动力学方程python实现 模拟社交网络中SIR模型的信息传播过程 SIR模型及python复现 SIR模型 SIR模型是传染病模型中的经典模型&#xff0c;可以用在传染病过程中的模拟预测&#xff0c;也可以用作抽象表达社交网络中…

SIR模型 matlab模拟

需要一个单独的m文件&#xff1a; %即写上三个微分方程 function ySIRModel(t,x,lambda,mu) y[-lambda*x(1)*x(2),lambda*x(1)*x(2)-mu*x(2),mu*x(2)]; 再进行作图 >> ts0:1:100; >> lambda0.00001; >> mu1/14; >> x0[45400,2100,2500]; >> […

SIR及SEIR建模的简单示例

目录 概述1.一些定义1.1 一些名词1.2 一些符号1.3 一些定义 2.方法论2.1 SIR2.2 SEIR2.3 代际传播2.3.1 传播矩阵 3 模型实现3.1 参数设定3.2 SIR&#xff08;1&#xff09;模型&#xff08;2&#xff09;参数&#xff08;3&#xff09;计算&#xff08;4&#xff09;绘图 3.3 …

SIR模型python实现

python新手&#xff0c;代码不规范之处敬请见谅&#xff0c;第一次发帖排版也不太懂&#xff0c;各位将就看。 参考&#xff1a; SIR模型和Python实现_阿丢是丢心心的博客-CSDN博客_sir模型 【保姆级教程】使用python实现SIR模型&#xff08;包含数据集的制作与导入及最终结…

SI,SIS,SIR,SEIRD模型

SI&#xff0c;SIS&#xff0c;SIR&#xff0c;SEIRD模型 因为个人工作需要系统地整理SI&#xff0c;SIR以及SEIR模型&#xff0c;故对三个模型进行原理介绍以及对比。文中关于SI&#xff0c;SIS&#xff0c;SIR的所有的截图都来自西工大肖华勇老师在慕课上的分享&#xff0c;…

【数学建模】传染病SIR模型

SIR模型 经典的SIR模型是一种发明于上个世纪早期的经典传染病模型&#xff0c;此模型能够较为粗略地展示出一种传染病的发病到结束的过程&#xff0c;其核心在于微分方程&#xff0c;其中三个主要量S是易感人群&#xff0c;I是感染人群&#xff0c;R是恢复人群 这三个量都是跟…

SIR模型简单了解(Susceptible Infected Recovered Model)

SIR模型定义 SIR模型是一种传播模型&#xff0c;是信息传播过程的抽象描述。 SIR模型是传染病模型中最经典的模型&#xff0c;其中S表示易感者&#xff0c;I表示感染者&#xff0c;R表示移除者。 S&#xff1a;Susceptible&#xff0c;易感者 I&#xff1a;Infective&#xf…

【保姆级教程】使用python实现SIR模型(包含数据集的制作与导入及最终结果的可视化)

目录 一、SIR模型介绍 二、Python实现SIR模型 1.制作自己的数据集的两种方法&#xff08;csv格式&#xff09; &#xff08;1&#xff09;excel转为csv格式 &#xff08;2&#xff09;通过python对csv格式文件进行内容修改 2.导入数据集 &#xff08;1&#xff09;具体代码如下…

SIR模型和Python实现

一、SIR模型介绍 SIR模型时传染病中最基础最核心的模型&#xff0c;研究的是某个封闭地区的疫情传播规律。 SIR模型的动力学关系如下图&#xff1a; 健康人数S的变化与 健康人数S和正感人数I的乘积&#xff08;代表健康人数和正感人数的接触&#xff09;成正比&#xff0c;其…

SIR传染病模型(微分方程系列1)

一&#xff1a;基本参数 SIR模型是常见的一种描述传染病传播的数学模型&#xff0c;其基本假设是将人群分为以下三类&#xff1a; S:(Susceptible):易感人群&#xff0c;指未得病者&#xff0c;但缺乏免疫能力&#xff0c;与感病者接触后容易受到感染。 I:(Infective):患病人…

【整站下载器】小飞兔整站下载V5.0

小飞兔整站下载是一款只需输入一个网址就能下载一个网站的软件&#xff0c;它可以从Internet的任何地方抓回你想要的任何文件&#xff0c;整站下载主要是用来快速搭建网站、深层分析网站、网站克隆等。

【小飞兔整站下载】整站下载器哪个好用_整站下载工具哪个好

小飞兔整站下载是一款可以下载整个网站内容的软件&#xff0c;你只要输入一个网址&#xff0c;软件能自动分析网站链接、图片、样式、文件等资源&#xff0c;并能将整个网站下载到本地&#xff0c;能在本地正常跳转、浏览。 官网&#xff1a;https://xft.fzxgj.top/ 直接上图…

快速获取一个网站的所有资源,图片,html,css,js等等

今天介绍一款软件,可以快速获取一个网站的所有资源,图片,html,css,js… 以获取某车官网为例 我来展示一下这个软件的功能. 1、输入网站地址 2、下载文件 到此,爬取网站就结束了,有些网站的资源使用的是国外的js,css,速度会有些差异,但效果都是一样的.爬取下来就能使用.放…

小飞升值记——(5)

目录 一&#xff1a;学习痕迹 二&#xff1a;学习结语 一&#xff1a;学习痕迹 二&#xff1a;学习结语 1.注意断句 2.注意refill的读音&#xff0c;重音在后面

根据url一键爬取前端页面资源文件,恐怖如斯-----小飞兔

前言 有一天你在网上发现一个很好看的前端页面,你想要弄下来在自己的项目上使用,于是你去查看源码,复制html代码和资源文件,过程非常的麻烦,而且很可能缺胳膊少腿,这里我给大家推荐一款可以一键爬取前端页面资源文件的工具给大家,希望对大家有所帮助. 下载 https://download.cs…