Example #1
0
def testa_betac(c, pmig, v_alpha):
    nome_arq = "new_teste_betac_c=%.2f_m=%.2f.txt" % (c, pmig)
    f = open(nome_arq, "w")
    precisao = 0.001

    logger.info("Calculando alpha critico...")
    # valor de alpha_critico quando beta = 1 (integral)
    alpha_c = encontra_alpha_critico(c, pmig, n)
    logger.info("Valor encontrado: %f" % alpha_c)
    # como alpha e beta são simétricos, beta_critico quando alpha=1 é alpha_c
    beta_c = alpha_c

    logger.info("Calculando beta critico pela simulacao...")
    # alpha_c, erro = encontra_valor_critico(c,pmig,'alpha',1.,[0.,alpha_c])
    beta_c = min(beta_c + 0.05, 1.0)
    beta_c1, beta_c2, distancia = calcula_beta_critico(c, pmig, 1.0, [0.0, beta_c])
    logger.info("Beta encontrado = %f e %f" % (beta_c1, beta_c2))

    alpha_c1, alpha_c2 = beta_c1, beta_c2

    alpha_c = (alpha_c1 + alpha_c2) / 2
    beta_min1, beta_min2 = beta_c1, beta_c2
    beta_min = (beta_c1 + beta_c2) / 2
    mindist = distancia
    incremento = (1.0 - alpha_c) / 4
    v_alpha = np.arange(alpha_c, 1.0, incremento)[1:] if alpha_c < 1.0 else []

    # beta_c_pred1 = beta_critico(c,pmig,n,alpha_c)
    beta_c_pred = beta_critico(c, pmig, n, alpha_c)
    f.write("%.7f\t%.7f\t%.7f\t%.7f\t%.7f\n" % (alpha_c, 1.0, 1.0, beta_c_pred, distancia))
    if len(v_alpha) > 0:
        logger.info("Entra no loop...v_alpha=[%f,%f,%f]" % (v_alpha[0], v_alpha[1], v_alpha[2]))
    for alpha in v_alpha:
        beta_c = (beta_c1 + beta_c2) / 2
        # encontra beta_max
        beta_max = min(beta_c + (alpha - 1) * (1.0 - beta_c) / (alpha_c - 1), 1.0)

        logger.info("C: %f \tALPHA:%f \t MIG: %f" % (c, alpha, pmig))

        # beta_c_pred1 = beta_critico(c,pmig,n,alpha)
        beta_c_pred = beta_critico(c, pmig, n, alpha)
        beta_c1, beta_c2, distancia = calcula_beta_critico(c, pmig, alpha, [beta_min, beta_max])
        logger.info("Beta encontrado = %f e %f" % (beta_c1, beta_c2))
        f.write("%.7f\t%.7f\t%.7f\t%.7f\t%.7f\n" % (alpha, beta_c1, beta_c2, beta_c_pred, distancia))
        alpha_c = alpha

    # beta_c_pred1 = beta_critico(c,pmig,n,1.)
    beta_c_pred = beta_critico(c, pmig, n, 1.0)
    f.write("%.7f\t%.7f\t%.7f\t%.7f\t%.7f\n" % (1.0, beta_min1, beta_min2, beta_c_pred, mindist))

    f.close()
Example #2
0
def testa_betac(c, pmig, df, logger):
    nome_arq = "teste_betac_c=%.2f_m=%.2f.txt" %(c,pmig) 
    f = open(nome_arq, "w")
    precisao = 0.001

    logger.info('Calculando alpha critico...')
    # valor de alpha_critico quando beta = 1 (integral)
    alpha_c = encontra_alpha_critico(c,pmig,n)
    logger.info('Valor encontrado: %f' %alpha_c)
    # como alpha e beta são simétricos, beta_critico quando alpha=1 é alpha_c
    beta_c = alpha_c
   
    logger.info('Calculando beta critico pela simulacao para m = 1...') 
    #alpha_c, erro = encontra_valor_critico(c,pmig,'alpha',1.,[0.,alpha_c])
    beta_c = min(beta_c+0.05,1.)
    beta_c1, distancia = calcula_beta_critico(c,pmig,1.,df,logger)
    logger.info("Beta encontrado = %f" %(beta_c1))

    alpha_c= beta_c1

    beta_min1 = beta_c1
    beta_min = beta_c1
    mindist = distancia
    incremento = (1.-alpha_c)/4
    v_alpha = np.arange(alpha_c, 1., incremento)[1:] if alpha_c < 1. \
                else []

    beta_c_pred = beta_critico(c,pmig,n,alpha_c)
    f.write('%.7f\t%.7f\t%.7f\t%.7f\n'\
            %(alpha_c,1.,beta_c_pred,distancia))
    if len(v_alpha)>0:
        logger.info('Entra no loop...v_alpha=[%f,%f,%f]'%(v_alpha[0],v_alpha[1],v_alpha[2]))
    for alpha in v_alpha:
        beta_c = beta_c1
        #encontra beta_max 
        beta_max = min(beta_c + (alpha-1)*(1.-beta_c)/(alpha_c-1),1.)
        
        logger.info("C: %f \tALPHA:%f \t MIG: %f" %(c,alpha,pmig))

        beta_c_pred = beta_critico(c,pmig,n,alpha)
        beta_c1, distancia = calcula_beta_critico(c,pmig,alpha,df,logger)
        logger.info("Beta encontrado = %f" %(beta_c1))
        f.write('%.7f\t%.7f\t%.7f\t%.7f\n'\
            %(alpha,beta_c1,beta_c_pred,distancia))
        alpha_c = alpha
    
    beta_c_pred = beta_critico(c,pmig,n,1.)
    f.write('%.7f\t%.7f\t%.7f\t%.7f\n'\
        %(1.,beta_min1,beta_c_pred,mindist))
        
    f.close()
Example #3
0
def testa_mc(c, alpha):
    nome_arq = "new_teste_mc_c=%.2f_alpha=%.2f.txt" %(c,alpha) 
    f = open(nome_arq, "w")
    precisao = 0.001

    logger.info('Calculando mig critico quando beta = 1...')
    m_c = encontra_m_critico(c,alpha,n)
    logger.info('Valor encontrado: %f' %m_c)

    logger.info('Calculando beta critico quando m = 1...')
    beta_c = beta_critico(c,1.,n,alpha)
    logger.info('Valor encontrado: %f' %beta_c)
    # Este é o beta a partir do qual m_c = 1.
   
    logger.info('Calculando m critico pela simulacao...') 
    m_c = min(m_c+0.05,1.)
    m_c1, m_c2, distancia = calcula_m_critico(c,alpha,1.,[0.,m_c])
    logger.info(u"Taxa de migração encontrada = %f e %f" %(m_c1, m_c2))

    logger.info('Calculando beta critico pela simulacao...') 
    beta_c = min(beta_c+0.05,1.)
    beta_c1, beta_c2, distancia_b = calcula_beta_critico(c,1.,alpha,[0.,beta_c])
    logger.info("Beta encontrado = %f e %f" %(beta_c1,beta_c2))

    beta_c = (beta_c1+beta_c2)/2

    m_max1, m_max2 = m_c1, m_c2
    m_max = (m_c1+m_c2)/2
    maxdist = distancia
    incremento = (beta_c)/4
    v_beta = np.arange(0., beta_c, incremento)[1:][::-1] if beta_c > 0. \
                else []

    m_c_pred = m_critico(c,n,alpha,beta_c)
    f.write('%.7f\t%.7f\t%.7f\t%.7f\t%.7f\n'\
            %(beta_c,0.,0.,m_c_pred,distancia_b))
    if len(v_beta)>0:
        logger.info('Entra no loop...v_beta=[%f,%f,%f]'%(v_beta[0],v_beta[1],v_beta[2]))
    for beta in v_beta:
        m_c = (m_c1+m_c2)/2
        
        #encontra m_max 
        m_max = min(m_c + 0.005,1.)
        
        logger.info("C: %f \tALPHA:%f \t BETA: %f" %(c,alpha,beta))

        m_c_pred = m_critico(c,n,alpha,beta)
        m_c1, m_c2, distancia = calcula_m_critico(c,alpha,beta,[0., m_max])
        logger.info(u"Taxa de migração encontrada = %f e %f" %(m_c1, m_c2))
        f.write('%.7f\t%.7f\t%.7f\t%.7f\t%.7f\n'\
            %(beta,m_c1,m_c2,m_c_pred,distancia))
    
    m_c_pred = m_critico(c,n,alpha,1.)
    f.write('%.7f\t%.7f\t%.7f\t%.7f\t%.7f\n'\
        %(1.,m_max1,m_max2,m_c_pred,maxdist))
        
    f.close()
Example #4
0
def testa_betac(c, pmig, v_alpha):
    nome_arq = "copia_teste_betac_c=%.2f_m=%.2f.txt" % (c, pmig)
    f = open(nome_arq, "w")
    precisao = 0.001

    lbr = []
    lbp1 = []
    lbp2 = []
    for alpha in v_alpha:
        numpt = 10
        beta_c_pred1 = beta_critico(c, pmig, n, alpha)
        beta_c_pred2 = beta_critico2(c, pmig, n, alpha)
        logger.info("C: %f \tALPHA:%f \t MIG: %f" % (c, alpha, pmig))
        continua = True
        reverso = False
        primeiro, ultimo = 0.0, 1.0
        beta = primeiro
        while (continua) and (ultimo - primeiro > precisao):
            logger.debug("primeiro: %f" % primeiro)
            logger.debug("ultimo: %f" % ultimo)
            vec_beta = np.arange(primeiro, ultimo + 1.0 / (10 * numpt), 1.0 / numpt)
            for i, beta in enumerate(vec_beta):
                logger.debug("i: %d, beta: %f" % (i, beta))
                nfim, ngeracoes = bobo(c, alpha, beta, pmig)
                logger.debug("Numero de simulacoes ate o fim: %d" % nfim)
                if nfim > 0:
                    if i == 0:
                        continua = False
                        logger.debug("Continua modificado: False")
                    else:
                        numpt = 10 * numpt
                        primeiro = vec_beta[i - 1] + 1.0 / numpt
                        ultimo = vec_beta[i] - 1.0 / numpt
                    break
                elif beta == max(vec_beta):
                    continua = False

        beta_c_real = beta
        logger.info("beta_c encontrado: %f" % beta_c_real)
        f.write(str(pmig))
        f.write("\t")
        f.write(str(beta_c_real))
        f.write("\t")
        f.write(str(beta_c_pred1))
        f.write("\t")
        f.write(str(beta_c_pred2))
        f.write("\n")
        lbr.append(beta_c_real)
        lbp1.append(beta_c_pred1)
        lbp2.append(beta_c_pred2)

    f.close()

    plota_fig(c, pmig, v_alpha, lbr, lbp1, lbp2, opcao="beta")
Example #5
0
def plota_beta_alpha(v_alpha, v_beta, yerr, params, new='True'):
    c,pmig,n = params
    titulo = r'Critical war probability comparison (model vs. simulation) '
    titulo = titulo + '\n' + r'$c$ = %.2f, $m$ = %.2f and $n$ = %d' \
            %(c, pmig, n)        
    alpha_c = v_alpha[0]
    if alpha_c < 1.: 
        p = interpolate.interp1d(v_alpha,v_beta,kind=2) 
    else:
        p = lambda arg: 1.
    x = np.arange(0.,1.01,0.01)
    func = lambda arg: p(arg) if arg > alpha_c else 1.
    y = [func(elem) for elem in x]
    
    fig = plt.figure(figsize=(7,6), dpi=300)
    ax = fig.add_subplot(111)

    ax.errorbar(v_alpha,v_beta,yerr=yerr,fmt='o')#,label='simulacao')
    ax.plot(x,y,'-',label='simulacao')
    v_alpha = x
    v_beta_pred = [beta_critico(c,pmig,n,alpha) for alpha in v_alpha]
    ax.plot(v_alpha,v_beta_pred,'-',label='autovalor=1')
    
    plt.title(titulo)
    plt.xlabel(r'$\alpha$')
    plt.ylabel(r'$\beta$')

    plt.xlim([-0.01,1.01])
    plt.ylim([-0.01,1.01])
    
    lgd = ax.legend(loc="center", bbox_to_anchor=(0.5,-0.2), fancybox=True, ncol=3)
    
    plt.grid(True)
    plt.tight_layout()
    if new:
        nome_fig = "comparacao_beta_alpha_c=%.2f_%s=%.1f.png" \
                        %(c,'pmig',pmig)
    else:
        nome_fig = "teste_comparacao_beta_alpha_c=%.2f_%s=%.1f.png" \
                        %(c,'pmig',pmig)
    print nome_fig
    plt.savefig(nome_fig, additional_artists = lgd, bbox_inches="tight")