示例#1
0
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')
示例#2
0
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')
示例#3
0
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
示例#4
0
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')
示例#5
0
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')