diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/BreakInsertionCalculator.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/BreakInsertionCalculator.java index f706f4a0..e94bad61 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/BreakInsertionCalculator.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/BreakInsertionCalculator.java @@ -49,25 +49,25 @@ final class BreakInsertionCalculator implements JobInsertionCostsCalculator { private static final Logger logger = LoggerFactory.getLogger(BreakInsertionCalculator.class); - private HardRouteConstraint hardRouteLevelConstraint; + private final HardRouteConstraint hardRouteLevelConstraint; - private HardActivityConstraint hardActivityLevelConstraint; + private final HardActivityConstraint hardActivityLevelConstraint; - private SoftRouteConstraint softRouteConstraint; + private final SoftRouteConstraint softRouteConstraint; - private SoftActivityConstraint softActivityConstraint; + private final SoftActivityConstraint softActivityConstraint; - private VehicleRoutingTransportCosts transportCosts; + private final VehicleRoutingTransportCosts transportCosts; private final VehicleRoutingActivityCosts activityCosts; - private ActivityInsertionCostsCalculator additionalTransportCostsCalculator; + private final ActivityInsertionCostsCalculator additionalTransportCostsCalculator; - private JobActivityFactory activityFactory; + private final JobActivityFactory activityFactory; - private AdditionalAccessEgressCalculator additionalAccessEgressCalculator; + private final AdditionalAccessEgressCalculator additionalAccessEgressCalculator; - public BreakInsertionCalculator(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts activityCosts, ActivityInsertionCostsCalculator additionalTransportCostsCalculator, ConstraintManager constraintManager) { + public BreakInsertionCalculator(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts activityCosts, ActivityInsertionCostsCalculator additionalTransportCostsCalculator, ConstraintManager constraintManager, JobActivityFactory activityFactory) { super(); this.transportCosts = routingCosts; this.activityCosts = activityCosts; @@ -77,12 +77,10 @@ final class BreakInsertionCalculator implements JobInsertionCostsCalculator { softRouteConstraint = constraintManager; this.additionalTransportCostsCalculator = additionalTransportCostsCalculator; additionalAccessEgressCalculator = new AdditionalAccessEgressCalculator(routingCosts); + this.activityFactory = activityFactory; logger.debug("initialise " + this); } - public void setJobActivityFactory(JobActivityFactory jobActivityFactory) { - this.activityFactory = jobActivityFactory; - } @Override public String toString() { diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/BreakScheduling.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/BreakScheduling.java index 90a7076f..66fbb182 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/BreakScheduling.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/BreakScheduling.java @@ -49,8 +49,7 @@ public class BreakScheduling implements InsertionStartsListener,JobInsertedListe public BreakScheduling(VehicleRoutingProblem vrp, StateManager stateManager, ConstraintManager constraintManager) { this.stateManager = stateManager; - this.breakInsertionCalculator = new BreakInsertionCalculator(vrp.getTransportCosts(),vrp.getActivityCosts(),new LocalActivityInsertionCostsCalculator(vrp.getTransportCosts(),vrp.getActivityCosts(),stateManager),constraintManager); - this.breakInsertionCalculator.setJobActivityFactory(vrp.getJobActivityFactory()); + this.breakInsertionCalculator = new BreakInsertionCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(), new LocalActivityInsertionCostsCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(), stateManager), constraintManager, vrp.getJobActivityFactory()); eventListeners = new EventListeners(); } diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/JobInsertionCostsCalculator.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/JobInsertionCostsCalculator.java index 81d1670c..8a1414e3 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/JobInsertionCostsCalculator.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/JobInsertionCostsCalculator.java @@ -25,6 +25,6 @@ import com.graphhopper.jsprit.core.problem.vehicle.Vehicle; public interface JobInsertionCostsCalculator { - public InsertionData getInsertionData(VehicleRoute currentRoute, Job newJob, Vehicle newVehicle, double newVehicleDepartureTime, Driver newDriver, double bestKnownCosts); + InsertionData getInsertionData(VehicleRoute currentRoute, Job newJob, Vehicle newVehicle, double newVehicleDepartureTime, Driver newDriver, double bestKnownCosts); } diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/JobInsertionCostsCalculatorBuilder.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/JobInsertionCostsCalculatorBuilder.java index 1135adb8..011cfe76 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/JobInsertionCostsCalculatorBuilder.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/JobInsertionCostsCalculatorBuilder.java @@ -94,6 +94,27 @@ public class JobInsertionCostsCalculatorBuilder { private boolean addDefaultCostCalc = true; + private JobInsertionCostsCalculatorFactory shipmentCalculatorFactory = new JobInsertionCostsCalculatorFactory() { + @Override + public JobInsertionCostsCalculator create(VehicleRoutingProblem vrp, ActivityInsertionCostsCalculator activityInsertionCostsCalculator, JobActivityFactory jobActivityFactory, ConstraintManager constraintManager) { + return new ShipmentInsertionCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(), activityInsertionCostsCalculator, constraintManager, jobActivityFactory); + } + }; + + private JobInsertionCostsCalculatorFactory serviceCalculatorFactory = new JobInsertionCostsCalculatorFactory() { + @Override + public JobInsertionCostsCalculator create(VehicleRoutingProblem vrp, ActivityInsertionCostsCalculator activityInsertionCostsCalculator, JobActivityFactory jobActivityFactory, ConstraintManager constraintManager) { + return new ServiceInsertionCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(), activityInsertionCostsCalculator, constraintManager, jobActivityFactory); + } + }; + + private JobInsertionCostsCalculatorFactory breakCalculatorFactory = new JobInsertionCostsCalculatorFactory() { + @Override + public JobInsertionCostsCalculator create(VehicleRoutingProblem vrp, ActivityInsertionCostsCalculator activityInsertionCostsCalculator, JobActivityFactory jobActivityFactory, ConstraintManager constraintManager) { + return new BreakInsertionCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(), activityInsertionCostsCalculator, constraintManager, jobActivityFactory); + } + }; + /** * Constructs the builder. *
@@ -287,20 +308,17 @@ public class JobInsertionCostsCalculatorBuilder {
}
};
- ShipmentInsertionCalculator shipmentInsertion = new ShipmentInsertionCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(),actInsertionCalc, constraintManager);
- shipmentInsertion.setJobActivityFactory(activityFactory);
- ServiceInsertionCalculator serviceInsertion = new ServiceInsertionCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(), actInsertionCalc, constraintManager);
- serviceInsertion.setJobActivityFactory(activityFactory);
- BreakInsertionCalculator breakInsertionCalculator = new BreakInsertionCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(), actInsertionCalc, constraintManager);
- breakInsertionCalculator.setJobActivityFactory(activityFactory);
+ JobInsertionCostsCalculator shipmentInsertion = shipmentCalculatorFactory.create(vrp, actInsertionCalc, activityFactory, constraintManager);
+ JobInsertionCostsCalculator serviceInsertion = serviceCalculatorFactory.create(vrp, actInsertionCalc, activityFactory, constraintManager);
+ JobInsertionCostsCalculator breakInsertion = breakCalculatorFactory.create(vrp, actInsertionCalc, activityFactory, constraintManager);
JobCalculatorSwitcher switcher = new JobCalculatorSwitcher();
switcher.put(Shipment.class, shipmentInsertion);
switcher.put(Service.class, serviceInsertion);
switcher.put(Pickup.class, serviceInsertion);
switcher.put(Delivery.class, serviceInsertion);
- switcher.put(Break.class, breakInsertionCalculator);
+ switcher.put(Break.class, breakInsertion);
CalculatorPlusListeners calculatorPlusListeners = new CalculatorPlusListeners(switcher);
if (configLocal != null) {
diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/JobInsertionCostsCalculatorFactory.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/JobInsertionCostsCalculatorFactory.java
new file mode 100644
index 00000000..b683b88d
--- /dev/null
+++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/JobInsertionCostsCalculatorFactory.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to GraphHopper GmbH under one or more contributor
+ * license agreements. See the NOTICE file distributed with this work for
+ * additional information regarding copyright ownership.
+ *
+ * GraphHopper GmbH licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.graphhopper.jsprit.core.algorithm.recreate;
+
+import com.graphhopper.jsprit.core.problem.JobActivityFactory;
+import com.graphhopper.jsprit.core.problem.VehicleRoutingProblem;
+import com.graphhopper.jsprit.core.problem.constraint.ConstraintManager;
+
+public interface JobInsertionCostsCalculatorFactory {
+
+ JobInsertionCostsCalculator create(VehicleRoutingProblem vrp, ActivityInsertionCostsCalculator activityInsertionCostsCalculator, JobActivityFactory jobActivityFactory, ConstraintManager constraintManager);
+
+}
diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ServiceInsertionCalculator.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ServiceInsertionCalculator.java
index 9f91ff9b..6007decb 100644
--- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ServiceInsertionCalculator.java
+++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ServiceInsertionCalculator.java
@@ -55,38 +55,35 @@ final class ServiceInsertionCalculator extends AbstractInsertionCalculator {
// private HardActivityConstraint hardActivityLevelConstraint;
- private SoftRouteConstraint softRouteConstraint;
+ private final SoftRouteConstraint softRouteConstraint;
- private SoftActivityConstraint softActivityConstraint;
+ private final SoftActivityConstraint softActivityConstraint;
- private VehicleRoutingTransportCosts transportCosts;
+ private final VehicleRoutingTransportCosts transportCosts;
private final VehicleRoutingActivityCosts activityCosts;
- private ActivityInsertionCostsCalculator additionalTransportCostsCalculator;
+ private final ActivityInsertionCostsCalculator activityInsertionCostsCalculator;
- private JobActivityFactory activityFactory;
+ private final JobActivityFactory activityFactory;
- private AdditionalAccessEgressCalculator additionalAccessEgressCalculator;
+ private final AdditionalAccessEgressCalculator additionalAccessEgressCalculator;
- private ConstraintManager constraintManager;
+ private final ConstraintManager constraintManager;
- public ServiceInsertionCalculator(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts activityCosts, ActivityInsertionCostsCalculator additionalTransportCostsCalculator, ConstraintManager constraintManager) {
+ public ServiceInsertionCalculator(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts activityCosts, ActivityInsertionCostsCalculator activityInsertionCostsCalculator, ConstraintManager constraintManager, JobActivityFactory activityFactory) {
super();
this.transportCosts = routingCosts;
this.activityCosts = activityCosts;
this.constraintManager = constraintManager;
softActivityConstraint = constraintManager;
softRouteConstraint = constraintManager;
- this.additionalTransportCostsCalculator = additionalTransportCostsCalculator;
+ this.activityInsertionCostsCalculator = activityInsertionCostsCalculator;
additionalAccessEgressCalculator = new AdditionalAccessEgressCalculator(routingCosts);
+ this.activityFactory = activityFactory;
logger.debug("initialise {}", this);
}
- public void setJobActivityFactory(JobActivityFactory jobActivityFactory) {
- this.activityFactory = jobActivityFactory;
- }
-
@Override
public String toString() {
return "[name=calculatesServiceInsertion]";
@@ -151,7 +148,7 @@ final class ServiceInsertionCalculator extends AbstractInsertionCalculator {
ConstraintsStatus status = fulfilled(insertionContext, prevAct, deliveryAct2Insert, nextAct, prevActStartTime, failedActivityConstraints, constraintManager);
if (status.equals(ConstraintsStatus.FULFILLED)) {
double additionalICostsAtActLevel = softActivityConstraint.getCosts(insertionContext, prevAct, deliveryAct2Insert, nextAct, prevActStartTime);
- double additionalTransportationCosts = additionalTransportCostsCalculator.getCosts(insertionContext, prevAct, nextAct, deliveryAct2Insert, prevActStartTime);
+ double additionalTransportationCosts = activityInsertionCostsCalculator.getCosts(insertionContext, prevAct, nextAct, deliveryAct2Insert, prevActStartTime);
if (additionalICostsAtRouteLevel + additionalICostsAtActLevel + additionalTransportationCosts < bestCost) {
bestCost = additionalICostsAtRouteLevel + additionalICostsAtActLevel + additionalTransportationCosts;
insertionIndex = actIndex;
diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ShipmentInsertionCalculator.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ShipmentInsertionCalculator.java
index e8698483..d55ff150 100644
--- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ShipmentInsertionCalculator.java
+++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ShipmentInsertionCalculator.java
@@ -48,25 +48,21 @@ final class ShipmentInsertionCalculator extends AbstractInsertionCalculator {
private final ConstraintManager constraintManager;
-// private HardRouteConstraint hardRouteLevelConstraint;
-//
-// private HardActivityConstraint hardActivityLevelConstraint;
+ private final SoftRouteConstraint softRouteConstraint;
- private SoftRouteConstraint softRouteConstraint;
+ private final SoftActivityConstraint softActivityConstraint;
- private SoftActivityConstraint softActivityConstraint;
+ private final ActivityInsertionCostsCalculator activityInsertionCostsCalculator;
- private ActivityInsertionCostsCalculator activityInsertionCostsCalculator;
+ private final VehicleRoutingTransportCosts transportCosts;
- private VehicleRoutingTransportCosts transportCosts;
+ private final VehicleRoutingActivityCosts activityCosts;
- private VehicleRoutingActivityCosts activityCosts;
+ private final JobActivityFactory activityFactory;
- private JobActivityFactory activityFactory;
+ private final AdditionalAccessEgressCalculator additionalAccessEgressCalculator;
- private AdditionalAccessEgressCalculator additionalAccessEgressCalculator;
-
- public ShipmentInsertionCalculator(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts activityCosts, ActivityInsertionCostsCalculator activityInsertionCostsCalculator, ConstraintManager constraintManager) {
+ public ShipmentInsertionCalculator(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts activityCosts, ActivityInsertionCostsCalculator activityInsertionCostsCalculator, ConstraintManager constraintManager, JobActivityFactory jobActivityFactory) {
super();
this.activityInsertionCostsCalculator = activityInsertionCostsCalculator;
this.constraintManager = constraintManager;
@@ -75,13 +71,10 @@ final class ShipmentInsertionCalculator extends AbstractInsertionCalculator {
this.transportCosts = routingCosts;
this.activityCosts = activityCosts;
additionalAccessEgressCalculator = new AdditionalAccessEgressCalculator(routingCosts);
+ this.activityFactory = jobActivityFactory;
logger.debug("initialise {}", this);
}
- public void setJobActivityFactory(JobActivityFactory activityFactory) {
- this.activityFactory = activityFactory;
- }
-
@Override
public String toString() {
return "[name=calculatesServiceInsertion]";
diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/ServiceInsertionAndLoadConstraintsTest.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/ServiceInsertionAndLoadConstraintsTest.java
index 5a1a3468..3536558a 100644
--- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/ServiceInsertionAndLoadConstraintsTest.java
+++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/ServiceInsertionAndLoadConstraintsTest.java
@@ -90,7 +90,7 @@ public class ServiceInsertionAndLoadConstraintsTest {
ActivityInsertionCostsCalculator activityInsertionCostsCalculator;
- ShipmentInsertionCalculator insertionCalculator;
+// ShipmentInsertionCalculator insertionCalculator;
VehicleRoutingProblem vehicleRoutingProblem;
@@ -109,7 +109,7 @@ public class ServiceInsertionAndLoadConstraintsTest {
private void createInsertionCalculator(HardRouteConstraint hardRouteLevelConstraint) {
ConstraintManager constraintManager = new ConstraintManager(mock(VehicleRoutingProblem.class), mock(RouteAndActivityStateGetter.class));
constraintManager.addConstraint(hardRouteLevelConstraint);
- insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager);
+// insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager, );
}
@Test
@@ -143,10 +143,9 @@ public class ServiceInsertionAndLoadConstraintsTest {
stateManager.informInsertionStarts(Arrays.asList(route), null);
JobCalculatorSwitcher switcher = new JobCalculatorSwitcher();
- ServiceInsertionCalculator serviceInsertionCalc = new ServiceInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager);
- serviceInsertionCalc.setJobActivityFactory(activityFactory);
- ShipmentInsertionCalculator insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager);
- insertionCalculator.setJobActivityFactory(activityFactory);
+ ServiceInsertionCalculator serviceInsertionCalc = new ServiceInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager, activityFactory);
+ ShipmentInsertionCalculator insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager, activityFactory);
+
switcher.put(Pickup.class, serviceInsertionCalc);
switcher.put(Delivery.class, serviceInsertionCalc);
diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/ShipmentInsertionCalculatorTest.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/ShipmentInsertionCalculatorTest.java
index 9713744a..274bb5fe 100644
--- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/ShipmentInsertionCalculatorTest.java
+++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/ShipmentInsertionCalculatorTest.java
@@ -94,21 +94,24 @@ public class ShipmentInsertionCalculatorTest {
Vehicle vehicle;
+ ConstraintManager constraintManager;
+
@Before
public void doBefore() {
routingCosts = CostFactory.createManhattanCosts();
VehicleType type = VehicleTypeImpl.Builder.newInstance("t").addCapacityDimension(0, 2).setCostPerDistance(1).build();
vehicle = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance("0,0")).setType(type).build();
activityInsertionCostsCalculator = new LocalActivityInsertionCostsCalculator(routingCosts, activityCosts, mock(StateManager.class));
- createInsertionCalculator(hardRouteLevelConstraint);
+ constraintManager = new ConstraintManager(mock(VehicleRoutingProblem.class), mock(RouteAndActivityStateGetter.class));
+ constraintManager.addConstraint(hardRouteLevelConstraint);
vehicleRoutingProblem = mock(VehicleRoutingProblem.class);
}
- private void createInsertionCalculator(HardRouteConstraint hardRouteLevelConstraint) {
- ConstraintManager constraintManager = new ConstraintManager(mock(VehicleRoutingProblem.class), mock(RouteAndActivityStateGetter.class));
- constraintManager.addConstraint(hardRouteLevelConstraint);
- insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager);
- }
+// private void createInsertionCalculator(HardRouteConstraint hardRouteLevelConstraint) {
+// ConstraintManager constraintManager = new ConstraintManager(mock(VehicleRoutingProblem.class), mock(RouteAndActivityStateGetter.class));
+// constraintManager.addConstraint(hardRouteLevelConstraint);
+// insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager, );
+// }
@Test
public void whenCalculatingInsertionCostsOfShipment_itShouldReturnCorrectCostValue() {
@@ -119,7 +122,7 @@ public class ShipmentInsertionCalculatorTest {
activities.add(new PickupShipment(shipment));
activities.add(new DeliverShipment(shipment));
when(activityFactory.createActivities(shipment)).thenReturn(activities);
- insertionCalculator.setJobActivityFactory(activityFactory);
+ insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager, activityFactory);
InsertionData iData = insertionCalculator.getInsertionData(route, shipment, vehicle, 0.0, null, Double.MAX_VALUE);
assertEquals(40.0, iData.getInsertionCost(), 0.05);
}
@@ -137,7 +140,7 @@ public class ShipmentInsertionCalculatorTest {
activities.add(new PickupShipment(shipment2));
activities.add(new DeliverShipment(shipment2));
when(activityFactory.createActivities(shipment2)).thenReturn(activities);
- insertionCalculator.setJobActivityFactory(activityFactory);
+ insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager, activityFactory);
InsertionData iData = insertionCalculator.getInsertionData(route, shipment2, vehicle, 0.0, null, Double.MAX_VALUE);
assertEquals(0.0, iData.getInsertionCost(), 0.05);
@@ -161,7 +164,9 @@ public class ShipmentInsertionCalculatorTest {
VehicleRoute route = VehicleRoute.emptyRoute();
when(vehicleRoutingProblem.copyAndGetActivities(shipment)).thenReturn(getTourActivities(shipment));
new Inserter(new InsertionListeners(), vehicleRoutingProblem).insertJob(shipment, new InsertionData(0, 0, 0, vehicle, null), route);
- createInsertionCalculator(new HardRouteConstraint() {
+
+ constraintManager = new ConstraintManager(mock(VehicleRoutingProblem.class), mock(RouteAndActivityStateGetter.class));
+ constraintManager.addConstraint(new HardRouteConstraint() {
@Override
public boolean fulfilled(JobInsertionContext insertionContext) {
@@ -175,7 +180,7 @@ public class ShipmentInsertionCalculatorTest {
activities.add(new PickupShipment(shipment2));
activities.add(new DeliverShipment(shipment2));
when(activityFactory.createActivities(shipment2)).thenReturn(activities);
- insertionCalculator.setJobActivityFactory(activityFactory);
+ insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager, activityFactory);
InsertionData iData = insertionCalculator.getInsertionData(route, shipment2, vehicle, 0.0, null, Double.MAX_VALUE);
assertTrue(iData instanceof InsertionData.NoInsertionFound);
@@ -201,7 +206,7 @@ public class ShipmentInsertionCalculatorTest {
activities.add(new PickupShipment(shipment3));
activities.add(new DeliverShipment(shipment3));
when(activityFactory.createActivities(shipment3)).thenReturn(activities);
- insertionCalculator.setJobActivityFactory(activityFactory);
+ insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager, activityFactory);
InsertionData iData = insertionCalculator.getInsertionData(route, shipment3, vehicle, 0.0, null, Double.MAX_VALUE);
assertEquals(0.0, iData.getInsertionCost(), 0.05);
@@ -226,7 +231,7 @@ public class ShipmentInsertionCalculatorTest {
activities.add(new PickupShipment(shipment3));
activities.add(new DeliverShipment(shipment3));
when(activityFactory.createActivities(shipment3)).thenReturn(activities);
- insertionCalculator.setJobActivityFactory(activityFactory);
+ insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager, activityFactory);
InsertionData iData = insertionCalculator.getInsertionData(route, shipment3, vehicle, 0.0, null, Double.MAX_VALUE);
@@ -260,8 +265,7 @@ public class ShipmentInsertionCalculatorTest {
constraintManager.addConstraint(new ShipmentPickupsFirstConstraint(), ConstraintManager.Priority.CRITICAL);
ShipmentInsertionCalculator insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityCosts,
- activityInsertionCostsCalculator, constraintManager);
- insertionCalculator.setJobActivityFactory(vrp.getJobActivityFactory());
+ activityInsertionCostsCalculator, constraintManager, vrp.getJobActivityFactory());
InsertionData iData = insertionCalculator.getInsertionData(route, shipment3, vehicle, 0.0, DriverImpl.noDriver(), Double.MAX_VALUE);
assertTrue(iData instanceof InsertionData.NoInsertionFound);
@@ -293,22 +297,20 @@ public class ShipmentInsertionCalculatorTest {
stateManager.informInsertionStarts(Arrays.asList(route), null);
- JobCalculatorSwitcher switcher = new JobCalculatorSwitcher();
- ServiceInsertionCalculator serviceInsertionCalc = new ServiceInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager);
- ShipmentInsertionCalculator insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager);
- switcher.put(Pickup.class, serviceInsertionCalc);
- switcher.put(Service.class, serviceInsertionCalc);
- switcher.put(Shipment.class, insertionCalculator);
-
-// Service service = Service.Builder.newInstance("pick", 1).setLocationId("5,5").build();
Pickup service = (Pickup) Pickup.Builder.newInstance("pick").addSizeDimension(0, 1).setLocation(Location.newInstance("5,5")).build();
JobActivityFactory activityFactory = mock(JobActivityFactory.class);
List