From ba700c73fe3d3a307cf28f94d2c69c9768828e91 Mon Sep 17 00:00:00 2001 From: oblonski Date: Thu, 15 Oct 2015 18:38:16 +0200 Subject: [PATCH] speed up regret insertion --- .../core/algorithm/recreate/InsertionBuilder.java | 5 ++++- .../algorithm/recreate/InsertionDataUpdater.java | 12 +++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/InsertionBuilder.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/InsertionBuilder.java index c1660260..b4732b74 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/InsertionBuilder.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/InsertionBuilder.java @@ -167,10 +167,13 @@ public class InsertionBuilder { } else if (strategy.equals(Strategy.REGRET)) { if (executor == null) { RegretInsertion regret = new RegretInsertion(costCalculator, vrp, fleetManager); + regret.setSwitchAllowed(allowVehicleSwitch); insertion = regret; } else { - insertion = new RegretInsertionConcurrent(costCalculator, vrp, executor, fleetManager); + RegretInsertionConcurrent regret = new RegretInsertionConcurrent(costCalculator, vrp, executor, fleetManager); + regret.setSwitchAllowed(allowVehicleSwitch); + insertion = regret; } } else throw new IllegalStateException("you should never get here"); for (InsertionListener l : iListeners) insertion.addListener(l); diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/InsertionDataUpdater.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/InsertionDataUpdater.java index e056fb42..9460d799 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/InsertionDataUpdater.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/InsertionDataUpdater.java @@ -18,7 +18,9 @@ class InsertionDataUpdater { Collection relevantVehicles = new ArrayList(); if (!(route.getVehicle() instanceof VehicleImpl.NoVehicle)) { relevantVehicles.add(route.getVehicle()); - if(addAllAvailable && initialVehicleIds.contains(route.getVehicle().getId())) relevantVehicles.addAll(fleetManager.getAvailableVehicles(route.getVehicle())); + if(addAllAvailable && !initialVehicleIds.contains(route.getVehicle().getId())){ + relevantVehicles.addAll(fleetManager.getAvailableVehicles(route.getVehicle())); + } } else relevantVehicles.addAll(fleetManager.getAvailableVehicles()); for (Vehicle v : relevantVehicles) { double depTime = v.getEarliestDeparture(); @@ -67,8 +69,12 @@ class InsertionDataUpdater { } } if(versionedIData.getiData() instanceof InsertionData.NoInsertionFound) continue; - if(versionedIData.getiData().getSelectedVehicle() != versionedIData.getRoute().getVehicle() && !switchAllowed) continue; - if(versionedIData.getiData().getSelectedVehicle() != versionedIData.getRoute().getVehicle() && initialVehicleIds.contains(versionedIData.getRoute().getVehicle().getId())) continue; + if(!(versionedIData.getRoute().getVehicle() instanceof VehicleImpl.NoVehicle)) { + if (versionedIData.getiData().getSelectedVehicle() != versionedIData.getRoute().getVehicle()) { + if (!switchAllowed) continue; + if (initialVehicleIds.contains(versionedIData.getRoute().getVehicle().getId())) continue; + } + } if(versionedIData.getiData().getSelectedVehicle() != versionedIData.getRoute().getVehicle()) { if (fleetManager.isLocked(versionedIData.getiData().getSelectedVehicle())) { Vehicle available = fleetManager.getAvailableVehicle(versionedIData.getiData().getSelectedVehicle().getVehicleTypeIdentifier());