Пример #1
0
 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