mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
internale experiments with insertionCalc
This commit is contained in:
parent
922f360fe4
commit
f7ff7aeeca
16 changed files with 1541 additions and 6 deletions
|
|
@ -214,7 +214,7 @@ class CalculatorBuilder {
|
|||
}
|
||||
|
||||
private CalculatorPlusListeners createStandardLocal(VehicleRoutingProblem vrp, StateManager activityStates2){
|
||||
MarginalsCalculus defaultCalc = new MarginalsCalculusDefault(vrp.getTransportCosts(), vrp.getActivityCosts(), new HardConstraints.HardTimeWindowConstraint(activityStates2) );
|
||||
MarginalsCalculus defaultCalc = new MarginalsCalculusTriangleInequality(vrp.getTransportCosts(), vrp.getActivityCosts(), new HardConstraints.HardTimeWindowConstraint(activityStates2) );
|
||||
JobInsertionCalculator standardServiceInsertion = new CalculatesServiceInsertion(defaultCalc, new HardConstraints.HardLoadConstraint(activityStates2));
|
||||
|
||||
((CalculatesServiceInsertion) standardServiceInsertion).setNeighborhood(vrp.getNeighborhood());
|
||||
|
|
|
|||
|
|
@ -5,14 +5,14 @@ import basics.costs.VehicleRoutingActivityCosts;
|
|||
import basics.costs.VehicleRoutingTransportCosts;
|
||||
import basics.route.TourActivity;
|
||||
|
||||
class MarginalsCalculusDefault implements MarginalsCalculus{
|
||||
class MarginalsCalculusTriangleInequality implements MarginalsCalculus{
|
||||
|
||||
private HardActivityLevelConstraint hardConstraint;
|
||||
|
||||
private VehicleRoutingTransportCosts routingCosts;
|
||||
private VehicleRoutingActivityCosts activityCosts;
|
||||
|
||||
public MarginalsCalculusDefault(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts actCosts, HardActivityLevelConstraint hardActivityLevelConstraint) {
|
||||
public MarginalsCalculusTriangleInequality(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts actCosts, HardActivityLevelConstraint hardActivityLevelConstraint) {
|
||||
super();
|
||||
this.routingCosts = routingCosts;
|
||||
this.activityCosts = actCosts;
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
package algorithms;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import util.RouteUtils;
|
||||
import algorithms.RuinStrategy.RuinListener;
|
||||
import basics.Job;
|
||||
import basics.VehicleRoutingProblemSolution;
|
||||
import basics.algo.InsertionListener;
|
||||
import basics.algo.SearchStrategyModule;
|
||||
import basics.algo.SearchStrategyModuleListener;
|
||||
|
||||
class RuinAndRecreateModule implements SearchStrategyModule{
|
||||
|
||||
private InsertionStrategy insertion;
|
||||
|
||||
private RuinStrategy ruin;
|
||||
|
||||
private String moduleName;
|
||||
|
||||
public RuinAndRecreateModule(String moduleName, InsertionStrategy insertion, RuinStrategy ruin) {
|
||||
super();
|
||||
this.insertion = insertion;
|
||||
this.ruin = ruin;
|
||||
this.moduleName = moduleName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VehicleRoutingProblemSolution runAndGetSolution(VehicleRoutingProblemSolution vrpSolution) {
|
||||
Collection<Job> ruinedJobs = ruin.ruin(vrpSolution.getRoutes());
|
||||
insertion.insertJobs(vrpSolution.getRoutes(), ruinedJobs);
|
||||
double totalCost = RouteUtils.getTotalCost(vrpSolution.getRoutes());
|
||||
vrpSolution.setCost(totalCost);
|
||||
return vrpSolution;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return moduleName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addModuleListener(SearchStrategyModuleListener moduleListener) {
|
||||
if(moduleListener instanceof InsertionListener){
|
||||
InsertionListener iListener = (InsertionListener) moduleListener;
|
||||
if(!insertion.getListeners().contains(iListener)){
|
||||
insertion.addListener(iListener);
|
||||
}
|
||||
}
|
||||
if(moduleListener instanceof RuinListener){
|
||||
RuinListener rListener = (RuinListener) moduleListener;
|
||||
if(!ruin.getListeners().contains(rListener)){
|
||||
ruin.addListener(rListener);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@ package algorithms;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
import algorithms.RuinStrategy.RuinListener;
|
||||
import basics.Job;
|
||||
|
|
@ -30,4 +31,8 @@ class RuinListeners {
|
|||
void removeListener(RuinListener ruinListener){
|
||||
ruinListeners.remove(ruinListener);
|
||||
}
|
||||
|
||||
Collection<RuinListener> getListeners(){
|
||||
return Collections.unmodifiableCollection(ruinListeners);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -177,5 +177,15 @@ final class RuinRadial implements RuinStrategy {
|
|||
ruinListeners.addListener(ruinListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeListener(RuinListener ruinListener) {
|
||||
ruinListeners.removeListener(ruinListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<RuinListener> getListeners() {
|
||||
return ruinListeners.getListeners();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -145,4 +145,14 @@ final class RuinRandom implements RuinStrategy {
|
|||
ruinListeners.addListener(ruinListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeListener(RuinListener ruinListener) {
|
||||
ruinListeners.removeListener(ruinListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<RuinListener> getListeners() {
|
||||
return ruinListeners.getListeners();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -81,5 +81,9 @@ interface RuinStrategy {
|
|||
* @param {@link RuinListener}
|
||||
*/
|
||||
public void addListener(RuinListener ruinListener);
|
||||
|
||||
public void removeListener(RuinListener ruinListener);
|
||||
|
||||
public Collection<RuinListener> getListeners();
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ class UdateCostsAtRouteLevel implements JobInsertedListener, InsertionStartsList
|
|||
|
||||
@Override
|
||||
public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) {
|
||||
inRoute.getVehicleRouteCostCalculator().addTransportCost(additionalCosts);
|
||||
// inRoute.getVehicleRouteCostCalculator().addTransportCost(additionalCosts);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue