def cruzar(self,pai,mae): taxaDoCruzamento = random.randint(0,100) if taxaDoCruzamento >= 80: #Se não houver cruzamente ele retorna vazio return None corte = random.randint(1,7) #Pega aonde vai ser o corte print("") print("Corte do cromossomo: ",corte) filho1 = Individuo() filho2 = Individuo() filho1.tabuleiro.rainhas.clear() filho2.tabuleiro.rainhas.clear() #Limpa as listas pois sempre que um individuo é iniciado ele ja começa com um tabueiro pronto filho1.cromossomos.clear() filho2.cromossomos.clear() for cromossomo in range(0,corte): #Do 0 até o corte do pai rainhaPai = cp.deepcopy(pai.tabuleiro.rainhas[cromossomo]) rainhaMae = cp.deepcopy(mae.tabuleiro.rainhas[cromossomo]) filho1.tabuleiro.rainhas.append(rainhaPai) filho2.tabuleiro.rainhas.append(rainhaMae) #Faz a mesclagem dos pais para os filhos for cromossomo in range(corte,8): #Do corte até o fim, pra mãe rainhaPai = cp.deepcopy(pai.tabuleiro.rainhas[cromossomo]) rainhaMae = cp.deepcopy(mae.tabuleiro.rainhas[cromossomo]) filho1.tabuleiro.rainhas.append(rainhaMae) filho2.tabuleiro.rainhas.append(rainhaPai) print("") print("Cromossomos do pai:",pai.cromossomos) print("Cromossomos da mae:",mae.cromossomos) print("") taxaDeMutacao = 3 chance1 = random.randint(0,100) #Pega um número entre 0 e 100, se for menor ou igual a 3 ele muta print("Chance do Filho 1:",chance1) if chance1 <= taxaDeMutacao: filho1 = self.mutacao(filho1) chance2 = random.randint(0,100) print("Chance do Filho 2:",chance2) if chance2 <= taxaDeMutacao: filho2 = self.mutacao(filho2) filho1.geraCromossomo() filho2.geraCromossomo() #Gerando a lista de cromossomos com as novas rainhas filho1.calculaFitness() #Calculando os fitness dos filhos filho2.calculaFitness() print("") print("Filho 1:",filho1.fitness) print("Filho 2:",filho2.fitness) print("") filhos = [filho1, filho2] return filhos