Skip to content

Commit 7239c91

Browse files
committed
SoftTimeWindows propagation
1 parent 5f68835 commit 7239c91

40 files changed

+280
-199
lines changed

jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/PrettyAlgorithmBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public Collection<Vehicle> get(VehicleRoute vehicleRoute) {
117117
stateManager.updateSkillStates();
118118
stateManager.addStateUpdater(new UpdateEndLocationIfRouteIsOpen());
119119
stateManager.addStateUpdater(new UpdateActivityTimes(vrp.getTransportCosts(), ActivityTimeTracker.ActivityPolicy.AS_SOON_AS_TIME_WINDOW_OPENS, vrp.getActivityCosts()));
120-
stateManager.addStateUpdater(new UpdateVariableCosts(vrp.getActivityCosts(), vrp.getTransportCosts(), stateManager));
120+
stateManager.addStateUpdater(new UpdateVariableCosts(vrp.getActivityCosts(), vrp.getTransportCosts(), vrp.getSoftTimeWindowCost(), stateManager));
121121
stateManager.addStateUpdater(new UpdateFutureWaitingTimes(stateManager, vrp.getTransportCosts()));
122122
}
123123
VehicleRoutingAlgorithm vra = new VehicleRoutingAlgorithm(vrp, searchStrategyManager);

jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/box/Jsprit.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,8 @@ public static Builder newInstance(VehicleRoutingProblem vrp) {
149149

150150
private Builder(VehicleRoutingProblem vrp) {
151151
this.vrp = vrp;
152+
this.softCosts = vrp.getSoftTimeWindowCost();
152153
properties = new Properties(createDefaultProperties());
153-
this.softCosts = new SoftTimeWindowCost(vrp.getTransportCosts());
154154
}
155155

156156
private Properties createDefaultProperties() {

jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/io/VehicleRoutingAlgorithms.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,7 @@ public Collection<Vehicle> get(VehicleRoute vehicleRoute) {
566566
activityPolicy = ActivityTimeTracker.ActivityPolicy.AS_SOON_AS_ARRIVED;
567567
}
568568
stateManager.addStateUpdater(new UpdateActivityTimes(vrp.getTransportCosts(), activityPolicy, vrp.getActivityCosts()));
569-
stateManager.addStateUpdater(new UpdateVariableCosts(vrp.getActivityCosts(), vrp.getTransportCosts(), stateManager, activityPolicy));
569+
stateManager.addStateUpdater(new UpdateVariableCosts(vrp.getActivityCosts(), vrp.getTransportCosts(), vrp.getSoftTimeWindowCost(), stateManager, activityPolicy));
570570

571571
final SolutionCostCalculator costCalculator;
572572
if (solutionCostCalculator == null) costCalculator = getDefaultCostCalculator(stateManager);

jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/AdditionalAccessEgressCalculator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ class AdditionalAccessEgressCalculator {
4444
*
4545
* @author schroeder
4646
*/
47-
public AdditionalAccessEgressCalculator(VehicleRoutingTransportCosts routingCosts) {
47+
public AdditionalAccessEgressCalculator(VehicleRoutingTransportCosts routingCosts, SoftTimeWindowCost softCosts) {
4848
this.routingCosts = routingCosts;
49-
this.softCosts = new SoftTimeWindowCost(routingCosts);
49+
this.softCosts = softCosts;
5050
}
5151

5252
public double getCosts(JobInsertionContext insertionContext) {
@@ -57,7 +57,7 @@ public double getCosts(JobInsertionContext insertionContext) {
5757
Driver newDriver = insertionContext.getNewDriver();
5858
double newVehicleDepartureTime = insertionContext.getNewDepTime();
5959
if (!currentRoute.isEmpty()) {
60-
double newArrTime = newVehicleDepartureTime+routingCosts.getBackwardTransportTime(newVehicle.getStartLocation(), currentRoute.getActivities().get(0).getLocation(), newVehicleDepartureTime, newDriver, newVehicle);
60+
double newArrTime = newVehicleDepartureTime+routingCosts.getBackwardTransportTime(newVehicle.getStartLocation(), currentRoute.getActivities().get(0).getLocation(), newVehicleDepartureTime, newDriver, newVehicle);
6161
double accessTransportCostNew = softCosts.getSoftTimeWindowCost(currentRoute.getActivities().get(0),newArrTime,newVehicle) + routingCosts.getTransportCost(newVehicle.getStartLocation(), currentRoute.getActivities().get(0).getLocation(), newVehicleDepartureTime, newDriver, newVehicle);
6262
double accessTransportCostOld = softCosts.getSoftTimeWindowCost(currentRoute.getActivities().get(0), currentRoute.getActivities().get(0).getArrTime(), currentRoute.getVehicle()) + routingCosts.getTransportCost(currentRoute.getStart().getLocation(), currentRoute.getActivities().get(0).getLocation(), currentRoute.getDepartureTime(), currentRoute.getDriver(), currentRoute.getVehicle());
6363

jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/AuxilliaryCostCalculator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ final class AuxilliaryCostCalculator {
3636

3737
private SoftTimeWindowCost softCosts;
3838

39-
public AuxilliaryCostCalculator(final VehicleRoutingTransportCosts routingCosts, final VehicleRoutingActivityCosts actCosts) {
39+
public AuxilliaryCostCalculator(final VehicleRoutingTransportCosts routingCosts, final SoftTimeWindowCost softCosts, final VehicleRoutingActivityCosts actCosts) {
4040
super();
4141
this.routingCosts = routingCosts;
4242
this.activityCosts = actCosts;
43-
this.softCosts = new SoftTimeWindowCost(routingCosts);
43+
this.softCosts = softCosts;
4444
}
4545

4646
/**

jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/BreakInsertionCalculator.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.graphhopper.jsprit.core.problem.Location;
2121
import com.graphhopper.jsprit.core.problem.constraint.*;
2222
import com.graphhopper.jsprit.core.problem.constraint.HardActivityConstraint.ConstraintsStatus;
23+
import com.graphhopper.jsprit.core.problem.cost.SoftTimeWindowCost;
2324
import com.graphhopper.jsprit.core.problem.cost.VehicleRoutingActivityCosts;
2425
import com.graphhopper.jsprit.core.problem.cost.VehicleRoutingTransportCosts;
2526
import com.graphhopper.jsprit.core.problem.driver.Driver;
@@ -57,6 +58,8 @@ final class BreakInsertionCalculator implements JobInsertionCostsCalculator {
5758
private SoftActivityConstraint softActivityConstraint;
5859

5960
private VehicleRoutingTransportCosts transportCosts;
61+
62+
private SoftTimeWindowCost softCosts;
6063

6164
private final VehicleRoutingActivityCosts activityCosts;
6265

@@ -66,16 +69,17 @@ final class BreakInsertionCalculator implements JobInsertionCostsCalculator {
6669

6770
private AdditionalAccessEgressCalculator additionalAccessEgressCalculator;
6871

69-
public BreakInsertionCalculator(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts activityCosts, ActivityInsertionCostsCalculator additionalTransportCostsCalculator, ConstraintManager constraintManager) {
72+
public BreakInsertionCalculator(VehicleRoutingTransportCosts routingCosts, SoftTimeWindowCost softCosts, VehicleRoutingActivityCosts activityCosts, ActivityInsertionCostsCalculator additionalTransportCostsCalculator, ConstraintManager constraintManager) {
7073
super();
7174
this.transportCosts = routingCosts;
75+
this.softCosts = softCosts;
7276
this.activityCosts = activityCosts;
7377
hardRouteLevelConstraint = constraintManager;
7478
hardActivityLevelConstraint = constraintManager;
7579
softActivityConstraint = constraintManager;
7680
softRouteConstraint = constraintManager;
7781
this.additionalTransportCostsCalculator = additionalTransportCostsCalculator;
78-
additionalAccessEgressCalculator = new AdditionalAccessEgressCalculator(routingCosts);
82+
additionalAccessEgressCalculator = new AdditionalAccessEgressCalculator(routingCosts, softCosts);
7983
logger.debug("initialise " + this);
8084
}
8185

jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/BreakScheduling.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class BreakScheduling implements InsertionStartsListener,JobInsertedListe
3333

3434
public BreakScheduling(VehicleRoutingProblem vrp, StateManager stateManager, ConstraintManager constraintManager) {
3535
this.stateManager = stateManager;
36-
this.breakInsertionCalculator = new BreakInsertionCalculator(vrp.getTransportCosts(),vrp.getActivityCosts(),new LocalActivityInsertionCostsCalculator(vrp.getTransportCosts(),vrp.getActivityCosts(),stateManager),constraintManager);
36+
this.breakInsertionCalculator = new BreakInsertionCalculator(vrp.getTransportCosts(),vrp.getSoftTimeWindowCost(),vrp.getActivityCosts(),new LocalActivityInsertionCostsCalculator(vrp.getTransportCosts(), vrp.getSoftTimeWindowCost(), vrp.getActivityCosts(),stateManager),constraintManager);
3737
this.breakInsertionCalculator.setJobActivityFactory(vrp.getJobActivityFactory());
3838
eventListeners = new EventListeners();
3939
}

jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/JobInsertionCostsCalculatorBuilder.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ private CalculatorPlusListeners createStandardLocal(final VehicleRoutingProblem
262262
ActivityInsertionCostsCalculator actInsertionCalc;
263263
ConfigureLocalActivityInsertionCalculator configLocal = null;
264264
if (activityInsertionCostCalculator == null && addDefaultCostCalc) {
265-
actInsertionCalc = new LocalActivityInsertionCostsCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(), statesManager);
265+
actInsertionCalc = new LocalActivityInsertionCostsCalculator(vrp.getTransportCosts(), vrp.getSoftTimeWindowCost(), vrp.getActivityCosts(), statesManager);
266266
configLocal = new ConfigureLocalActivityInsertionCalculator(vrp, (LocalActivityInsertionCostsCalculator) actInsertionCalc);
267267
} else if (activityInsertionCostCalculator == null && !addDefaultCostCalc) {
268268
actInsertionCalc = new ActivityInsertionCostsCalculator() {
@@ -286,12 +286,12 @@ public List<AbstractActivity> createActivities(Job job) {
286286
}
287287

288288
};
289-
ShipmentInsertionCalculator shipmentInsertion = new ShipmentInsertionCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(),actInsertionCalc, constraintManager);
289+
ShipmentInsertionCalculator shipmentInsertion = new ShipmentInsertionCalculator(vrp.getTransportCosts(), vrp.getSoftTimeWindowCost(), vrp.getActivityCosts(),actInsertionCalc, constraintManager);
290290
shipmentInsertion.setJobActivityFactory(activityFactory);
291-
ServiceInsertionCalculator serviceInsertion = new ServiceInsertionCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(), actInsertionCalc, constraintManager);
291+
ServiceInsertionCalculator serviceInsertion = new ServiceInsertionCalculator(vrp.getTransportCosts(), vrp.getSoftTimeWindowCost(), vrp.getActivityCosts(), actInsertionCalc, constraintManager);
292292
serviceInsertion.setJobActivityFactory(activityFactory);
293293

294-
BreakInsertionCalculator breakInsertionCalculator = new BreakInsertionCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(), actInsertionCalc, constraintManager);
294+
BreakInsertionCalculator breakInsertionCalculator = new BreakInsertionCalculator(vrp.getTransportCosts(), vrp.getSoftTimeWindowCost(), vrp.getActivityCosts(), actInsertionCalc, constraintManager);
295295
breakInsertionCalculator.setJobActivityFactory(activityFactory);
296296

297297
JobCalculatorSwitcher switcher = new JobCalculatorSwitcher();
@@ -319,7 +319,7 @@ private CalculatorPlusListeners createCalculatorConsideringFixedCosts(VehicleRou
319319
private CalculatorPlusListeners createStandardRoute(final VehicleRoutingProblem vrp, RouteAndActivityStateGetter activityStates2, int forwardLooking, int solutionMemory) {
320320
ActivityInsertionCostsCalculator routeLevelCostEstimator;
321321
if (activityInsertionCostCalculator == null && addDefaultCostCalc) {
322-
RouteLevelActivityInsertionCostsEstimator routeLevelActivityInsertionCostsEstimator = new RouteLevelActivityInsertionCostsEstimator(vrp.getTransportCosts(), vrp.getActivityCosts(), activityStates2);
322+
RouteLevelActivityInsertionCostsEstimator routeLevelActivityInsertionCostsEstimator = new RouteLevelActivityInsertionCostsEstimator(vrp.getTransportCosts(), vrp.getSoftTimeWindowCost(), vrp.getActivityCosts(), activityStates2);
323323
routeLevelActivityInsertionCostsEstimator.setForwardLooking(forwardLooking);
324324
routeLevelCostEstimator = routeLevelActivityInsertionCostsEstimator;
325325
} else if (activityInsertionCostCalculator == null && !addDefaultCostCalc) {
@@ -337,7 +337,7 @@ public double getCosts(JobInsertionContext iContext, TourActivity prevAct, TourA
337337
} else {
338338
routeLevelCostEstimator = activityInsertionCostCalculator;
339339
}
340-
ServiceInsertionOnRouteLevelCalculator jobInsertionCalculator = new ServiceInsertionOnRouteLevelCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(), routeLevelCostEstimator, constraintManager, constraintManager);
340+
ServiceInsertionOnRouteLevelCalculator jobInsertionCalculator = new ServiceInsertionOnRouteLevelCalculator(vrp.getTransportCosts(), vrp.getSoftTimeWindowCost(), vrp.getActivityCosts(), routeLevelCostEstimator, constraintManager, constraintManager);
341341
jobInsertionCalculator.setNuOfActsForwardLooking(forwardLooking);
342342
jobInsertionCalculator.setMemorySize(solutionMemory);
343343
jobInsertionCalculator.setStates(activityStates2);

jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/LocalActivityInsertionCostsCalculator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,12 @@ class LocalActivityInsertionCostsCalculator implements ActivityInsertionCostsCal
5050

5151
private RouteAndActivityStateGetter stateManager;
5252

53-
public LocalActivityInsertionCostsCalculator(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts actCosts, RouteAndActivityStateGetter stateManager) {
53+
public LocalActivityInsertionCostsCalculator(VehicleRoutingTransportCosts routingCosts, SoftTimeWindowCost softCosts, VehicleRoutingActivityCosts actCosts, RouteAndActivityStateGetter stateManager) {
5454
super();
5555
this.routingCosts = routingCosts;
5656
this.activityCosts = actCosts;
5757
this.stateManager = stateManager;
58-
this.softCosts = new SoftTimeWindowCost(routingCosts);
58+
this.softCosts = softCosts;
5959
}
6060

6161
@Override

jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/RouteLevelActivityInsertionCostsEstimator.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package com.graphhopper.jsprit.core.algorithm.recreate;
1919

2020
import com.graphhopper.jsprit.core.algorithm.state.InternalStates;
21+
import com.graphhopper.jsprit.core.problem.cost.SoftTimeWindowCost;
2122
import com.graphhopper.jsprit.core.problem.cost.VehicleRoutingActivityCosts;
2223
import com.graphhopper.jsprit.core.problem.cost.VehicleRoutingTransportCosts;
2324
import com.graphhopper.jsprit.core.problem.misc.JobInsertionContext;
@@ -41,11 +42,11 @@ class RouteLevelActivityInsertionCostsEstimator implements ActivityInsertionCost
4142

4243
private int nuOfActivities2LookForward = 0;
4344

44-
public RouteLevelActivityInsertionCostsEstimator(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts actCosts, RouteAndActivityStateGetter stateManager) {
45+
public RouteLevelActivityInsertionCostsEstimator(VehicleRoutingTransportCosts routingCosts, SoftTimeWindowCost softCosts, VehicleRoutingActivityCosts actCosts, RouteAndActivityStateGetter stateManager) {
4546
super();
4647
this.activityCosts = actCosts;
4748
this.stateManager = stateManager;
48-
auxilliaryPathCostCalculator = new AuxilliaryCostCalculator(routingCosts, activityCosts);
49+
auxilliaryPathCostCalculator = new AuxilliaryCostCalculator(routingCosts, softCosts, activityCosts);
4950
}
5051

5152
@Override

jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ServiceInsertionCalculator.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.graphhopper.jsprit.core.problem.JobActivityFactory;
2020
import com.graphhopper.jsprit.core.problem.constraint.*;
2121
import com.graphhopper.jsprit.core.problem.constraint.HardActivityConstraint.ConstraintsStatus;
22+
import com.graphhopper.jsprit.core.problem.cost.SoftTimeWindowCost;
2223
import com.graphhopper.jsprit.core.problem.cost.VehicleRoutingActivityCosts;
2324
import com.graphhopper.jsprit.core.problem.cost.VehicleRoutingTransportCosts;
2425
import com.graphhopper.jsprit.core.problem.driver.Driver;
@@ -55,6 +56,8 @@ final class ServiceInsertionCalculator implements JobInsertionCostsCalculator {
5556
private SoftActivityConstraint softActivityConstraint;
5657

5758
private VehicleRoutingTransportCosts transportCosts;
59+
60+
private SoftTimeWindowCost softCosts;
5861

5962
private final VehicleRoutingActivityCosts activityCosts;
6063

@@ -64,7 +67,7 @@ final class ServiceInsertionCalculator implements JobInsertionCostsCalculator {
6467

6568
private AdditionalAccessEgressCalculator additionalAccessEgressCalculator;
6669

67-
public ServiceInsertionCalculator(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts activityCosts, ActivityInsertionCostsCalculator additionalTransportCostsCalculator, ConstraintManager constraintManager) {
70+
public ServiceInsertionCalculator(VehicleRoutingTransportCosts routingCosts, SoftTimeWindowCost softCosts, VehicleRoutingActivityCosts activityCosts, ActivityInsertionCostsCalculator additionalTransportCostsCalculator, ConstraintManager constraintManager) {
6871
super();
6972
this.transportCosts = routingCosts;
7073
this.activityCosts = activityCosts;
@@ -73,7 +76,8 @@ public ServiceInsertionCalculator(VehicleRoutingTransportCosts routingCosts, Veh
7376
softActivityConstraint = constraintManager;
7477
softRouteConstraint = constraintManager;
7578
this.additionalTransportCostsCalculator = additionalTransportCostsCalculator;
76-
additionalAccessEgressCalculator = new AdditionalAccessEgressCalculator(routingCosts);
79+
this.softCosts = softCosts;
80+
additionalAccessEgressCalculator = new AdditionalAccessEgressCalculator(routingCosts, softCosts);
7781
logger.debug("initialise {}", this);
7882
}
7983

jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ServiceInsertionOnRouteLevelCalculator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,15 @@ public void setMemorySize(int memorySize) {
8585
logger.debug("set [solutionMemory={}]", memorySize);
8686
}
8787

88-
public ServiceInsertionOnRouteLevelCalculator(VehicleRoutingTransportCosts vehicleRoutingCosts, VehicleRoutingActivityCosts costFunc, ActivityInsertionCostsCalculator activityInsertionCostsCalculator, HardRouteConstraint hardRouteLevelConstraint, HardActivityConstraint hardActivityLevelConstraint) {
88+
public ServiceInsertionOnRouteLevelCalculator(VehicleRoutingTransportCosts vehicleRoutingCosts, SoftTimeWindowCost softCosts, VehicleRoutingActivityCosts costFunc, ActivityInsertionCostsCalculator activityInsertionCostsCalculator, HardRouteConstraint hardRouteLevelConstraint, HardActivityConstraint hardActivityLevelConstraint) {
8989
super();
9090
this.transportCosts = vehicleRoutingCosts;
9191
this.activityCosts = costFunc;
9292
this.activityInsertionCostsCalculator = activityInsertionCostsCalculator;
9393
this.hardRouteLevelConstraint = hardRouteLevelConstraint;
9494
this.hardActivityLevelConstraint = hardActivityLevelConstraint;
95-
auxilliaryPathCostCalculator = new AuxilliaryCostCalculator(transportCosts, activityCosts);
96-
this.softCosts = new SoftTimeWindowCost(transportCosts);
95+
auxilliaryPathCostCalculator = new AuxilliaryCostCalculator(transportCosts, softCosts, activityCosts);
96+
this.softCosts = softCosts;
9797
logger.debug("initialise {}", this);
9898
}
9999

jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ShipmentInsertionCalculator.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.graphhopper.jsprit.core.problem.JobActivityFactory;
2020
import com.graphhopper.jsprit.core.problem.constraint.*;
2121
import com.graphhopper.jsprit.core.problem.constraint.HardActivityConstraint.ConstraintsStatus;
22+
import com.graphhopper.jsprit.core.problem.cost.SoftTimeWindowCost;
2223
import com.graphhopper.jsprit.core.problem.cost.VehicleRoutingActivityCosts;
2324
import com.graphhopper.jsprit.core.problem.cost.VehicleRoutingTransportCosts;
2425
import com.graphhopper.jsprit.core.problem.driver.Driver;
@@ -53,14 +54,16 @@ final class ShipmentInsertionCalculator implements JobInsertionCostsCalculator {
5354
private ActivityInsertionCostsCalculator activityInsertionCostsCalculator;
5455

5556
private VehicleRoutingTransportCosts transportCosts;
57+
58+
private SoftTimeWindowCost softCosts;
5659

5760
private VehicleRoutingActivityCosts activityCosts;
5861

5962
private JobActivityFactory activityFactory;
6063

6164
private AdditionalAccessEgressCalculator additionalAccessEgressCalculator;
6265

63-
public ShipmentInsertionCalculator(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts activityCosts, ActivityInsertionCostsCalculator activityInsertionCostsCalculator, ConstraintManager constraintManager) {
66+
public ShipmentInsertionCalculator(VehicleRoutingTransportCosts routingCosts, SoftTimeWindowCost softCosts, VehicleRoutingActivityCosts activityCosts, ActivityInsertionCostsCalculator activityInsertionCostsCalculator, ConstraintManager constraintManager) {
6467
super();
6568
this.activityInsertionCostsCalculator = activityInsertionCostsCalculator;
6669
this.hardRouteLevelConstraint = constraintManager;
@@ -69,7 +72,8 @@ public ShipmentInsertionCalculator(VehicleRoutingTransportCosts routingCosts, Ve
6972
this.softRouteConstraint = constraintManager;
7073
this.transportCosts = routingCosts;
7174
this.activityCosts = activityCosts;
72-
additionalAccessEgressCalculator = new AdditionalAccessEgressCalculator(routingCosts);
75+
this.softCosts = softCosts;
76+
additionalAccessEgressCalculator = new AdditionalAccessEgressCalculator(routingCosts, softCosts);
7377
logger.debug("initialise {}", this);
7478
}
7579

0 commit comments

Comments
 (0)