private void checkDemands(VehicleCResult vcr) {
   double capacityMax;
   Compartment compartement;
   for (int pId : vcr.getProductIds()) {
     compartement = (Compartment) Instance.getVehicle().getAttribute("compartment").get(pId);
     capacityMax = compartement.getMax();
     if (vcr.getSumDemands().get(pId) > capacityMax) {
       cEval.addMessage(
           "Deterministic capacity Single Vehicle Multi Product|Vehicle capacity , Product Id "
               + pId
               + " - "
               + vcr.getSumDemands().get(pId)
               + " greater than "
               + capacityMax);
     }
   }
 }
  @Override
  public double evaluate() {
    DeterministicMaxWorkTimeNodes wton = new DeterministicMaxWorkTimeNodes();

    int vehiType = -1;
    int departureNode, arrivalNode;
    double timeSpent = 0, speed;
    Request req;

    // each route
    for (Route r : Solution.getRoutes()) {
      vehiType = (r.isHasType() ? r.getType() : -1);
      if (Instance.getRequest(r.getRequests().get(0).getId()).getAttribute("serviceTime") != null)
        timeSpent +=
            ((DoubleValue)
                    Instance.getRequest(r.getRequests().get(0).getId())
                        .getAttribute("serviceTime")
                        .get(0))
                .getValue();

      for (int reqIndex = 1; reqIndex < r.getRequests().size(); reqIndex++) {
        req = r.getRequests().get(reqIndex);
        arrivalNode = req.getNodeId();
        departureNode = r.getRequests().get(reqIndex - 1).getNodeId();

        if (vehiType != -1)
          speed =
              wton.getSpeed(Instance.getVehicle(vehiType).getAttribute("speedProfile"), timeSpent);
        else
          speed =
              wton.getSpeed(Instance.getVehicle(vehiType).getAttribute("speedProfile"), timeSpent);
        timeSpent += DistanceCalculator.calculateDistance(departureNode, arrivalNode) / speed;
        if (Instance.getRequest(req.getId()).getAttribute("serviceTime") != null)
          timeSpent +=
              ((DoubleValue) Instance.getRequest(req.getId()).getAttribute("serviceTime").get(0))
                  .getValue();
      }
    }

    return timeSpent;
  }