protected Solucion apagar(Solucion nueva)
        {
            int tam = nueva.vector.Length;
            int pos = r.Next(0, tam);
            int i   = pos + 1;

            while (nueva.getPeso() > pesoMaximo)
            {
                if (i >= tam)
                {
                    i = 0;
                }
                if (nueva.vector[i] == 1)
                {
                    nueva.setPeso(nueva.getPeso() - fx.elementos[i].peso);
                    nueva.vector[i] = 0;
                }
                i++;
            }
            if (nueva.getPeso() > 0)
            {
                return(nueva);
            }
            else
            {
                return(prender(nueva));
            }
        }
예제 #2
0
        public Solucion tweak(Solucion copy)
        {
            int posicion = buscar(copy);

            if (posicion == -1)
            {
                copy = prender(copy);
            }
            else
            {
                copy.vector[posicion] = 0;
            }
            copy.setPeso(-1);
            posicion = r.Next(copy.vector.Length);
            while (true)
            {
                if (copy.getPeso() > pesoMaximo)
                {
                    if (copy.vector[posicion] == 0)
                    {
                        posicion = buscar(copy);
                    }
                    copy.setPeso(copy.getPeso() - fx.elementos[posicion].peso);
                    copy.vector[posicion] = 0;
                    if (copy.getPeso() <= pesoMaximo && copy.getPeso() > 0)
                    {
                        break;
                    }
                }
                else
                {
                    if (copy.vector[posicion] == 0)
                    {
                        copy.setPeso(copy.getPeso() + fx.elementos[posicion].peso);
                        copy.vector[posicion] = 1;
                    }
                }
                posicion = r.Next(copy.vector.Length);
            }
            return(copy);
        }
 protected Solucion prender(Solucion ajustada)
 {
     if (ajustada.getPeso() > pesoMaximo)
     {
         return(apagar(ajustada));
     }
     else
     {
         if (ajustada.getPeso() == pesoMaximo)
         {
             return(ajustada);
         }
         else
         {
             int tam = ajustada.vector.Length, pos = r.Next(0, tam);
             ajustada.setPeso(ajustada.getPeso() + fx.elementos[pos].peso);
             ajustada.vector[pos] = 1;
             return(prender(ajustada));
         }
     }
 }