From 312ebc8313934481734b30078eb7c8660e28155e Mon Sep 17 00:00:00 2001 From: oblonski <4sschroeder@gmail.com> Date: Wed, 14 May 2014 23:53:26 +0200 Subject: [PATCH] fixed bug #95 --- .../problem/constraint/TimeWindowConstraint.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/jsprit-core/src/main/java/jsprit/core/problem/constraint/TimeWindowConstraint.java b/jsprit-core/src/main/java/jsprit/core/problem/constraint/TimeWindowConstraint.java index 08a5fc83..982b4f97 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/constraint/TimeWindowConstraint.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/constraint/TimeWindowConstraint.java @@ -9,7 +9,7 @@ import jsprit.core.util.CalculationUtils; /** - * ljsljslfjs + * * @author stefan * */ @@ -27,9 +27,19 @@ import jsprit.core.util.CalculationUtils; @Override public ConstraintsStatus fulfilled(JobInsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime) { + double latestVehicleArrival = iFacts.getNewVehicle().getLatestArrival(); + if(latestVehicleArrival < prevAct.getTheoreticalEarliestOperationStartTime() || + latestVehicleArrival < newAct.getTheoreticalEarliestOperationStartTime() || + latestVehicleArrival < nextAct.getTheoreticalEarliestOperationStartTime()){ + return ConstraintsStatus.NOT_FULFILLED_BREAK; + } if(newAct.getTheoreticalLatestOperationStartTime() < prevAct.getTheoreticalEarliestOperationStartTime()){ return ConstraintsStatus.NOT_FULFILLED_BREAK; } + double arrTimeAtNextOnDirectRouteWithNewVehicle = prevActDepTime + routingCosts.getTransportTime(prevAct.getLocationId(), nextAct.getLocationId(), prevActDepTime, iFacts.getNewDriver(), iFacts.getNewVehicle()); + if(arrTimeAtNextOnDirectRouteWithNewVehicle > nextAct.getTheoreticalLatestOperationStartTime()){ + return ConstraintsStatus.NOT_FULFILLED_BREAK; + } if(newAct.getTheoreticalEarliestOperationStartTime() > nextAct.getTheoreticalLatestOperationStartTime()){ return ConstraintsStatus.NOT_FULFILLED; } @@ -47,8 +57,7 @@ import jsprit.core.util.CalculationUtils; if(arrTimeAtNextAct > latestArrTimeAtNextAct){ return ConstraintsStatus.NOT_FULFILLED; } - double arrTimeAtNextOnDirectRouteWithNewVehicle = prevActDepTime + routingCosts.getTransportTime(prevAct.getLocationId(), nextAct.getLocationId(), prevActDepTime, iFacts.getNewDriver(), iFacts.getNewVehicle()); - //if vehicle cannot even manage direct-route - break +// if vehicle cannot even manage direct-route - break if(arrTimeAtNextOnDirectRouteWithNewVehicle > latestArrTimeAtNextAct){ return ConstraintsStatus.NOT_FULFILLED_BREAK; }