Коронавирус. Пандемия. Самоизоляция. Все эти слова наводняют новостной фон последних недель, и сложно себе представить человека, который ничего не слышал об этой эпидемии. Но насколько всё это страшно и угрожающе? Когда всё это кончится и мы наконец вернёмся к привычной жизни? Многие расходятся во мнениях, пытаясь ответить на эти вопросы. И действительно: прогнозировать ситуацию трудно, особенно, если принять во внимание, что многое зависит от грамотных действий региональных властей. Но, тем не менее, само по себе явление эпидемии подчиняется вполне определённым фундаментальным законам и некоторую схожесть в динамике пандемии мы можем уже сегодня наблюдать в разных странах. Ниже в этой статье я постараюсь построить модель, заложив в неё основные принципы теории распространения вируса, а также произвести компьютерную симуляцию, сопоставив её результаты с тем, что мы наблюдаем в некоторых странах. Данные по ситуации с коронавирусом в мире я брал с официального сайта Johns Hopkins University. С точки зрения распространения вирус характеризуется многими параметрами, вот лишь некоторые из них: инкубационный период, уровень заразности, пути передачи, вероятность бессимптомного протекания, вероятность сценария, при котором больной не обращается к врачу (а значит, не попадает ни в какую статистику), способность к мутациям. С другой стороны, чтобы исследовать феномен эпидемии, необходимо рассматривать ещё и плотность социальных связей между людьми, что напрямую относится к такому важному показателю, как коэффициент заражения. Он представляет из себя усреднённое количество людей, которых заражает заболевший в течение инкубационного периода и периода болезни. Например, для коронавируса этот коэффициент называют 2.4. Хочу также отдельно отметить, что уровень смертности от вируса практически не влияет на ход самой эпидемии, потому что, либо человек выздоравливает, либо умирает — в обоих случаях он выпадает из числа переносчиков и потенциально заражённых. Хотя следует отдельно сказать про то, что если эпидемия начинает носить массовый характер (от 15% всей популяции и более), то появляется феномен коллективного иммунитета, который снижает коэффициент заражения при той же плотности социальных связей по той причине, что индивиды с иммунитетом не могут заразиться повторно; а это в свою очередь тормозит распространение эпидемии. Как мы уже видим, факторов, влияющих на динамику эпидемии, большое количество. Некоторые из них учитывать непросто. Поэтому ниже в симуляции мы ограничимся лишь следующими из них: В симуляции эпидемии мы базируемся на следующий сценарий: Инкубационный период — это характеристика воздействия вируса на человеческий организм, а значит он всегда постоянный и не может быть изменён сам по себе или какими-либо карантинными мерами. Для COVID-19 мы рассматриваем случайное значение от 1 до 14 дней. Величина коэффициента заражения до карантина зависит от густонаселённости региона и от его социальных особенностей. А после введения карантина — от конкретики и эффективности самих мер. Данные значения могут разниться достаточно сильно между странами. Например, для Италии удалось подобрать значения 0.35 до карантина (это количество заражаемых каждым заражённым в день, что приблизительно соответствует значению 2.4 за весь инкубационный период, положив его равным случайному значению от 1 до 14) и 0.135 после. Эти коэффициенты наиболее точно описывают ту динамику эпидемии, что мы сейчас наблюдаем. Но об этом чуть позже. Вот и дошли до самого интересного: от теории к практике. Ниже я привожу полный код симуляции, который включает в себя установку необходимых параметров, цикл самой симуляции и построение графиков общего числа зафиксированных случаев (Total cases), ежедневный прирост заболевших (New cases) и интересный параметр количества носителей вируса в обществе (Infected), у которых ещё не проявились симптомы, но именно они являются активными распространителями (этот параметр не может быть напрямую измерен в какой-либо национальной статистике, но даёт хорошее понимание внутренней кухни протекающей эпидемии). Кратко по параметрам. Варьируя параметры, можно получать динамику для разных стран, а также экстраполировать ход эпидемии в будущее и иметь картину о количестве инфицированных в каждый момент времени. Например, для Италии удалось подобрать параметры:  Что неплохо соответствует наблюдаемой картине на сегодняшний день. Такой результат удаётся получить из-за того, что Италия ввела эффективные карантинные меры в определённый момент (на 74-й день с момента первого инфицированного по условиям симуляции), после чего всё равно наблюдается рост числа заражений из-за инкубационного периода, что логично, а ещё через 14 дней заражения и количество инфицированных заметно идут на спад. По графику можно также сделать прогноз, что общее количество зарегистрированных случаев достигнет примерно 300000, а за окончание эпидемии можно взять 250-й день симуляции, что составляет 180 дней с момента введения карантинных мер (а это, на минуточку, 6 месяцев). Также по сценарию симуляции видно, что в пике максимальное количество инфицированных превосходило 40000. Резюмируем:
Общее количество случаев за всё время — 300000
Окончание — 6 месяцев после введения карантина
Максимальное количество инфицированных — 40000 Для США, как антилидеров в этой мировой эпидемии, удалось подобрать вот такие параметры:  Доверять результатам следует с осторожностью. Потому что, несмотря на то, что страна проходит пик эпидемии (а значит DAY_QUARANTINE установлен более-менее правильно), мы ещё мало что знает об эффективности карантина, а значит параметр COEF_QUARANTINE по большому счёту неизвестен. Я взял его итальянским как первое приближение. Резюмируем:
Общее количество случаев за всё время — 1700000
Окончание — 6 месяцев после введения карантина
Максимальное количество инфицированных — 250000 Хабр — это по большей части российский портал, поэтому Россия является наиболее интересным объектом для симуляции. Но к сожалению на сегодня в графике новых случаев заражения и общего количества кейсов мы видим две ровные экспоненты, что свидетельствует о том, что эффективные карантинные меры у нас не введены. Каждый день промедления с карантином значительно запускает ситуацию и заметно удлиняет период "выздоровления" общества. Поэтому я рассмотрел три сценария: Получаем следующие результаты. I. Оптимистичный  Общее количество случаев за всё время — 250000
Окончание — 6 месяцев после введения карантина
Максимальное количество инфицированных — 35000 II. Пессимистичный 1  Общее количество случаев за всё время — 950000
Окончание — 7 месяцев после введения карантина
Максимальное количество инфицированных — 140000 III. Пессимистичный 2  Общее количество случаев за всё время — 4000000
Окончание — 8 месяцев после введения карантина
Максимальное количество инфицированных — 550000 Этим результатам симуляции я особо не стал бы верить, потому что, во-первых, мы не знаем точного времени начала карантина DAY_QUARANTINE, а также коэффициента изоляции после принятия карантинных мер COEF_QUARANTINE, который главным образом зависит от эффективности самих мер (я использовал итальянский коэффициент, хотя далеко не обязательно будет реализован именно он). Но с другой стороны некоторые выводы сделать всё-таки можно уже сегодня: Несмотря на обилие цифр, графики и приведённый алгоритм симуляции, я бы хотел призвать относиться ко всем этим результатам с большой осторожностью. Ведь мы занимаемся задачей экстраполяции, в которой небольшие изменения параметров способны крайне сильно влиять на финальный результат. А также мы воспользовались рядом допущений, которые могут быть критичны на практике. Например: Я предлагаю читателям поиграться со скриптом, попробовать смоделировать процесс для других стран, отписаться об этом в комментариях. А также интересно усложнить симуляцию, добавив туда больше неучтённых факторов. Математик-программист