Example #1
0
  /**
   * Agrega al ClienteCap2 <code>c</code> los dos cliente mas cercanos.
   *
   * <p>El método se encarga invocar a <code>setClieteMasCercano1</code>, <code>setClieteMasCercano2
   * </code> de <code>ClienteCap2</code>
   *
   * @param c <code>ClienteCap2</code> donde contiene toda la información del problema a resolver.
   * @return Devuelve <code>c</code> con la información de los dos clientes mas cercanos.
   */
  private ClienteCap2 addClientesMasCercanos(ClienteCap2 c) {
    Iterator<ClienteCap2> it = this.clientes.iterator();
    int distanciaMasCercano1 = Integer.MAX_VALUE;
    int distanciaMasCercano2 = Integer.MAX_VALUE;

    while (it.hasNext()) {
      ClienteCap2 clientetmp = it.next();
      if ((Distancia.getInstancia().getDistancia(clientetmp.getNodo(), c.getNodo())
              < distanciaMasCercano1)
          && (clientetmp.getNodo().getId() != c.getNodo().getId())) {
        c.setClieteMasCercano1(clientetmp);
        distanciaMasCercano1 =
            Distancia.getInstancia().getDistancia(clientetmp.getNodo(), c.getNodo());
      } else if ((Distancia.getInstancia().getDistancia(clientetmp.getNodo(), c.getNodo())
              < distanciaMasCercano2)
          && (clientetmp.getNodo().getId() != c.getNodo().getId())) {
        c.setClieteMasCercano2(clientetmp);
        distanciaMasCercano2 =
            Distancia.getInstancia().getDistancia(clientetmp.getNodo(), c.getNodo());
      }
    }

    return c;
  }
Example #2
0
  /**
   * Calcula el valor de <code>mu</code>.
   *
   * @param c Cliente.
   * @param dep Colección de depósitos.
   */
  private int calcularMu(ClienteCap2 c, Collection<Deposito> dep) {
    /*Deposito  masCercano=null;
    if(dep.size()>0)
    {
    	masCercano=dep.iterator().next();
    }
    else
    {
    	return 0;
    }
    int distanciaMasCercano=Integer.MAX_VALUE;
    Iterator<Deposito> it=dep.iterator();
    while(it.hasNext())
    {
    	Deposito n=it.next();
    	if(n.getCapacidadLibre()>=c.getNodo().getDemanda())
    	{
    		if(Distancia.getInstancia().getDistancia(n.getNodo(), c.getNodo())<distanciaMasCercano)
    		{
    			masCercano=n;
    			distanciaMasCercano=Distancia.getInstancia().getDistancia(n.getNodo(), c.getNodo());
    		}
    	}
    }

    int sumatoriaDistancias=0;
    Iterator<Deposito> it2=dep.iterator();
    while(it2.hasNext())
    {
    	Deposito n=it2.next();
    	if(n.getCapacidadLibre()>=c.getNodo().getDemanda())
    	{
    		if(n.getNodo().getId()!=masCercano.getNodo().getId())
    		{
    			sumatoriaDistancias=sumatoriaDistancias+Distancia.getInstancia().getDistancia(n.getNodo(),c.getNodo());
    		}
    	}
    }
    c.setMasCercano(masCercano);
    return sumatoriaDistancias-distanciaMasCercano;*/
    Deposito masCercano = null;

    int distanciaMasCercano = Integer.MAX_VALUE;
    Iterator<Deposito> it = dep.iterator();
    while (it.hasNext()) {
      Deposito n = it.next();
      if (n.getCapacidadLibre() >= c.getNodo().getDemanda()) {
        if (Distancia.getInstancia().getDistancia(n.getNodo(), c.getNodo()) < distanciaMasCercano) {
          masCercano = n;
          distanciaMasCercano = Distancia.getInstancia().getDistancia(n.getNodo(), c.getNodo());
        }
      }
    }

    if (masCercano != null) {
      int sumatoriaDistancias = 0;
      Iterator<Deposito> it2 = dep.iterator();
      while (it2.hasNext()) {
        Deposito n = it2.next();
        if (n.getCapacidadLibre() >= c.getNodo().getDemanda()) {
          if (n.getNodo().getId() != masCercano.getNodo().getId()) {
            sumatoriaDistancias =
                sumatoriaDistancias
                    + Distancia.getInstancia().getDistancia(n.getNodo(), c.getNodo());
          }
        }
      }
      c.setMasCercano(masCercano);
      return sumatoriaDistancias - distanciaMasCercano;
    } else {
      int distanciaMasCercano2 = Integer.MAX_VALUE;
      Iterator<Deposito> it2 = dep.iterator();
      while (it2.hasNext()) {
        Deposito n = it2.next();
        if (Distancia.getInstancia().getDistancia(n.getNodo(), c.getNodo())
            < distanciaMasCercano2) {
          masCercano = n;
          distanciaMasCercano2 = Distancia.getInstancia().getDistancia(n.getNodo(), c.getNodo());
        }
      }
      c.setMasCercano(masCercano);
      return 0;
    }
  }
Example #3
0
  /** Calcula los nodos que son enajendados. */
  private void calcularEnagenamiento() {
    Iterator<Deposito> itd1 = depositos.iterator();
    this.enajenados = new ArrayList<Enajenado>();
    while (itd1.hasNext()) {
      Deposito dep1 = itd1.next();
      Iterator<Cliente> itc1 = dep1.getAsignados().iterator();

      while (itc1.hasNext()) {
        Cliente clientebase = itc1.next();
        Iterator<Deposito> it4 = depositos.iterator();
        while (it4.hasNext()) {
          boolean encontre1 = false;
          boolean encontre2 = false;
          Deposito dep2 = it4.next();
          if (dep1.getNodo().getId() != dep2.getNodo().getId()) {

            Iterator<Cliente> it5 = dep2.getAsignados().iterator();
            while (it5.hasNext()) {
              Cliente cliente = it5.next();
              if (((ClienteCap2) clientebase).getClieteMasCercano1().getNodo().getId()
                  == cliente.getNodo().getId()) encontre1 = true;
              if (((ClienteCap2) clientebase).getClieteMasCercano2().getNodo().getId()
                  == cliente.getNodo().getId()) encontre2 = true;
            }
            if (encontre1 && encontre2) {
              this.enajenados.add(new Enajenado(((ClienteCap2) clientebase), dep1, dep2));
              break;
            }
          }
        }
      }
    }

    // limpio lista de enegenados por la distancia al deposito.
    int distCaC1, distCaC2, distDep;
    Iterator<Enajenado> itena = this.enajenados.iterator();
    ArrayList<Enajenado> asacar = new ArrayList<Enajenado>();
    while (itena.hasNext()) {
      Enajenado ena = itena.next();
      distCaC1 =
          Distancia.getInstancia()
              .getDistancia(
                  ena.getCliente().getClieteMasCercano1().getNodo(), ena.getCliente().getNodo());
      distCaC2 =
          Distancia.getInstancia()
              .getDistancia(
                  ena.getCliente().getClieteMasCercano2().getNodo(), ena.getCliente().getNodo());
      distDep =
          Distancia.getInstancia()
              .getDistancia(ena.getCliente().getNodo(), ena.getDeposito().getNodo());

      System.out.println(
          "Clientes mas cercanos a "
              + ena.getCliente().getNodo().getId()
              + " ( "
              + ena.getDeposito().getNodo().getId()
              + " ). c 1 y c2 "
              + ena.getCliente().getClieteMasCercano1().getNodo().getId()
              + " ,"
              + ena.getCliente().getClieteMasCercano2().getNodo().getId()
              + "("
              + ena.getDepositoDestino().getNodo().getId()
              + ")");

      if (distCaC1 + distCaC2 > distDep) asacar.add(ena); // this.enajenados.remove(ena);
      else ena.setMu(distDep - (distCaC1 + distCaC2));
    }
    Iterator<Enajenado> itsacar = asacar.iterator();
    while (itsacar.hasNext()) {
      this.enajenados.remove(itsacar.next());
    }
  }