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