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;
 }