Exemplo n.º 1
0
        private void btnCalcular_Click(object sender, EventArgs e)
        {
            String poblacion_s,           //numero introducido por el usuario
                   probabilidad_cruce,    //numero introducido por el usuario
                   probabilidad_mutacion, //numero introducido por el usuario
                   gen;                   //numero introducido por el usuario

            double numero_decimal = 0.0,  //variable para comparar con digito decimal
                   probabilidad_c,        //variable para almacenar la probabilidad de cruce
                   probabilidad_m;        //variable para almacenar la probabilidad de mutacion

            int numero_entero = 0,        //variable para compara con digito entero
                poblacion_i,              //numero de la poblacion en numero entero
                generaciones,             //numero de generaciones
                con_gen = 0;              //contador de generaciones


            //Validaciones
            if ((tbxCruce.Text != "" && tbxGeneraciones.Text != "") && tbxPoblacion.Text != "")
            {
                poblacion_s = tbxPoblacion.Text;                                            //Console.ReadLine();
                poblacion_i = Int32.Parse(poblacion_s);                                     //convertir String a int base 32
                if (Int32.TryParse(poblacion_s, out numero_entero) && poblacion_i % 2 == 0) //validar población
                {
                    probabilidad_cruce = tbxCruce.Text;
                    probabilidad_c     = Double.Parse(probabilidad_cruce);
                    if (Double.TryParse(probabilidad_cruce, out numero_decimal) && (probabilidad_c <= 0.80 && probabilidad_c >= 0.65)) //validar cruce
                    {
                        probabilidad_mutacion = tbxMutacion.Text;
                        probabilidad_m        = Double.Parse(probabilidad_mutacion);
                        if (Double.TryParse(probabilidad_mutacion, out numero_decimal) && (probabilidad_m <= 0.01 && probabilidad_m >= 0.001)) //validar cruce
                        {
                            gen          = tbxGeneraciones.Text;
                            generaciones = Int32.Parse(gen);
                            if (Int32.TryParse(gen, out numero_entero) && (generaciones > 0)) //validar las generaciones
                            {
                                Operaciones accion = new Operaciones();

                                if (tipoAlgoritmo)                         //Genetico
                                {
                                    accion.iniciar_poblacion(poblacion_i); //generar poblacion

                                    do
                                    {
                                        con_gen++;

                                        accion.calcular_inicio();

                                        accion.cal_final();

                                        accion.generarLosNuevosPadresDeLaPatria(poblacion_i);

                                        accion.cruze(probabilidad_c, poblacion_i);

                                        accion.mute(probabilidad_m);
                                    } while (con_gen <= generaciones);

                                    lblX.Text = "";

                                    string aux = accion.imprimir_ganadores();

                                    if (aux != "")
                                    {
                                        lblX.Text = "x = " + aux;
                                    }
                                    else
                                    {
                                        MessageBox.Show("No hay resultados optimos en todas las generaciones");
                                    }
                                }
                                else // DE LA MOCHILA
                                {
                                    accion.iniciar_poblacion(poblacion_i, elementos_en_mochila, resOptima, ganancias, pesos);  //generar poblacion
                                }
                            }
                            else
                            {
                                MessageBox.Show("Se debe introducir un numero entero positivo");
                            }
                        }
                        else
                        {
                            MessageBox.Show("Se debe introducir un numero entre esos rangos");
                        }
                    }
                    else
                    {
                        MessageBox.Show("Se debe introducir un numero entre esos rangos");
                    }
                }
                else
                {
                    MessageBox.Show("El tamaño debe ser un número entero y par");
                }
            }
            else
            {
                MessageBox.Show("Favor de llenar todos los campos con la información necesaria");
            }
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            String poblacion_s,          //numero introducido por el usuario
                   probabilidad_cruce;   //numero introducido por el usuario
            bool digit;                  //variable para comprobar el numero introducido
            int  numero_entero = 0,      //variable para compara con digito entero
                 poblacion_i;            //numero de la poblacion en numero entero
            double numero_decimal = 0.0, //variable para comparar con digito decimal
                   probabilidad_c;       //variable para almacenar la probabilidad de cruce

            Operaciones accion = new Operaciones();

            do
            {
                Console.WriteLine("Escriba el tamaño de la pobracion");
                poblacion_s = Console.ReadLine();
                digit       = Int32.TryParse(poblacion_s, out numero_entero); //validar si lo introducido es un numero, regresa Bool
                if (digit)
                {
                    poblacion_i = Int32.Parse(poblacion_s); //convertir String a int base 32
                    if (poblacion_i % 2 == 0)               //validar si la poblacion es par
                    {
                        break;                              //romper ciclo
                    }
                    else
                    {
                        Console.WriteLine("El tamaño de la poblacion debe ser par\n"); // mostrar mensaje de error
                    }
                }
                else
                {
                    Console.WriteLine("El tamaño debe ser un numero entero\n");
                }
            } while (true); //ciclo infinito

            do
            {
                Console.WriteLine("Escriba la probabilidad de cruce [0.65 ~ 0.80]");
                probabilidad_cruce = Console.ReadLine();
                digit = Double.TryParse(probabilidad_cruce, out numero_decimal);
                if (digit)
                {
                    probabilidad_c = Double.Parse(probabilidad_cruce);
                    if (probabilidad_c <= 0.80 && probabilidad_c >= 0.65)
                    {
                        break;
                    }
                    else
                    {
                        Console.WriteLine("Se debe introducir un numero entre esos rangos");
                    }
                }
                else
                {
                    Console.WriteLine("Se debe introducir un numero entre esos rangos");
                }
            } while (true);

            accion.iniciar_poblacion(poblacion_i); //generar poblacion

            accion.imprimir();                     //imprimir la tabla

            accion.generarLosNuevosPadresDeLaPatria(poblacion_i);

            Console.ReadKey();
        }