def crossover2by2(population, fitnessList): #Retorna a população sem alteração caso não deva fazer o crossover if not shouldCrossover: return population newPopulation = population #Para cada 2 individuos da população faça for i in range(0, len(population), 2): #Verifica se deve aplicar crossover para o par should = random() <= crossoverProbability if should: #Se sim, gera um ponto e cruza os indivíduos [x1,y1] = divideElement(population[i]) [x2,y2] = divideElement(population[i+1]) point1 = randint(crossoverRangeStart, crossoverRangeEnd) point2 = randint(crossoverRangeStart, crossoverRangeEnd) [crossX1, crossX2] = BinaryString.crossover(x1,x2,point1) [crossY1, crossY2] = BinaryString.crossover(y1,y2,point2) newPopulation[i] = BinaryString(crossX1.bin + crossY1.bin) newPopulation[i+1] = BinaryString(crossX2.bin + crossY2.bin) return newPopulation
def crossover2by2(population, fitnessList): #Retorna a população sem alteração caso não deva fazer o crossover if not shouldCrossover: return population newPopulation = population #Para cada 2 individuos da população faça for i in range(0, len(population), 2): #Verifica se deve aplicar crossover para o par should = random() <= crossoverProbability if should: #Se sim, gera um ponto e cruza os indivíduos point = randint(crossoverRangeStart, crossoverRangeEnd) [newPopulation[i], newPopulation[i+1]] = BinaryString.crossover(population[i],population[i+1],point) return newPopulation