public individuo function_mutate(individuo ind, individuo[] Poblation, IMG picture, int umbral, int umbral_d)
        {//mejorar
            individuo copy = ind;
            int       pivot = 0, test = 0;
            bool      op = true;

            while (op)//Mutar en X
            {
                pivot            = ale.Next(10);
                copy.Xbin[pivot] = (copy.Xbin[pivot] == 0) ? 1 : 0;
                test             = BinToDeci(copy.Xbin);
                op = (test < picture.getW()) ? false : true;
            }
            op = true;
            while (op)//Mutar en Y
            {
                pivot            = ale.Next(10);
                copy.Ybin[pivot] = (copy.Ybin[pivot] == 0) ? 1 : 0;
                test             = BinToDeci(copy.Ybin);
                op = (test < picture.getH()) ? false : true;
            }
            copy.X         = BinToDeci(copy.Xbin);
            copy.Y         = BinToDeci(copy.Ybin);
            copy.Value     = picture.gray2(copy, umbral);
            copy.Xdist     = Xdistant(Poblation, copy, umbral_d);
            copy.Phenotype = copy.Value + copy.Xdist;
            return((copy.Phenotype >= ind.Phenotype) ? copy : ind);
        }
Пример #2
0
        private void IniciarAE_Click(object sender, EventArgs e)
        {
            CleanOut.Enabled = true;
            arraypoblation   = pb.CrearPoblacion(picture.getW(), picture.getH(), int.Parse(numInd.Text), int.Parse(Umbral.Text), picture);
            Poblacion ctlPoblation = new Poblacion(); //

            ctlPoblation.Generation = 0;
            Salida.Items.Add("Población inicial generada");
            Salida.Refresh();
            PrintPoblation(arraypoblation);
            Salida.Items.Add("Graficación de la población inicial");
            Salida.Refresh();//promedio o calidad poblacional
            ctlPoblation.Derivative[ctlPoblation.Generation] = pb.Average(arraypoblation);
            Salida.Items.Add("Calidad población inicial: " + ctlPoblation.Derivative[ctlPoblation.Generation].ToString());
            Salida.Refresh();
            int derivada = ctlPoblation.derivate_calculation(ctlPoblation.Derivative, ctlPoblation.Derivative[ctlPoblation.Generation]), cont = 0;

            Salida.Items.Add("Derivada : " + derivada);
            while (derivada == 0)
            {
                arraypoblation = pb.Create_Generation(arraypoblation,
                                                      (float)Convert.ToSingle(Cruce.Text.Replace('.', ',')),
                                                      int.Parse(Umbral_d.Text),
                                                      picture,
                                                      int.Parse(Umbral.Text));
                arraypoblation = pb.UpdateState(arraypoblation);
                ctlPoblation.Generation++;
                cont++;
                Salida.Items.Add("Generación: " + cont);
                Salida.Refresh();
                if (ctlPoblation.Generation == 10)
                {
                    ctlPoblation.Generation = 0;
                }
                ctlPoblation.Derivative[ctlPoblation.Generation] = pb.Average(arraypoblation);
                Salida.Items.Add("Calidad de la población: " + ctlPoblation.Derivative[ctlPoblation.Generation].ToString());
                Salida.Refresh();
                derivada = ctlPoblation.derivate_calculation(ctlPoblation.Derivative, ctlPoblation.Derivative[ctlPoblation.Generation]);
            }
            Salida.Items.Add("Derivada : " + derivada);
            Salida.Items.Add("Proceso terminado");
            Salida.Refresh();
            //MostrarPoblacion(arraypoblation);
        }
        public individuo[] function_crossing(int ind1, int ind2, individuo[] poblation, int umbral_d, IMG picture, int umbral)
        {
            int pivot = 0, test1 = 0, test2 = 0, max = 0;

            int[] indX   = new int[10], ind2X = new int[10], indY = new int[10], ind2Y = new int[10], temp = new int[10], Phenotypes = new int[4];
            bool  option = true;

            while (option)            //violada en x
            {
                pivot        = ale.Next(10);
                indX         = poblation[ind1].Xbin;
                ind2X        = poblation[ind2].Xbin;
                temp         = indX;
                indX[pivot]  = ind2X[pivot];
                ind2X[pivot] = temp[pivot];
                test1        = BinToDeci(indX);
                test2        = BinToDeci(ind2X);
                option       = (test1 < picture.getW()) && (test2 < picture.getW()) ? false : true;
            }
            option = true;
            while (option)            //violada en y
            {
                pivot        = ale.Next(10);
                indY         = poblation[ind1].Ybin;
                ind2Y        = poblation[ind2].Ybin;
                temp         = indY;
                indY[pivot]  = ind2Y[pivot];
                ind2Y[pivot] = temp[pivot];
                test1        = BinToDeci(indY);
                test2        = BinToDeci(ind2Y);
                option       = (test1 < picture.getH()) && (test2 < picture.getH()) ? false : true;
            } //Determinacion del fenotipo de los violados
            individuo son1 = new individuo(), son2 = new individuo();

            son1.Xbin      = indX;
            son1.Ybin      = indY;
            son1.X         = BinToDeci(son1.Xbin);
            son1.Y         = BinToDeci(son1.Ybin);
            son1.Xdist     = Xdistant(poblation, son1, umbral_d);
            son1.Value     = picture.gray2(son1, umbral);
            son1.Phenotype = son1.Xdist + son1.Value;
            son2.Xbin      = ind2X;
            son2.Ybin      = ind2Y;
            son2.X         = BinToDeci(son2.Xbin);
            son2.Y         = BinToDeci(son2.Ybin);
            son2.Xdist     = Xdistant(poblation, son2, umbral_d);
            son2.Value     = picture.gray2(son2, umbral);
            son2.Phenotype = son2.Xdist + son2.Value;
            List <individuo> poblationFinal = new List <individuo>();

            Phenotypes[0] = poblation[ind1].Phenotype;
            Phenotypes[1] = poblation[ind2].Phenotype;
            Phenotypes[2] = son1.Phenotype;
            Phenotypes[3] = son2.Phenotype;
            for (int i = 0; i < Phenotypes.Length / 2; i++)
            {
                max = getBest(Phenotypes);
                switch (max)
                {
                case 0:
                    poblationFinal.Add(poblation[ind1]);
                    break;

                case 1:
                    poblationFinal.Add(poblation[ind2]);
                    break;

                case 2:
                    poblationFinal.Add(son1);
                    break;

                case 3:
                    poblationFinal.Add(son2);
                    break;
                }
                Phenotypes[max] = 0;
            }
            return(poblationFinal.ToArray()); //convertir list to array*/
        }