def iterar(self, populacao, nGeracoes, pontuacaoSatisfatoria=None): if len(populacao) < 1: raise Exception('Impossivel iterar populacao de tamanho menor que 1') ranking = Ranking.validaInstancias(populacao, self.funcaoObjetivo, maxmin=self.maxmin) melhorInstancia = ranking.getPopulacao()[0] for i in range(nGeracoes): populacao = melhorInstancia.__class__.geraAleatorios(len(populacao)-1) + [melhorInstancia] ranking = Ranking.validaInstancias(populacao, self.funcaoObjetivo, maxmin=self.maxmin) if pontuacaoSatisfatoria is not None and ranking.isMelhorQue(pontuacaoSatisfatoria): logging.info('Número de iterações: %d' % (i+1)) return ranking return ranking
def evoluir(self, populacao, nGeracoes, pontuacaoSatisfatoria=None): if len(populacao) < 2: raise Exception('Impossivel evoluir populacao de tamanho menor que 2') self.tamanhoPopulacaoInicial = len(populacao) ranking = Ranking.validaInstancias(populacao, self.funcaoAdaptacao, maxmin=self.maxmin) for i in range(nGeracoes): populacaoInicial, novaGeracao = self.fazCruzamentoPopulacao(ranking.getPopulacao()[:self.tamanhoPopulacaoInicial], self.probCrossover, self.proporcaoFilhos, self.individuoBuilder, self.tamanhoPopulacaoInicial) novaGeracao = self.fazMutacaoPopulacao(novaGeracao, self.probMutacao, self.individuoBuilder) populacao = populacaoInicial + novaGeracao if self.manterPais else novaGeracao ranking = Ranking.validaInstancias(populacao, self.funcaoAdaptacao, maxmin=self.maxmin) logging.info('%s: Ranking: %s' % (i, ranking.getRanking()[0][1])) if pontuacaoSatisfatoria is not None and ranking.isMelhorQue(pontuacaoSatisfatoria): logging.info('Número de iterações: %d' % (i+1)) return ranking return ranking