public void GeraPopulacaoInicial() { Estado e = new Estado(); for (int i = 0; i < Global.TamPopulacao; i++) { Estado novo = e.BuildNew(); Add_Verf_MelhorResult(novo); PopulacaoAtual.Add(novo); } }
public void Add_Verf_MelhorResult(Estado e) { if (MelhorResultado == null) { MelhorResultado = e; Global.TempoUltimoMelhorResult = DateTime.Now.Ticks; } else { if (e.Resultado > MelhorResultado.Resultado) { MelhorResultado = e; Global.TempoUltimoMelhorResult = DateTime.Now.Ticks; } } }
private void ImprimeResultado(Estado e) { label5.Text = " 1, 2, 3, 4, 5, 6, 7, 8, 9, 10\n"; label5.Text += "Resultado encontrado: "+ e.ToString(); }
public Estado getNewEstadoMutado() { Estado e = new Estado(); for (int i = 0; i < Global.TamanhoGrade; i++) { e.Items[i] = Items[i]; } e.Sorteia_EfetuaMutacao_Valida(true); return e; }
public List<Estado> getFilhos(Estado progenitor2) { //Random r = new Random(); int pnt_Corte = Global.Random.Next(0, Global.TamanhoGrade - 1); int tamanho1 = Global.TamanhoGrade - pnt_Corte; int tamanho2 = Global.TamanhoGrade - tamanho1; Estado e1 = new Estado(); Estado e2 = new Estado(); //O principal do algoritmo genetico, o ponto de corte e o cruzamento: Array.ConstrainedCopy(Items, 0, e1.Items, 0, tamanho1); Array.ConstrainedCopy(progenitor2.Items, Global.TamanhoGrade - pnt_Corte, e1.Items, Global.TamanhoGrade - pnt_Corte, tamanho2); Array.ConstrainedCopy(progenitor2.Items, 0, e2.Items, 0, tamanho1); Array.ConstrainedCopy(Items, Global.TamanhoGrade - pnt_Corte, e2.Items, Global.TamanhoGrade - pnt_Corte, tamanho2); e1.Sorteia_EfetuaMutacao_Valida(false); e2.Sorteia_EfetuaMutacao_Valida(false); List<Estado> ret = new List<Estado>(); ret.Add(e1); ret.Add(e2); this.GerouFilhos = true; progenitor2.GerouFilhos = true; return ret; }
//Retorna um novo estado public Estado BuildNew() { Estado e = new Estado(); e.Build(); return e; }