• Регистрация
Павел Рословец
Павел Рословец +239.28
Инженер ЦИТМ "Экспонента"

Моделируем распространение коронавирусной инфекции COVID-19 в Simulink - часть 1

01.04.2020

Добрый день, коллеги! Пока мы с вами вынуждены сидеть дома на карантине, возникает вопрос, а действительно ли это эффективно? Насколько изоляция на самом деле способна остановить распространение инфекции?

Давайте помоделируем разные сценарии распространение болезни и заодно освоим последние возможности 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.

Пишите в коментариях свои результаты и мысли, а также идеи, что еще можно учесть в модели.

Часть 2. Как устроена модель распространения

Теги

    01.04.2020

    Комментарии

    • Павел Рословец
      Павел Рословец +239.28
      16.04.2020 08:52

      Тут же обычная математика, так что можно было бы и старом матлабе сделать, хоть модель и была бы более громоздкая. Но у меня цель была не только показать модель, но и новые возможности последних релизов, чтобы вы их тоже на практике опробовали, MATLAB v5 ведь уже неинтересен для реальных современных задач.

      Насчет верификации полностью согласен. Эта модель по сути и есть игрушка, по которой можно только качественно и в общих чертах что-то исследовать. Но лично для меня уже ее результаты стали инсайтом, поэтому и решил поделиться. Было бы интересно смоделировать еще вероятность заражения при контакте.

      Сейчас появляется все больше более весомых статистических моделей, по которым можно исследовать уже количественные характеристики. Как разберусь, расскажу.

      • Alex Dem
        Alex Dem+0.60
        24.04.2020 10:18

        Здорово. Мне очень понравилось