Моделируем распространение коронавирусной инфекции COVID-19 в Simulink - часть 1
Добрый день, коллеги! Пока мы с вами вынуждены сидеть дома на карантине, возникает вопрос, а действительно ли это эффективно? Насколько изоляция на самом деле способна остановить распространение инфекции?
Давайте помоделируем разные сценарии распространение болезни и заодно освоим последние возможности MATLAB/Simulink.
Архив с проектом приложен к статье. Крайне рекомендую скачать и поэкспериментировать.
Имейте ввиду, что проект использует новейшие возможности MATLAB/Simulink, а поэтому для его запуска требуется MATLAB R2020a. Вы можете запросить у нас пробную версию и оперативно получить лицензию на месяц. Как раз хватит, чтобы не сойти с ума от скуки во время карантина :)
Для запуска модели понадобятся:
- MATLAB R2020a
- Simulink
- Stateflow
- (не обязательно) Simulink Coder
Как устроен проект
Проект оформлен в виде MATLAB Project, чтобы его открыть, необходимо открыть скачанный архив с помощью MATLAB, распаковать проект в выбранную папку и открыть файл VirusPropagation.prj
При этом автоматически откроется Simulink-модель распространения инфекции propagationSimulator
и приложение для проведения экспериментов propagationApp
.
Как устроена модель propagationSimulator
, разберем позже. Вы можете ее запускать, наблюдать графики распространения инфекции, а после окончания симуляции - строить итоговый график и даже его анимировать. Для задания параметров симуляции необходимо использовать приложение propagationApp.
Приложение позволяет задавать параметры симуляции, запускать симуляцию, строить график результатов и анимировать его. Кроме того вы можете сохранить результаты симуляции в файл, чтобы исследовать их отдельно или поделиться с нами :)
Параметры симуляции:
N1 - количество людей по горизонтали
N2 - количество людей во вертикали
R - радиус человека
Vmax - максимальная скорость, с которой люди начинают двигаться и сталкиваться
Immob - доля людей, который не двигаются, все время оставаясь в начальном положении. Это те, кто соблюдает карантин и никуда не выходит.
Основные задачи, которые вы захотите решать, оформлены как ярлыки на панели быстрого доступа проекта для запуска в один клик. Используйте их для удобства.
Анализ распространения болезни
Я уже провел несколько интересных экспериментов, сохранил результаты в проект и оформил их в интерактивный скрипт doc/propagationAnalysis.mlx
. Можете взять его за основу для своего анализа. Привожу результаты здесь.
1. Никакого карантина, все двигаются хаотично
Нажмите на картинку ниже, чтобы посмотреть анимацию.
Как видите, количество зараженных в таком случае возникает очень быстро, можно сказать, экспоненциально. Начиная с одного человека инфекция распространяется на ВСЕХ.
Зеленый цвет - количество здоровых, не зараженных людей
Кипричный цвет - количество зараженных людей
Синий цвет - количество людей, преренесших инфекцию, и выработавших иммунитет. В рамках модели повторно они не заражаются.
2. Половина людей сидит дома и никуда не ходит
Нажмите на картинку ниже, чтобы посмотреть анимацию.
Предположим, что теперь мы ввели карантин и попросили всех сидеть дома, но поскольку, наступила весна и на улице такая хорошая погода, то половина людей нас не послушалась и пошла гулять, жарить шашлыки, общаться друг с другом.
Анимация показывает, что свободно перемещающиеся люди очень хорошо справляются с тем, чтобы передать болезнь другу и заразить всех, кто сидит дома) Поэтому такой карантин нельзя назвать эффективным, потому что в конечном итоге болезнь затрагивает абсолютно всех.
Тем не менее пик заражения снижается на 20%, уменьшая нагрузку на систему здравоохранения.
3. Строгий карантин: 90% людей заперты дома
Нажмите на картинку ниже, чтобы посмотреть анимацию.
При таком строгом карантине картинка меняется и мы получаем 40-50% людей, которые так и не были заражены.
Пик эпидемии также снижается до уровня 35-40% популяции, так что в целом такой карантин выглядит довольно эффективным.
Заключение по анализу
Можно по-разному относиться к строгим карантинным мерам, кторые вводят в том числе и в нашей стране. Можно критиковать их в экономическом, правовом плане и т.д. Но мы с вами только что путем простейшем симуляции убедились в том, что если мы действительно заинтересованы в том, чтобы остановить коронавирусную инфекцию, то строгий карантин действительно может стать эффективной мерой. Простая статистика.
Так что #сидитедома и #изучайтематлаб!
В следующей части расскажу, как устроена Simulink-модель распространения инфекции, там много всего интересного в инженерном плане.
И еще раз напоминаю, что вы можете запросить у нас триальную версию MATLAB R2020a на время карантина и поэкспериментировать с моделью самостоятельно. Скачать ее можете из приложения к статье.
Если вы знаете, как сделать модель круче и интереснее, присоединяйтесь к разработке проекта на GitHub.
Пишите в коментариях свои результаты и мысли, а также идеи, что еще можно учесть в модели.
Комментарии
Здорово. Мне очень понравилось