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