В свете глобальной пандемии коронавируса COVID-19 самое время поговорить о моделировании инфекционных процессов. В данной статье рассмотрен один из способов моделирования распространения вирусов по сетевым структурам. Для построения графа использован пакет networkx, для моделирования процесса вспышки и распространения инфекции использован пакет EoN (Epydemics on Networks)
Для начала необходимо сгенерировать или загрузить модель сети, на которой мы будем запускать моделирование инфекционных процессов. Тому, как моделировать сети в Python с помощью модуля networkx посвящена отдельная статья.
Прежде чем приступать к моделированию обратимся к математическим моделям, которые обычно используются для моделирования инфекционных процессов. Две основные модели для моделирования распространения вирусов - SIR и SIS. Модели типа SIR предполагают три возможных состояния узлов сети - восприимчивые к инфекции (S - Susceptible), инфицированные (I - Infected) и выбывшые (R - Removed). Третья категория (R) включает как выздоровевшие так и уничтоженые элементы сети (в рамках модели SIR эти два состояния равноценны, так как подразумевается, что через них инфекция передаваться не может).
Второй тип модели - SIS отличается от SIR тем, что узлы могут быть инфицированны повторно.
В качестве первого примера построим модель простейшей двухмерной сети и смоделируем инфекционный процесс типа SIS:
import EoN
import networkx as nx
import matplotlib.pyplot as plt
tmax = 10
tau = 0.05
gamma = 0.001
G = nx.grid_2d_graph(100,100) #each node is (u,v) where 0<=u,v<=99
initial_infections = [(u,v) for (u,v) in G if 45<u<55 and 45<v<55]
sim = EoN.fast_SIS(G, tau, gamma, initial_infecteds = initial_infections,
return_full_data=True, tmax = tmax)
pos = {node:node for node in G}
sim.set_pos(pos)
sim.display(10, node_size = 20)
входные параметры:
tmax - время течения процесса распространения инфекции,
tau - "заразность" инфекционного процесса,
gamma - вероятность выздоровления узла сети в следующий момент времени (t+1).
В этой модели на этапе t0 мы инфецируем участок в центре сети размером 5 на 5.
В результате симуляция инфекционного процесса, запечатленного в момент времени t=10 будет выглядеть примерно так:
Добавив один цикл в последнюю строку кода мы получим картину распространения инфекционного процесса в каждый момент времени t.