public List <string> Resolver(double taxaMutacao, int numeroGeracoes, List <double> espacos, List <double> valores, double limiteEspacos) { InicializarPopulacao(espacos, valores, limiteEspacos); for (int geracao = 0; geracao < numeroGeracoes; geracao++) { var somaAvaliacao = SomaAvaliacoes(); List <Individuo> novaPopulacao = new List <Individuo>(); for (int i = 0; i < TamanhoPopulacao; i += 2) { var pai1 = SelecionaIndicePai(somaAvaliacao); var pai2 = SelecionaIndicePai(somaAvaliacao); var filhos = Populacao[pai1].Crossover(Populacao[pai2]); novaPopulacao.Add(filhos[0].Mutacao(taxaMutacao)); novaPopulacao.Add(filhos[1].Mutacao(taxaMutacao)); } Populacao = novaPopulacao; Populacao.ForEach(x => x.Avaliacao()); OrdenarPopulacao(); MelhorSolucao = Populacao.First(); ListaSolucoes.Add(MelhorSolucao.NotaAvaliacao); MelhorIndividuo(MelhorSolucao); } return(MelhorSolucao.Cromossomo); }
public void InicializarPopulacao(List <double> espacos, List <double> valores, double limiteEspacos) { for (int i = 0; i < TamanhoPopulacao; i++) { Populacao.Add(new Individuo(espacos, valores, limiteEspacos)); } Populacao.ForEach(x => x.Avaliacao()); this.OrdenarPopulacao(); MelhorSolucao = Populacao.First(); ListaSolucoes.Add(MelhorSolucao.NotaAvaliacao); }