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()
Exemple #2
0
def testa(b, cvalores, npt):
    for c in cvalores:
        logger.info(u"....Calculando b = %.2f, c = %.2f....." %(b, c))
        m_c = m_critico(1,b,c,n,delta,delta,beta)
        m_c2 = m_critico2(1,b,c,n,delta,delta,beta)
        logger.info(u"A taxa de migração crítica é %.3f (ou %.3f - interpol)" %(m_c, m_c2))
        #logger.info(u"Logo: abaixo de mig = %.3f, há chance de emergência de altruísmo. Para taxas de migrações mais altas, a emergência se torna implausível" %m_c)
        vec_m1 = np.arange(0.,m_c,1./npt)
        ini2 = 0. if vec_m1.size == 0 else vec_m1[-1]
        vec_m2 = 0 if list(vec_m1)==[] else np.arange(ini2+1./npt, 1.+1./(10*npt), 1./npt)[::-1]

        for pmig in vec_m1:
            n_fim, n_geracoes = bobo(0.,b,c,pmig)
            logger.info(u"O numero de simulacoes concluidas é: %d" %n_fim)
            if n_geracoes == 0:
                logger.info(u"Teste inconclusivo")
                break
            else:
                logger.info(u"O numero de geracoes foi: %d" %n_geracoes)
        for pmig in vec_m2:
            n_fim, n_geracoes = bobo(1.,b,c,pmig)
            logger.info(u"O numero de simulacoes concluidas é: %d" %n_fim)
            if n_geracoes == 0:
                logger.info(u"Teste inconclusivo")
                break
            else:
                logger.info(u"O numero de geracoes foi: %d" %n_geracoes)
Exemple #3
0
def testa(b, cvalores, numpt):
    for c in cvalores:
        #logger.info(u"....Calculando b = %.2f, c = %.2f....." %(b, c))
        m_c = m_critico(1,b,c,n,delta,delta,beta)
        m_c2 = m_critico2(1,b,c,n,delta,delta,beta)
        logger.info(u"A taxa de migração crítica é %.3f (ou %.3f - interpol)" %(m_c, m_c2))
        #logger.info(u"Logo: abaixo de mig = %.3f, há chance de emergência de altruísmo. Para taxas de migrações mais altas, a emergência se torna implausível" %m_c)

        vec_m = np.arange(0.,1.+1./(10*numpt), 1./numpt)
        for mm in vec_m:
            logger.debug("%.3f esta em vec_m1" %mm)

        logger.debug("\n\n")
        nc = mp.cpu_count()-1
        res1 = Parallel(n_jobs=nc)(delayed(bobo)(b,c,m_c,pmig) for pmig in vec_m)

        l1 = np.array(zip(*res1)).T

        for elem in l1:
            benefit = elem[0]
            cost = elem[1]
            pmig = elem[2]
            palavra = u"abaixo" if pmig<m_c else u"acima"
            logger.info(u"Para b = %.2f, c = %.2f e pmig = %.3f - %s do valor de m_c: %.3f" %(benefit, cost, pmig, palavra, m_c))
            n_fim = elem[3]
            logger.info(u"O numero de simulacoes concluidas é: %d" %n_fim)
            n_geracoes = elem[4]
            if n_geracoes:
                logger.info(u"O numero medio de geracoes foi: %d\n" %n_geracoes)
                logger.info(u"\t%d\t%d\t%d\t%d\t%d\n" %(elem[5],elem[6],elem[7],elem[8],elem[9]))
            else:
                logger.info(u"Teste inconclusivo\n")
    def run(self):
        alpha = float(self.alpha)
        n = int(self.nindiv)
        N = int(self.ngroup)
        mu = float(self.mu)
        delta = float(self.delta)
        b = float(self.benefit)
        c = float(self.cost)
        precisao = 0.001
        vbeta = np.arange(0.,1.01, 0.1)

        f = self.output().open('w')         

        for beta in vbeta:
            numpt = 10
            m_c_pred = m_critico(1,b,c,n,delta,alpha,beta)
            logger.info("C: %f \t BETA: %f" %(c,beta))
            continua = True 
            reverso = False
            primeiro, ultimo = 0., 1.
            pmig = primeiro
            while (continua) and (ultimo-primeiro>precisao):
                logger.debug("primeiro: %f" %primeiro)
                logger.debug("ultimo: %f" %ultimo)
                vec_m = np.arange(primeiro,ultimo+1./(10*numpt), 1./numpt)
                if reverso:
                    vec_m = vec_m[::-1]
                for i in xrange(len(vec_m)):
                    pmig = vec_m[i]
                    logger.debug("i: %d, pmig: %f" %(i,pmig))
                    nfim, ngeracoes = bobo(N, n, b, c, delta, mu, 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_m[i-1]+1./numpt
                            ultimo = vec_m[i]-1./numpt
                            reverso=False
                        break
                    elif vec_m[i] == max(vec_m):
                        pmig = vec_m[i] 
                        continua=False
                        reverso=True

            m_c_real = pmig
            logger.info("m_c encontrado: %f" %m_c_real)
            f.write(str(beta))
            f.write("\t")
            f.write(str(m_c_real))            
            f.write("\t")
            f.write(str(m_c_pred))
            f.write("\n")
        f.close()
Exemple #5
0
def testa_mc(c, alpha, vbeta):
    nome_arq = "copia_teste_mc_c=%.2f_alpha=%.2f.txt" % (c, alpha)
    f = open(nome_arq, "w")
    precisao = 0.001

    lmr = []
    lmp1 = []
    lmp2 = []
    for beta in vbeta:
        numpt = 10
        m_c_pred1 = m_critico(c, n, alpha, beta)
        m_c_pred2 = m_critico2(c, n, alpha, beta)
        # logger.info(u"Logo: abaixo de mig = %.3f, há chance de emergência de altruísmo. Para taxas de migrações mais altas, a emergência se torna implausível" %m_c)
        logger.info("C: %f \tALPHA:%f \t BETA: %f" % (c, alpha, beta))
        continua = True
        reverso = False
        primeiro, ultimo = 0.0, 1.0
        pmig = primeiro
        while (continua) and (ultimo - primeiro > precisao):
            logger.debug("primeiro: %f" % primeiro)
            logger.debug("ultimo: %f" % ultimo)
            vec_m = np.arange(primeiro, ultimo + 1.0 / (10 * numpt), 1.0 / numpt)
            for i, pmig in enumerate(vec_m):
                logger.debug("i: %d, pmig: %f" % (i, pmig))
                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_m[i - 1] + 1.0 / numpt
                        ultimo = vec_m[i] - 1.0 / numpt
                    break
                elif pmig == max(vec_m):
                    continua = False

        m_c_real = pmig
        logger.info("m_c encontrado: %f" % m_c_real)
        f.write(str(beta))
        f.write("\t")
        f.write(str(m_c_real))
        f.write("\t")
        f.write(str(m_c_pred1))
        f.write("\t")
        f.write(str(m_c_pred2))
        f.write("\n")
        lmr.append(m_c_real)
        lmp1.append(m_c_pred1)
        lmp2.append(m_c_pred2)

    f.close()

    plota_fig(c, alpha, vbeta, lmr, lmp1, lmp2)
Exemple #6
0
def testa(b, c, vbeta):
    nome_arq = "teste_mc_c=%.2f.txt" % c
    f = open(nome_arq, "w")
    precisao = 0.001

    for beta in vbeta:
        numpt = 10
        m_c_pred = m_critico(1, b, c, n, delta, alpha, beta)
        #logger.info(u"Logo: abaixo de mig = %.3f, há chance de emergência de altruísmo. Para taxas de migrações mais altas, a emergência se torna implausível" %m_c)
        logger.info("C: %f \t BETA: %f" % (c, beta))
        continua = True
        reverso = False
        primeiro, ultimo = 0., 1.
        pmig = primeiro
        while (continua) and (ultimo - primeiro > precisao):
            logger.debug("primeiro: %f" % primeiro)
            logger.debug("ultimo: %f" % ultimo)
            vec_m = np.arange(primeiro, ultimo + 1. / (10 * numpt), 1. / numpt)
            if reverso:
                vec_m = vec_m[::-1]
            for i in xrange(len(vec_m)):
                pmig = vec_m[i]
                logger.debug("i: %d, pmig: %f" % (i, pmig))
                nfim, ngeracoes = bobo(b, c, beta, m_c_pred, 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_m[i - 1] + 1. / numpt
                        ultimo = vec_m[i] - 1. / numpt
                        reverso = False
                    break
                elif vec_m[i] == max(vec_m):
                    pmig = vec_m[i]
                    continua = False
                    reverso = True

        m_c_real = pmig
        logger.info("m_c encontrado: %f" % m_c_real)
        f.write(str(beta))
        f.write("\t")
        f.write(str(m_c_real))
        f.write("\t")
        f.write(str(m_c_pred))
        f.write("\n")

    f.close()
Exemple #7
0
def testa(b, c, vbeta):
    nome_arq = "teste_mc_c=%.2f.txt" %c 
    f = open(nome_arq, "w")
    precisao = 0.001

    for beta in vbeta:
        numpt = 10
        m_c_pred = m_critico(1,b,c,n,delta,alpha,beta)
        #logger.info(u"Logo: abaixo de mig = %.3f, há chance de emergência de altruísmo. Para taxas de migrações mais altas, a emergência se torna implausível" %m_c)
        logger.info("C: %f \t BETA: %f" %(c,beta))
        continua = True 
        reverso = False
        primeiro, ultimo = 0., 1.
        pmig = primeiro
        while (continua) and (ultimo-primeiro>precisao):
            logger.debug("primeiro: %f" %primeiro)
            logger.debug("ultimo: %f" %ultimo)
            vec_m = np.arange(primeiro,ultimo+1./(10*numpt), 1./numpt)
            if reverso:
                vec_m = vec_m[::-1]
            for i in xrange(len(vec_m)):
                pmig = vec_m[i]
                logger.debug("i: %d, pmig: %f" %(i,pmig))
                nfim, ngeracoes = bobo(b,c,beta,m_c_pred,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_m[i-1]+1./numpt
                        ultimo = vec_m[i]-1./numpt
                        reverso=False
                    break
                elif vec_m[i] == max(vec_m):
                    pmig = vec_m[i] 
                    continua=False
                    reverso=True

        m_c_real = pmig
        logger.info("m_c encontrado: %f" %m_c_real)
        f.write(str(beta))
        f.write("\t")
        f.write(str(m_c_real))            
        f.write("\t")
        f.write(str(m_c_pred))
        f.write("\n")

    f.close()
Exemple #8
0
def testa(b, cvalores, numpt):
    nome_arq = "0teste_beta=%.2f_b=%.2f.txt" % (beta, b)
    f = open(nome_arq, "w")

    for c in cvalores:
        m_c = m_critico(1, b, c, n, delta, alpha, beta)
        m_c2 = m_critico2(1, b, c, n, delta, alpha, beta)
        logger.info(u"A taxa de migração crítica é %.3f (ou %.3f - interpol)" %
                    (m_c, m_c2))
        #logger.info(u"Logo: abaixo de mig = %.3f, há chance de emergência de altruísmo. Para taxas de migrações mais altas, a emergência se torna implausível" %m_c)

        vec_m = np.arange(0., 1. + 1. / (10 * numpt), 1. / numpt)
        for mm in vec_m:
            logger.debug("%.3f esta em vec_m1" % mm)

        logger.debug("\n\n")
        nc = mp.cpu_count() - 1
        res1 = Parallel(n_jobs=nc)(delayed(bobo)(b, c, m_c, pmig)
                                   for pmig in vec_m)

        l1 = np.array(zip(*res1)).T

        for elem in l1:
            benefit = elem[0]
            cost = elem[1]
            pmig = elem[2]
            palavra = u"abaixo" if pmig < m_c else u"acima"
            logger.info(
                u"Para b = %.2f, c = %.2f e pmig = %.3f - %s do valor de m_c: %.3f"
                % (benefit, cost, pmig, palavra, m_c))
            f.write(str(c))
            f.write("\t")
            f.write(str(pmig))
            f.write("\t")
            for i in xrange(5):
                f.write(str(elem[5 + i]))
                f.write("\t")
            f.write("\n")
            n_fim = elem[3]
            logger.info(u"O numero de simulacoes concluidas é: %d" % n_fim)
            n_geracoes = elem[4]
            if n_geracoes:
                logger.info(u"O numero medio de geracoes foi: %d" % n_geracoes)
                logger.info(u"\t%d\t%d\t%d\t%d\t%d\n" %
                            (elem[5], elem[6], elem[7], elem[8], elem[9]))
            else:
                logger.info(u"Teste inconclusivo\n")

    f.close()
Exemple #9
0
def gera_simulacao(gnum, inum, pa, b, c, delta, mutacao, alpha, beta, pmig, pa_automatico):

    logger.info(u"Começando a simulação")

    if pa_automatico:
        m_c = m_critico(1,b,c,inum,delta,alpha,beta)
        logger.info(u"A taxa de migração crítica é: %.3f" %m_c)
        pa = 1. if pmig > m_c else 0.0001

    logger.info(u"Parâmetros: N=%d, n=%d, pA=%.2f, b=%.2f, c=%.2f, delta=%.3f,\
        \n\t\tmu=%.4f, alpha=%.1f, beta=%.2f, pmig=%.2f" \
        %(gnum, inum, pa, b, c, delta, mutacao, alpha, beta, pmig))

    A = int(gnum*inum*pa)
    grupos,lfit,lfit_m,mpvencer = initSim(gnum,inum,A,b,c,delta,alpha)
    x = time.time()+random.random()
    return simula(gnum,inum,mutacao,beta,pmig,grupos,lfit,lfit_m,mpvencer,x)
Exemple #10
0
def plota_m_beta(v_beta, v_m, yerr, params, new=True):
    c,alpha,n = params
    titulo = r'Critical migration rate comparison (model vs. simulation) '
    titulo = titulo + '\n' + r'$c$ = %.2f, $\alpha$ = %.2f and $n$ = %d' \
            %(c, alpha, n)        
    beta_c = v_beta[0]
    if beta_c < 1.:
        p = interpolate.interp1d(v_beta,v_m,kind=1) 
    else:
        p = lambda arg: 0.
    x = np.arange(0.,1.01,0.01)
    func = lambda arg: p(arg) if arg > beta_c else 0.
    y = [func(elem) for elem in x]

    fig = plt.figure(figsize=(7,6), dpi=300)
    ax = fig.add_subplot(111)

    ax.errorbar(v_beta,v_m,yerr=yerr,fmt='o',label='simulacao')
    #ax.plot(x,y,'-',label='simulacao')
    v_beta = x
    v_m_pred = [m_critico(c,n,alpha,beta) for beta in v_beta]
    ax.plot(v_beta,v_m_pred,'-',label='autovalor=1')

    plt.title(titulo)
    plt.xlabel(r'$\beta$')
    plt.ylabel(r'$m_c$')

    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_m_beta_c=%.2f_%s=%.1f.png" \
                        %(c,'alpha',alpha)
    else:
        nome_fig = "teste_comparacao_m_beta_c=%.2f_%s=%.1f.png" \
                        %(c,'alpha',alpha)
    plt.savefig(nome_fig, additional_artists = lgd, bbox_inches="tight")