From 07ecdc2f28eb6427ed35b9471395292077a85a83 Mon Sep 17 00:00:00 2001 From: Stefan Schroeder <4sschroeder@gmail.com> Date: Fri, 30 Aug 2013 10:51:50 +0200 Subject: [PATCH] fix bug in CalculatesServiceInsertion --- jsprit-core/src/main/java/algorithms/CalcUtils.java | 10 ---------- .../java/algorithms/CalculatesServiceInsertion.java | 12 +++++++----- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/jsprit-core/src/main/java/algorithms/CalcUtils.java b/jsprit-core/src/main/java/algorithms/CalcUtils.java index 07872ef6..990504db 100644 --- a/jsprit-core/src/main/java/algorithms/CalcUtils.java +++ b/jsprit-core/src/main/java/algorithms/CalcUtils.java @@ -4,16 +4,6 @@ import basics.route.TourActivity; class CalcUtils { - /** - * - * @param startTimeAtPrevAct - * @param tpTime_prevAct_nextAct - * @param nextAct - * @return - */ - static double getStartTimeAtAct(double startTimeAtPrevAct, double tpTime_prevAct_nextAct, TourActivity nextAct){ - return Math.max(startTimeAtPrevAct + tpTime_prevAct_nextAct, nextAct.getTheoreticalEarliestOperationStartTime()) + nextAct.getOperationTime(); - } /** * Calculates actEndTime assuming that activity can at earliest start at act.getTheoreticalEarliestOperationStartTime(). diff --git a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertion.java b/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertion.java index 445988e2..ca4d0ad4 100644 --- a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertion.java +++ b/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertion.java @@ -102,11 +102,9 @@ final class CalculatesServiceInsertion implements JobInsertionCalculator{ TourActivity prevAct = start; double prevActStartTime = newVehicleDepartureTime; int actIndex = 0; - +// logger.info("start"); for(TourActivity nextAct : currentRoute.getTourActivities().getActivities()){ - if(deliveryAct2Insert.getTheoreticalLatestOperationStartTime() < prevAct.getTheoreticalEarliestOperationStartTime()){ - break; - } +// logger.info("prevActStartTime="+prevActStartTime); if(neighborhood.areNeighbors(deliveryAct2Insert.getLocationId(), prevAct.getLocationId()) && neighborhood.areNeighbors(deliveryAct2Insert.getLocationId(), nextAct.getLocationId())){ Marginals mc = calculate(insertionContext, prevAct, nextAct, deliveryAct2Insert, prevActStartTime); if(mc != null){ @@ -117,10 +115,14 @@ final class CalculatesServiceInsertion implements JobInsertionCalculator{ } } } + double nextActArrTime = prevActStartTime + transportCosts.getTransportTime(prevAct.getLocationId(), nextAct.getLocationId(), prevActStartTime, newDriver, newVehicle); + double nextActEndTime = CalcUtils.getActivityEndTime(nextActArrTime, nextAct); + + prevActStartTime = nextActEndTime; prevAct = nextAct; - prevActStartTime = CalcUtils.getStartTimeAtAct(prevActStartTime, transportCosts.getTransportTime(prevAct.getLocationId(), nextAct.getLocationId(), prevActStartTime, newDriver, newVehicle), nextAct); actIndex++; } +// logger.info("prevActStartTime="+prevActStartTime); End nextAct = end; if(neighborhood.areNeighbors(deliveryAct2Insert.getLocationId(), prevAct.getLocationId()) && neighborhood.areNeighbors(deliveryAct2Insert.getLocationId(), nextAct.getLocationId())){ Marginals mc = calculate(insertionContext, prevAct, nextAct, deliveryAct2Insert, prevActStartTime);