From c489207bf3777f908cb20377ef6a51825830f2f8 Mon Sep 17 00:00:00 2001 From: Kandel Irina Date: Mon, 11 Dec 2017 14:02:06 +0200 Subject: [PATCH] add driver cost for new route --- .../algorithm/recreate/AbstractInsertionStrategy.java | 6 ++++++ .../jsprit/core/algorithm/recreate/BestInsertion.java | 1 + .../core/algorithm/recreate/BestInsertionConcurrent.java | 1 + .../jsprit/core/algorithm/recreate/InsertionData.java | 9 +++++++-- .../jsprit/core/algorithm/recreate/RegretInsertion.java | 5 +++-- .../algorithm/recreate/RegretInsertionConcurrent.java | 2 +- 6 files changed, 19 insertions(+), 5 deletions(-) diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/AbstractInsertionStrategy.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/AbstractInsertionStrategy.java index 5f5973f5..0d9d4fa2 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/AbstractInsertionStrategy.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/AbstractInsertionStrategy.java @@ -75,9 +75,15 @@ public abstract class AbstractInsertionStrategy implements InsertionStrategy { protected VehicleRoutingProblem vrp; + protected double minVehicleCost = Double.POSITIVE_INFINITY; + public AbstractInsertionStrategy(VehicleRoutingProblem vrp) { this.insertionsListeners = new InsertionListeners(); this.vrp = vrp; + for (Vehicle vehicle : vrp.getVehicles()) { + minVehicleCost = Math.min(vehicle.getType().getVehicleCostParams().fix, minVehicleCost); + } + eventListeners = new EventListeners(); } diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/BestInsertion.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/BestInsertion.java index 576e41f4..9b6d7f13 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/BestInsertion.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/BestInsertion.java @@ -85,6 +85,7 @@ public final class BestInsertion extends AbstractInsertionStrategy { VehicleRoute newRoute = VehicleRoute.emptyRoute(); InsertionData newIData = bestInsertionCostCalculator.getInsertionData(newRoute, unassignedJob, NO_NEW_VEHICLE_YET, NO_NEW_DEPARTURE_TIME_YET, NO_NEW_DRIVER_YET, bestInsertionCost); if (!(newIData instanceof InsertionData.NoInsertionFound)) { + newIData.setInsertionCost(newIData.getInsertionCost() + minVehicleCost); if (newIData.getInsertionCost() < bestInsertionCost + noiseMaker.makeNoise()) { bestInsertion = new Insertion(newRoute, newIData); vehicleRoutes.add(newRoute); diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/BestInsertionConcurrent.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/BestInsertionConcurrent.java index c7e6ae94..bd299f12 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/BestInsertionConcurrent.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/BestInsertionConcurrent.java @@ -138,6 +138,7 @@ public final class BestInsertionConcurrent extends AbstractInsertionStrategy { } VehicleRoute newRoute = VehicleRoute.emptyRoute(); InsertionData newIData = bestInsertionCostCalculator.getInsertionData(newRoute, unassignedJob, NO_NEW_VEHICLE_YET, NO_NEW_DEPARTURE_TIME_YET, NO_NEW_DRIVER_YET, bestInsertionCost); + newIData.setInsertionCost(newIData.getInsertionCost() + minVehicleCost); if (newIData.getInsertionCost() < bestInsertionCost) { bestInsertion = new Insertion(newRoute, newIData); vehicleRoutes.add(newRoute); diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/InsertionData.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/InsertionData.java index fd78b3e9..7e1fbeba 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/InsertionData.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/InsertionData.java @@ -56,7 +56,7 @@ public class InsertionData { static int NO_INDEX = -1; - private final double insertionCost; + private double insertionCost; private final int pickupInsertionIndex; @@ -172,5 +172,10 @@ public class InsertionData { this.departureTime = departureTime; } - + /** + * @param insertionCost the insertionCost to set + */ + public void setInsertionCost(double insertionCost) { + this.insertionCost = insertionCost; + } } diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/RegretInsertion.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/RegretInsertion.java index 30a7a98a..66513161 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/RegretInsertion.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/RegretInsertion.java @@ -137,7 +137,7 @@ public class RegretInsertion extends AbstractInsertionStrategy { private ScoredJob nextJob(Collection routes, Collection unassignedJobList, List badJobs) { ScoredJob bestScoredJob = null; for (Job unassignedJob : unassignedJobList) { - ScoredJob scoredJob = getScoredJob(routes, unassignedJob, insertionCostsCalculator, scoringFunction); + ScoredJob scoredJob = getScoredJob(routes, unassignedJob, insertionCostsCalculator, scoringFunction, minVehicleCost); if (scoredJob instanceof ScoredJob.BadJob) { badJobs.add(scoredJob); continue; @@ -156,7 +156,7 @@ public class RegretInsertion extends AbstractInsertionStrategy { return bestScoredJob; } - static ScoredJob getScoredJob(Collection routes, Job unassignedJob, JobInsertionCostsCalculator insertionCostsCalculator, ScoringFunction scoringFunction) { + static ScoredJob getScoredJob(Collection routes, Job unassignedJob, JobInsertionCostsCalculator insertionCostsCalculator, ScoringFunction scoringFunction, double newVehicleCost) { InsertionData best = null; InsertionData secondBest = null; VehicleRoute bestRoute = null; @@ -186,6 +186,7 @@ public class RegretInsertion extends AbstractInsertionStrategy { VehicleRoute emptyRoute = VehicleRoute.emptyRoute(); InsertionData iData = insertionCostsCalculator.getInsertionData(emptyRoute, unassignedJob, NO_NEW_VEHICLE_YET, NO_NEW_DEPARTURE_TIME_YET, NO_NEW_DRIVER_YET, benchmark); if (!(iData instanceof InsertionData.NoInsertionFound)) { + iData.setInsertionCost(iData.getInsertionCost() + newVehicleCost); if (best == null) { best = iData; bestRoute = emptyRoute; diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/RegretInsertionConcurrent.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/RegretInsertionConcurrent.java index b71ac5ab..eac42f46 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/RegretInsertionConcurrent.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/RegretInsertionConcurrent.java @@ -139,7 +139,7 @@ public class RegretInsertionConcurrent extends AbstractInsertionStrategy { @Override public ScoredJob call() throws Exception { - return RegretInsertion.getScoredJob(routes, unassignedJob, insertionCostsCalculator, scoringFunction); + return RegretInsertion.getScoredJob(routes, unassignedJob, insertionCostsCalculator, scoringFunction, minVehicleCost); } });