mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
improve ruinApi
This commit is contained in:
parent
9ef3a775e9
commit
4f3c76ff28
3 changed files with 56 additions and 27 deletions
|
|
@ -174,19 +174,8 @@ final class RuinRadial implements RuinStrategy {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addListener(RuinListener ruinListener) {
|
public void addListener(RuinListener ruinListener) {
|
||||||
// TODO Auto-generated method stub
|
ruinListeners.addListener(ruinListener);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Override
|
|
||||||
// public VehicleRoutingProblemSolution runAndGetSolution(VehicleRoutingProblemSolution vrpSolution) {
|
|
||||||
// ruin(vrpSolution.getRoutes());
|
|
||||||
// return vrpSolution;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public String getName() {
|
|
||||||
// return NAME;
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -72,9 +72,11 @@ final class RuinRandom implements RuinStrategy {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Collection<Job> ruin(Collection<VehicleRoute> vehicleRoutes) {
|
public Collection<Job> ruin(Collection<VehicleRoute> vehicleRoutes) {
|
||||||
|
ruinListeners.ruinStarts(vehicleRoutes);
|
||||||
List<Job> unassignedJobs = new ArrayList<Job>();
|
List<Job> unassignedJobs = new ArrayList<Job>();
|
||||||
int nOfJobs2BeRemoved = selectNuOfJobs2BeRemoved();
|
int nOfJobs2BeRemoved = selectNuOfJobs2BeRemoved();
|
||||||
ruin(vehicleRoutes, nOfJobs2BeRemoved, unassignedJobs);
|
ruin(vehicleRoutes, nOfJobs2BeRemoved, unassignedJobs);
|
||||||
|
ruinListeners.ruinEnds(vehicleRoutes, unassignedJobs);
|
||||||
return unassignedJobs;
|
return unassignedJobs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -655,8 +655,8 @@ public class VehicleRoutingAlgorithms {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static SearchStrategyModule buildModule(HierarchicalConfiguration moduleConfig, VehicleRoutingProblem vrp, VehicleFleetManager vehicleFleetManager,
|
private static SearchStrategyModule buildModule(HierarchicalConfiguration moduleConfig, final VehicleRoutingProblem vrp, VehicleFleetManager vehicleFleetManager,
|
||||||
RouteStates activityStates, Set<PrioritizedVRAListener> algorithmListeners, TypedMap definedClasses, ExecutorService executorService, int nuOfThreads) {
|
final RouteStates activityStates, Set<PrioritizedVRAListener> algorithmListeners, TypedMap definedClasses, ExecutorService executorService, int nuOfThreads) {
|
||||||
String moduleName = moduleConfig.getString("[@name]");
|
String moduleName = moduleConfig.getString("[@name]");
|
||||||
if(moduleName == null) throw new IllegalStateException("module(-name) is missing.");
|
if(moduleName == null) throw new IllegalStateException("module(-name) is missing.");
|
||||||
String moduleId = moduleConfig.getString("[@id]");
|
String moduleId = moduleConfig.getString("[@id]");
|
||||||
|
|
@ -760,6 +760,23 @@ public class VehicleRoutingAlgorithms {
|
||||||
RuinStrategy ruin = definedClasses.get(stratKey);
|
RuinStrategy ruin = definedClasses.get(stratKey);
|
||||||
if(ruin == null){
|
if(ruin == null){
|
||||||
ruin = new RuinRadial(vrp, 0.3, new JobDistanceAvgCosts(vrp.getTransportCosts()));
|
ruin = new RuinRadial(vrp, 0.3, new JobDistanceAvgCosts(vrp.getTransportCosts()));
|
||||||
|
ruin.addListener(new RuinListener() {
|
||||||
|
|
||||||
|
TourStateUpdater updater = new TourStateUpdater(activityStates, vrp.getTransportCosts(), vrp.getActivityCosts());
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ruinStarts(Collection<VehicleRoute> routes) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ruinEnds(Collection<VehicleRoute> routes, Collection<Job> unassignedJobs) {
|
||||||
|
for(VehicleRoute route : routes){
|
||||||
|
updater.updateRoute(route);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removed(Job job, VehicleRoute fromRoute) {}
|
||||||
|
});
|
||||||
definedClasses.put(stratKey, ruin);
|
definedClasses.put(stratKey, ruin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -793,29 +810,50 @@ public class VehicleRoutingAlgorithms {
|
||||||
"\n\tgendreauPostOpt");
|
"\n\tgendreauPostOpt");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static RuinStrategy getRadialRuin(VehicleRoutingProblem vrp, RouteStates activityStates, TypedMap definedClasses, ModKey modKey, double shareToRuin, JobDistance jobDistance) {
|
private static RuinStrategy getRadialRuin(final VehicleRoutingProblem vrp, final RouteStates activityStates, TypedMap definedClasses, ModKey modKey, double shareToRuin, JobDistance jobDistance) {
|
||||||
RuinStrategyKey stratKey = new RuinStrategyKey(modKey);
|
RuinStrategyKey stratKey = new RuinStrategyKey(modKey);
|
||||||
RuinStrategy ruin = definedClasses.get(stratKey);
|
RuinStrategy ruin = definedClasses.get(stratKey);
|
||||||
if(ruin == null){
|
if(ruin == null){
|
||||||
ruin = new RuinRadial(vrp, shareToRuin, jobDistance);
|
ruin = new RuinRadial(vrp, shareToRuin, jobDistance);
|
||||||
definedClasses.put(stratKey, ruin);
|
|
||||||
}
|
|
||||||
return ruin;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static RuinStrategy getRandomRuin(VehicleRoutingProblem vrp, RouteStates activityStates, TypedMap definedClasses, ModKey modKey, double shareToRuin) {
|
|
||||||
RuinStrategyKey stratKey = new RuinStrategyKey(modKey);
|
|
||||||
RuinStrategy ruin = definedClasses.get(stratKey);
|
|
||||||
if(ruin == null){
|
|
||||||
ruin = new RuinRandom(vrp, shareToRuin);
|
|
||||||
ruin.addListener(new RuinListener() {
|
ruin.addListener(new RuinListener() {
|
||||||
|
|
||||||
|
TourStateUpdater updater = new TourStateUpdater(activityStates, vrp.getTransportCosts(), vrp.getActivityCosts());
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void ruinStarts(Collection<VehicleRoute> routes) {}
|
public void ruinStarts(Collection<VehicleRoute> routes) {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void ruinEnds(Collection<VehicleRoute> routes, Collection<Job> unassignedJobs) {
|
public void ruinEnds(Collection<VehicleRoute> routes, Collection<Job> unassignedJobs) {
|
||||||
// new
|
for(VehicleRoute route : routes){
|
||||||
|
updater.updateRoute(route);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removed(Job job, VehicleRoute fromRoute) {}
|
||||||
|
});
|
||||||
|
definedClasses.put(stratKey, ruin);
|
||||||
|
}
|
||||||
|
return ruin;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static RuinStrategy getRandomRuin(final VehicleRoutingProblem vrp, final RouteStates activityStates, TypedMap definedClasses, ModKey modKey, double shareToRuin) {
|
||||||
|
RuinStrategyKey stratKey = new RuinStrategyKey(modKey);
|
||||||
|
RuinStrategy ruin = definedClasses.get(stratKey);
|
||||||
|
if(ruin == null){
|
||||||
|
ruin = new RuinRandom(vrp, shareToRuin);
|
||||||
|
ruin.addListener(new RuinListener() {
|
||||||
|
|
||||||
|
TourStateUpdater updater = new TourStateUpdater(activityStates, vrp.getTransportCosts(), vrp.getActivityCosts());
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ruinStarts(Collection<VehicleRoute> routes) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ruinEnds(Collection<VehicleRoute> routes, Collection<Job> unassignedJobs) {
|
||||||
|
for(VehicleRoute route : routes){
|
||||||
|
updater.updateRoute(route);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue