diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinClusters.java b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinClusters.java index 2d58a3ed..313fbf5b 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinClusters.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinClusters.java @@ -116,6 +116,7 @@ public final class RuinClusters extends AbstractRuinStrategy implements Iteratio } private void ruin(Collection vehicleRoutes, int nOfJobs2BeRemoved, List unassignedJobs) { + if(vrp.getJobs().values().size() == 0) return; Map mappedRoutes = map(vehicleRoutes); int toRemove = nOfJobs2BeRemoved; diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/InitialRoutesTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/InitialRoutesTest.java index 8599dec7..4da27af3 100644 --- a/jsprit-core/src/test/java/jsprit/core/algorithm/InitialRoutesTest.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/InitialRoutesTest.java @@ -383,4 +383,16 @@ public class InitialRoutesTest { TourActivity secondAct = solution.getRoutes().iterator().next().getActivities().get(1); return secondAct instanceof PickupShipment; } + + @Test + public void whenAllJobsInInitialRoute_itShouldWork(){ + Service s = Service.Builder.newInstance("s").setLocation(Location.newInstance(0,10)).build(); + VehicleImpl v = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance(0,0)).build(); + VehicleRoute iniRoute = VehicleRoute.Builder.newInstance(v).addService(s).build(); + VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addInitialVehicleRoute(iniRoute).build(); + VehicleRoutingAlgorithm vra = Jsprit.createAlgorithm(vrp); + vra.setMaxIterations(100); + vra.searchSolutions(); + assertTrue(true); + } }