Esempio n. 1
0
def crossover(populacao):

    print("_________________CROSSOVER____________________________\n")

    newPopulacao = []

    for i in populacao: #vou gerar a mesma quantidade de individuos  para a nova geracao

        filho = Individuo()
        filhoParte1 = []
        pai1 = selecaoRoleta(populacao)
        pai2 = selecaoRoleta(populacao)

        #escolho os genes inicial e final para pegarmos do pai1
        gene1 = int(randint(0,len(pai1.pontos)))
        gene2 = int(randint(0, len(pai1.pontos)))

        menor = min(gene1,gene2)
        maior = max(gene1,gene2)

        #print("maior " + str(maior) + "menor " + str(menor))
        for i in range(menor,maior):
            filhoParte1.append(pai1.pontos[i])

        filhoParte2 = [ponto for ponto in pai2.pontos if ponto not in filhoParte1] #pega os pontos restantes que não estão na parte 1

        filho.pontos = filhoParte1 + filhoParte2 #junta as duas partes para formar uma só

        calculo = calculateRoute(pai1.origem, filho.pontos)

        filho.origem = pai1.origem
        filho.duracao = calculo["routes"][0]["legs"][0]["duration"]["value"]
        filho.distancia = calculo["routes"][0]["legs"][0]["distance"]["value"]
        filho.duracaoText = calculo["routes"][0]["legs"][0]["duration"]["text"]
        filho.distanciaText = calculo["routes"][0]["legs"][0]["distance"]["text"]
        newPopulacao.append(filho)

        print("_________________NOVO INDIVIDUO____________________________\n")
        print(str(filho))

    return newPopulacao