name='transmission_weight') H = nx.DiGraph() H.add_node('S') H.add_edge('E', 'I', rate=0.6, weight_label='expose2infect_weight') H.add_edge('I', 'R', rate=0.1) J = nx.DiGraph() J.add_edge(('I', 'S'), ('I', 'E'), rate=0.1, weight_label='transmission_weight') IC = defaultdict(lambda: 'S') for node in range(200): IC[node] = 'I' return_statuses = ('S', 'E', 'I', 'R') t, S, E, I, R = EoN.Gillespie_Arbitrary(G, H, J, IC, return_statuses, tmax=float('Inf')) plt.semilogy(t, S, label='Susceptible') plt.semilogy(t, E, label='Exposed') plt.semilogy(t, I, label='Infected') plt.semilogy(t, R, label='Recovered') plt.legend() plt.savefig('SEIR.png')
import EoN import networkx as nx from collections import defaultdict import matplotlib.pyplot as plt N = 50000 G = nx.fast_gnp_random_graph(N, 5. / (N - 1)) H = nx.DiGraph( ) #DiGraph showing possible transitions that don't require an interaction H.add_edge('I', 'R', rate=1.4) #I->R H.add_edge('R', 'S', rate=0.2) #R->S J = nx.DiGraph() #DiGraph showing transition that does require an interaction. J.add_edge(('I', 'S'), ('I', 'I'), rate=1) #IS->II IC = defaultdict(lambda: 'S') for node in range(200): IC[node] = 'I' return_statuses = ('S', 'I', 'R') t, S, I, R = EoN.Gillespie_Arbitrary(G, H, J, IC, return_statuses, tmax=30) plt.plot(t, S, label='Susceptible') plt.plot(t, I, label='Infected') plt.plot(t, R, label='Recovered') plt.legend() plt.savefig('SIRS.png')
J.add_edge(('II', 'RS'), ('II', 'RI'), rate = 0.2) J.add_edge(('RI', 'SS'), ('RI', 'SI'), rate = 1) J.add_edge(('RI', 'IS'), ('RI', 'II'), rate = 1) J.add_edge(('RI', 'RS'), ('RI', 'RI'), rate = 1) J.add_edge(('IS', 'SS'), ('IS', 'IS'), rate = 0.2) J.add_edge(('IS', 'SI'), ('IS', 'II'), rate = 0.2) J.add_edge(('IS', 'SR'), ('IS', 'IR'), rate = 0.2) J.add_edge(('II', 'SS'), ('II', 'IS'), rate = 0.2) J.add_edge(('II', 'SI'), ('II', 'II'), rate = 0.2) J.add_edge(('II', 'SR'), ('II', 'IR'), rate = 0.2) J.add_edge(('IR', 'SS'), ('IR', 'IS'), rate = 1) J.add_edge(('IR', 'SI'), ('IR', 'II'), rate = 1) J.add_edge(('IR', 'SR'), ('IR', 'IR'), rate = 1) return_statuses = ('SS', 'SI', 'SR', 'IS', 'II', 'IR', 'RS', 'RI', 'RR') initial_size = 700 IC = defaultdict(lambda: 'SS') for node in range(initial_size): IC[node] = 'II' t, SS, SI, SR, IS, II, IR, RS, RI, RR = EoN.Gillespie_Arbitrary(G, H, J, IC, return_statuses, tmax = float('Inf')) plt.semilogy(t, IS+II+IR, '-.', label = 'Infected with disease 1') plt.semilogy(t, SI+II+RI, '-.', label = 'Infected with disease 2') plt.legend() plt.savefig('Cooperate.png')