mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
make fast regret optional
This commit is contained in:
parent
8af268b1dc
commit
415ce961d2
4 changed files with 140 additions and 54 deletions
|
|
@ -96,6 +96,7 @@ public class Jsprit {
|
|||
INSERTION_NOISE_PROB("insertion.noise_prob"),
|
||||
RUIN_WORST_NOISE_LEVEL("worst.noise_level"),
|
||||
RUIN_WORST_NOISE_PROB("worst.noise_prob"),
|
||||
FAST_REGRET("regret.fast"),
|
||||
CONSTRUCTION("construction");
|
||||
|
||||
String paraName;
|
||||
|
|
@ -182,6 +183,7 @@ public class Jsprit {
|
|||
defaults.put(Parameter.RUIN_WORST_NOISE_LEVEL.toString(), String.valueOf(0.15));
|
||||
defaults.put(Parameter.RUIN_WORST_NOISE_PROB.toString(), String.valueOf(0.2));
|
||||
defaults.put(Parameter.VEHICLE_SWITCH.toString(), String.valueOf(true));
|
||||
defaults.put(Parameter.FAST_REGRET, String.valueOf(false));
|
||||
defaults.put(Parameter.CONSTRUCTION.toString(), Construction.REGRET_INSERTION.toString());
|
||||
return defaults;
|
||||
}
|
||||
|
|
@ -406,27 +408,57 @@ public class Jsprit {
|
|||
AbstractInsertionStrategy regret;
|
||||
final DefaultScorer scorer;
|
||||
|
||||
boolean fastRegret = Boolean.parseBoolean(getProperty(Parameter.FAST_REGRET.toString()));
|
||||
if (es != null) {
|
||||
RegretInsertionConcurrent regretInsertion = (RegretInsertionConcurrent) new InsertionBuilder(vrp, fm, stateManager, constraintManager)
|
||||
.setInsertionStrategy(InsertionBuilder.Strategy.REGRET)
|
||||
.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);
|
||||
regret = regretInsertion;
|
||||
if(fastRegret){
|
||||
RegretInsertionConcurrentFast regretInsertion = (RegretInsertionConcurrentFast) new InsertionBuilder(vrp, fm, stateManager, constraintManager)
|
||||
.setInsertionStrategy(InsertionBuilder.Strategy.REGRET)
|
||||
.setConcurrentMode(es, noThreads)
|
||||
.setFastRegret(true)
|
||||
.considerFixedCosts(toDouble(getProperty(Parameter.FIXED_COST_PARAM.toString())))
|
||||
.setAllowVehicleSwitch(toBoolean(getProperty(Parameter.VEHICLE_SWITCH.toString())))
|
||||
.setActivityInsertionCostCalculator(activityInsertion)
|
||||
.build();
|
||||
scorer = getRegretScorer(vrp);
|
||||
regretInsertion.setScoringFunction(scorer);
|
||||
regret = regretInsertion;
|
||||
}
|
||||
else {
|
||||
RegretInsertionConcurrent regretInsertion = (RegretInsertionConcurrent) new InsertionBuilder(vrp, fm, stateManager, constraintManager)
|
||||
.setInsertionStrategy(InsertionBuilder.Strategy.REGRET)
|
||||
.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);
|
||||
regret = regretInsertion;
|
||||
}
|
||||
} else {
|
||||
RegretInsertion regretInsertion = (RegretInsertion) new InsertionBuilder(vrp, fm, stateManager, constraintManager)
|
||||
.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);
|
||||
regret = regretInsertion;
|
||||
if(fastRegret) {
|
||||
RegretInsertionFast regretInsertion = (RegretInsertionFast) new InsertionBuilder(vrp, fm, stateManager, constraintManager)
|
||||
.setInsertionStrategy(InsertionBuilder.Strategy.REGRET)
|
||||
.setFastRegret(true)
|
||||
.setAllowVehicleSwitch(toBoolean(getProperty(Parameter.VEHICLE_SWITCH.toString())))
|
||||
.considerFixedCosts(toDouble(getProperty(Parameter.FIXED_COST_PARAM.toString())))
|
||||
.setActivityInsertionCostCalculator(activityInsertion)
|
||||
.build();
|
||||
scorer = getRegretScorer(vrp);
|
||||
regretInsertion.setScoringFunction(scorer);
|
||||
regret = regretInsertion;
|
||||
}
|
||||
else{
|
||||
RegretInsertion regretInsertion = (RegretInsertion) new InsertionBuilder(vrp, fm, stateManager, constraintManager)
|
||||
.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);
|
||||
regret = regretInsertion;
|
||||
}
|
||||
}
|
||||
regret.setRandom(random);
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,9 @@ import java.util.concurrent.ExecutorService;
|
|||
|
||||
public class InsertionBuilder {
|
||||
|
||||
private boolean fastRegret;
|
||||
|
||||
|
||||
public enum Strategy {
|
||||
REGRET, BEST
|
||||
}
|
||||
|
|
@ -70,6 +73,8 @@ public class InsertionBuilder {
|
|||
|
||||
private Strategy strategy = Strategy.BEST;
|
||||
|
||||
private boolean isFastRegret = false;
|
||||
|
||||
public InsertionBuilder(VehicleRoutingProblem vrp, VehicleFleetManager vehicleFleetManager, StateManager stateManager, ConstraintManager constraintManager) {
|
||||
super();
|
||||
this.vrp = vrp;
|
||||
|
|
@ -98,6 +103,12 @@ public class InsertionBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
public InsertionBuilder setFastRegret(boolean fastRegret) {
|
||||
this.isFastRegret = fastRegret;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public InsertionBuilder setLocalLevel() {
|
||||
local = true;
|
||||
return this;
|
||||
|
|
@ -166,14 +177,27 @@ public class InsertionBuilder {
|
|||
}
|
||||
} else if (strategy.equals(Strategy.REGRET)) {
|
||||
if (executor == null) {
|
||||
RegretInsertion regret = new RegretInsertion(costCalculator, vrp);
|
||||
// regret.setSwitchAllowed(allowVehicleSwitch);
|
||||
insertion = regret;
|
||||
if(isFastRegret){
|
||||
RegretInsertionFast regret = new RegretInsertionFast(costCalculator, vrp, fleetManager);
|
||||
regret.setSwitchAllowed(allowVehicleSwitch);
|
||||
insertion = regret;
|
||||
}
|
||||
else {
|
||||
RegretInsertion regret = new RegretInsertion(costCalculator, vrp);
|
||||
insertion = regret;
|
||||
}
|
||||
|
||||
} else {
|
||||
RegretInsertionConcurrent regret = new RegretInsertionConcurrent(costCalculator, vrp, executor);
|
||||
// regret.setSwitchAllowed(allowVehicleSwitch);
|
||||
insertion = regret;
|
||||
if(isFastRegret){
|
||||
RegretInsertionConcurrentFast regret = new RegretInsertionConcurrentFast(costCalculator, vrp, executor, fleetManager);
|
||||
regret.setSwitchAllowed(allowVehicleSwitch);
|
||||
insertion = regret;
|
||||
}
|
||||
else{
|
||||
RegretInsertionConcurrent regret = new RegretInsertionConcurrent(costCalculator, vrp, executor);
|
||||
insertion = regret;
|
||||
}
|
||||
|
||||
}
|
||||
} else throw new IllegalStateException("you should never get here");
|
||||
for (InsertionListener l : iListeners) insertion.addListener(l);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue