В последние дни я вижу все больше и больше проектов, связанных с моделированием эпидемий, моделированием SIR и т. Д. Очевидно, что пандемия COVID-19 побудила разработчиков по всему миру предлагать проекты и решения, которые пытаются предсказать развитие пандемии в мире. следующие недели или месяцы.

Вероятно, самая простая модель, которую можно использовать для моделирования эпидемии, - это модель SIR.

Но как определяется модель SIR?

(Из WolframMathworld)
Модель SIR - это эпидемиологическая модель, которая вычисляет теоретическое число людей, инфицированных заразной болезнью, в закрытой популяции с течением времени. Название этого класса моделей происходит от того факта, что они включают связанные уравнения, связывающие количество восприимчивых людей S (t), количество людей, инфицированных I (t), и количество людей, выздоровевших R (t).

Модель требует начальных значений Уязвимых людей в популяции (S0), Зараженных (I0) и Вылеченных (R0). Ему также нужен бета фактор, который постоянно определяет, как часто контакт с восприимчивым инфицированным приводит к новой инфекции, и гамма фактор, который показывает скорость выздоровления инфицированного человека и его попадания в стойкая фаза.

Моделирование выполняется для N итераций (которые представляют собой временной интервал моделирования).

Установка и пример

SIR.js можно установить через npm, набрав npm install sir.js.

Код доступен в этом репозитории GitHub, и вы можете внести свой вклад!

Настроить и использовать его очень просто:

let SIRjs = require('sir.js');

let solution = SIRjs.solve({S0: 0.9, I0: 0.1, R0: 0.0, t:1, N: 500, beta: 0.35, gamma: 0.1});
SIRjs.printChart(solution);

У него всего 2 функции: solve() и printChart()
solve() функция принимает аргумент объекта со следующими ключами:

  • S0: Начальное значение S (восприимчивость)
  • I0: начальное значение I (инфекционное)
  • R0: Начальное значение R (восстановленное)
  • t: временной шаг
  • N: временной интервал (в единицах времени), также известный как продолжительность моделирования.
  • beta: Параметр, определяющий, как часто контакт с восприимчивым инфицированным приводит к новому заражению.
  • гамма: скорость выздоровления инфицированного и перехода в фазу устойчивости.

Он возвращает массив объектов, которые содержат значения S, I и R для каждого момента.

printChart() функция печатает диаграмму ASCII для каждой из переменных S, I, R.

Затем вы можете отобразить результаты любым способом.
Вот, например, я построил график результатов с помощью Google Таблиц.

Вот и все, ребята!

Надеюсь, вам будет интересно и полезно!