From 4f3c76ff28c94c7993c8c6c21f33229aa9ea9cd8 Mon Sep 17 00:00:00 2001 From: oblonski <4sschroeder@gmail.com> Date: Tue, 13 Aug 2013 20:29:51 +0200 Subject: [PATCH] improve ruinApi --- .../src/main/java/algorithms/RuinRadial.java | 13 +--- .../src/main/java/algorithms/RuinRandom.java | 4 +- .../algorithms/VehicleRoutingAlgorithms.java | 66 +++++++++++++++---- 3 files changed, 56 insertions(+), 27 deletions(-) diff --git a/jsprit-core/src/main/java/algorithms/RuinRadial.java b/jsprit-core/src/main/java/algorithms/RuinRadial.java index 3e10b10e..f40cf375 100644 --- a/jsprit-core/src/main/java/algorithms/RuinRadial.java +++ b/jsprit-core/src/main/java/algorithms/RuinRadial.java @@ -174,19 +174,8 @@ final class RuinRadial implements RuinStrategy { @Override 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; -// } } diff --git a/jsprit-core/src/main/java/algorithms/RuinRandom.java b/jsprit-core/src/main/java/algorithms/RuinRandom.java index 57081db9..8079c7fa 100644 --- a/jsprit-core/src/main/java/algorithms/RuinRandom.java +++ b/jsprit-core/src/main/java/algorithms/RuinRandom.java @@ -72,9 +72,11 @@ final class RuinRandom implements RuinStrategy { */ @Override public Collection ruin(Collection vehicleRoutes) { + ruinListeners.ruinStarts(vehicleRoutes); List unassignedJobs = new ArrayList(); int nOfJobs2BeRemoved = selectNuOfJobs2BeRemoved(); ruin(vehicleRoutes, nOfJobs2BeRemoved, unassignedJobs); + ruinListeners.ruinEnds(vehicleRoutes, unassignedJobs); return unassignedJobs; } @@ -107,7 +109,7 @@ final class RuinRandom implements RuinStrategy { logger.info("fraction set " + this); } - private void ruin(Collection vehicleRoutes,int nOfJobs2BeRemoved, List unassignedJobs) { + private void ruin(Collection vehicleRoutes, int nOfJobs2BeRemoved, List unassignedJobs) { LinkedList availableJobs = new LinkedList(vrp.getJobs().values()); for (int i = 0; i < nOfJobs2BeRemoved; i++) { Job job = pickRandomJob(availableJobs); diff --git a/jsprit-core/src/main/java/algorithms/VehicleRoutingAlgorithms.java b/jsprit-core/src/main/java/algorithms/VehicleRoutingAlgorithms.java index 1d57ad24..51e73e7b 100644 --- a/jsprit-core/src/main/java/algorithms/VehicleRoutingAlgorithms.java +++ b/jsprit-core/src/main/java/algorithms/VehicleRoutingAlgorithms.java @@ -655,8 +655,8 @@ public class VehicleRoutingAlgorithms { } } - private static SearchStrategyModule buildModule(HierarchicalConfiguration moduleConfig, VehicleRoutingProblem vrp, VehicleFleetManager vehicleFleetManager, - RouteStates activityStates, Set algorithmListeners, TypedMap definedClasses, ExecutorService executorService, int nuOfThreads) { + private static SearchStrategyModule buildModule(HierarchicalConfiguration moduleConfig, final VehicleRoutingProblem vrp, VehicleFleetManager vehicleFleetManager, + final RouteStates activityStates, Set algorithmListeners, TypedMap definedClasses, ExecutorService executorService, int nuOfThreads) { String moduleName = moduleConfig.getString("[@name]"); if(moduleName == null) throw new IllegalStateException("module(-name) is missing."); String moduleId = moduleConfig.getString("[@id]"); @@ -760,6 +760,23 @@ public class VehicleRoutingAlgorithms { RuinStrategy ruin = definedClasses.get(stratKey); if(ruin == null){ 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 routes) {} + + @Override + public void ruinEnds(Collection routes, Collection unassignedJobs) { + for(VehicleRoute route : routes){ + updater.updateRoute(route); + } + } + + @Override + public void removed(Job job, VehicleRoute fromRoute) {} + }); definedClasses.put(stratKey, ruin); } @@ -793,29 +810,50 @@ public class VehicleRoutingAlgorithms { "\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); RuinStrategy ruin = definedClasses.get(stratKey); if(ruin == null){ 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() { + TourStateUpdater updater = new TourStateUpdater(activityStates, vrp.getTransportCosts(), vrp.getActivityCosts()); + @Override public void ruinStarts(Collection routes) {} @Override public void ruinEnds(Collection routes, Collection 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 routes) {} + + @Override + public void ruinEnds(Collection routes, Collection unassignedJobs) { + for(VehicleRoute route : routes){ + updater.updateRoute(route); + } } @Override