Exemplo n.º 1
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());
    }
  }