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

fix the route version inconsistency issue; add comparison of job ids when scores are equal.

This commit is contained in:
He Huang 2017-09-06 14:37:32 +08:00
parent d95b1d2f14
commit 32bf4e63c1

View file

@ -40,20 +40,31 @@ class InsertionDataUpdater {
relevantVehicles.addAll(fleetManager.getAvailableVehicles(route.getVehicle()));
}
} else relevantVehicles.addAll(fleetManager.getAvailableVehicles());
double bestCost = Double.MAX_VALUE;
InsertionData bestIData = new InsertionData.NoInsertionFound();
for (Vehicle v : relevantVehicles) {
double depTime = v.getEarliestDeparture();
InsertionData iData = insertionCostsCalculator.getInsertionData(route, unassignedJob, v, depTime, route.getDriver(), Double.MAX_VALUE);
if (iData instanceof InsertionData.NoInsertionFound) {
continue;
}
insertionDataSet.add(new VersionedInsertionData(iData, updateRound, route));
if (iData.getInsertionCost() < bestCost) {
bestIData = iData;
bestCost = iData.getInsertionCost();
}
}
Iterator<VersionedInsertionData> iterator = insertionDataSet.iterator();
while (iterator.hasNext()) {
VersionedInsertionData versionedInsertionData = iterator.next();
if (versionedInsertionData.getRoute() == route &&
versionedInsertionData.getVersion() != updateRound)
iterator.remove();
}
insertionDataSet.add(new VersionedInsertionData(bestIData, updateRound, route));
}
return true;
}
static VehicleRoute findRoute(Collection<VehicleRoute> routes, Job job) {
for(VehicleRoute r : routes){
if(r.getVehicle().getBreak() == job) return r;
@ -115,16 +126,13 @@ class InsertionDataUpdater {
} else continue;
}
}
int currentDataVersion = updates.get(versionedIData.getRoute());
if(versionedIData.getVersion() == currentDataVersion){
if(best == null) {
best = versionedIData.getiData();
bestRoute = versionedIData.getRoute();
}
else {
secondBest = versionedIData.getiData();
break;
}
if(best == null) {
best = versionedIData.getiData();
bestRoute = versionedIData.getRoute();
}
else {
secondBest = versionedIData.getiData();
break;
}
}
VehicleRoute emptyRoute = VehicleRoute.emptyRoute();
@ -157,6 +165,11 @@ class InsertionDataUpdater {
else if(scoredJob.getScore() > bestScoredJob.getScore()){
bestScoredJob = scoredJob;
}
else if (scoredJob.getScore() == bestScoredJob.getScore()) {
if (scoredJob.getJob().getId().compareTo(bestScoredJob.getJob().getId()) <= 0) {
bestScoredJob = scoredJob;
}
}
}
return bestScoredJob;
}