From cc23fa446f4b53c26e680b7f4b088980229dec57 Mon Sep 17 00:00:00 2001 From: Stefan Schroeder <4sschroeder@gmail.com> Date: Tue, 7 Jan 2014 18:17:36 +0100 Subject: [PATCH] add option for vehicles to take over a whole route or not --- .../recreate/BestInsertionBuilder.java | 1 - ...leTypeDependentJobInsertionCalculator.java | 34 ++++++++++++++++--- .../input/algorithmConfig_open.xml | 2 +- .../jsprit/examples/BicycleMessenger.java | 12 +++---- 4 files changed, 37 insertions(+), 12 deletions(-) diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/BestInsertionBuilder.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/BestInsertionBuilder.java index 5d115c69..a83634cc 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/BestInsertionBuilder.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/BestInsertionBuilder.java @@ -53,7 +53,6 @@ public class BestInsertionBuilder { } public BestInsertionBuilder setRouteLevel(int forwardLooking, int memory){ - local = false; this.forwaredLooking = forwardLooking; this.memory = memory; diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/VehicleTypeDependentJobInsertionCalculator.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/VehicleTypeDependentJobInsertionCalculator.java index 8065ac43..b8f3418d 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/VehicleTypeDependentJobInsertionCalculator.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/VehicleTypeDependentJobInsertionCalculator.java @@ -30,8 +30,6 @@ import jsprit.core.problem.vehicle.VehicleImpl.NoVehicle; import org.apache.log4j.Logger; - - final class VehicleTypeDependentJobInsertionCalculator implements JobInsertionCostsCalculator{ private Logger logger = Logger.getLogger(VehicleTypeDependentJobInsertionCalculator.class); @@ -39,6 +37,16 @@ final class VehicleTypeDependentJobInsertionCalculator implements JobInsertionCo private final VehicleFleetManager fleetManager; private final JobInsertionCostsCalculator insertionCalculator; + + /** + * true if a vehicle(-type) is allowed to take over the whole route that was previously served by another vehicle + * + *
vehicleSwitch allowed makes sense if fleet consists of vehicles with different capacities such that one
+ * can start with a small vehicle, but as the number of customers grows bigger vehicles can be operated, i.e.
+ * bigger vehicles can take over the route that was previously served by a small vehicle.
+ *
+ */
+ private boolean vehicleSwitchAllowed = false;
public VehicleTypeDependentJobInsertionCalculator(final VehicleFleetManager fleetManager, final JobInsertionCostsCalculator jobInsertionCalc) {
this.fleetManager = fleetManager;
@@ -51,6 +59,22 @@ final class VehicleTypeDependentJobInsertionCalculator implements JobInsertionCo
return "[name=vehicleTypeDependentServiceInsertion]";
}
+ /**
+ * @return the vehicleSwitchAllowed
+ */
+ public boolean isVehicleSwitchAllowed() {
+ return vehicleSwitchAllowed;
+ }
+
+ /**
+ * default is true
+ *
+ * @param vehicleSwitchAllowed the vehicleSwitchAllowed to set
+ */
+ public void setVehicleSwitchAllowed(boolean vehicleSwitchAllowed) {
+ this.vehicleSwitchAllowed = vehicleSwitchAllowed;
+ }
+
public InsertionData getInsertionData(final VehicleRoute currentRoute, final Job jobToInsert, final Vehicle vehicle, double newVehicleDepartureTime, final Driver driver, final double bestKnownCost) {
Vehicle selectedVehicle = currentRoute.getVehicle();
Driver selectedDriver = currentRoute.getDriver();
@@ -59,12 +83,14 @@ final class VehicleTypeDependentJobInsertionCalculator implements JobInsertionCo
Collection