def ex5(BA): maiores_graus = sorted(BA, key=lambda i: BA.degree(i), reverse=True) resultado_rand = [] resultado_hubs = [] porcentagens = np.arange(0.05, 0.35, 0.05) print('ex5 - Processando simulações') for porcentagem_imunizados in porcentagens: numero_imunizados = math.floor(porcentagem_imunizados * len(BA)) # imunizando aleatórios rand_imunizados = set(random.sample(list(BA), numero_imunizados)) inf, _, _, _ = epidemia.reativo(BA, 'sir', 1000, beta_reativo, mi_reativo, rand_imunizados) resultado_rand.append(_tempo_acabou(inf)) # imunizando hubs hubs_imunizados = set(maiores_graus[:numero_imunizados]) inf, _, _, _ = epidemia.reativo(BA, 'sir', 1000, beta_reativo, mi_reativo, hubs_imunizados) resultado_hubs.append(_tempo_acabou(inf)) plt.figure('ex5') plt.clf() plt.title('Imunização de nós aleatórios vs hubs na rede BA') plt.plot(porcentagens, resultado_rand, 'b-', label='Imunização aleatória') plt.plot(porcentagens, resultado_hubs, 'r-', label='Imunização de hubs') plt.legend() plt.xlabel('% imunizados') plt.ylabel('Duração da epidemia (iterações)') plt.savefig('figuras/ex5.png')
def ex3(BA, ER): modelo = 'sir' # evita ressimular o reativo, se já tiver rodado o ex1 global BA_reativo_sir global ER_reativo_sir if 'BA_reativo_sir' not in globals(): _processando('BA-reativo-sir') BA_reativo_sir, _, _, fimBA = epidemia.reativo(BA, modelo, num_iter_reativo, beta_reativo, mi_reativo) _processando('ER-reativo-sir') ER_reativo_sir, _, _, fimER = epidemia.reativo(ER, modelo, num_iter_reativo, beta_reativo, mi_reativo) nome = 'BA-contato-' + modelo _processando(nome) inf, _, _, fimINF = epidemia.contato(BA, modelo, num_iter_contato, beta_contato, mi_contato) # plot da proporção de infectados no contato plt.figure(nome) plt.clf() plt.plot(inf[:fimINF], 'b-', label='contato') plt.plot(BA_reativo_sir[:fimBA], 'r-', label='reativo') plt.legend() plt.title('Contato vs reativo na rede BA usando modelo ' + modelo) plt.xlabel('t') plt.ylabel('Infectados') plt.savefig('figuras/BA-reativoXcontato.png') nome = 'ER-contato-' + modelo _processando(nome) inf, _, _, fimINF = epidemia.contato(ER, modelo, num_iter_contato, beta_contato, mi_contato) # plot da proporção de infectados no contato plt.figure(nome) plt.clf() plt.plot(inf[:fimINF], 'b-', label='contato') plt.plot(ER_reativo_sir[:fimER], 'r-', label='reativo') plt.legend() plt.title('Contato vs reativo na rede ER usando modelo ' + modelo) plt.xlabel('t') plt.ylabel('Infectados') plt.savefig('figuras/ER-reativoXcontato.png')
def ex1(BA, ER): for modelo in ['sir']: nome = 'BA-reativo-' + modelo print('ex1 - Processando: ' + nome) inf, sus, rec, fim = epidemia.reativo(BA, modelo, num_iter_reativo, beta_reativo, mi_reativo) # plot da proporção de infectados no reativo plt.figure(nome) plt.clf() plt.plot(inf[:fim], 'b-', label="Infectados") plt.plot(sus[:fim], 'r-', label="Suscetíveis") plt.plot(rec[:fim], 'g-', label="Recuperados") plt.legend() plt.title('Simulação reativa de epidemia na rede BA usando modelo ' + modelo) plt.xlabel('t') plt.ylabel('Quantidade') plt.savefig('figuras/{}.png'.format(nome)) if modelo == 'sir': global BA_reativo_sir BA_reativo_sir = inf nome = 'ER-reativo-' + modelo print('ex1 - Processando: ' + nome) inf, sus, rec, fim = epidemia.reativo(ER, modelo, num_iter_reativo, beta_reativo, mi_reativo) # plot da proporção de infectados no reativo plt.figure(nome) plt.clf() plt.plot(inf[:fim], 'b-', label="Infectados") plt.plot(sus[:fim], 'r-', label="Suscetíveis") plt.plot(rec[:fim], 'g-', label="Recuperados") plt.legend() plt.title('Simulação reativa de epidemia na rede BA usando modelo ' + modelo) plt.xlabel('t') plt.ylabel('Quantidade') plt.savefig('figuras/{}.png'.format(nome)) if modelo == 'sir': global ER_reativo_sir ER_reativo_sir = inf
def ex2(BA, ER): WS1 = nx.watts_strogatz_graph(N_redes, K_medio, 0.001) WS2 = nx.watts_strogatz_graph(N_redes, K_medio, 0.1) plt.figure('ex2') plt.clf() for nome in ['BA', 'ER', 'WS1 (p = 0,001)', 'WS2 (p = 0,1)']: G = locals()[nome[:3]] print('ex2 - Processando: ' + nome) inf, _, _, fim = epidemia.reativo(G, 'sir', 1000, beta_reativo, mi_reativo) plt.plot(inf[:fim], label=nome) plt.legend() plt.title('Influência da topologia da rede na simulação de epidemias') plt.xlabel('t') plt.ylabel('Infectados') plt.savefig('figuras/ex2.png')
def ex4(BA, ER): BA_lambda_crítico = K_medio / calcula_momento(BA, 2) print('BA - lambda_crítico = ', BA_lambda_crítico) ER_lambda_crítico = K_medio / calcula_momento(ER, 2) print('ER - lambda_crítico = ', ER_lambda_crítico) print('ex4 - Processando reativo') BA_reativo = [] ER_reativo = [] lambdas_x = np.arange(0, 0.2, 0.01) for lbda in lambdas_x: beta = lbda / mi_reativo inf, _, _, _ = epidemia.reativo(BA, 'sis', num_iter_reativo, beta, mi_reativo) BA_reativo.append(inf[-1]) inf, _, _, _ = epidemia.reativo(ER, 'sis', num_iter_reativo, beta, mi_reativo) ER_reativo.append(inf[-1]) print('ex4 - Processando contato') BA_contato = [] ER_contato = [] for lbda in lambdas_x: beta = lbda / mi_contato inf, _, _, _ = epidemia.contato(ER, 'sis', num_iter_contato, beta, mi_contato) ER_contato.append(inf[-1]) inf, _, _, _ = epidemia.contato(BA, 'sis', num_iter_contato, beta, mi_contato) BA_contato.append(inf[-1]) ## Plots # contato plt.figure('ex4 - contato') plt.clf() plt.title( 'Coeficiente para propagação de epidemias por contato, teórico vs real' ) plt.plot(lambdas_x, BA_contato, 'b-', label=r'BA: $\lambda_c$ = {}'.format(BA_lambda_crítico)) plt.plot(lambdas_x, ER_contato, 'r-', label=r'ER: $\lambda_c$ = {}'.format(ER_lambda_crítico)) plt.legend() plt.xlabel(r'$\lambda$') plt.ylabel('Infectados') plt.savefig('figuras/ex4-contato.png') # reativo plt.figure('ex4 - reativo') plt.clf() plt.title( 'Coeficiente para propagação de epidemias reativo, teórico vs real') plt.plot(lambdas_x, BA_reativo, 'b-', label=r'BA: $\lambda_c$ = {}'.format(BA_lambda_crítico)) plt.plot(lambdas_x, ER_reativo, 'r-', label=r'ER: $\lambda_c$ = {}'.format(ER_lambda_crítico)) plt.legend() plt.xlabel(r'$\lambda$') plt.ylabel('Infectados') plt.savefig('figuras/ex4-reativo.png')