protected override void Roda() { int stagCount = 0; for (int i = 0; i < Iteracoes; i++) { List <int> indexes = SolucaoAleatoria(); var menor = indexes; var custoOriginal = Problema.Custo(indexes); var custo = custoOriginal; double?novoCusto = null; while (!(novoCusto < custo)) { for (int p = 0; p < indexes.Count; p++) { for (int q = 0; q < indexes.Count; q++) { var copia = indexes.ToList(); var n = copia[q]; copia.RemoveAt(q); copia.Insert(p, n); novoCusto = Problema.Custo(copia); if (novoCusto < custo) { indexes = copia; custo = novoCusto.Value; break; } } if (novoCusto < custo) { break; } } Solucao = Problema.Solucao(indexes); if (novoCusto >= custo) { break; } } if (custo < custoOriginal) { menor = indexes; stagCount = 0; } else { if (++stagCount > Stagnacao) { break; } } } }
private void Ga_GenerationRan(object sender, EventArgs e) { var list = ga.BestChromosome.GetGenes().Select(g => (int)g.Value).ToList(); Solucao = Problema.Solucao(list); }