public void Cruzamento() { int qtdCruzamento = (int)((float)TamanhoPopulacao * TaxaCruzamento); int qtdReposicao = (int)((float)TamanhoPopulacao * TaxaSelecao); int modulo = qtdReposicao % 2; List <IIndividuo> elite = Populacao.Take(qtdCruzamento).ToList(); for (int filho = 0; filho < qtdReposicao; filho += 2) { if (filho + 1 < qtdCruzamento) { Populacao.Add(RealizarCruzamento(elite[filho], elite[filho + 1])); Populacao.Add(RealizarCruzamento(elite[filho + 1], elite[filho])); } else { Populacao.Add(RealizarCruzamento(elite[filho], elite[0])); Populacao.Add(RealizarCruzamento(elite[0], elite[filho])); } } if (modulo > 0) { Populacao.RemoveAt(Populacao.Count - 1); } }
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); }
public override void GerarPopulacaoInicial() { Random rnd = new Random(); int modulo = TamanhoIndividuo % 2; int metade = (TamanhoIndividuo - modulo) / 2; for (int individuo = 0; individuo < TamanhoPopulacao; individuo++) { IIndividuo ind = new Mochila(TamanhoIndividuo); for (int cromossomo = 0; cromossomo < metade; cromossomo++) { if (((Mochila)ind).Peso < CapacidadeMochila) { int ativa = rnd.Next(2); ind.Cromossomos[cromossomo] = ativa; if (ativa > 0) { ((Mochila)ind).Peso += Itens[cromossomo].Peso; } ativa = rnd.Next(2); ind.Cromossomos[cromossomo + metade] = ativa; if (ativa > 0) { ((Mochila)ind).Peso += Itens[cromossomo + metade].Peso; } } else { ind.Cromossomos[cromossomo] = 0; ind.Cromossomos[cromossomo + metade] = 0; } if (modulo > 0) { int ativa = rnd.Next(2); ind.Cromossomos[TamanhoIndividuo - 1] = ativa; if (ativa > 0) { ((Mochila)ind).Peso += Itens[TamanhoIndividuo - 1].Peso; } } } Populacao.Add(ind); } }
public override void GerarPopulacaoInicial() { Random rnd = new Random(); for (int individuo = 0; individuo < TamanhoPopulacao; individuo++) { List <String> profs = new List <string>(); IIndividuo ind = new QuadroHorarios(TamanhoIndividuo); for (int cromossomo = 0; cromossomo < TamanhoIndividuo; cromossomo++) { String p; do { p = Professores[rnd.Next(Professores.Count)]; }while(profs.Count(x => x == p) > 1); profs.Add(p); ind.Cromossomos[cromossomo] = p; } Populacao.Add(ind); } }