static void Algoritmo(MatingPool Pool, int Repeticiones)
    {
        while(Repeticiones > 0 && TieneSolucion)
        {
            ArrayList<Mochila> NuevaPoblacion = new ArrayList<>();
            
            NuevosCandidatos.clear();
            
            System.out.println("\nNUEVOS CANDIDATOS BASADOS EN EL PORCENTAJE DE FITNESS Y UN RANDOM:\n");
            for(int i = 0; i < Pool.getListaDeMochilas().size(); i++)
            {           
                NuevosCandidatos.add(Pool.getCandidato(Random(0, 1)));
                System.out.print("Nuevo candidato: ");
                //Si es nulo significa que no se encontro un intervalo para el resultado del random en la ruleta y esto es solo 
                //posible si todos los porcentajes son 0%, es decir ningun candidato es valido para tomarse en cuenta.
                if(NuevosCandidatos.get(i) != null)
                {
                    NuevosCandidatos.get(i).ShowAsBit();
                    
                    System.out.println();
                    System.out.println();
                }
                else
                {
                    System.out.println();
                    System.out.println("ERROR: TODOS LOS PORCENTAJES SON 0%");
                    TieneSolucion = false;
                    break;
                }
            }
            
            if(!TieneSolucion)
            {
                break;
            }
            System.out.println("\nCRUCES DE LOS CANDIDATOS\n");
            for(int i = 0; i <= NuevosCandidatos.size()/2; i++)
            {
                Mochila Candidato1 = NuevosCandidatos.get(i);
                Mochila Candidato2 = NuevosCandidatos.get(i+1);

                Mochila Cruce1 = Pool.Cruce(Candidato1, Candidato2);

                System.out.println("Candidato 1:");
                Candidato1.ShowAsBit();
                System.out.println();

                System.out.println("Candidato 2:");
                Candidato2.ShowAsBit();          
                System.out.println();

                NuevaPoblacion.add(Cruce1);

                System.out.println("Cruce 1:");
                Cruce1.ShowAsBit();
                System.out.println();

                if(NuevaPoblacion.size() < NuevosCandidatos.size())
                {
                    Mochila Cruce2 = Pool.Cruce(Candidato2, Candidato1);
                    NuevaPoblacion.add(Cruce2);
                    System.out.println("Cruce 2:");
                    Cruce2.ShowAsBit();
                    System.out.println();
                }
                System.out.println();
            }
            System.out.println("\nNUEVA POBLACION GENERADA DE LOS CRUCES\n");
            for(int i = 0; i < NuevaPoblacion.size(); i++)
            {
                NuevaPoblacion.get(i).ShowAsBit();
                System.out.println();
            }
            System.out.println("\nNUEVA MATING POOL\n");
            Pool.setListaDeMochilas(NuevaPoblacion);
            Pool.Calcular();
            Pool.Show();
            
            Repeticiones--;
        }
    }