def rotinaEvolucao(arqEnt, arqEvol): TIPO, POP, D, Li, Ui, extra = leitura.entrada(arqEnt) sel, elite, cxTipo, cxProb, mutProb, passos, nExec = leitura.paramEvo( arqEvol) #cidades = geraCidades(D) cidades = cidadesComum() arqFit = open('fitness.txt', 'w') arqDivPar = open('diversidadePar.txt', 'w') arqDivCentro = open('diversidadeCentro.txt', 'w') melhorFitLista = [0.0] * passos mediaFitLista = [0.0] * passos divParLista = [0.0] * passos divCentroLista = [0.0] * passos max = False if (max == True): melhorFit = -100.0 else: melhorFit = 9000000.0 for i in range(0, nExec): melhorIndAtual, melhorFitAtual = evolui(TIPO, POP, D, Li, Ui, extra, sel, elite, cxTipo, cxProb, mutProb, passos, melhorFitLista, mediaFitLista, divParLista, divCentroLista, cidades) if (max == True and melhorFitAtual > melhorFit): melhorFit = melhorFitAtual melhorInd = copy.deepcopy(melhorIndAtual) elif (max == False and melhorFitAtual < melhorFit): melhorFit = melhorFitAtual melhorInd = copy.deepcopy(melhorIndAtual) for i in range(0, passos): melhorFitLista[i] = melhorFitLista[i] / nExec mediaFitLista[i] = mediaFitLista[i] / nExec divParLista[i] = divParLista[i] / nExec divCentroLista[i] = divCentroLista[i] / nExec s = '{} {} {}\n'.format(i, melhorFitLista[i], mediaFitLista[i]) arqFit.write(s) s = '{} {}\n'.format(i, divParLista[i]) arqDivPar.write(s) s = '{} {}\n'.format(i, divCentroLista[i]) arqDivCentro.write(s) result = fitIndivTSM(melhorInd, cidades) ##### caixeiro viajante return melhorInd, result, cidades
def rotinaEvolucao(arqEnt, arqEvol): TIPO, POP, D, Li, Ui, extra = leitura.entrada(arqEnt) sel, elite, cxTipo, cxProb, mutProb, passos, nExec = leitura.paramEvo( arqEvol) arqFit = open('fitness.txt', 'w') arqDivPar = open('diversidadePar.txt', 'w') arqDivCentro = open('diversidadeCentro.txt', 'w') melhorFitLista = [0.0] * passos mediaFitLista = [0.0] * passos divParLista = [0.0] * passos divCentroLista = [0.0] * passos max = False if (max == True): melhorFit = -100.0 else: melhorFit = 9000000.0 for i in range(0, nExec): melhorIndAtual, melhorFitAtual = evolui(TIPO, POP, D, Li, Ui, extra, sel, elite, cxTipo, cxProb, mutProb, passos, melhorFitLista, mediaFitLista, divParLista, divCentroLista) if (max == True and melhorFitAtual > melhorFit): melhorFit = melhorFitAtual melhorInd = copy.deepcopy(melhorIndAtual) elif (max == False and melhorFitAtual < melhorFit): melhorFit = melhorFitAtual melhorInd = copy.deepcopy(melhorIndAtual) for i in range(0, passos): melhorFitLista[i] = melhorFitLista[i] / nExec mediaFitLista[i] = mediaFitLista[i] / nExec divParLista[i] = divParLista[i] / nExec divCentroLista[i] = divCentroLista[i] / nExec s = '{} {} {}\n'.format(i, melhorFitLista[i], mediaFitLista[i]) arqFit.write(s) s = '{} {}\n'.format(i, divParLista[i]) arqDivPar.write(s) s = '{} {}\n'.format(i, divCentroLista[i]) arqDivCentro.write(s) melhorIndReal, result = ackleyIndBin(melhorInd, D, Li, Ui, extra) ###### função ackley return melhorInd, melhorIndReal, result
def rotinaEvolucao(arqEnt, arqEvol): TIPO, POP, D, Li, Ui, extra = leitura.entrada(arqEnt) sel, elite, cxTipo, cxProb, mutProb, passos, nExec = leitura.paramEvo( arqEvol) arqFit = open('rsFitness.txt', 'w') #arqDivPar = open('diversidadePar.txt', 'w') #arqDivCentro = open('diversidadeCentro.txt', 'w') #arqDivDPM = open('diversidadeDPM.txt', 'w') arqDPM = open('rsDpmFitness.txt', 'w') melhorFitLista = [0.0] * passos mediaFitLista = [0.0] * passos dpmFitLista = [0.0] * passos #divParLista = [0.0]*passos #divCentroLista = [0.0]*passos #divDPMLista = [0.0]*passos global matrizLucro global maiorLucro global totalCol matrizLucro, maiorLucro = geraMatrizLucro(D) totalCol = totalPares(D) max = True if (max == True): melhorFit = -100.0 else: melhorFit = 9000000.0 melhorInd = [] saida = mp.Queue() ''' for i in range(0, nExec): melhorIndAtual, melhorFitAtual = evolui(TIPO, POP, D, Li, Ui, extra, sel, elite, cxTipo, cxProb, mutProb, passos, melhorFitLista, mediaFitLista, divDPMLista) if(max == True and melhorFitAtual > melhorFit): melhorFit = melhorFitAtual melhorInd = copy.deepcopy(melhorIndAtual) elif(max == False and melhorFitAtual < melhorFit): melhorFit = melhorFitAtual melhorInd = copy.deepcopy(melhorIndAtual) ''' processes = [ mp.Process(target=evolui, args=(TIPO, POP, D, copy.deepcopy(Li), copy.deepcopy(Ui), passos, saida)) for x in range(nExec) ] for p in processes: p.start() #for p in processes: # p.join() resultados = [] while 1: running = any(p.is_alive() for p in processes) while not saida.empty(): #process_queue_data() resultados.append(saida.get()) if not running: break time.sleep(0.5) #resultados = [saida.get() for p in processes] #for i in resultados: # print(i) if (max == True): for i in resultados: if (i[1] > melhorFit): melhorFit = i[1] melhorInd = copy.deepcopy(i[0]) else: for i in resultados: if (i[1] < melhorFit): melhorFit = i[1] melhorInd = copy.deepcopy(i[0]) for r in resultados: for j in range(0, passos): melhorFitLista[j] += r[2][j] mediaFitLista[j] += r[3][j] dpmFitLista[j] += r[4][j] for i in range(0, passos): melhorFitLista[i] = melhorFitLista[i] / nExec mediaFitLista[i] = mediaFitLista[i] / nExec dpmFitLista[i] = dpmFitLista[i] / nExec #print(dpmFitLista[i]) #divParLista[i] = divParLista[i]/nExec #divCentroLista[i] = divCentroLista[i]/nExec #divDPMLista[i] = divDPMLista[i]/nExec s = '{} {} {} {} {}\n'.format(i, melhorFitLista[i], mediaFitLista[i], (mediaFitLista[i] + dpmFitLista[i]), (mediaFitLista[i] - dpmFitLista[i])) arqFit.write(s) #s = '{} {}\n'.format(i, divParLista[i]) #arqDivPar.write(s) #s = '{} {}\n'.format(i, divCentroLista[i]) #arqDivCentro.write(s) #s = '{} {}\n'.format(i, divDPMLista[i]) #arqDivDPM.write(s) s = '{} {}\n'.format(i, dpmFitLista[i]) arqDPM.write(s) objetivo = objetivoIndiv(melhorInd) ##### 8 rainhas lucro = lucroIndiv(melhorInd, matrizLucro) return melhorInd, objetivo, lucro, melhorFit