diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/module/RuinAndRecreateModule.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/module/RuinAndRecreateModule.java index 5752a6a5..33e4a7b9 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/module/RuinAndRecreateModule.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/module/RuinAndRecreateModule.java @@ -52,13 +52,10 @@ public class RuinAndRecreateModule implements SearchStrategyModule { Set ruinedJobSet = new HashSet<>(); ruinedJobSet.addAll(ruinedJobs); ruinedJobSet.addAll(vrpSolution.getUnassignedJobs()); - - removeEmptyRoutes(vrpSolution.getRoutes()); - Collection unassignedJobs = insertion.insertJobs(vrpSolution.getRoutes(), ruinedJobSet); vrpSolution.getUnassignedJobs().clear(); vrpSolution.getUnassignedJobs().addAll(getUnassignedJobs(vrpSolution, unassignedJobs)); - + removeEmptyRoutes(vrpSolution.getRoutes()); return vrpSolution; } diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/RandomInsertion.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/RandomInsertion.java index 7fa1db6c..00955c7e 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/RandomInsertion.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/RandomInsertion.java @@ -68,14 +68,17 @@ public class RandomInsertion extends AbstractInsertionStrategy { double bestInsertionCost = Double.MAX_VALUE; boolean inserted = false; for (VehicleRoute vehicleRoute : routes) { - InsertionData iData = bestInsertionCostCalculator.getInsertionData(vehicleRoute, unassignedJob, NO_NEW_VEHICLE_YET, NO_NEW_DEPARTURE_TIME_YET, NO_NEW_DRIVER_YET, bestInsertionCost); + InsertionData iData; + final boolean isNewRoute = vehicleRoute.equals(newRoute); + if (isNewRoute) + iData = bestInsertionCostCalculator.getInsertionData(vehicleRoute, unassignedJob, NO_NEW_VEHICLE_YET, NO_NEW_DEPARTURE_TIME_YET, NO_NEW_DRIVER_YET, bestInsertionCost); + else iData = bestInsertionCostCalculator.getInsertionData(vehicleRoute, unassignedJob, vehicleRoute.getVehicle(), vehicleRoute.getDepartureTime(), vehicleRoute.getDriver(), bestInsertionCost); if (iData instanceof InsertionData.NoInsertionFound) { empty.getFailedConstraintNames().addAll(iData.getFailedConstraintNames()); continue; } inserted = true; - final boolean isNewRoute = vehicleRoute.getActivities().size() == 0; if (isNewRoute) { updateNewRouteInsertionData(iData); vehicleRoutes.add(vehicleRoute);