mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
add driver cost for new route
This commit is contained in:
parent
10187a270b
commit
c489207bf3
6 changed files with 19 additions and 5 deletions
|
|
@ -75,9 +75,15 @@ public abstract class AbstractInsertionStrategy implements InsertionStrategy {
|
|||
|
||||
protected VehicleRoutingProblem vrp;
|
||||
|
||||
protected double minVehicleCost = Double.POSITIVE_INFINITY;
|
||||
|
||||
public AbstractInsertionStrategy(VehicleRoutingProblem vrp) {
|
||||
this.insertionsListeners = new InsertionListeners();
|
||||
this.vrp = vrp;
|
||||
for (Vehicle vehicle : vrp.getVehicles()) {
|
||||
minVehicleCost = Math.min(vehicle.getType().getVehicleCostParams().fix, minVehicleCost);
|
||||
}
|
||||
|
||||
eventListeners = new EventListeners();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ public final class BestInsertion extends AbstractInsertionStrategy {
|
|||
VehicleRoute newRoute = VehicleRoute.emptyRoute();
|
||||
InsertionData newIData = bestInsertionCostCalculator.getInsertionData(newRoute, unassignedJob, NO_NEW_VEHICLE_YET, NO_NEW_DEPARTURE_TIME_YET, NO_NEW_DRIVER_YET, bestInsertionCost);
|
||||
if (!(newIData instanceof InsertionData.NoInsertionFound)) {
|
||||
newIData.setInsertionCost(newIData.getInsertionCost() + minVehicleCost);
|
||||
if (newIData.getInsertionCost() < bestInsertionCost + noiseMaker.makeNoise()) {
|
||||
bestInsertion = new Insertion(newRoute, newIData);
|
||||
vehicleRoutes.add(newRoute);
|
||||
|
|
|
|||
|
|
@ -138,6 +138,7 @@ public final class BestInsertionConcurrent extends AbstractInsertionStrategy {
|
|||
}
|
||||
VehicleRoute newRoute = VehicleRoute.emptyRoute();
|
||||
InsertionData newIData = bestInsertionCostCalculator.getInsertionData(newRoute, unassignedJob, NO_NEW_VEHICLE_YET, NO_NEW_DEPARTURE_TIME_YET, NO_NEW_DRIVER_YET, bestInsertionCost);
|
||||
newIData.setInsertionCost(newIData.getInsertionCost() + minVehicleCost);
|
||||
if (newIData.getInsertionCost() < bestInsertionCost) {
|
||||
bestInsertion = new Insertion(newRoute, newIData);
|
||||
vehicleRoutes.add(newRoute);
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ public class InsertionData {
|
|||
|
||||
static int NO_INDEX = -1;
|
||||
|
||||
private final double insertionCost;
|
||||
private double insertionCost;
|
||||
|
||||
private final int pickupInsertionIndex;
|
||||
|
||||
|
|
@ -172,5 +172,10 @@ public class InsertionData {
|
|||
this.departureTime = departureTime;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param insertionCost the insertionCost to set
|
||||
*/
|
||||
public void setInsertionCost(double insertionCost) {
|
||||
this.insertionCost = insertionCost;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@ public class RegretInsertion extends AbstractInsertionStrategy {
|
|||
private ScoredJob nextJob(Collection<VehicleRoute> routes, Collection<Job> unassignedJobList, List<ScoredJob> badJobs) {
|
||||
ScoredJob bestScoredJob = null;
|
||||
for (Job unassignedJob : unassignedJobList) {
|
||||
ScoredJob scoredJob = getScoredJob(routes, unassignedJob, insertionCostsCalculator, scoringFunction);
|
||||
ScoredJob scoredJob = getScoredJob(routes, unassignedJob, insertionCostsCalculator, scoringFunction, minVehicleCost);
|
||||
if (scoredJob instanceof ScoredJob.BadJob) {
|
||||
badJobs.add(scoredJob);
|
||||
continue;
|
||||
|
|
@ -156,7 +156,7 @@ public class RegretInsertion extends AbstractInsertionStrategy {
|
|||
return bestScoredJob;
|
||||
}
|
||||
|
||||
static ScoredJob getScoredJob(Collection<VehicleRoute> routes, Job unassignedJob, JobInsertionCostsCalculator insertionCostsCalculator, ScoringFunction scoringFunction) {
|
||||
static ScoredJob getScoredJob(Collection<VehicleRoute> routes, Job unassignedJob, JobInsertionCostsCalculator insertionCostsCalculator, ScoringFunction scoringFunction, double newVehicleCost) {
|
||||
InsertionData best = null;
|
||||
InsertionData secondBest = null;
|
||||
VehicleRoute bestRoute = null;
|
||||
|
|
@ -186,6 +186,7 @@ public class RegretInsertion extends AbstractInsertionStrategy {
|
|||
VehicleRoute emptyRoute = VehicleRoute.emptyRoute();
|
||||
InsertionData iData = insertionCostsCalculator.getInsertionData(emptyRoute, unassignedJob, NO_NEW_VEHICLE_YET, NO_NEW_DEPARTURE_TIME_YET, NO_NEW_DRIVER_YET, benchmark);
|
||||
if (!(iData instanceof InsertionData.NoInsertionFound)) {
|
||||
iData.setInsertionCost(iData.getInsertionCost() + newVehicleCost);
|
||||
if (best == null) {
|
||||
best = iData;
|
||||
bestRoute = emptyRoute;
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@ public class RegretInsertionConcurrent extends AbstractInsertionStrategy {
|
|||
|
||||
@Override
|
||||
public ScoredJob call() throws Exception {
|
||||
return RegretInsertion.getScoredJob(routes, unassignedJob, insertionCostsCalculator, scoringFunction);
|
||||
return RegretInsertion.getScoredJob(routes, unassignedJob, insertionCostsCalculator, scoringFunction, minVehicleCost);
|
||||
}
|
||||
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue