diff --git a/jsprit-core/src/main/java/algorithms/RuinRadial.java b/jsprit-core/src/main/java/algorithms/RuinRadial.java index 82cb3ed6..d0fa8f71 100644 --- a/jsprit-core/src/main/java/algorithms/RuinRadial.java +++ b/jsprit-core/src/main/java/algorithms/RuinRadial.java @@ -29,8 +29,6 @@ import util.RandomNumberGeneration; import util.StopWatch; import basics.Job; import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.algo.SearchStrategyModule; import basics.route.VehicleRoute; @@ -49,7 +47,7 @@ final class RuinRadial implements RuinStrategy { * @return */ static RuinRadial newInstance(VehicleRoutingProblem vrp, double fraction, JobDistance jobDistance, JobRemover jobRemover, VehicleRouteUpdater routeUpdater){ - return new RuinRadial(vrp, fraction, jobDistance, jobRemover, routeUpdater); + return new RuinRadial(vrp, fraction, jobDistance); } @@ -92,12 +90,10 @@ final class RuinRadial implements RuinStrategy { this.random = random; } - public RuinRadial(VehicleRoutingProblem vrp, double fraction, JobDistance jobDistance, JobRemover jobRemover, VehicleRouteUpdater routeUpdater) { + public RuinRadial(VehicleRoutingProblem vrp, double fraction, JobDistance jobDistance) { super(); this.vrp = vrp; this.jobDistance = jobDistance; - this.jobRemover = jobRemover; - this.routeUpdater = routeUpdater; this.fractionOfAllNodes2beRuined = fraction; calculateDistancesFromJob2Job(); logger.info("intialise " + this); diff --git a/jsprit-core/src/main/java/algorithms/RuinRandom.java b/jsprit-core/src/main/java/algorithms/RuinRandom.java index 9180f13a..6fcba2f0 100644 --- a/jsprit-core/src/main/java/algorithms/RuinRandom.java +++ b/jsprit-core/src/main/java/algorithms/RuinRandom.java @@ -37,7 +37,7 @@ import basics.route.VehicleRoute; final class RuinRandom implements RuinStrategy { public static RuinRandom newInstance(VehicleRoutingProblem vrp, double fraction, JobRemover jobRemover, VehicleRouteUpdater routeUpdater){ - return new RuinRandom(vrp, fraction, jobRemover, routeUpdater); + return new RuinRandom(vrp, fraction); } private Logger logger = Logger.getLogger(RuinRandom.class); @@ -48,10 +48,6 @@ final class RuinRandom implements RuinStrategy { private Random random = RandomNumberGeneration.getRandom(); - private JobRemover jobRemover; - - private VehicleRouteUpdater vehicleRouteUpdater; - public void setRandom(Random random) { this.random = random; } @@ -61,14 +57,10 @@ final class RuinRandom implements RuinStrategy { * * @param vrp * @param fraction which is the fraction of total c - * @param jobRemover - * @param vehicleRouteUpdater */ - public RuinRandom(VehicleRoutingProblem vrp, double fraction, JobRemover jobRemover, VehicleRouteUpdater vehicleRouteUpdater) { + public RuinRandom(VehicleRoutingProblem vrp, double fraction) { super(); this.vrp = vrp; - this.jobRemover = jobRemover; - this.vehicleRouteUpdater = vehicleRouteUpdater; this.fractionOfAllNodes2beRuined = fraction; logger.info("initialise " + this); logger.info("done"); @@ -81,9 +73,11 @@ final class RuinRandom implements RuinStrategy { */ @Override public Collection ruin(Collection vehicleRoutes) { + List unassignedJobs = new ArrayList(); int nOfJobs2BeRemoved = selectNuOfJobs2BeRemoved(); ruin(vehicleRoutes, nOfJobs2BeRemoved, unassignedJobs); + return unassignedJobs; } @@ -92,19 +86,22 @@ final class RuinRandom implements RuinStrategy { */ @Override public Collection ruin(Collection vehicleRoutes, Job targetJob, int nOfJobs2BeRemoved) { + ruinStarts(vehicleRoutes); List unassignedJobs = new ArrayList(); if(targetJob != null){ boolean removed = false; for (VehicleRoute route : vehicleRoutes) { - removed = jobRemover.removeJobWithoutTourUpdate(targetJob, route); + removed = route.getTourActivities().removeJob(targetJob); if (removed) { nOfJobs2BeRemoved--; unassignedJobs.add(targetJob); + jobRemoved(targetJob,route); break; } } } ruin(vehicleRoutes, nOfJobs2BeRemoved, unassignedJobs); + ruinEnds(vehicleRoutes); return unassignedJobs; } @@ -120,19 +117,29 @@ final class RuinRandom implements RuinStrategy { unassignedJobs.add(job); availableJobs.remove(job); for (VehicleRoute route : vehicleRoutes) { - boolean removed = jobRemover.removeJobWithoutTourUpdate(job, route); - if (removed) break; + boolean removed = route.getTourActivities().removeJob(job); + if (removed) { + jobRemoved(job,route); + break; + } } } - updateRoutes(vehicleRoutes); } - private void updateRoutes(Collection vehicleRoutes) { - for(VehicleRoute route : vehicleRoutes){ - vehicleRouteUpdater.updateRoute(route); - } + private void ruinEnds(Collection vehicleRoutes) { + // TODO Auto-generated method stub + } + private void ruinStarts(Collection vehicleRoutes) { + // TODO Auto-generated method stub + + } + + private void jobRemoved(Job job, VehicleRoute route) { + // TODO Auto-generated method stub + + } @Override public String toString() { diff --git a/jsprit-core/src/main/java/basics/route/TourActivities.java b/jsprit-core/src/main/java/basics/route/TourActivities.java index eed81154..2524b13b 100644 --- a/jsprit-core/src/main/java/basics/route/TourActivities.java +++ b/jsprit-core/src/main/java/basics/route/TourActivities.java @@ -76,15 +76,9 @@ public class TourActivities { } private final ArrayList tourActivities = new ArrayList(); -// private final LinkedList tourActivities = new LinkedList(); -// private final TreeList tourActivities = new TreeList(); private final Set jobs = new HashSet(); - private int load = 0; - - private double cost = 0.0; - private ReverseActivityIterator backward; private TourActivities(TourActivities tour2copy) { @@ -125,7 +119,7 @@ public class TourActivities { } /** - * Removes job AND belonging activity from tour. + * Removes job AND belonging activity from tour and returns true if job has been removed, otherwise false. * * @param job * @return