1
0
Fork 0
mirror of https://github.com/graphhopper/jsprit.git synced 2020-01-24 07:45:05 +01:00

make regret scorer configurable

This commit is contained in:
oblonski 2016-12-05 19:31:12 +01:00
parent 85548b538e
commit 851f0f9861
No known key found for this signature in database
GPG key ID: 179DE487285680D1

View file

@ -161,6 +161,8 @@ public class Jsprit {
private SolutionAcceptor solutionAcceptor; private SolutionAcceptor solutionAcceptor;
private ScoringFunction regretScorer = null;
public static Builder newInstance(VehicleRoutingProblem vrp) { public static Builder newInstance(VehicleRoutingProblem vrp) {
return new Builder(vrp); return new Builder(vrp);
} }
@ -266,6 +268,11 @@ public class Jsprit {
return this; return this;
} }
public Builder setRegretScorer(ScoringFunction scoringFunction) {
this.regretScorer = scoringFunction;
return this;
}
public VehicleRoutingAlgorithm buildAlgorithm() { public VehicleRoutingAlgorithm buildAlgorithm() {
return new Jsprit(this).create(vrp); return new Jsprit(this).create(vrp);
} }
@ -328,6 +335,8 @@ public class Jsprit {
private SolutionAcceptor acceptor; private SolutionAcceptor acceptor;
private ScoringFunction regretScorer;
private Jsprit(Builder builder) { private Jsprit(Builder builder) {
this.stateManager = builder.stateManager; this.stateManager = builder.stateManager;
this.constraintManager = builder.constraintManager; this.constraintManager = builder.constraintManager;
@ -339,9 +348,15 @@ public class Jsprit {
this.random = builder.random; this.random = builder.random;
this.activityInsertion = builder.activityInsertionCalculator; this.activityInsertion = builder.activityInsertionCalculator;
this.acceptor = builder.solutionAcceptor; this.acceptor = builder.solutionAcceptor;
regretScorer = builder.regretScorer;
}
private void ini(VehicleRoutingProblem vrp) {
if (regretScorer == null) regretScorer = getRegretScorer(vrp);
} }
private VehicleRoutingAlgorithm create(final VehicleRoutingProblem vrp) { private VehicleRoutingAlgorithm create(final VehicleRoutingProblem vrp) {
ini(vrp);
VehicleFleetManager fm; VehicleFleetManager fm;
if (vrp.getFleetSize().equals(VehicleRoutingProblem.FleetSize.INFINITE)) { if (vrp.getFleetSize().equals(VehicleRoutingProblem.FleetSize.INFINITE)) {
fm = new InfiniteFleetManagerFactory(vrp.getVehicles()).createFleetManager(); fm = new InfiniteFleetManagerFactory(vrp.getVehicles()).createFleetManager();
@ -450,7 +465,7 @@ public class Jsprit {
); );
AbstractInsertionStrategy regret; AbstractInsertionStrategy regret;
final DefaultScorer scorer; final ScoringFunction scorer;
boolean fastRegret = Boolean.parseBoolean(getProperty(Parameter.FAST_REGRET.toString())); boolean fastRegret = Boolean.parseBoolean(getProperty(Parameter.FAST_REGRET.toString()));
if (es != null) { if (es != null) {
@ -463,7 +478,7 @@ public class Jsprit {
.setAllowVehicleSwitch(toBoolean(getProperty(Parameter.VEHICLE_SWITCH.toString()))) .setAllowVehicleSwitch(toBoolean(getProperty(Parameter.VEHICLE_SWITCH.toString())))
.setActivityInsertionCostCalculator(activityInsertion) .setActivityInsertionCostCalculator(activityInsertion)
.build(); .build();
scorer = getRegretScorer(vrp); scorer = regretScorer;
regretInsertion.setScoringFunction(scorer); regretInsertion.setScoringFunction(scorer);
regretInsertion.setDependencyTypes(constraintManager.getDependencyTypes()); regretInsertion.setDependencyTypes(constraintManager.getDependencyTypes());
regret = regretInsertion; regret = regretInsertion;
@ -476,7 +491,7 @@ public class Jsprit {
.setAllowVehicleSwitch(toBoolean(getProperty(Parameter.VEHICLE_SWITCH.toString()))) .setAllowVehicleSwitch(toBoolean(getProperty(Parameter.VEHICLE_SWITCH.toString())))
.setActivityInsertionCostCalculator(activityInsertion) .setActivityInsertionCostCalculator(activityInsertion)
.build(); .build();
scorer = getRegretScorer(vrp); scorer = regretScorer;
regretInsertion.setScoringFunction(scorer); regretInsertion.setScoringFunction(scorer);
regret = regretInsertion; regret = regretInsertion;
} }
@ -489,7 +504,7 @@ public class Jsprit {
.considerFixedCosts(toDouble(getProperty(Parameter.FIXED_COST_PARAM.toString()))) .considerFixedCosts(toDouble(getProperty(Parameter.FIXED_COST_PARAM.toString())))
.setActivityInsertionCostCalculator(activityInsertion) .setActivityInsertionCostCalculator(activityInsertion)
.build(); .build();
scorer = getRegretScorer(vrp); scorer = regretScorer;
regretInsertion.setScoringFunction(scorer); regretInsertion.setScoringFunction(scorer);
regretInsertion.setDependencyTypes(constraintManager.getDependencyTypes()); regretInsertion.setDependencyTypes(constraintManager.getDependencyTypes());
regret = regretInsertion; regret = regretInsertion;
@ -501,7 +516,7 @@ public class Jsprit {
.considerFixedCosts(toDouble(getProperty(Parameter.FIXED_COST_PARAM.toString()))) .considerFixedCosts(toDouble(getProperty(Parameter.FIXED_COST_PARAM.toString())))
.setActivityInsertionCostCalculator(activityInsertion) .setActivityInsertionCostCalculator(activityInsertion)
.build(); .build();
scorer = getRegretScorer(vrp); scorer = regretScorer;
regretInsertion.setScoringFunction(scorer); regretInsertion.setScoringFunction(scorer);
regret = regretInsertion; regret = regretInsertion;
} }