From dde8b01e1c3acbfed464318163c70d338ec70cc1 Mon Sep 17 00:00:00 2001 From: Michal Maciejewski Date: Tue, 6 Feb 2018 14:38:09 +0100 Subject: [PATCH] fix bug: not all initial jobs returned by getJobsInclusiveInitialJobsInRoutes() --- .../jsprit/core/problem/VehicleRoutingProblem.java | 11 ++++++----- .../graphhopper/jsprit/core/problem/job/Delivery.java | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/VehicleRoutingProblem.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/VehicleRoutingProblem.java index b1d13747..ad2a7ea0 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/VehicleRoutingProblem.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/VehicleRoutingProblem.java @@ -81,7 +81,7 @@ public class VehicleRoutingProblem { private Map tentativeJobs = new LinkedHashMap(); - private Set jobsInInitialRoutes = new HashSet<>(); + private Map jobsInInitialRoutes = new HashMap<>(); private Map tentative_coordinates = new HashMap(); @@ -309,7 +309,7 @@ public class VehicleRoutingProblem { incActivityIndexCounter(); if (act instanceof TourActivity.JobActivity) { Job job = ((TourActivity.JobActivity) act).getJob(); - jobsInInitialRoutes.add(job); + jobsInInitialRoutes.put(job.getId(), job); addLocationToTentativeLocations(job); registerJobAndActivity(abstractAct, job); } @@ -430,7 +430,7 @@ public class VehicleRoutingProblem { transportCosts = new CrowFlyCosts(getLocations()); } for (Job job : tentativeJobs.values()) { - if (!jobsInInitialRoutes.contains(job)) { + if (!jobsInInitialRoutes.containsKey(job.getId())) { addJobToFinalJobMapAndCreateActivities(job); } } @@ -439,7 +439,7 @@ public class VehicleRoutingProblem { for (Job job : jobs.values()) { ((AbstractJob)job).setIndex(jobIndexCounter++); } - for (Job job : jobsInInitialRoutes) { + for (Job job : jobsInInitialRoutes.values()) { ((AbstractJob)job).setIndex(jobIndexCounter++); } @@ -595,7 +595,8 @@ public class VehicleRoutingProblem { this.activityMap = builder.activityMap; this.nuActivities = builder.activityIndexCounter; this.allLocations = builder.allLocations; - this.allJobs = builder.tentativeJobs; + this.allJobs = new HashMap<>(jobs); + this.allJobs.putAll(builder.jobsInInitialRoutes); logger.info("setup problem: {}", this); } diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Delivery.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Delivery.java index f31b25ef..40b70a75 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Delivery.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Delivery.java @@ -43,7 +43,7 @@ public class Delivery extends Service { public Builder setMaxTimeInVehicle(double maxTimeInVehicle){ - if(maxTimeInVehicle < 0) throw new IllegalArgumentException("maxTimeInVehicle should be positive"); + if(maxTimeInVehicle < 0) throw new IllegalArgumentException("maxTimeInVehicle should not be negative"); this.maxTimeInVehicle = maxTimeInVehicle; return this; }