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