Beispiel #1
0
        public void generarLosNuevosPadresDeLaPatria(int poblacion)
        {
            if (inicio == null)
            {
                Console.WriteLine("No hay nada");
            }
            else
            {
                double[] valores = generarNumerosAleatorios(poblacion);

                // Console.WriteLine("\n\n\t\t\t\t ---Padres ---\n");
                Individuo aux = inicio;
                Padre     auxPadre, nuevo;

                /*Console.Write("Los numeros aleatorios son: ");
                 * for (int i = 0; i < valores.Length; i++)
                 *  Console.Write(valores[i] + " ");
                 * Console.Write("\n\n");*/

                for (int i = 0; i < poblacion; i++)
                {
                    while (aux != null)
                    {
                        if (aux.acumulado > valores[i])
                        {
                            if (padres == null)
                            {
                                padres = new Padre(aux.bites);
                            }
                            else
                            {
                                nuevo    = new Padre(aux.bites);
                                auxPadre = padres;
                                while (auxPadre.siguiente != null)
                                {
                                    auxPadre = auxPadre.siguiente;
                                }
                                auxPadre.siguiente = nuevo;
                            }

                            break;
                        }
                        aux = aux.siguiente;
                    }
                    aux = inicio;
                }
                //imprimir
                auxPadre = padres;

                /*int n = 1;
                 * while(auxPadre != null)
                 * {
                 *  Console.WriteLine("Padre " + n +"   =   " + calcular_x(auxPadre.bite) + "   ---->   " + auxPadre.bite);
                 *
                 *  n++;
                 *  auxPadre = auxPadre.siguiente;
                 * }
                 */
            }
        }
Beispiel #2
0
 public void reset_1()
 {
     combinaciones = null;
     padres        = null;
     mejores       = null;
     cant_obj      = 0;
 }
Beispiel #3
0
 public void reset_2()
 {
     objetos       = null;
     combinaciones = null;
     padres        = null;
     mejores       = null;
     capacidad     = 0;
     respuesta     = "";
     cant_obj      = 0;
 }
Beispiel #4
0
 private Mochila()
 {
     objetos       = null;
     combinaciones = null;
     padres        = null;
     mejores       = null;
     capacidad     = 0;
     respuesta     = "";
     cant_obj      = 0;
 }
Beispiel #5
0
        public void generarLosNuevosPadresDeLaPatria(int poblacion)
        {
            if (combinaciones == null)
            {
                Console.WriteLine("No hay nada");
            }
            else
            {
                double[] valores = generarNumerosAleatorios(poblacion);

                Opcion aux = combinaciones;
                Padre  auxPadre, nuevo;

                for (int i = 0; i < poblacion; i++)
                {
                    while (aux != null)
                    {
                        if (aux.acumulado > valores[i])
                        {
                            if (padres == null)
                            {
                                padres = new Padre(aux.combinacion);
                            }
                            else
                            {
                                nuevo    = new Padre(aux.combinacion);
                                auxPadre = padres;
                                while (auxPadre.siguiente != null)
                                {
                                    auxPadre = auxPadre.siguiente;
                                }
                                auxPadre.siguiente = nuevo;
                            }

                            break;
                        }
                        aux = aux.siguiente;
                    }
                    aux = combinaciones;
                }
                auxPadre = padres;
            }
        }
Beispiel #6
0
        public void cruze(double p_cruce, int poblacion) //metodo para realizar el cruce
        {
            //Console.WriteLine("\n\t\t\t\t ----Cruce: " + p_cruce + " | Nueva poblacion---- ");

            Padre auxPadre = padres,
                  padre1, padre2;

            Individuo aux,
                      nuevo;                    //nodo para crear a los hijos

            String[] a_cambiar = new String[2]; //string para almacenar los bit a cambiar;
            Random   aleatorio = new Random();

            double[] chance = generarNumerosAleatorios(poblacion / 2);
            int      uno, dos; //numeros para indice de corte

            inicio = null;

            for (int i = 0; i < chance.Length; i++)
            {
                if (auxPadre != null)
                {
                    //asignacion de la pareja
                    padre1   = auxPadre;
                    auxPadre = auxPadre.siguiente;
                    padre2   = auxPadre;

                    if (chance[0] <= p_cruce) //se va a realizar el cruce
                    {
                        uno = aleatorio.Next(0, 8);
                        dos = aleatorio.Next(0, 8);

                        if (uno < dos)
                        {
                            //obtener bits de los padres
                            for (int j = 0; j < 8; j++)
                            {
                                if (j >= uno && j <= dos)
                                {
                                    a_cambiar[1] += padre1.bite[j];
                                    a_cambiar[0] += padre2.bite[j];
                                }
                                else
                                {
                                    a_cambiar[0] += padre1.bite[j];
                                    a_cambiar[1] += padre2.bite[j];
                                }
                            }
                        }
                        else
                        {
                            for (int j = 0; j < 8; j++)
                            {
                                if (j <= dos || j >= uno)
                                {
                                    a_cambiar[1] += padre1.bite[j];
                                    a_cambiar[0] += padre2.bite[j];
                                }

                                else
                                {
                                    a_cambiar[0] += padre1.bite[j];
                                    a_cambiar[1] += padre2.bite[j];
                                }
                            }
                        }

                        if (inicio == null)
                        {
                            nuevo           = new Individuo(a_cambiar[0]);
                            inicio          = nuevo;
                            nuevo.siguiente = new Individuo(a_cambiar[1]);
                        }
                        else
                        {
                            aux = inicio;

                            while (aux.siguiente != null)
                            {
                                aux = aux.siguiente;
                            }

                            nuevo           = new Individuo(a_cambiar[0]);
                            aux.siguiente   = nuevo;
                            nuevo.siguiente = new Individuo(a_cambiar[1]);
                        }
                    }
                    else //no hay cruce
                    {
                        if (inicio == null)
                        {
                            nuevo           = new Individuo(padre1.bite);
                            inicio          = nuevo;
                            nuevo.siguiente = new Individuo(padre2.bite);
                        }
                        else
                        {
                            aux = inicio;

                            while (aux.siguiente != null)
                            {
                                aux = aux.siguiente;
                            }

                            nuevo           = new Individuo(padre1.bite);
                            aux.siguiente   = nuevo;
                            nuevo.siguiente = new Individuo(padre2.bite);
                        }
                    }

                    a_cambiar[0] = "";
                    a_cambiar[1] = "";
                    auxPadre     = auxPadre.siguiente;
                }
            }

            //eliminamos padres
            padres = null;
            //imprimir nuevo

            /*
             * aux = inicio;
             * int num = 1;
             *
             * while (aux != null)
             * {
             *  Console.WriteLine("Hijo " + num + "° -> " + aux.bites);
             *  num++;
             *  aux = aux.siguiente;
             * }
             */
        }
Beispiel #7
0
        ElArca mejores;      //variable que contendrá la lista de los resultados

        public Operaciones() //constructor para iniciar lista
        {
            inicio  = null;
            padres  = null;
            mejores = null;
        }
Beispiel #8
0
        public void cruze(double p_cruce, int poblacion) //metodo para realizar el cruce
        {
            //Console.WriteLine("\n\t\t\t\t ----Cruce: " + p_cruce + " | Nueva poblacion---- ");

            Padre auxPadre = padres,
                  padre1, padre2;

            Opcion aux,
                   nuevo;                       //nodo para crear a los hijos

            String[] a_cambiar = new String[2]; //string para almacenar los bit a cambiar;
            Random   aleatorio = new Random();

            double[] chance = generarNumerosAleatorios(poblacion / 2);
            int      uno, dos; //numeros para indice de corte

            combinaciones = null;

            for (int i = 0; i < chance.Length; i++)
            {
                if (auxPadre != null)
                {
                    //asignacion de la pareja
                    padre1   = auxPadre;
                    auxPadre = auxPadre.siguiente;
                    padre2   = auxPadre;

                    if (chance[0] <= p_cruce) //se va a realizar el cruce
                    {
                        uno = aleatorio.Next(0, 8);
                        dos = aleatorio.Next(0, 8);

                        if (uno < dos)
                        {
                            //obtener bits de los padres
                            for (int j = 0; j < auxPadre.bite.Length - 1; j++)
                            {
                                if (j >= uno && j <= dos)
                                {
                                    a_cambiar[1] += padre1.bite[j];
                                    a_cambiar[0] += padre2.bite[j];
                                }
                                else
                                {
                                    a_cambiar[0] += padre1.bite[j];
                                    a_cambiar[1] += padre2.bite[j];
                                }
                            }
                        }
                        else
                        {
                            for (int j = 0; j < auxPadre.bite.Length - 1; j++)
                            {
                                if (j <= dos || j >= uno)
                                {
                                    a_cambiar[1] += padre1.bite[j];
                                    a_cambiar[0] += padre2.bite[j];
                                }

                                else
                                {
                                    a_cambiar[0] += padre1.bite[j];
                                    a_cambiar[1] += padre2.bite[j];
                                }
                            }
                        }

                        if (combinaciones == null)
                        {
                            nuevo           = new Opcion(a_cambiar[0]);
                            combinaciones   = nuevo;
                            nuevo.siguiente = new Opcion(a_cambiar[1]);
                        }
                        else
                        {
                            aux = combinaciones;

                            while (aux.siguiente != null)
                            {
                                aux = aux.siguiente;
                            }

                            nuevo           = new Opcion(a_cambiar[0]);
                            aux.siguiente   = nuevo;
                            nuevo.siguiente = new Opcion(a_cambiar[1]);
                        }
                    }
                    else //no hay cruce
                    {
                        if (combinaciones == null)
                        {
                            nuevo           = new Opcion(padre1.bite);
                            combinaciones   = nuevo;
                            nuevo.siguiente = new Opcion(padre2.bite);
                        }
                        else
                        {
                            aux = combinaciones;

                            while (aux.siguiente != null)
                            {
                                aux = aux.siguiente;
                            }

                            nuevo           = new Opcion(padre1.bite);
                            aux.siguiente   = nuevo;
                            nuevo.siguiente = new Opcion(padre2.bite);
                        }
                    }

                    a_cambiar[0] = "";
                    a_cambiar[1] = "";
                    auxPadre     = auxPadre.siguiente;
                }
            }

            padres = null;
        }
Beispiel #9
0
 public Padre(String _bite)
 {
     siguiente = null;
     bite      = _bite;
 }