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"); } }
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(); }