Давайте представим, что у нас есть небольшая популяция, состоящая из 1000 человек, и они подвержены вспышке инфекционного заболевания, например, гриппа. Мы будем использовать SEIRS-модель для иллюстрации динамики этой вспышки.
Начальные условия: Первоначально, все 1000 человек в популяции считаются подверженными инфекции (Susceptible).
Ввод параметров: Мы определяем параметры модели, такие как коэффициент передачи инфекции, коэффициент инкубационного периода, коэффициент выздоровления и длительность временного иммунитета.
Экспозиция (Exposed): Некоторые из подверженных инфекции начинают инкубационный период, в течение которого они инфицированы, но еще не заразны для других. Допустим, в первый день 50 человек становятся экспонированными (Exposed).
Инфекция (Infectious): По прошествии определенного времени после инкубационного периода, экспонированные становятся инфекциозными и могут заразить других. Предположим, что каждый инфицированный в среднем заражает 1,5 человека.
Выздоровление (Recovered with temporary immunity): После некоторого времени инфицированные выздоравливают и приобретают временный иммунитет к болезни. Например, допустим, что средняя продолжительность болезни составляет 7 дней.
Потеря временного иммунитета: После определенного времени временный иммунитет уменьшается, и ранее выздоровевшие снова становятся подверженными инфекции.
Повторение цикла: Процесс повторяется, пока большинство популяции не будет либо заражено, либо приобретет иммунитет.
Модель позволяет нам проследить динамику распространения болезни во времени, учитывая временные аспекты, такие как инкубационный период и временной иммунитет, что делает ее более реалистичной и полезной для прогнозирования и управления эпидемиологической ситуацией.
Рассмотрим пример простой реализации SEIRS-модели на языке Python с использованием библиотеки `numpy` для вычислений и `matplotlib` для визуализации:
```python
import numpy as np
import matplotlib.pyplot as plt
def seirs_model(beta, sigma, gamma, delta, susceptible, exposed, infectious, recovered, days):
N = susceptible + exposed + infectious + recovered
S = [susceptible]
E = [exposed]
I = [infectious]
R = [recovered]
for _ in range(days):
new_exposed = beta * S[-1] * I[-1] / N
new_infectious = sigma * E[-1]
new_recovered = gamma * I[-1]
new_susceptible = delta * R[-1]
susceptible -= new_exposed
exposed += new_exposed – new_infectious
infectious += new_infectious – new_recovered
recovered += new_recovered – new_susceptible
S.append(susceptible)
E.append(exposed)
I.append(infectious)
R.append(recovered)
return S, E, I, R
# Параметры модели
beta