1
0
Fork 0
mirror of https://github.com/graphhopper/jsprit.git synced 2020-01-24 07:45:05 +01:00

speed up regret insertion

This commit is contained in:
oblonski 2015-10-15 18:38:16 +02:00
parent 093baf1abe
commit ba700c73fe
2 changed files with 13 additions and 4 deletions

View file

@ -167,10 +167,13 @@ public class InsertionBuilder {
} else if (strategy.equals(Strategy.REGRET)) { } else if (strategy.equals(Strategy.REGRET)) {
if (executor == null) { if (executor == null) {
RegretInsertion regret = new RegretInsertion(costCalculator, vrp, fleetManager); RegretInsertion regret = new RegretInsertion(costCalculator, vrp, fleetManager);
regret.setSwitchAllowed(allowVehicleSwitch);
insertion = regret; insertion = regret;
} else { } 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"); } else throw new IllegalStateException("you should never get here");
for (InsertionListener l : iListeners) insertion.addListener(l); for (InsertionListener l : iListeners) insertion.addListener(l);

View file

@ -18,7 +18,9 @@ class InsertionDataUpdater {
Collection<Vehicle> relevantVehicles = new ArrayList<Vehicle>(); Collection<Vehicle> relevantVehicles = new ArrayList<Vehicle>();
if (!(route.getVehicle() instanceof VehicleImpl.NoVehicle)) { if (!(route.getVehicle() instanceof VehicleImpl.NoVehicle)) {
relevantVehicles.add(route.getVehicle()); 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()); } else relevantVehicles.addAll(fleetManager.getAvailableVehicles());
for (Vehicle v : relevantVehicles) { for (Vehicle v : relevantVehicles) {
double depTime = v.getEarliestDeparture(); double depTime = v.getEarliestDeparture();
@ -67,8 +69,12 @@ class InsertionDataUpdater {
} }
} }
if(versionedIData.getiData() instanceof InsertionData.NoInsertionFound) continue; if(versionedIData.getiData() instanceof InsertionData.NoInsertionFound) continue;
if(versionedIData.getiData().getSelectedVehicle() != versionedIData.getRoute().getVehicle() && !switchAllowed) continue; if(!(versionedIData.getRoute().getVehicle() instanceof VehicleImpl.NoVehicle)) {
if(versionedIData.getiData().getSelectedVehicle() != versionedIData.getRoute().getVehicle() && initialVehicleIds.contains(versionedIData.getRoute().getVehicle().getId())) continue; 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(versionedIData.getiData().getSelectedVehicle() != versionedIData.getRoute().getVehicle()) {
if (fleetManager.isLocked(versionedIData.getiData().getSelectedVehicle())) { if (fleetManager.isLocked(versionedIData.getiData().getSelectedVehicle())) {
Vehicle available = fleetManager.getAvailableVehicle(versionedIData.getiData().getSelectedVehicle().getVehicleTypeIdentifier()); Vehicle available = fleetManager.getAvailableVehicle(versionedIData.getiData().getSelectedVehicle().getVehicleTypeIdentifier());