diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinRandom.java b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinRandom.java index c084f356..f056a83d 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinRandom.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinRandom.java @@ -24,7 +24,7 @@ import org.apache.logging.log4j.Logger; import java.util.ArrayList; import java.util.Collection; -import java.util.LinkedList; +import java.util.Collections; import java.util.List; @@ -85,34 +85,23 @@ public final class RuinRandom extends AbstractRuinStrategy { throw new IllegalStateException("not supported"); } - @Deprecated - public void setRuinFraction(double fractionOfAllNodes2beRuined) { - this.fractionOfAllNodes2beRuined = fractionOfAllNodes2beRuined; - logger.info("fraction set " + this); - } - private void ruin(Collection vehicleRoutes, int nOfJobs2BeRemoved, List unassignedJobs) { - LinkedList availableJobs = new LinkedList(vrp.getJobs().values()); - for (int i = 0; i < nOfJobs2BeRemoved; i++) { - if(availableJobs.isEmpty()) break; - Job job = pickRandomJob(availableJobs); + ArrayList availableJobs = new ArrayList(vrp.getJobs().values()); + Collections.shuffle(availableJobs,random); + int removed = 0; + for (Job job : availableJobs) { + if(removed == nOfJobs2BeRemoved) break; if(removeJob(job,vehicleRoutes)) { unassignedJobs.add(job); - availableJobs.remove(job); } + removed++; } } - @Override public String toString() { return "[name=randomRuin][noJobsToBeRemoved="+selectNuOfJobs2BeRemoved()+"]"; } - - private Job pickRandomJob(LinkedList availableJobs) { - int randomIndex = random.nextInt(availableJobs.size()); - return availableJobs.get(randomIndex); - } private int selectNuOfJobs2BeRemoved() { return (int) Math.ceil(vrp.getJobs().values().size() * fractionOfAllNodes2beRuined);