From cdc0a457842abea4f0c88438d5115030a497b8bc Mon Sep 17 00:00:00 2001 From: oblonski Date: Thu, 15 Oct 2015 10:52:41 +0200 Subject: [PATCH] speed up regret insertion with breaks --- .../box/ConcurrentInsertionNoiseMaker.java | 6 +++--- .../core/algorithm/box/InsertionNoiseMaker.java | 6 +++--- .../core/algorithm/recreate/RegretInsertion.java | 15 ++++++++++----- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/box/ConcurrentInsertionNoiseMaker.java b/jsprit-core/src/main/java/jsprit/core/algorithm/box/ConcurrentInsertionNoiseMaker.java index 1c681224..11b86f5a 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/box/ConcurrentInsertionNoiseMaker.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/box/ConcurrentInsertionNoiseMaker.java @@ -49,9 +49,9 @@ class ConcurrentInsertionNoiseMaker implements SoftActivityConstraint, Iteration @Override public double getCosts(JobInsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime) { - if (makeNoise) { - return noiseLevel * maxCosts * randomArray[newAct.getIndex()].nextDouble(); - } +// if (makeNoise) { +// return noiseLevel * maxCosts * randomArray[newAct.getIndex()].nextDouble(); +// } return 0; } diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/box/InsertionNoiseMaker.java b/jsprit-core/src/main/java/jsprit/core/algorithm/box/InsertionNoiseMaker.java index 4228bfa0..dbf40735 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/box/InsertionNoiseMaker.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/box/InsertionNoiseMaker.java @@ -49,9 +49,9 @@ class InsertionNoiseMaker implements SoftActivityConstraint, IterationStartsList @Override public double getCosts(JobInsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime) { - if (makeNoise) { - return noiseLevel * maxCosts * random.nextDouble(); - } +// if (makeNoise) { +// return noiseLevel * maxCosts * random.nextDouble(); +// } return 0; } diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertion.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertion.java index 175f4f3f..12335b1b 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertion.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertion.java @@ -279,7 +279,7 @@ public class RegretInsertion extends AbstractInsertionStrategy { } List jobs = new ArrayList(unassignedJobs); - PriorityQueue[] priorityQueues = new PriorityQueue[vrp.getJobs().values().size() + 2]; + TreeSet[] priorityQueues = new TreeSet[vrp.getJobs().values().size() + 2]; VehicleRoute lastModified = null; boolean firstRun = true; int updateRound = 0; @@ -314,13 +314,13 @@ public class RegretInsertion extends AbstractInsertionStrategy { return badJobs; } - private ScoredJob getBest(PriorityQueue[] priorityQueues, Map updates, List unassignedJobList, List badJobs) { + private ScoredJob getBest(TreeSet[] priorityQueues, Map updates, List unassignedJobList, List badJobs) { ScoredJob bestScoredJob = null; for(Job j : unassignedJobList){ VehicleRoute bestRoute = null; InsertionData best = null; InsertionData secondBest = null; - PriorityQueue priorityQueue = priorityQueues[j.getIndex()]; + TreeSet priorityQueue = priorityQueues[j.getIndex()]; Iterator iterator = priorityQueue.iterator(); while(iterator.hasNext()){ VersionedInsertionData versionedIData = iterator.next(); @@ -378,6 +378,11 @@ public class RegretInsertion extends AbstractInsertionStrategy { badJobs.add(j); continue; } +// else { +// if(best != null && secondBest != null) { +// System.out.println("best " + best.getInsertionCost() + ", secondBest: " + secondBest.getInsertionCost()); +// } +// } double score = score(j, best, secondBest, scoringFunction); ScoredJob scoredJob; if (bestRoute == emptyRoute) { @@ -404,10 +409,10 @@ public class RegretInsertion extends AbstractInsertionStrategy { }; } - private void updateInsertionData(PriorityQueue[] priorityQueues, Collection routes, List unassignedJobList, List badJobList, int updateRound, Map updates) { + private void updateInsertionData(TreeSet[] priorityQueues, Collection routes, List unassignedJobList, List badJobList, int updateRound, Map updates) { for (Job unassignedJob : unassignedJobList) { if(priorityQueues[unassignedJob.getIndex()] == null){ - priorityQueues[unassignedJob.getIndex()] = new PriorityQueue(unassignedJobList.size(), getComparator()); + priorityQueues[unassignedJob.getIndex()] = new TreeSet(getComparator()); } for(VehicleRoute route : routes) { Collection relevantVehicles = new ArrayList();