Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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