def gera_nova_populacao(self, shapes = None): self.populacao = sorted(self.populacao, key=lambda x: x.avaliacao) nova_populacao = [] while len(nova_populacao) < len(self): p1 = self.seleciona() p2 = self.seleciona() while p1 == p2: p2 = self.seleciona() if shapes: f1, f2 = Individuo.crossover_rede(p1, p2, shapes) else: f1, f2 = Individuo.crossover(p1, p2) if random() < self.prob_mutacao: f1.mutacao() if random() < self.prob_mutacao: f2.mutacao() nova_populacao.append(f1) nova_populacao.append(f2) while len(nova_populacao) > len(self): nova_populacao.remove(nova_populacao[randint( 0, len(nova_populacao))]) self.populacao = nova_populacao self.geracao += 1