From 34cc4ef3bba7b320aad702b102a6637a81414478 Mon Sep 17 00:00:00 2001 From: kandelirina Date: Sun, 26 Aug 2018 12:03:52 +0300 Subject: [PATCH] Additional fixed cost (#63) * additionalFixedCost * test fix --- .../VehicleTypeDependentJobInsertionCalculator.java | 12 +++++------- ...CalcVehicleTypeDependentServiceInsertionTest.java | 4 ++-- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/VehicleTypeDependentJobInsertionCalculator.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/VehicleTypeDependentJobInsertionCalculator.java index 9eb7ec28..58d588d4 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/VehicleTypeDependentJobInsertionCalculator.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/VehicleTypeDependentJobInsertionCalculator.java @@ -101,7 +101,9 @@ final class VehicleTypeDependentJobInsertionCalculator implements JobInsertionCo InsertionData bestIData = new InsertionData.NoInsertionFound(); double bestKnownCost_ = bestKnownCost; Collection relevantVehicles = new ArrayList(); + double currentVehicleFixedCost = .0; if (!(selectedVehicle instanceof VehicleImpl.NoVehicle)) { + currentVehicleFixedCost = selectedVehicle.getType().getVehicleCostParams().fix; relevantVehicles.add(selectedVehicle); if (vehicleSwitchAllowed && !isVehicleWithInitialRoute(selectedVehicle)) { relevantVehicles.addAll(fleetManager.getAvailableVehicles(selectedVehicle)); @@ -118,17 +120,13 @@ final class VehicleTypeDependentJobInsertionCalculator implements JobInsertionCo bestIData.getFailedConstraintNames().addAll(iData.getFailedConstraintNames()); continue; } - iData.setInsertionCost(iData.getInsertionCost() + v.getType().getVehicleCostParams().fix); - if (iData.getInsertionCost() < bestKnownCost_) { + + double additionalFixedCost = v.getType().getVehicleCostParams().fix - currentVehicleFixedCost; + if (iData.getInsertionCost() + additionalFixedCost < bestKnownCost_) { bestIData = iData; bestKnownCost_ = iData.getInsertionCost(); } } - - if (bestIData.getSelectedVehicle() != null) { - bestIData.setInsertionCost(bestIData.getInsertionCost() - bestIData.getSelectedVehicle().getType().getVehicleCostParams().fix); - } - return bestIData; } diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/CalcVehicleTypeDependentServiceInsertionTest.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/CalcVehicleTypeDependentServiceInsertionTest.java index e2ee80c5..3803be6e 100644 --- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/CalcVehicleTypeDependentServiceInsertionTest.java +++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/CalcVehicleTypeDependentServiceInsertionTest.java @@ -112,10 +112,10 @@ public class CalcVehicleTypeDependentServiceInsertionTest { JobInsertionCostsCalculator calc = mock(JobInsertionCostsCalculator.class); InsertionData iDataVeh1 = new InsertionData(insertionCost1, InsertionData.NO_INDEX, 1, veh1, null); InsertionData iDataVeh2 = new InsertionData(insertionCost2, InsertionData.NO_INDEX, 1, veh2, null); - InsertionData iDataVeh1PlusFixed = new InsertionData(insertionCost1 + fixed1, InsertionData.NO_INDEX, 1, veh1, null); + InsertionData iDataVeh1WithoutFixed = new InsertionData(insertionCost1, InsertionData.NO_INDEX, 1, veh1, null); when(calc.getInsertionData(vehicleRoute, service, veh1, veh1.getEarliestDeparture(), null, Double.MAX_VALUE)).thenReturn(iDataVeh1); when(calc.getInsertionData(vehicleRoute, service, veh2, veh2.getEarliestDeparture(), null, Double.MAX_VALUE)).thenReturn(iDataVeh2); - when(calc.getInsertionData(vehicleRoute, service, veh2, veh2.getEarliestDeparture(), null, iDataVeh1PlusFixed.getInsertionCost())).thenReturn(iDataVeh1PlusFixed); + when(calc.getInsertionData(vehicleRoute, service, veh2, veh2.getEarliestDeparture(), null, iDataVeh1WithoutFixed.getInsertionCost())).thenReturn(iDataVeh1WithoutFixed); VehicleRoutingProblem vrp = mock(VehicleRoutingProblem.class); when(vrp.getInitialVehicleRoutes()).thenReturn(Collections.emptyList()); VehicleTypeDependentJobInsertionCalculator insertion = new VehicleTypeDependentJobInsertionCalculator(vrp, fleetManager, calc);