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()
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)
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()
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)
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()
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()
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()
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)
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")