diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/box/Jsprit.java b/jsprit-core/src/main/java/jsprit/core/algorithm/box/Jsprit.java index 84c82752..94e6c9b6 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/box/Jsprit.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/box/Jsprit.java @@ -34,6 +34,8 @@ import java.util.concurrent.Executors; public class Jsprit { + private final ActivityInsertionCostsCalculator activityInsertion; + public enum Construction { BEST_INSERTION("best_insertion"), REGRET_INSERTION("regret_insertion"); @@ -131,6 +133,8 @@ public class Jsprit { private Random random = RandomNumberGeneration.newInstance(); + private ActivityInsertionCostsCalculator activityInsertionCalculator; + public static Builder newInstance(VehicleRoutingProblem vrp) { return new Builder(vrp); } @@ -224,6 +228,11 @@ public class Jsprit { return this; } + public Builder setActivityInsertionCalculator(ActivityInsertionCostsCalculator activityInsertionCalculator){ + this.activityInsertionCalculator = activityInsertionCalculator; + return this; + } + public VehicleRoutingAlgorithm buildAlgorithm() { return new Jsprit(this).create(vrp); } @@ -293,6 +302,7 @@ public class Jsprit { this.properties = builder.properties; this.objectiveFunction = builder.objectiveFunction; this.random = builder.random; + this.activityInsertion = builder.activityInsertionCalculator; } private VehicleRoutingAlgorithm create(final VehicleRoutingProblem vrp) { @@ -395,6 +405,7 @@ public class Jsprit { .setConcurrentMode(es, noThreads) .considerFixedCosts(toDouble(getProperty(Parameter.FIXED_COST_PARAM.toString()))) .setAllowVehicleSwitch(toBoolean(getProperty(Parameter.VEHICLE_SWITCH.toString()))) + .setActivityInsertionCostCalculator(activityInsertion) .build(); scorer = getRegretScorer(vrp); regretInsertion.setScoringFunction(scorer); @@ -404,6 +415,7 @@ public class Jsprit { .setInsertionStrategy(InsertionBuilder.Strategy.REGRET) .setAllowVehicleSwitch(toBoolean(getProperty(Parameter.VEHICLE_SWITCH.toString()))) .considerFixedCosts(toDouble(getProperty(Parameter.FIXED_COST_PARAM.toString()))) + .setActivityInsertionCostCalculator(activityInsertion) .build(); scorer = getRegretScorer(vrp); regretInsertion.setScoringFunction(scorer); @@ -417,6 +429,7 @@ public class Jsprit { .setInsertionStrategy(InsertionBuilder.Strategy.BEST) .considerFixedCosts(Double.valueOf(properties.getProperty(Parameter.FIXED_COST_PARAM.toString()))) .setAllowVehicleSwitch(toBoolean(getProperty(Parameter.VEHICLE_SWITCH.toString()))) + .setActivityInsertionCostCalculator(activityInsertion) .build(); best = bestInsertion; } else { @@ -425,6 +438,7 @@ public class Jsprit { .considerFixedCosts(Double.valueOf(properties.getProperty(Parameter.FIXED_COST_PARAM.toString()))) .setAllowVehicleSwitch(toBoolean(getProperty(Parameter.VEHICLE_SWITCH.toString()))) .setConcurrentMode(es, noThreads) + .setActivityInsertionCostCalculator(activityInsertion) .build(); best = bestInsertion; }