基于SEIR模型的传染病预测软件开发(完整代码+数据集+报告)

1 操作页面及用户使用说明

(1) 界面说明

App页面主要分为4个区域,分别是:曲线显示区、模型初始化和预防参数设定区、传染病特征参数设定区、绘图控制区。

① 曲线显示区:显示模型预测的不同人数量随时间的变化曲线。

② 模型初始化和预防参数设定区:设定初始化参数(S健康人数、E潜伏区人数、I发病人数、R康复人数)和r单位时间接触次数、p个人防护率。

③ 传染病特征参数设定区:设定 每次接触感染概率、 单位时间从潜伏期发展到病发的概率、 单位时间治愈概率、 单位时间致死概率。

④ 绘图控制区:控制绘图、设定基本参数、设定坐标轴区间、设定绘制对象人数。

(2) 使用说明

a. 曲线显示区&绘图控制区

曲线显示区主要功能为显示模型预测的不同人数量随时间的变化曲线。

绘图控制区的主要功能为控制绘图、设定基本参数、设定坐标轴区间、设定绘制对象人数。

Clear:清除显示区的曲线。

Predict:在曲线显示区显示给定输入参数下模型预测的不同情况人数变化曲线。

Reset:快速设定默认输入参数和坐标。

坐标显示范围:输入预定的曲线观测区间。

Apply:应用XY观测区间。

坐标区:选择不同情况的人作为观测对象(S健康人数、E潜伏区人数、I发病人数、R康复人数)在曲线显示区内进行显示。

b. 模型初始化和预防参数设定区

该区域主要功能为

① 设定人员初始化参数:S0健康人数、E0潜伏区人数、I0发病人数、R0康复人数。

② 预防参数设定:r单位时间接触次数、p个人防护率。可以在Typical example中选择特定的预防措施,自动设置预防参数。

c. 传染病特征参数设定区

该区域主要功能为设定β每次接触感染概率、ϵ单位时间从潜伏期发展到病发的概率、γ单位时间治愈概率、μ单位时间致死概率。

(3) 注意事项

a. 该app回调函数中采用sim函数调用模型SEIR_model.slx,应把该文件放在可访问的文件夹中。

b. SEIR_model.slx模型预算1000s的仿真时长,若观测区间大于1000days将会显示不全,需要手动调整slx文件时间参数。

2 回调函数设计说明


(1) Predict预测

点击Predict在曲线显示区生成图像。先将全部输入参数导入base workspace,在local workspace调用SEIR_model.slx模型,最后根据不同的预测对象设定绘制图像。

(2) Reset重新设置

重新设定图像显示区窗口位置、区间和默认输入参数。

(3) 预防类型下拉菜单

根据用户对不同预防措施的选择设定预测参数r、p。

(4) 病毒类型选择

给定经典类型,用户选择后病毒传染参数会自动改变。

(5) 不同对象预测选择

选择不同情况的人作为观测对象(S健康人数、E潜伏区人数、I发病人数、R康复人数)在曲线显示区内进行显示。

(6) Clear曲线清除

清除曲线显示区中曲线。

(7) Apply应用观测范围设置

在曲线显示区坐标范围设为用户输入的坐标范围。

3 生成及安装


(1) 打包生成

(2) 安装使用

  1. 程序使用示例

见附件“基于SEIR模型的传染病预测软件使用示例.mp4”

完整代码+数据集:

https://download.csdn.net/download/weixin_55771290/87385540

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个基于PythonSEIR传染病预测模型,并使用梯度下降算法优化模型参数,并且展示真实值与预测值之间的差异的代码示例: ```python import numpy as np from scipy.integrate import odeint from sklearn.metrics import mean_squared_error import matplotlib.pyplot as plt # SEIR模型 def SEIR(y, t, beta, gamma, sigma, N): S, E, I, R = y dSdt = -beta * S * I / N dEdt = beta * S * I / N - sigma * E dIdt = sigma * E - gamma * I dRdt = gamma * I return dSdt, dEdt, dIdt, dRdt # 优化模型参数 def fit_SEIR(y0, t, N, y_true): # 初始参数值 beta, gamma, sigma = 0.2, 0.1, 0.1 # 使用梯度下降算法优化参数 alpha = 0.01 for i in range(100): # 计算预测值 y_pred = odeint(SEIR, y0, t, args=(beta, gamma, sigma, N)) # 求解梯度 d_beta = np.mean(2 * (y_pred[:, 2] - y_true) * y_pred[:, 0] * y_pred[:, 2] / N) d_gamma = np.mean(2 * (y_pred[:, 3] - y_true) * y_pred[:, 2]) d_sigma = np.mean(2 * (y_pred[:, 1] - y_true) * y_pred[:, 0] * y_pred[:, 2] / N) # 更新参数 beta -= alpha * d_beta gamma -= alpha * d_gamma sigma -= alpha * d_sigma # 返回优化后的参数和预测值 y_pred = odeint(SEIR, y0, t, args=(beta, gamma, sigma, N)) return beta, gamma, sigma, y_pred # 模拟疫情传播 N = 1000000 t = np.linspace(0, 100, 1000) y0 = [N-100, 100, 0, 0] beta_true, gamma_true, sigma_true = 0.3, 0.1, 0.2 y_true = odeint(SEIR, y0, t, args=(beta_true, gamma_true, sigma_true, N))[:, 2] # 优化模型 beta_pred, gamma_pred, sigma_pred, y_pred = fit_SEIR(y0, t, N, y_true) # 展示结果 plt.plot(t, y_true, label='True') plt.plot(t, y_pred[:, 2], label='Predict') plt.legend() plt.show() # 计算均方根误差 mse = mean_squared_error(y_true, y_pred[:, 2]) print('MSE:', mse) ``` 在上面的代码中,我们首先定义了一个SEIR模型,它接收四个状态变量S、E、I、R和四个参数beta、gamma、sigma、N,然后返回每个状态变量的微分方程。接下来,我们使用梯度下降算法来优化模型参数,其中包括beta、gamma、sigma三个参数。在每个迭代中,我们计算预测值,并计算预测值与真实值之间的误差梯度,然后更新参数。最后,我们使用优化后的参数来重新计算预测值,并展示真实值与预测值之间的差异,并计算均方根误差作为评估指标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员奇奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值