diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ActivityInsertionCostsCalculator.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ActivityInsertionCostsCalculator.java index 681c9366..f439b40c 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ActivityInsertionCostsCalculator.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ActivityInsertionCostsCalculator.java @@ -51,6 +51,6 @@ public interface ActivityInsertionCostsCalculator { } - public ActivityInsertionCosts getCosts(JobInsertionContext iContext, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct); + public double getCosts(JobInsertionContext iContext, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct); } diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/CalculatorBuilder.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/CalculatorBuilder.java index b1d4ec8d..52c99bc7 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/CalculatorBuilder.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/CalculatorBuilder.java @@ -16,23 +16,19 @@ ******************************************************************************/ package jsprit.core.algorithm.recreate; -import java.util.ArrayList; -import java.util.List; - import jsprit.core.algorithm.listener.VehicleRoutingAlgorithmListeners.PrioritizedVRAListener; import jsprit.core.algorithm.recreate.listener.InsertionListener; import jsprit.core.problem.VehicleRoutingProblem; import jsprit.core.problem.constraint.ConstraintManager; -import jsprit.core.problem.job.Delivery; -import jsprit.core.problem.job.Job; -import jsprit.core.problem.job.Pickup; -import jsprit.core.problem.job.Service; -import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.job.*; import jsprit.core.problem.misc.JobInsertionContext; import jsprit.core.problem.solution.route.activity.TourActivity; import jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter; import jsprit.core.problem.vehicle.VehicleFleetManager; +import java.util.ArrayList; +import java.util.List; + @@ -257,12 +253,10 @@ class CalculatorBuilder { else if(activityInsertionCostCalculator == null && !addDefaultCostCalc){ actInsertionCalc = new ActivityInsertionCostsCalculator(){ - final ActivityInsertionCosts noInsertionCosts = new ActivityInsertionCosts(0.,0.); - @Override - public ActivityInsertionCosts getCosts(JobInsertionContext iContext, TourActivity prevAct,TourActivity nextAct, TourActivity newAct, - double depTimeAtPrevAct) { - return noInsertionCosts; + public double getCosts(JobInsertionContext iContext, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, + double depTimeAtPrevAct) { + return 0.; } }; @@ -308,9 +302,9 @@ class CalculatorBuilder { final ActivityInsertionCosts noInsertionCosts = new ActivityInsertionCosts(0.,0.); @Override - public ActivityInsertionCosts getCosts(JobInsertionContext iContext, TourActivity prevAct,TourActivity nextAct, TourActivity newAct, - double depTimeAtPrevAct) { - return noInsertionCosts; + public double getCosts(JobInsertionContext iContext, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, + double depTimeAtPrevAct) { + return 0.; } }; diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/LocalActivityInsertionCostsCalculator.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/LocalActivityInsertionCostsCalculator.java index 56b755f0..0c36f9a6 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/LocalActivityInsertionCostsCalculator.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/LocalActivityInsertionCostsCalculator.java @@ -51,56 +51,41 @@ class LocalActivityInsertionCostsCalculator implements ActivityInsertionCostsCal } @Override - public ActivityInsertionCosts getCosts(JobInsertionContext iFacts, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct) { + public double getCosts(JobInsertionContext iFacts, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct) { double tp_costs_prevAct_newAct = routingCosts.getTransportCost(prevAct.getLocationId(), newAct.getLocationId(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); double tp_time_prevAct_newAct = routingCosts.getTransportTime(prevAct.getLocationId(), newAct.getLocationId(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); - double newAct_arrTime = depTimeAtPrevAct + tp_time_prevAct_newAct; - double newAct_endTime = CalculationUtils.getActivityEndTime(newAct_arrTime, newAct); - double act_costs_newAct = activityCosts.getActivityCost(newAct, newAct_arrTime, iFacts.getNewDriver(), iFacts.getNewVehicle()); //open routes if(nextAct instanceof End){ if(!iFacts.getNewVehicle().isReturnToDepot()){ - return new ActivityInsertionCosts(tp_costs_prevAct_newAct, tp_time_prevAct_newAct); + return tp_costs_prevAct_newAct; } } double tp_costs_newAct_nextAct = routingCosts.getTransportCost(newAct.getLocationId(), nextAct.getLocationId(), newAct_endTime, iFacts.getNewDriver(), iFacts.getNewVehicle()); double tp_time_newAct_nextAct = routingCosts.getTransportTime(newAct.getLocationId(), nextAct.getLocationId(), newAct_endTime, iFacts.getNewDriver(), iFacts.getNewVehicle()); - double nextAct_arrTime = newAct_endTime + tp_time_newAct_nextAct; - double act_costs_nextAct = activityCosts.getActivityCost(nextAct, nextAct_arrTime, iFacts.getNewDriver(), iFacts.getNewVehicle()); - double totalCosts = tp_costs_prevAct_newAct + tp_costs_newAct_nextAct + act_costs_newAct + act_costs_nextAct; double oldCosts; - double oldTime; if(iFacts.getRoute().isEmpty()){ double tp_costs_prevAct_nextAct = routingCosts.getTransportCost(prevAct.getLocationId(), nextAct.getLocationId(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); double arrTime_nextAct = routingCosts.getTransportTime(prevAct.getLocationId(), nextAct.getLocationId(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); - double actCost_nextAct = activityCosts.getActivityCost(nextAct, arrTime_nextAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); oldCosts = tp_costs_prevAct_nextAct + actCost_nextAct; - oldTime = (nextAct.getArrTime() - depTimeAtPrevAct); } else{ double tp_costs_prevAct_nextAct = routingCosts.getTransportCost(prevAct.getLocationId(), nextAct.getLocationId(), prevAct.getEndTime(), iFacts.getRoute().getDriver(), iFacts.getRoute().getVehicle()); double arrTime_nextAct = routingCosts.getTransportTime(prevAct.getLocationId(), nextAct.getLocationId(), prevAct.getEndTime(), iFacts.getRoute().getDriver(), iFacts.getRoute().getVehicle()); - double actCost_nextAct = activityCosts.getActivityCost(nextAct, arrTime_nextAct, iFacts.getRoute().getDriver(), iFacts.getRoute().getVehicle()); oldCosts = tp_costs_prevAct_nextAct + actCost_nextAct; - oldTime = (nextAct.getArrTime() - iFacts.getRoute().getDepartureTime()); } - - double additionalCosts = totalCosts - oldCosts; - double additionalTime = (nextAct_arrTime - iFacts.getNewDepTime()) - oldTime; - - return new ActivityInsertionCosts(additionalCosts,additionalTime); + return totalCosts - oldCosts; } } diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RouteLevelActivityInsertionCostsEstimator.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RouteLevelActivityInsertionCostsEstimator.java index 95f09735..81845ec9 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RouteLevelActivityInsertionCostsEstimator.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RouteLevelActivityInsertionCostsEstimator.java @@ -20,9 +20,6 @@ ******************************************************************************/ package jsprit.core.algorithm.recreate; -import java.util.ArrayList; -import java.util.List; - import jsprit.core.problem.cost.VehicleRoutingActivityCosts; import jsprit.core.problem.cost.VehicleRoutingTransportCosts; import jsprit.core.problem.misc.JobInsertionContext; @@ -33,6 +30,9 @@ import jsprit.core.problem.solution.route.activity.TourActivity; import jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter; import jsprit.core.problem.solution.route.state.StateFactory; +import java.util.ArrayList; +import java.util.List; + class RouteLevelActivityInsertionCostsEstimator implements ActivityInsertionCostsCalculator{ @@ -52,7 +52,7 @@ class RouteLevelActivityInsertionCostsEstimator implements ActivityInsertionCost } @Override - public ActivityInsertionCosts getCosts(JobInsertionContext iFacts, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct) { + public double getCosts(JobInsertionContext iFacts, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct) { List path = new ArrayList(); path.add(prevAct); path.add(newAct); path.add(nextAct); int actIndex; @@ -66,7 +66,7 @@ class RouteLevelActivityInsertionCostsEstimator implements ActivityInsertionCost double forwardPathCost_newVehicle = auxilliaryPathCostCalculator.costOfPath(path, depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); double additionalCosts = forwardPathCost_newVehicle - (actCostsOld(iFacts.getRoute(), path.get(path.size()-1)) - actCostsOld(iFacts.getRoute(), prevAct)); - return new ActivityInsertionCosts(additionalCosts, 0.0); + return additionalCosts; } diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ServiceInsertionCalculator.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ServiceInsertionCalculator.java index 5c70869e..189fd5fe 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ServiceInsertionCalculator.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ServiceInsertionCalculator.java @@ -16,28 +16,18 @@ ******************************************************************************/ package jsprit.core.algorithm.recreate; -import jsprit.core.algorithm.recreate.ActivityInsertionCostsCalculator.ActivityInsertionCosts; -import jsprit.core.problem.constraint.ConstraintManager; -import jsprit.core.problem.constraint.HardActivityStateLevelConstraint; +import jsprit.core.problem.constraint.*; import jsprit.core.problem.constraint.HardActivityStateLevelConstraint.ConstraintsStatus; -import jsprit.core.problem.constraint.HardRouteStateLevelConstraint; -import jsprit.core.problem.constraint.SoftActivityConstraint; -import jsprit.core.problem.constraint.SoftRouteConstraint; import jsprit.core.problem.cost.VehicleRoutingTransportCosts; import jsprit.core.problem.driver.Driver; import jsprit.core.problem.job.Job; import jsprit.core.problem.job.Service; import jsprit.core.problem.misc.JobInsertionContext; import jsprit.core.problem.solution.route.VehicleRoute; -import jsprit.core.problem.solution.route.activity.DefaultTourActivityFactory; -import jsprit.core.problem.solution.route.activity.End; -import jsprit.core.problem.solution.route.activity.Start; -import jsprit.core.problem.solution.route.activity.TourActivity; -import jsprit.core.problem.solution.route.activity.TourActivityFactory; +import jsprit.core.problem.solution.route.activity.*; import jsprit.core.problem.vehicle.Vehicle; import jsprit.core.problem.vehicle.VehicleImpl.NoVehicle; import jsprit.core.util.CalculationUtils; - import org.apache.log4j.Logger; /** @@ -123,9 +113,9 @@ final class ServiceInsertionCalculator implements JobInsertionCostsCalculator{ if(status.equals(ConstraintsStatus.FULFILLED)){ //from job2insert induced costs at activity level double additionalICostsAtActLevel = softActivityConstraint.getCosts(insertionContext, prevAct, deliveryAct2Insert, nextAct, prevActStartTime); - ActivityInsertionCosts additionalTransportationCosts = additionalTransportCostsCalculator.getCosts(insertionContext, prevAct, nextAct, deliveryAct2Insert, prevActStartTime); - if(additionalICostsAtRouteLevel + additionalICostsAtActLevel + additionalTransportationCosts.getAdditionalCosts() < bestCost){ - bestCost = additionalICostsAtRouteLevel + additionalICostsAtActLevel + additionalTransportationCosts.getAdditionalCosts(); + double additionalTransportationCosts = additionalTransportCostsCalculator.getCosts(insertionContext, prevAct, nextAct, deliveryAct2Insert, prevActStartTime); + if(additionalICostsAtRouteLevel + additionalICostsAtActLevel + additionalTransportationCosts < bestCost){ + bestCost = additionalICostsAtRouteLevel + additionalICostsAtActLevel + additionalTransportationCosts; insertionIndex = actIndex; } } @@ -144,9 +134,9 @@ final class ServiceInsertionCalculator implements JobInsertionCostsCalculator{ ConstraintsStatus status = hardActivityLevelConstraint.fulfilled(insertionContext, prevAct, deliveryAct2Insert, nextAct, prevActStartTime); if(status.equals(ConstraintsStatus.FULFILLED)){ double additionalICostsAtActLevel = softActivityConstraint.getCosts(insertionContext, prevAct, deliveryAct2Insert, nextAct, prevActStartTime); - ActivityInsertionCosts additionalTransportationCosts = additionalTransportCostsCalculator.getCosts(insertionContext, prevAct, nextAct, deliveryAct2Insert, prevActStartTime); - if(additionalICostsAtRouteLevel + additionalICostsAtActLevel + additionalTransportationCosts.getAdditionalCosts() < bestCost){ - bestCost = additionalICostsAtRouteLevel + additionalICostsAtActLevel + additionalTransportationCosts.getAdditionalCosts(); + double additionalTransportationCosts = additionalTransportCostsCalculator.getCosts(insertionContext, prevAct, nextAct, deliveryAct2Insert, prevActStartTime); + if(additionalICostsAtRouteLevel + additionalICostsAtActLevel + additionalTransportationCosts < bestCost){ + bestCost = additionalICostsAtRouteLevel + additionalICostsAtActLevel + additionalTransportationCosts; insertionIndex = actIndex; } } diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ServiceInsertionOnRouteLevelCalculator.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ServiceInsertionOnRouteLevelCalculator.java index d30c64a5..b422ee2e 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ServiceInsertionOnRouteLevelCalculator.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ServiceInsertionOnRouteLevelCalculator.java @@ -16,14 +16,6 @@ ******************************************************************************/ package jsprit.core.algorithm.recreate; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.PriorityQueue; - -import jsprit.core.algorithm.recreate.ActivityInsertionCostsCalculator.ActivityInsertionCosts; import jsprit.core.problem.constraint.HardActivityStateLevelConstraint; import jsprit.core.problem.constraint.HardActivityStateLevelConstraint.ConstraintsStatus; import jsprit.core.problem.constraint.HardRouteStateLevelConstraint; @@ -34,19 +26,15 @@ import jsprit.core.problem.job.Job; import jsprit.core.problem.job.Service; import jsprit.core.problem.misc.JobInsertionContext; import jsprit.core.problem.solution.route.VehicleRoute; -import jsprit.core.problem.solution.route.activity.DefaultTourActivityFactory; -import jsprit.core.problem.solution.route.activity.End; -import jsprit.core.problem.solution.route.activity.Start; -import jsprit.core.problem.solution.route.activity.TourActivities; -import jsprit.core.problem.solution.route.activity.TourActivity; -import jsprit.core.problem.solution.route.activity.TourActivityFactory; +import jsprit.core.problem.solution.route.activity.*; import jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter; import jsprit.core.problem.solution.route.state.StateFactory; import jsprit.core.problem.vehicle.Vehicle; import jsprit.core.problem.vehicle.VehicleImpl.NoVehicle; - import org.apache.log4j.Logger; +import java.util.*; + @@ -172,12 +160,12 @@ final class ServiceInsertionOnRouteLevelCalculator implements JobInsertionCostsC /** * builds a path on this route forwardPath={i,k,j,j+1,j+2,...,j+nuOfActsForwardLooking} */ - ActivityInsertionCosts actInsertionCosts = activityInsertionCostsCalculator.getCosts(insertionContext, prevAct, nextAct, serviceAct2Insert, prevActDepTime_newVehicle); + double actInsertionCosts = activityInsertionCostsCalculator.getCosts(insertionContext, prevAct, nextAct, serviceAct2Insert, prevActDepTime_newVehicle); /** * insertion_cost_approximation = c({0,1,...,i},newVehicle) + c({i,k,j,j+1,j+2,...,j+nuOfActsForwardLooking},newVehicle) - c({0,1,...,i,j,j+1,...,j+nuOfActsForwardLooking},oldVehicle) */ - double insertion_cost_approximation = sumOf_prevCosts_newVehicle - sumOf_prevCosts_oldVehicle(currentRoute,prevAct) + actInsertionCosts.getAdditionalCosts(); + double insertion_cost_approximation = sumOf_prevCosts_newVehicle - sumOf_prevCosts_oldVehicle(currentRoute,prevAct) + actInsertionCosts; /** * memorize it in insertion-queue @@ -223,12 +211,12 @@ final class ServiceInsertionOnRouteLevelCalculator implements JobInsertionCostsC End nextAct = end; ConstraintsStatus hardActivityConstraintsStatus = hardActivityLevelConstraint.fulfilled(insertionContext, prevAct, serviceAct2Insert, nextAct, prevActDepTime_newVehicle); if(hardActivityConstraintsStatus.equals(ConstraintsStatus.FULFILLED)){ - ActivityInsertionCosts actInsertionCosts = activityInsertionCostsCalculator.getCosts(insertionContext, prevAct, nextAct, serviceAct2Insert, prevActDepTime_newVehicle); - if(actInsertionCosts != null){ + double actInsertionCosts = activityInsertionCostsCalculator.getCosts(insertionContext, prevAct, nextAct, serviceAct2Insert, prevActDepTime_newVehicle); + /** * insertion_cost_approximation = c({0,1,...,i},newVehicle) + c({i,k,j,j+1,j+2,...,j+nuOfActsForwardLooking},newVehicle) - c({0,1,...,i,j,j+1,...,j+nuOfActsForwardLooking},oldVehicle) */ - double insertion_cost_approximation = sumOf_prevCosts_newVehicle - sumOf_prevCosts_oldVehicle(currentRoute,prevAct) + actInsertionCosts.getAdditionalCosts(); + double insertion_cost_approximation = sumOf_prevCosts_newVehicle - sumOf_prevCosts_oldVehicle(currentRoute,prevAct) + actInsertionCosts; /** * memorize it in insertion-queue @@ -236,7 +224,7 @@ final class ServiceInsertionOnRouteLevelCalculator implements JobInsertionCostsC if(insertion_cost_approximation < best_known_insertion_costs){ bestInsertionsQueue.add(new InsertionData(insertion_cost_approximation, InsertionData.NO_INDEX, actIndex, newVehicle, newDriver)); } - } + } } diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ShipmentInsertionCalculator.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ShipmentInsertionCalculator.java index fe29fb62..bfedf1f9 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ShipmentInsertionCalculator.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ShipmentInsertionCalculator.java @@ -16,32 +16,22 @@ ******************************************************************************/ package jsprit.core.algorithm.recreate; -import java.util.List; - -import jsprit.core.algorithm.recreate.ActivityInsertionCostsCalculator.ActivityInsertionCosts; -import jsprit.core.problem.constraint.ConstraintManager; -import jsprit.core.problem.constraint.HardActivityStateLevelConstraint; -import jsprit.core.problem.constraint.SoftActivityConstraint; -import jsprit.core.problem.constraint.SoftRouteConstraint; +import jsprit.core.problem.constraint.*; import jsprit.core.problem.constraint.HardActivityStateLevelConstraint.ConstraintsStatus; -import jsprit.core.problem.constraint.HardRouteStateLevelConstraint; import jsprit.core.problem.cost.VehicleRoutingTransportCosts; import jsprit.core.problem.driver.Driver; import jsprit.core.problem.job.Job; import jsprit.core.problem.job.Shipment; import jsprit.core.problem.misc.JobInsertionContext; import jsprit.core.problem.solution.route.VehicleRoute; -import jsprit.core.problem.solution.route.activity.DefaultShipmentActivityFactory; -import jsprit.core.problem.solution.route.activity.End; -import jsprit.core.problem.solution.route.activity.Start; -import jsprit.core.problem.solution.route.activity.TourActivity; -import jsprit.core.problem.solution.route.activity.TourShipmentActivityFactory; +import jsprit.core.problem.solution.route.activity.*; import jsprit.core.problem.vehicle.Vehicle; import jsprit.core.problem.vehicle.VehicleImpl.NoVehicle; import jsprit.core.util.CalculationUtils; - import org.apache.log4j.Logger; +import java.util.List; + @@ -134,7 +124,7 @@ final class ShipmentInsertionCalculator implements JobInsertionCostsCalculator{ break; } double additionalPickupICosts = softActivityConstraint.getCosts(insertionContext, prevAct, pickupShipment, activities.get(i), prevActEndTime); - ActivityInsertionCosts pickupAIC = calculate(insertionContext,prevAct,pickupShipment,activities.get(i),prevActEndTime); + double pickupAIC = calculate(insertionContext,prevAct,pickupShipment,activities.get(i),prevActEndTime); TourActivity prevAct_deliveryLoop = pickupShipment; double shipmentPickupArrTime = prevActEndTime + transportCosts.getTransportTime(prevAct.getLocationId(), pickupShipment.getLocationId(), prevActEndTime, newDriver, newVehicle); double shipmentPickupEndTime = CalculationUtils.getActivityEndTime(shipmentPickupArrTime, pickupShipment); @@ -145,8 +135,8 @@ final class ShipmentInsertionCalculator implements JobInsertionCostsCalculator{ ConstraintsStatus deliverShipmentConstraintStatus = hardActivityLevelConstraint.fulfilled(insertionContext, prevAct_deliveryLoop, deliverShipment, activities.get(j), prevActEndTime_deliveryLoop); if(deliverShipmentConstraintStatus.equals(ConstraintsStatus.FULFILLED)){ double additionalDeliveryICosts = softActivityConstraint.getCosts(insertionContext, prevAct_deliveryLoop, deliverShipment, activities.get(j), prevActEndTime_deliveryLoop); - ActivityInsertionCosts deliveryAIC = calculate(insertionContext,prevAct_deliveryLoop,deliverShipment,activities.get(j),prevActEndTime_deliveryLoop); - double totalActivityInsertionCosts = pickupAIC.getAdditionalCosts() + deliveryAIC.getAdditionalCosts() + double deliveryAIC = calculate(insertionContext,prevAct_deliveryLoop,deliverShipment,activities.get(j),prevActEndTime_deliveryLoop); + double totalActivityInsertionCosts = pickupAIC + deliveryAIC + additionalICostsAtRouteLevel + additionalPickupICosts + additionalDeliveryICosts; if(totalActivityInsertionCosts < bestCost){ bestCost = totalActivityInsertionCosts; @@ -167,8 +157,8 @@ final class ShipmentInsertionCalculator implements JobInsertionCostsCalculator{ ConstraintsStatus deliverShipmentConstraintStatus = hardActivityLevelConstraint.fulfilled(insertionContext, prevAct_deliveryLoop, deliverShipment, end, prevActEndTime_deliveryLoop); if(deliverShipmentConstraintStatus.equals(ConstraintsStatus.FULFILLED)){ double additionalDeliveryICosts = softActivityConstraint.getCosts(insertionContext, prevAct_deliveryLoop, deliverShipment, end, prevActEndTime_deliveryLoop); - ActivityInsertionCosts deliveryAIC = calculate(insertionContext,prevAct_deliveryLoop,deliverShipment,end,prevActEndTime_deliveryLoop); - double totalActivityInsertionCosts = pickupAIC.getAdditionalCosts() + deliveryAIC.getAdditionalCosts() + double deliveryAIC = calculate(insertionContext,prevAct_deliveryLoop,deliverShipment,end,prevActEndTime_deliveryLoop); + double totalActivityInsertionCosts = pickupAIC + deliveryAIC + additionalICostsAtRouteLevel + additionalPickupICosts + additionalDeliveryICosts; if(totalActivityInsertionCosts < bestCost){ bestCost = totalActivityInsertionCosts; @@ -186,7 +176,7 @@ final class ShipmentInsertionCalculator implements JobInsertionCostsCalculator{ ConstraintsStatus pickupShipmentConstraintStatus = hardActivityLevelConstraint.fulfilled(insertionContext, prevAct, pickupShipment, end, prevActEndTime); if(pickupShipmentConstraintStatus.equals(ConstraintsStatus.FULFILLED)){ double additionalPickupICosts = softActivityConstraint.getCosts(insertionContext, prevAct, pickupShipment, end, prevActEndTime); - ActivityInsertionCosts pickupAIC = calculate(insertionContext,prevAct,pickupShipment,end,prevActEndTime); + double pickupAIC = calculate(insertionContext,prevAct,pickupShipment,end,prevActEndTime); TourActivity prevAct_deliveryLoop = pickupShipment; double shipmentPickupArrTime = prevActEndTime + transportCosts.getTransportTime(prevAct.getLocationId(), pickupShipment.getLocationId(), prevActEndTime, newDriver, newVehicle); double shipmentPickupEndTime = CalculationUtils.getActivityEndTime(shipmentPickupArrTime, pickupShipment); @@ -195,8 +185,8 @@ final class ShipmentInsertionCalculator implements JobInsertionCostsCalculator{ ConstraintsStatus deliverShipmentConstraintStatus = hardActivityLevelConstraint.fulfilled(insertionContext, prevAct_deliveryLoop, deliverShipment, end, prevActEndTime_deliveryLoop); if(deliverShipmentConstraintStatus.equals(ConstraintsStatus.FULFILLED)){ double additionalDeliveryICosts = softActivityConstraint.getCosts(insertionContext, prevAct_deliveryLoop, deliverShipment, end, prevActEndTime_deliveryLoop); - ActivityInsertionCosts deliveryAIC = calculate(insertionContext,prevAct_deliveryLoop,deliverShipment,end,prevActEndTime_deliveryLoop); - double totalActivityInsertionCosts = pickupAIC.getAdditionalCosts() + deliveryAIC.getAdditionalCosts() + double deliveryAIC = calculate(insertionContext,prevAct_deliveryLoop,deliverShipment,end,prevActEndTime_deliveryLoop); + double totalActivityInsertionCosts = pickupAIC + deliveryAIC + additionalICostsAtRouteLevel + additionalPickupICosts + additionalDeliveryICosts; if(totalActivityInsertionCosts < bestCost){ bestCost = totalActivityInsertionCosts; @@ -214,7 +204,7 @@ final class ShipmentInsertionCalculator implements JobInsertionCostsCalculator{ return insertionData; } - private ActivityInsertionCosts calculate(JobInsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double departureTimeAtPrevAct) { + private double calculate(JobInsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double departureTimeAtPrevAct) { return activityInsertionCostsCalculator.getCosts(iFacts, prevAct, nextAct, newAct, departureTimeAtPrevAct); } diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestLocalActivityInsertionCostsCalculator.java b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestLocalActivityInsertionCostsCalculator.java index 84c5bc6f..c80bd611 100644 --- a/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestLocalActivityInsertionCostsCalculator.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestLocalActivityInsertionCostsCalculator.java @@ -18,10 +18,6 @@ ******************************************************************************/ package jsprit.core.algorithm.recreate; -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import jsprit.core.algorithm.recreate.ActivityInsertionCostsCalculator.ActivityInsertionCosts; import jsprit.core.problem.cost.VehicleRoutingActivityCosts; import jsprit.core.problem.cost.VehicleRoutingTransportCosts; import jsprit.core.problem.misc.JobInsertionContext; @@ -29,10 +25,13 @@ import jsprit.core.problem.solution.route.VehicleRoute; import jsprit.core.problem.solution.route.activity.End; import jsprit.core.problem.solution.route.activity.TourActivity; import jsprit.core.problem.vehicle.Vehicle; - import org.junit.Before; import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + public class TestLocalActivityInsertionCostsCalculator { VehicleRoutingTransportCosts tpCosts; @@ -82,8 +81,8 @@ public class TestLocalActivityInsertionCostsCalculator { when(vehicle.isReturnToDepot()).thenReturn(true); - ActivityInsertionCosts costs = calc.getCosts(jic, prevAct, nextAct, newAct, 0.0); - assertEquals(4.0,costs.getAdditionalCosts(),0.01); + double costs = calc.getCosts(jic, prevAct, nextAct, newAct, 0.0); + assertEquals(4.0,costs,0.01); } @Test @@ -96,8 +95,8 @@ public class TestLocalActivityInsertionCostsCalculator { when(vehicle.isReturnToDepot()).thenReturn(true); - ActivityInsertionCosts costs = calc.getCosts(jic, prevAct, nextAct, newAct, 0.0); - assertEquals(4.0,costs.getAdditionalCosts(),0.01); + double costs = calc.getCosts(jic, prevAct, nextAct, newAct, 0.0); + assertEquals(4.0,costs,0.01); } @Test @@ -111,8 +110,8 @@ public class TestLocalActivityInsertionCostsCalculator { when(vehicle.isReturnToDepot()).thenReturn(false); - ActivityInsertionCosts costs = calc.getCosts(jic, prevAct, nextAct, newAct, 0.0); - assertEquals(4.0,costs.getAdditionalCosts(),0.01); + double costs = calc.getCosts(jic, prevAct, nextAct, newAct, 0.0); + assertEquals(4.0,costs,0.01); } @Test @@ -125,7 +124,7 @@ public class TestLocalActivityInsertionCostsCalculator { when(vehicle.isReturnToDepot()).thenReturn(false); - ActivityInsertionCosts costs = calc.getCosts(jic, prevAct, nextAct, newAct, 0.0); - assertEquals(3.0,costs.getAdditionalCosts(),0.01); + double costs = calc.getCosts(jic, prevAct, nextAct, newAct, 0.0); + assertEquals(3.0,costs,0.01); } } diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestRouteLevelActivityInsertionCostEstimator.java b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestRouteLevelActivityInsertionCostEstimator.java index ed70da70..fff0eb70 100644 --- a/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestRouteLevelActivityInsertionCostEstimator.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestRouteLevelActivityInsertionCostEstimator.java @@ -103,8 +103,8 @@ public class TestRouteLevelActivityInsertionCostEstimator { JobInsertionContext context = new JobInsertionContext(route,s4,route.getVehicle(),route.getDriver(),0.); RouteLevelActivityInsertionCostsEstimator estimator = new RouteLevelActivityInsertionCostsEstimator(routingCosts,activityCosts,stateManager); estimator.setForwardLooking(0); - ActivityInsertionCostsCalculator.ActivityInsertionCosts iCosts = estimator.getCosts(context, route.getStart(), route.getActivities().get(0), pickupService, 0.); - assertEquals(0.,iCosts.getAdditionalCosts(),0.01); + double iCosts = estimator.getCosts(context, route.getStart(), route.getActivities().get(0), pickupService, 0.); + assertEquals(0.,iCosts,0.01); } @Test @@ -114,8 +114,8 @@ public class TestRouteLevelActivityInsertionCostEstimator { JobInsertionContext context = new JobInsertionContext(route,s4,route.getVehicle(),route.getDriver(),0.); RouteLevelActivityInsertionCostsEstimator estimator = new RouteLevelActivityInsertionCostsEstimator(routingCosts,activityCosts,stateManager); estimator.setForwardLooking(0); - ActivityInsertionCostsCalculator.ActivityInsertionCosts iCosts = estimator.getCosts(context, route.getStart(), route.getActivities().get(0), pickupService, 0.); - assertEquals(0.,iCosts.getAdditionalCosts(),0.01); + double iCosts = estimator.getCosts(context, route.getStart(), route.getActivities().get(0), pickupService, 0.); + assertEquals(0.,iCosts,0.01); } @Test @@ -125,10 +125,10 @@ public class TestRouteLevelActivityInsertionCostEstimator { JobInsertionContext context = new JobInsertionContext(route,s4,route.getVehicle(),route.getDriver(),0.); RouteLevelActivityInsertionCostsEstimator estimator = new RouteLevelActivityInsertionCostsEstimator(routingCosts,activityCosts,stateManager); estimator.setForwardLooking(0); - ActivityInsertionCostsCalculator.ActivityInsertionCosts iCosts = estimator.getCosts(context, route.getStart(), route.getActivities().get(0), pickupService, 0.); + double iCosts = estimator.getCosts(context, route.getStart(), route.getActivities().get(0), pickupService, 0.); double expectedTransportCosts = 0.; double expectedActivityCosts = 10.; - assertEquals(expectedActivityCosts+expectedTransportCosts,iCosts.getAdditionalCosts(),0.01); + assertEquals(expectedActivityCosts+expectedTransportCosts,iCosts,0.01); } @Test @@ -138,10 +138,10 @@ public class TestRouteLevelActivityInsertionCostEstimator { JobInsertionContext context = new JobInsertionContext(route,s4,route.getVehicle(),route.getDriver(),0.); RouteLevelActivityInsertionCostsEstimator estimator = new RouteLevelActivityInsertionCostsEstimator(routingCosts,activityCosts,stateManager); estimator.setForwardLooking(3); - ActivityInsertionCostsCalculator.ActivityInsertionCosts iCosts = estimator.getCosts(context, route.getStart(), route.getActivities().get(0), pickupService, 0.); + double iCosts = estimator.getCosts(context, route.getStart(), route.getActivities().get(0), pickupService, 0.); double expectedTransportCosts = 0.; double expectedActivityCosts = 30.; - assertEquals(expectedActivityCosts+expectedTransportCosts,iCosts.getAdditionalCosts(),0.01); + assertEquals(expectedActivityCosts+expectedTransportCosts,iCosts,0.01); } @Test @@ -151,11 +151,11 @@ public class TestRouteLevelActivityInsertionCostEstimator { JobInsertionContext context = new JobInsertionContext(route,s4,route.getVehicle(),route.getDriver(),0.); RouteLevelActivityInsertionCostsEstimator estimator = new RouteLevelActivityInsertionCostsEstimator(routingCosts,activityCosts,stateManager); estimator.setForwardLooking(0); - ActivityInsertionCostsCalculator.ActivityInsertionCosts iCosts = + double iCosts = estimator.getCosts(context, route.getActivities().get(0), route.getActivities().get(1), pickupService, 10.); double expectedTransportCosts = 10.; double expectedActivityCosts = 10.; - assertEquals(expectedTransportCosts+expectedActivityCosts,iCosts.getAdditionalCosts(),0.01); + assertEquals(expectedTransportCosts+expectedActivityCosts,iCosts,0.01); } @Test @@ -165,11 +165,11 @@ public class TestRouteLevelActivityInsertionCostEstimator { JobInsertionContext context = new JobInsertionContext(route,s4,route.getVehicle(),route.getDriver(),0.); RouteLevelActivityInsertionCostsEstimator estimator = new RouteLevelActivityInsertionCostsEstimator(routingCosts,activityCosts,stateManager); estimator.setForwardLooking(3); - ActivityInsertionCostsCalculator.ActivityInsertionCosts iCosts = + double iCosts = estimator.getCosts(context, route.getActivities().get(0), route.getActivities().get(1), pickupService, 10.); double expectedTransportCosts = 10.; double expectedActivityCosts = 10.+10.; - assertEquals(expectedTransportCosts+expectedActivityCosts,iCosts.getAdditionalCosts(),0.01); + assertEquals(expectedTransportCosts+expectedActivityCosts,iCosts,0.01); } @Test @@ -179,11 +179,11 @@ public class TestRouteLevelActivityInsertionCostEstimator { JobInsertionContext context = new JobInsertionContext(route,s4,route.getVehicle(),route.getDriver(),0.); RouteLevelActivityInsertionCostsEstimator estimator = new RouteLevelActivityInsertionCostsEstimator(routingCosts,activityCosts,stateManager); estimator.setForwardLooking(3); - ActivityInsertionCostsCalculator.ActivityInsertionCosts iCosts = + double iCosts = estimator.getCosts(context, route.getActivities().get(0), route.getActivities().get(1), pickupService, 10.); double expectedTransportCosts = 10.; double expectedActivityCosts = 10.+10.+10.; - assertEquals(expectedTransportCosts+expectedActivityCosts,iCosts.getAdditionalCosts(),0.01); + assertEquals(expectedTransportCosts+expectedActivityCosts,iCosts,0.01); } }