public int?iteracion(Dato datos, formHome home)
        {
            if (home.Iteracion < datos.Iteraciones)
            {
                home.toolStripBtnNextStep.Enabled = false;
                home.stStripLblIteration.Text     = "Iteracion " + (home.Iteracion + 1) + "/" + home.stStripProgBarIteration.Maximum;
                Application.DoEvents();

                algoritmo.torneo(home);
                algoritmo.cruce(datos.ProbCruce, home);
                algoritmo.mutacion(datos.ProbMutacion, home);
                algoritmo.evaluar(home, false);
                algoritmo.mejor(home);
                algoritmo.nacimiento(home);

                home.toolStripBtnNextStep.Enabled = true;
                home.stStripProgBarIteration.PerformStep();
            }
            else
            {
                return(algoritmo.apto(home));
            }

            home.Iteracion++;
            return(null);
        }
        public void abrirTablero(formHome home)
        {
            formTablero tablero = new formTablero((home.individuoBindingSource.Current as Individuo).Num);

            tablero.Reinas = (home.individuoBindingSource.Current as Individuo).Reinas;
            tablero.ShowDialog(home);
        }
Exemple #3
0
        public void evaluar(formHome home, bool isAll)
        {
            List <Individuo> aux = isAll ? _Individuos : _Hijos;

            home.stStripProgBarStep.Value   = 0;
            home.stStripProgBarStep.Maximum = _Individuos.Count;

            foreach (var individuo in aux)
            {
                home.stStripLblStep.Text = "Evaluando individuo " + individuo.Num + "/" + _Individuos.Count;
                Application.DoEvents();
                for (int i = 0; i < 8; i++)
                {
                    for (int j = 0; j < 8; j++)
                    {
                        if (i == j)
                        {
                            continue;
                        }

                        if (Math.Abs(individuo.Reinas[i] - individuo.Reinas[j]) == Math.Abs(i - j))
                        {
                            individuo.colision();
                        }
                    }
                }

                home.stStripProgBarStep.PerformStep();
            }

            actualizar(home);
        }
Exemple #4
0
        public void torneo(formHome home)
        {
            int potencial1, potencial2;
            int?usado = null;

            home.stStripProgBarStep.Value   = 0;
            home.stStripProgBarStep.Maximum = 2;

            for (int i = 0; i < 2; i++)
            {
                home.stStripLblStep.Text = "Obteniendo padre " + (i + 1) + "/2";
                Application.DoEvents();

                do
                {
                    potencial1 = new Random().Next(0, _Individuos.Count);
                    potencial2 = new Random().Next(0, _Individuos.Count);
                } while (potencial2 == potencial1 || potencial1 == usado || potencial2 == usado);

                if (_Individuos[potencial1].Fitness <= _Individuos[potencial2].Fitness)
                {
                    usado = potencial1;
                    _Padres.Add(_Individuos[potencial1].Clone() as Individuo);
                }
                else
                {
                    usado = potencial2;
                    _Padres.Add(_Individuos[potencial2].Clone() as Individuo);
                }

                home.stStripProgBarStep.PerformStep();
            }
        }
Exemple #5
0
        public void llenarPoblacion(int poblacion, formHome home)
        {
            List <int> reinas = new List <int>(8);

            home.stStripProgBarStep.Value   = 0;
            home.stStripProgBarStep.Maximum = poblacion;

            for (int i = 0; i < poblacion; i++)
            {
                home.stStripLblStep.Text = "Individuo " + (i + 1) + "/" + poblacion;
                Application.DoEvents();

                reinas.Clear();
                for (int j = 0; j < 8; j++)
                {
                    int pos;
                    do
                    {
                        pos = new Random().Next(1, 9);
                    } while (reinas.Contains(pos));

                    reinas.Add(pos);
                }

                Individuo individuo = new Individuo();
                individuo.iniciar(reinas, i);

                _Individuos.Add(individuo);
                home.stStripProgBarStep.PerformStep();
            }

            actualizar(home);
        }
Exemple #6
0
        public void mutacion(decimal pMutacion, formHome home)
        {
            home.stStripProgBarStep.Value   = 0;
            home.stStripProgBarStep.Maximum = 2;

            decimal pm = (decimal) new Random().NextDouble();

            if (pm <= pMutacion)
            {
                int pos1, pos2;

                pos1 = new Random().Next(0, 8);
                do
                {
                    pos2 = new Random().Next(0, 8);
                } while (pos2 == pos1);

                for (int i = 0; i < 2; i++)
                {
                    home.stStripLblStep.Text = "Mutando hijo " + (i + 1) + "/2";
                    Application.DoEvents();
                    List <int> posReinas = _Hijos[i].Reinas;

                    int val1 = posReinas[pos1];
                    posReinas[pos1] = posReinas[pos2];
                    posReinas[pos2] = val1;

                    home.stStripProgBarStep.PerformStep();
                }
            }
        }
Exemple #7
0
        public void cruce(decimal pCruce, formHome home)
        {
            home.stStripProgBarStep.Value   = 0;
            home.stStripProgBarStep.Maximum = 2;

            decimal pc = (decimal) new Random().NextDouble();

            if (pc <= pCruce)
            {
                int        pos     = new Random().Next(0, 8);
                List <int> posHijo = new List <int>(8);

                for (int i = 0; i < 2; i++)
                {
                    home.stStripLblStep.Text = "Obteniendo hijo " + (i + 1) + "/2";
                    Application.DoEvents();

                    int aux = pos;
                    posHijo.Clear();
                    posHijo.AddRange(_Padres[i].Reinas.GetRange(0, pos));

                    for (int j = 0; j < 8 && aux < 8; j++)
                    {
                        switch (i)
                        {
                        case 0:
                            if (!posHijo.Contains(_Padres[i + 1].Reinas[j]))
                            {
                                posHijo.Add(_Padres[i + 1].Reinas[j]);
                                aux++;
                            }
                            break;

                        case 1:
                            if (!posHijo.Contains(_Padres[i - 1].Reinas[j]))
                            {
                                posHijo.Add(_Padres[i - 1].Reinas[j]);
                                aux++;
                            }
                            break;
                        }
                    }

                    Individuo individuo = new Individuo();
                    individuo.iniciar(posHijo, i);

                    _Hijos.Add(individuo);
                    home.stStripProgBarStep.PerformStep();
                }
            }
            else
            {
                foreach (var individuo in _Padres)
                {
                    _Hijos.Add(individuo.Clone() as Individuo);
                    home.stStripProgBarStep.PerformStep();
                }
            }
        }
Exemple #8
0
        private void BtnEnter_Click(object sender, EventArgs e)
        {
            ControllerFunction controller = new ControllerFunction();

            formHome home = new formHome();

            home.Dato = controller.datos(Convert.ToInt32(poblacionNumUD.Value), Convert.ToInt32(iteracionesNumUD.Value), Convert.ToDecimal(probCruceNumUD.Value), Convert.ToDecimal(probMutacionNumUD.Value));

            Hide();
            home.ShowDialog(this);
            Show();
        }
        public void pasos(Dato datos, formHome home)
        {
            home.stStripProgBarIteration.Value   = 0;
            home.stStripProgBarIteration.Maximum = datos.Iteraciones;

            Algoritmo_Genetico algoritmo = new Algoritmo_Genetico();

            algoritmo.llenarPoblacion(datos.Poblacion, home);
            algoritmo.evaluar(home, true);

            home.Paso      = 1;
            home.Iteracion = 0;
        }
        public int?paso(Dato datos, formHome home)
        {
            if (home.Iteracion < datos.Iteraciones)
            {
                switch (home.Paso)
                {
                case 1:
                    home.toolStripBtnNextIteration.Enabled = false;
                    home.stStripLblIteration.Text          = "Iteracion " + (home.Iteracion + 1) + "/" + home.stStripProgBarIteration.Maximum;
                    algoritmo.torneo(home);
                    home.Paso++;
                    break;

                case 2:
                    algoritmo.cruce(datos.ProbCruce, home);
                    home.Paso++;
                    break;

                case 3:
                    algoritmo.mutacion(datos.ProbMutacion, home);
                    home.Paso++;
                    break;

                case 4:
                    algoritmo.evaluar(home, false);
                    home.Paso++;
                    break;

                case 5:
                    algoritmo.mejor(home);
                    home.Paso++;
                    break;

                case 6:
                    algoritmo.nacimiento(home);
                    home.toolStripBtnNextIteration.Enabled = true;
                    home.Paso = 1;
                    home.Iteracion++;
                    Application.DoEvents();
                    home.stStripProgBarIteration.PerformStep();
                    break;
                }
            }
            else
            {
                return(algoritmo.apto(home));
            }

            return(null);
        }
Exemple #11
0
        public int apto(formHome home)
        {
            int apto = 0;

            foreach (var individuo in _Individuos)
            {
                if (!(_Individuos[apto].Fitness < individuo.Fitness))
                {
                    apto = individuo.Num - 1;
                }
            }

            return(apto);
        }
Exemple #12
0
        public void nacimiento(formHome home)
        {
            home.stStripProgBarStep.Value   = 0;
            home.stStripProgBarStep.Maximum = 2;

            for (int i = 0; i < 2; i++)
            {
                home.stStripLblStep.Text = "Cambiando individuo " + (i + 1) + "/2";
                Application.DoEvents();
                _Mejores[i].igualar(_Padres[i].Num);

                _Individuos[_Individuos.IndexOf(_Individuos.FirstOrDefault(x => x.Num == _Padres[i].Num))] = _Mejores[i];
                home.stStripProgBarStep.PerformStep();
            }

            _Hijos.Clear();
            _Padres.Clear();
            _Mejores.Clear();
        }
Exemple #13
0
        public void mejor(formHome home)
        {
            home.stStripProgBarStep.Value   = 0;
            home.stStripProgBarStep.Maximum = 2;

            List <Individuo> aux = new List <Individuo>();

            aux.AddRange(_Padres);
            aux.AddRange(_Hijos);

            int?usado = null;
            int sel;

            for (int i = 0; i < 2; i++)
            {
                home.stStripLblStep.Text = "Calculando al mejor " + (i + 1) + "/2";
                Application.DoEvents();

                sel = 0;
                for (int j = 0; j < 4; j++)
                {
                    for (int k = 0; k < 4; k++)
                    {
                        if (j != k && k != usado && sel != k)
                        {
                            if (!(aux[sel].Fitness <= aux[k].Fitness))
                            {
                                sel = k;
                            }
                        }
                    }
                }
                usado = sel;

                _Mejores.Add(aux[(int)usado].Clone() as Individuo);
                home.stStripProgBarStep.PerformStep();
            }
        }
        public int completo(Dato datos, formHome home)
        {
            home.stStripProgBarIteration.Value   = 0;
            home.stStripProgBarIteration.Maximum = datos.Iteraciones;

            algoritmo.llenarPoblacion(datos.Poblacion, home);
            algoritmo.evaluar(home, true);
            for (int i = 0; i < datos.Iteraciones; i++)
            {
                home.stStripLblIteration.Text = "Iteracion " + (i + 1) + "/" + home.stStripProgBarIteration.Maximum;
                Application.DoEvents();

                algoritmo.torneo(home);
                algoritmo.cruce(datos.ProbCruce, home);
                algoritmo.mutacion(datos.ProbMutacion, home);
                algoritmo.evaluar(home, false);
                algoritmo.mejor(home);
                algoritmo.nacimiento(home);

                home.stStripProgBarIteration.PerformStep();
            }

            return(algoritmo.apto(home));
        }
Exemple #15
0
 public void actualizar(formHome home)
 {
     home.individuoBindingSource.DataSource = _Individuos;
     home.individuoDataGridView.Update();
     home.individuoDataGridView.Refresh();
 }