mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
Merge pull request #2 from bringg/ActivityCostRecievePrevActTo
ActivityCostRecievePrevActToo
This commit is contained in:
commit
72a8cd348f
27 changed files with 52 additions and 53 deletions
|
|
@ -770,7 +770,7 @@ public class Jsprit {
|
||||||
for (TourActivity act : route.getActivities()) {
|
for (TourActivity act : route.getActivities()) {
|
||||||
if (act instanceof BreakActivity) hasBreak = true;
|
if (act instanceof BreakActivity) hasBreak = true;
|
||||||
costs += vrp.getTransportCosts().getTransportCost(prevAct.getLocation(), act.getLocation(), prevAct.getEndTime(), route.getDriver(), route.getVehicle());
|
costs += vrp.getTransportCosts().getTransportCost(prevAct.getLocation(), act.getLocation(), prevAct.getEndTime(), route.getDriver(), route.getVehicle());
|
||||||
costs += vrp.getActivityCosts().getActivityCost(act, act.getArrTime(), route.getDriver(), route.getVehicle());
|
costs += vrp.getActivityCosts().getActivityCost(prevAct, act, act.getArrTime(), route.getDriver(), route.getVehicle());
|
||||||
prevAct = act;
|
prevAct = act;
|
||||||
}
|
}
|
||||||
costs += vrp.getTransportCosts().getTransportCost(prevAct.getLocation(), route.getEnd().getLocation(), prevAct.getEndTime(), route.getDriver(), route.getVehicle());
|
costs += vrp.getTransportCosts().getTransportCost(prevAct.getLocation(), route.getEnd().getLocation(), prevAct.getEndTime(), route.getDriver(), route.getVehicle());
|
||||||
|
|
|
||||||
|
|
@ -68,8 +68,8 @@ final class AuxilliaryCostCalculator {
|
||||||
double transportTime = routingCosts.getTransportTime(prevAct.getLocation(), act.getLocation(), departureTimePrevAct, driver, vehicle);
|
double transportTime = routingCosts.getTransportTime(prevAct.getLocation(), act.getLocation(), departureTimePrevAct, driver, vehicle);
|
||||||
cost += transportCost;
|
cost += transportCost;
|
||||||
double actStartTime = departureTimePrevAct + transportTime;
|
double actStartTime = departureTimePrevAct + transportTime;
|
||||||
departureTimePrevAct = Math.max(actStartTime, act.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(act,actStartTime,driver,vehicle);
|
departureTimePrevAct = Math.max(actStartTime, act.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(prevAct, act,actStartTime,driver,vehicle);
|
||||||
cost += activityCosts.getActivityCost(act, actStartTime, driver, vehicle);
|
cost += activityCosts.getActivityCost(prevAct, act, actStartTime, driver, vehicle);
|
||||||
prevAct = act;
|
prevAct = act;
|
||||||
}
|
}
|
||||||
return cost;
|
return cost;
|
||||||
|
|
|
||||||
|
|
@ -165,7 +165,7 @@ final class BreakInsertionCalculator implements JobInsertionCostsCalculator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
double nextActArrTime = prevActStartTime + transportCosts.getTransportTime(prevAct.getLocation(), nextAct.getLocation(), prevActStartTime, newDriver, newVehicle);
|
double nextActArrTime = prevActStartTime + transportCosts.getTransportTime(prevAct.getLocation(), nextAct.getLocation(), prevActStartTime, newDriver, newVehicle);
|
||||||
prevActStartTime = Math.max(nextActArrTime, nextAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(nextAct,nextActArrTime,newDriver,newVehicle);
|
prevActStartTime = Math.max(nextActArrTime, nextAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(prevAct, nextAct,nextActArrTime,newDriver,newVehicle);
|
||||||
prevAct = nextAct;
|
prevAct = nextAct;
|
||||||
actIndex++;
|
actIndex++;
|
||||||
if (breakThis) break;
|
if (breakThis) break;
|
||||||
|
|
|
||||||
|
|
@ -62,17 +62,17 @@ class LocalActivityInsertionCostsCalculator implements ActivityInsertionCostsCal
|
||||||
double tp_costs_prevAct_newAct = routingCosts.getTransportCost(prevAct.getLocation(), newAct.getLocation(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
double tp_costs_prevAct_newAct = routingCosts.getTransportCost(prevAct.getLocation(), newAct.getLocation(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
||||||
double tp_time_prevAct_newAct = routingCosts.getTransportTime(prevAct.getLocation(), newAct.getLocation(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
double tp_time_prevAct_newAct = routingCosts.getTransportTime(prevAct.getLocation(), newAct.getLocation(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
||||||
double newAct_arrTime = depTimeAtPrevAct + tp_time_prevAct_newAct;
|
double newAct_arrTime = depTimeAtPrevAct + tp_time_prevAct_newAct;
|
||||||
double newAct_endTime = Math.max(newAct_arrTime, newAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(newAct, newAct_arrTime, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
double newAct_endTime = Math.max(newAct_arrTime, newAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(prevAct, newAct, newAct_arrTime, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
||||||
|
|
||||||
double act_costs_newAct = activityCosts.getActivityCost(newAct, newAct_arrTime, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
double act_costs_newAct = activityCosts.getActivityCost(prevAct, newAct, newAct_arrTime, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
||||||
|
|
||||||
if (isEnd(nextAct) && !toDepot(iFacts.getNewVehicle())) return tp_costs_prevAct_newAct + solutionCompletenessRatio * activityCostsWeight * act_costs_newAct;
|
if (isEnd(nextAct) && !toDepot(iFacts.getNewVehicle())) return tp_costs_prevAct_newAct + solutionCompletenessRatio * activityCostsWeight * act_costs_newAct;
|
||||||
|
|
||||||
double tp_costs_newAct_nextAct = routingCosts.getTransportCost(newAct.getLocation(), nextAct.getLocation(), newAct_endTime, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
double tp_costs_newAct_nextAct = routingCosts.getTransportCost(newAct.getLocation(), nextAct.getLocation(), newAct_endTime, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
||||||
double tp_time_newAct_nextAct = routingCosts.getTransportTime(newAct.getLocation(), nextAct.getLocation(), newAct_endTime, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
double tp_time_newAct_nextAct = routingCosts.getTransportTime(newAct.getLocation(), nextAct.getLocation(), newAct_endTime, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
||||||
double nextAct_arrTime = newAct_endTime + tp_time_newAct_nextAct;
|
double nextAct_arrTime = newAct_endTime + tp_time_newAct_nextAct;
|
||||||
double endTime_nextAct_new = Math.max(nextAct_arrTime, nextAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(nextAct, nextAct_arrTime, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
double endTime_nextAct_new = Math.max(nextAct_arrTime, nextAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(newAct, nextAct, nextAct_arrTime, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
||||||
double act_costs_nextAct = activityCosts.getActivityCost(nextAct, nextAct_arrTime, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
double act_costs_nextAct = activityCosts.getActivityCost(newAct, nextAct, nextAct_arrTime, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
||||||
|
|
||||||
double totalCosts = tp_costs_prevAct_newAct + tp_costs_newAct_nextAct + solutionCompletenessRatio * activityCostsWeight * (act_costs_newAct + act_costs_nextAct);
|
double totalCosts = tp_costs_prevAct_newAct + tp_costs_newAct_nextAct + solutionCompletenessRatio * activityCostsWeight * (act_costs_newAct + act_costs_nextAct);
|
||||||
|
|
||||||
|
|
@ -85,8 +85,8 @@ class LocalActivityInsertionCostsCalculator implements ActivityInsertionCostsCal
|
||||||
} else {
|
} else {
|
||||||
double tp_costs_prevAct_nextAct = routingCosts.getTransportCost(prevAct.getLocation(), nextAct.getLocation(), prevAct.getEndTime(), iFacts.getRoute().getDriver(), iFacts.getRoute().getVehicle());
|
double tp_costs_prevAct_nextAct = routingCosts.getTransportCost(prevAct.getLocation(), nextAct.getLocation(), prevAct.getEndTime(), iFacts.getRoute().getDriver(), iFacts.getRoute().getVehicle());
|
||||||
double arrTime_nextAct = depTimeAtPrevAct + routingCosts.getTransportTime(prevAct.getLocation(), nextAct.getLocation(), prevAct.getEndTime(), iFacts.getRoute().getDriver(), iFacts.getRoute().getVehicle());
|
double arrTime_nextAct = depTimeAtPrevAct + routingCosts.getTransportTime(prevAct.getLocation(), nextAct.getLocation(), prevAct.getEndTime(), iFacts.getRoute().getDriver(), iFacts.getRoute().getVehicle());
|
||||||
double endTime_nextAct_old = Math.max(arrTime_nextAct, nextAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(nextAct, arrTime_nextAct, iFacts.getRoute().getDriver(),iFacts.getRoute().getVehicle());
|
double endTime_nextAct_old = Math.max(arrTime_nextAct, nextAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(prevAct, nextAct, arrTime_nextAct, iFacts.getRoute().getDriver(),iFacts.getRoute().getVehicle());
|
||||||
double actCost_nextAct = activityCosts.getActivityCost(nextAct, arrTime_nextAct, iFacts.getRoute().getDriver(), iFacts.getRoute().getVehicle());
|
double actCost_nextAct = activityCosts.getActivityCost(prevAct, nextAct, arrTime_nextAct, iFacts.getRoute().getDriver(), iFacts.getRoute().getVehicle());
|
||||||
|
|
||||||
double endTimeDelay_nextAct = Math.max(0, endTime_nextAct_new - endTime_nextAct_old);
|
double endTimeDelay_nextAct = Math.max(0, endTime_nextAct_new - endTime_nextAct_old);
|
||||||
Double futureWaiting = stateManager.getActivityState(nextAct, iFacts.getRoute().getVehicle(), InternalStates.FUTURE_WAITING, Double.class);
|
Double futureWaiting = stateManager.getActivityState(nextAct, iFacts.getRoute().getVehicle(), InternalStates.FUTURE_WAITING, Double.class);
|
||||||
|
|
|
||||||
|
|
@ -164,7 +164,7 @@ final class ServiceInsertionCalculator extends AbstractInsertionCalculator {
|
||||||
}
|
}
|
||||||
if(not_fulfilled_break) break;
|
if(not_fulfilled_break) break;
|
||||||
double nextActArrTime = prevActStartTime + transportCosts.getTransportTime(prevAct.getLocation(), nextAct.getLocation(), prevActStartTime, newDriver, newVehicle);
|
double nextActArrTime = prevActStartTime + transportCosts.getTransportTime(prevAct.getLocation(), nextAct.getLocation(), prevActStartTime, newDriver, newVehicle);
|
||||||
prevActStartTime = Math.max(nextActArrTime, nextAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(nextAct,nextActArrTime,newDriver,newVehicle);
|
prevActStartTime = Math.max(nextActArrTime, nextAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(prevAct, nextAct,nextActArrTime,newDriver,newVehicle);
|
||||||
prevAct = nextAct;
|
prevAct = nextAct;
|
||||||
actIndex++;
|
actIndex++;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -193,7 +193,7 @@ final class ServiceInsertionOnRouteLevelCalculator implements JobInsertionCostsC
|
||||||
double transportCost_prevAct_nextAct_newVehicle = transportCosts.getTransportCost(prevAct.getLocation(), nextAct.getLocation(), prevActDepTime_newVehicle, newDriver, newVehicle);
|
double transportCost_prevAct_nextAct_newVehicle = transportCosts.getTransportCost(prevAct.getLocation(), nextAct.getLocation(), prevActDepTime_newVehicle, newDriver, newVehicle);
|
||||||
double transportTime_prevAct_nextAct_newVehicle = transportCosts.getTransportTime(prevAct.getLocation(), nextAct.getLocation(), prevActDepTime_newVehicle, newDriver, newVehicle);
|
double transportTime_prevAct_nextAct_newVehicle = transportCosts.getTransportTime(prevAct.getLocation(), nextAct.getLocation(), prevActDepTime_newVehicle, newDriver, newVehicle);
|
||||||
double arrTime_nextAct_newVehicle = prevActDepTime_newVehicle + transportTime_prevAct_nextAct_newVehicle;
|
double arrTime_nextAct_newVehicle = prevActDepTime_newVehicle + transportTime_prevAct_nextAct_newVehicle;
|
||||||
double activityCost_nextAct = activityCosts.getActivityCost(nextAct, arrTime_nextAct_newVehicle, newDriver, newVehicle);
|
double activityCost_nextAct = activityCosts.getActivityCost(prevAct, nextAct, arrTime_nextAct_newVehicle, newDriver, newVehicle);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* memorize transport and activity costs with new vehicle without inserting k
|
* memorize transport and activity costs with new vehicle without inserting k
|
||||||
|
|
@ -204,7 +204,7 @@ final class ServiceInsertionOnRouteLevelCalculator implements JobInsertionCostsC
|
||||||
/**
|
/**
|
||||||
* departure time at nextAct with new vehicle
|
* departure time at nextAct with new vehicle
|
||||||
*/
|
*/
|
||||||
double depTime_nextAct_newVehicle = Math.max(arrTime_nextAct_newVehicle, nextAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(nextAct, arrTime_nextAct_newVehicle,newDriver,newVehicle);
|
double depTime_nextAct_newVehicle = Math.max(arrTime_nextAct_newVehicle, nextAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(prevAct, nextAct, arrTime_nextAct_newVehicle,newDriver,newVehicle);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set previous to next
|
* set previous to next
|
||||||
|
|
|
||||||
|
|
@ -167,7 +167,7 @@ final class ShipmentInsertionCalculator extends AbstractInsertionCalculator {
|
||||||
|
|
||||||
TourActivity prevAct_deliveryLoop = pickupShipment;
|
TourActivity prevAct_deliveryLoop = pickupShipment;
|
||||||
double shipmentPickupArrTime = prevActEndTime + transportCosts.getTransportTime(prevAct.getLocation(), pickupShipment.getLocation(), prevActEndTime, newDriver, newVehicle);
|
double shipmentPickupArrTime = prevActEndTime + transportCosts.getTransportTime(prevAct.getLocation(), pickupShipment.getLocation(), prevActEndTime, newDriver, newVehicle);
|
||||||
double shipmentPickupEndTime = Math.max(shipmentPickupArrTime, pickupShipment.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(pickupShipment, shipmentPickupArrTime, newDriver, newVehicle);
|
double shipmentPickupEndTime = Math.max(shipmentPickupArrTime, pickupShipment.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(prevAct, pickupShipment, shipmentPickupArrTime, newDriver, newVehicle);
|
||||||
|
|
||||||
pickupContext.setArrivalTime(shipmentPickupArrTime);
|
pickupContext.setArrivalTime(shipmentPickupArrTime);
|
||||||
pickupContext.setEndTime(shipmentPickupEndTime);
|
pickupContext.setEndTime(shipmentPickupEndTime);
|
||||||
|
|
@ -219,7 +219,7 @@ final class ShipmentInsertionCalculator extends AbstractInsertionCalculator {
|
||||||
if (deliveryInsertionNotFulfilledBreak) break;
|
if (deliveryInsertionNotFulfilledBreak) break;
|
||||||
//update prevAct and endTime
|
//update prevAct and endTime
|
||||||
double nextActArrTime = prevActEndTime_deliveryLoop + transportCosts.getTransportTime(prevAct_deliveryLoop.getLocation(), nextAct_deliveryLoop.getLocation(), prevActEndTime_deliveryLoop, newDriver, newVehicle);
|
double nextActArrTime = prevActEndTime_deliveryLoop + transportCosts.getTransportTime(prevAct_deliveryLoop.getLocation(), nextAct_deliveryLoop.getLocation(), prevActEndTime_deliveryLoop, newDriver, newVehicle);
|
||||||
prevActEndTime_deliveryLoop = Math.max(nextActArrTime, nextAct_deliveryLoop.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(nextAct_deliveryLoop,nextActArrTime,newDriver,newVehicle);
|
prevActEndTime_deliveryLoop = Math.max(nextActArrTime, nextAct_deliveryLoop.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(prevAct_deliveryLoop, nextAct_deliveryLoop,nextActArrTime,newDriver,newVehicle);
|
||||||
prevAct_deliveryLoop = nextAct_deliveryLoop;
|
prevAct_deliveryLoop = nextAct_deliveryLoop;
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
|
|
@ -229,7 +229,7 @@ final class ShipmentInsertionCalculator extends AbstractInsertionCalculator {
|
||||||
}
|
}
|
||||||
//update prevAct and endTime
|
//update prevAct and endTime
|
||||||
double nextActArrTime = prevActEndTime + transportCosts.getTransportTime(prevAct.getLocation(), nextAct.getLocation(), prevActEndTime, newDriver, newVehicle);
|
double nextActArrTime = prevActEndTime + transportCosts.getTransportTime(prevAct.getLocation(), nextAct.getLocation(), prevActEndTime, newDriver, newVehicle);
|
||||||
prevActEndTime = Math.max(nextActArrTime, nextAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(nextAct,nextActArrTime,newDriver,newVehicle);
|
prevActEndTime = Math.max(nextActArrTime, nextAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(prevAct, nextAct,nextActArrTime,newDriver,newVehicle);
|
||||||
prevAct = nextAct;
|
prevAct = nextAct;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ public class VariableTransportCostCalculator implements SoftActivityConstraint {
|
||||||
double tp_time_prevAct_newAct = routingCosts.getTransportTime(prevAct.getLocation(), newAct.getLocation(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
double tp_time_prevAct_newAct = routingCosts.getTransportTime(prevAct.getLocation(), newAct.getLocation(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
||||||
|
|
||||||
double newAct_arrTime = depTimeAtPrevAct + tp_time_prevAct_newAct;
|
double newAct_arrTime = depTimeAtPrevAct + tp_time_prevAct_newAct;
|
||||||
double newAct_endTime = Math.max(newAct_arrTime, newAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(newAct,newAct_arrTime,iFacts.getNewDriver(),iFacts.getNewVehicle());
|
double newAct_endTime = Math.max(newAct_arrTime, newAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(prevAct, newAct,newAct_arrTime,iFacts.getNewDriver(),iFacts.getNewVehicle());
|
||||||
|
|
||||||
//open routes
|
//open routes
|
||||||
if (nextAct instanceof End) {
|
if (nextAct instanceof End) {
|
||||||
|
|
|
||||||
|
|
@ -108,7 +108,7 @@ public class UpdateMaxTimeInVehicle implements StateUpdater, ActivityVisitor{
|
||||||
double activityArrival = prevActEndTimes[v.getVehicleTypeIdentifier().getIndex()] + transportTime.getTransportTime(prevActLocation,activity.getLocation(),prevActEndTime,route.getDriver(),v);
|
double activityArrival = prevActEndTimes[v.getVehicleTypeIdentifier().getIndex()] + transportTime.getTransportTime(prevActLocation,activity.getLocation(),prevActEndTime,route.getDriver(),v);
|
||||||
double activityStart = Math.max(activityArrival,activity.getTheoreticalEarliestOperationStartTime());
|
double activityStart = Math.max(activityArrival,activity.getTheoreticalEarliestOperationStartTime());
|
||||||
memorizeActStart(activity,v,activityStart);
|
memorizeActStart(activity,v,activityStart);
|
||||||
double activityEnd = activityStart + activityCosts.getActivityDuration(activity, activityArrival, route.getDriver(), v);
|
double activityEnd = activityStart + activityCosts.getActivityDuration(null, activity, activityArrival, route.getDriver(), v);
|
||||||
Map<Job, Double> openPickups = openPickupEndTimes.get(vehicleIndex);
|
Map<Job, Double> openPickups = openPickupEndTimes.get(vehicleIndex);
|
||||||
if (activity instanceof ServiceActivity || activity instanceof PickupActivity) {
|
if (activity instanceof ServiceActivity || activity instanceof PickupActivity) {
|
||||||
openPickups.put(((TourActivity.JobActivity) activity).getJob(), activityEnd);
|
openPickups.put(((TourActivity.JobActivity) activity).getJob(), activityEnd);
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ class UpdatePracticalTimeWindows implements ReverseActivityVisitor, StateUpdater
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(TourActivity activity) {
|
public void visit(TourActivity activity) {
|
||||||
double potentialLatestArrivalTimeAtCurrAct = latestArrTimeAtPrevAct - transportCosts.getBackwardTransportTime(activity.getLocation(), prevAct.getLocation(), latestArrTimeAtPrevAct, route.getDriver(), route.getVehicle()) - activityCosts.getActivityDuration(activity,latestArrTimeAtPrevAct,route.getDriver(),route.getVehicle());
|
double potentialLatestArrivalTimeAtCurrAct = latestArrTimeAtPrevAct - transportCosts.getBackwardTransportTime(activity.getLocation(), prevAct.getLocation(), latestArrTimeAtPrevAct, route.getDriver(), route.getVehicle()) - activityCosts.getActivityDuration(prevAct, activity,latestArrTimeAtPrevAct,route.getDriver(),route.getVehicle());
|
||||||
double latestArrivalTime = Math.min(activity.getTheoreticalLatestOperationStartTime(), potentialLatestArrivalTimeAtCurrAct);
|
double latestArrivalTime = Math.min(activity.getTheoreticalLatestOperationStartTime(), potentialLatestArrivalTimeAtCurrAct);
|
||||||
|
|
||||||
states.putInternalTypedActivityState(activity, InternalStates.LATEST_OPERATION_START_TIME, latestArrivalTime);
|
states.putInternalTypedActivityState(activity, InternalStates.LATEST_OPERATION_START_TIME, latestArrivalTime);
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@ public class UpdateVariableCosts implements ActivityVisitor, StateUpdater {
|
||||||
timeTracker.visit(act);
|
timeTracker.visit(act);
|
||||||
|
|
||||||
double transportCost = this.transportCost.getTransportCost(prevAct.getLocation(), act.getLocation(), startTimeAtPrevAct, vehicleRoute.getDriver(), vehicleRoute.getVehicle());
|
double transportCost = this.transportCost.getTransportCost(prevAct.getLocation(), act.getLocation(), startTimeAtPrevAct, vehicleRoute.getDriver(), vehicleRoute.getVehicle());
|
||||||
double actCost = activityCost.getActivityCost(act, timeTracker.getActArrTime(), vehicleRoute.getDriver(), vehicleRoute.getVehicle());
|
double actCost = activityCost.getActivityCost(prevAct, act, timeTracker.getActArrTime(), vehicleRoute.getDriver(), vehicleRoute.getVehicle());
|
||||||
|
|
||||||
totalOperationCost += transportCost;
|
totalOperationCost += transportCost;
|
||||||
totalOperationCost += actCost;
|
totalOperationCost += actCost;
|
||||||
|
|
@ -103,7 +103,7 @@ public class UpdateVariableCosts implements ActivityVisitor, StateUpdater {
|
||||||
public void finish() {
|
public void finish() {
|
||||||
timeTracker.finish();
|
timeTracker.finish();
|
||||||
double transportCost = this.transportCost.getTransportCost(prevAct.getLocation(), vehicleRoute.getEnd().getLocation(), startTimeAtPrevAct, vehicleRoute.getDriver(), vehicleRoute.getVehicle());
|
double transportCost = this.transportCost.getTransportCost(prevAct.getLocation(), vehicleRoute.getEnd().getLocation(), startTimeAtPrevAct, vehicleRoute.getDriver(), vehicleRoute.getVehicle());
|
||||||
double actCost = activityCost.getActivityCost(vehicleRoute.getEnd(), timeTracker.getActEndTime(), vehicleRoute.getDriver(), vehicleRoute.getVehicle());
|
double actCost = activityCost.getActivityCost(prevAct, vehicleRoute.getEnd(), timeTracker.getActEndTime(), vehicleRoute.getDriver(), vehicleRoute.getVehicle());
|
||||||
|
|
||||||
totalOperationCost += transportCost;
|
totalOperationCost += transportCost;
|
||||||
totalOperationCost += actCost;
|
totalOperationCost += actCost;
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ public class UpdateVehicleDependentPracticalTimeWindows implements RouteVisitor,
|
||||||
double latestArrTimeAtPrevAct = latest_arrTimes_at_prevAct[vehicle.getVehicleTypeIdentifier().getIndex()];
|
double latestArrTimeAtPrevAct = latest_arrTimes_at_prevAct[vehicle.getVehicleTypeIdentifier().getIndex()];
|
||||||
Location prevLocation = location_of_prevAct[vehicle.getVehicleTypeIdentifier().getIndex()];
|
Location prevLocation = location_of_prevAct[vehicle.getVehicleTypeIdentifier().getIndex()];
|
||||||
double potentialLatestArrivalTimeAtCurrAct = latestArrTimeAtPrevAct - transportCosts.getBackwardTransportTime(activity.getLocation(), prevLocation,
|
double potentialLatestArrivalTimeAtCurrAct = latestArrTimeAtPrevAct - transportCosts.getBackwardTransportTime(activity.getLocation(), prevLocation,
|
||||||
latestArrTimeAtPrevAct, route.getDriver(), vehicle) - activityCosts.getActivityDuration(activity, latestArrTimeAtPrevAct, route.getDriver(), route.getVehicle());
|
latestArrTimeAtPrevAct, route.getDriver(), vehicle) - activityCosts.getActivityDuration(null, activity, latestArrTimeAtPrevAct, route.getDriver(), route.getVehicle());
|
||||||
double latestArrivalTime = Math.min(activity.getTheoreticalLatestOperationStartTime(), potentialLatestArrivalTimeAtCurrAct);
|
double latestArrivalTime = Math.min(activity.getTheoreticalLatestOperationStartTime(), potentialLatestArrivalTimeAtCurrAct);
|
||||||
if (latestArrivalTime < activity.getTheoreticalEarliestOperationStartTime()) {
|
if (latestArrivalTime < activity.getTheoreticalEarliestOperationStartTime()) {
|
||||||
stateManager.putTypedInternalRouteState(route, vehicle, InternalStates.SWITCH_NOT_FEASIBLE, true);
|
stateManager.putTypedInternalRouteState(route, vehicle, InternalStates.SWITCH_NOT_FEASIBLE, true);
|
||||||
|
|
|
||||||
|
|
@ -277,7 +277,7 @@ public class SolutionAnalyser {
|
||||||
sum_transport_time += transportTime;
|
sum_transport_time += transportTime;
|
||||||
prevActDeparture = activity.getEndTime();
|
prevActDeparture = activity.getEndTime();
|
||||||
//service time
|
//service time
|
||||||
sum_service_time += activityCosts.getActivityDuration(activity, activity.getArrTime(), route.getDriver(), route.getVehicle());
|
sum_service_time += activityCosts.getActivityDuration(null, activity, activity.getArrTime(), route.getDriver(), route.getVehicle());
|
||||||
|
|
||||||
stateManager.putActivityState(activity, transport_time_id, sum_transport_time);
|
stateManager.putActivityState(activity, transport_time_id, sum_transport_time);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ class AdditionalTransportationCosts implements SoftActivityConstraint {
|
||||||
double tp_time_prevAct_newAct = routingCosts.getTransportTime(prevAct.getLocation(), newAct.getLocation(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
double tp_time_prevAct_newAct = routingCosts.getTransportTime(prevAct.getLocation(), newAct.getLocation(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
||||||
|
|
||||||
double newAct_arrTime = depTimeAtPrevAct + tp_time_prevAct_newAct;
|
double newAct_arrTime = depTimeAtPrevAct + tp_time_prevAct_newAct;
|
||||||
double newAct_endTime = Math.max(newAct_arrTime, newAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(newAct,newAct_arrTime,iFacts.getNewDriver(),iFacts.getNewVehicle());
|
double newAct_endTime = Math.max(newAct_arrTime, newAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(prevAct, newAct,newAct_arrTime,iFacts.getNewDriver(),iFacts.getNewVehicle());
|
||||||
|
|
||||||
//open routes
|
//open routes
|
||||||
if (nextAct instanceof End) {
|
if (nextAct instanceof End) {
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ public class MaxTimeInVehicleConstraint implements HardActivityConstraint {
|
||||||
//************ 1. check whether insertion of new shipment satisfies own max-in-vehicle-constraint
|
//************ 1. check whether insertion of new shipment satisfies own max-in-vehicle-constraint
|
||||||
double newActArrival = prevActDepTime + transportTime.getTransportTime(prevAct.getLocation(),newAct.getLocation(),prevActDepTime,iFacts.getNewDriver(),iFacts.getNewVehicle());
|
double newActArrival = prevActDepTime + transportTime.getTransportTime(prevAct.getLocation(),newAct.getLocation(),prevActDepTime,iFacts.getNewDriver(),iFacts.getNewVehicle());
|
||||||
double newActStart = Math.max(newActArrival, newAct.getTheoreticalEarliestOperationStartTime());
|
double newActStart = Math.max(newActArrival, newAct.getTheoreticalEarliestOperationStartTime());
|
||||||
double newActDeparture = newActStart + activityCosts.getActivityDuration(newAct, newActArrival, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
double newActDeparture = newActStart + activityCosts.getActivityDuration(prevAct, newAct, newActArrival, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
||||||
double nextActArrival = newActDeparture + transportTime.getTransportTime(newAct.getLocation(),nextAct.getLocation(),newActDeparture,iFacts.getNewDriver(),iFacts.getNewVehicle());
|
double nextActArrival = newActDeparture + transportTime.getTransportTime(newAct.getLocation(),nextAct.getLocation(),newActDeparture,iFacts.getNewDriver(),iFacts.getNewVehicle());
|
||||||
double nextActStart = Math.max(nextActArrival,nextAct.getTheoreticalEarliestOperationStartTime());
|
double nextActStart = Math.max(nextActArrival,nextAct.getTheoreticalEarliestOperationStartTime());
|
||||||
if(newAct instanceof DeliveryActivity){
|
if(newAct instanceof DeliveryActivity){
|
||||||
|
|
@ -93,7 +93,7 @@ public class MaxTimeInVehicleConstraint implements HardActivityConstraint {
|
||||||
if(iFacts.getAssociatedActivities().size() == 1){
|
if(iFacts.getAssociatedActivities().size() == 1){
|
||||||
double maxTimeInVehicle = ((TourActivity.JobActivity)newAct).getJob().getMaxTimeInVehicle();
|
double maxTimeInVehicle = ((TourActivity.JobActivity)newAct).getJob().getMaxTimeInVehicle();
|
||||||
//ToDo - estimate in vehicle time of pickups here - This seems to trickier than I thought
|
//ToDo - estimate in vehicle time of pickups here - This seems to trickier than I thought
|
||||||
double nextActDeparture = nextActStart + activityCosts.getActivityDuration(nextAct, nextActArrival, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
double nextActDeparture = nextActStart + activityCosts.getActivityDuration(prevAct, nextAct, nextActArrival, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
||||||
// if(!nextAct instanceof End)
|
// if(!nextAct instanceof End)
|
||||||
double timeToEnd = 0; //newAct.end + tt(newAct,nextAct) + t@nextAct + t_to_end
|
double timeToEnd = 0; //newAct.end + tt(newAct,nextAct) + t@nextAct + t_to_end
|
||||||
if(timeToEnd > maxTimeInVehicle) return ConstraintsStatus.NOT_FULFILLED;
|
if(timeToEnd > maxTimeInVehicle) return ConstraintsStatus.NOT_FULFILLED;
|
||||||
|
|
|
||||||
|
|
@ -109,12 +109,12 @@ public class VehicleDependentTimeWindowConstraints implements HardActivityConstr
|
||||||
}
|
}
|
||||||
// log.info("check insertion of " + newAct + " between " + prevAct + " and " + nextAct + ". prevActDepTime=" + prevActDepTime);
|
// log.info("check insertion of " + newAct + " between " + prevAct + " and " + nextAct + ". prevActDepTime=" + prevActDepTime);
|
||||||
double arrTimeAtNewAct = prevActDepTime + routingCosts.getTransportTime(prevAct.getLocation(), newAct.getLocation(), prevActDepTime, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
double arrTimeAtNewAct = prevActDepTime + routingCosts.getTransportTime(prevAct.getLocation(), newAct.getLocation(), prevActDepTime, iFacts.getNewDriver(), iFacts.getNewVehicle());
|
||||||
double endTimeAtNewAct = Math.max(arrTimeAtNewAct, newAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(newAct, arrTimeAtNewAct,iFacts.getNewDriver(),iFacts.getNewVehicle());
|
double endTimeAtNewAct = Math.max(arrTimeAtNewAct, newAct.getTheoreticalEarliestOperationStartTime()) + activityCosts.getActivityDuration(prevAct, newAct, arrTimeAtNewAct,iFacts.getNewDriver(),iFacts.getNewVehicle());
|
||||||
double latestArrTimeAtNewAct =
|
double latestArrTimeAtNewAct =
|
||||||
Math.min(newAct.getTheoreticalLatestOperationStartTime(),
|
Math.min(newAct.getTheoreticalLatestOperationStartTime(),
|
||||||
latestArrTimeAtNextAct -
|
latestArrTimeAtNextAct -
|
||||||
routingCosts.getBackwardTransportTime(newAct.getLocation(), nextActLocation, latestArrTimeAtNextAct, iFacts.getNewDriver(), iFacts.getNewVehicle())
|
routingCosts.getBackwardTransportTime(newAct.getLocation(), nextActLocation, latestArrTimeAtNextAct, iFacts.getNewDriver(), iFacts.getNewVehicle())
|
||||||
- activityCosts.getActivityDuration(newAct, arrTimeAtNewAct, iFacts.getNewDriver(), iFacts.getNewVehicle())
|
- activityCosts.getActivityDuration(prevAct, newAct, arrTimeAtNewAct, iFacts.getNewDriver(), iFacts.getNewVehicle())
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -57,8 +57,8 @@ public interface VehicleRoutingActivityCosts {
|
||||||
* @param vehicle if earliestStartTime > latestStartTime activity operations cannot be conducted within the given time-window.
|
* @param vehicle if earliestStartTime > latestStartTime activity operations cannot be conducted within the given time-window.
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public double getActivityCost(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle);
|
public double getActivityCost(TourActivity prevAct, TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle);
|
||||||
|
|
||||||
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle);
|
public double getActivityDuration(TourActivity prevAct, TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,17 +28,17 @@ import com.graphhopper.jsprit.core.problem.vehicle.Vehicle;
|
||||||
public class WaitingTimeCosts implements VehicleRoutingActivityCosts {
|
public class WaitingTimeCosts implements VehicleRoutingActivityCosts {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getActivityCost(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
public double getActivityCost(TourActivity prevAct, TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
||||||
if (vehicle != null) {
|
if (vehicle != null) {
|
||||||
double waiting = vehicle.getType().getVehicleCostParams().perWaitingTimeUnit * Math.max(0., tourAct.getTheoreticalEarliestOperationStartTime() - arrivalTime);
|
double waiting = vehicle.getType().getVehicleCostParams().perWaitingTimeUnit * Math.max(0., tourAct.getTheoreticalEarliestOperationStartTime() - arrivalTime);
|
||||||
double servicing = vehicle.getType().getVehicleCostParams().perServiceTimeUnit * getActivityDuration(tourAct,arrivalTime,driver,vehicle);
|
double servicing = vehicle.getType().getVehicleCostParams().perServiceTimeUnit * getActivityDuration(prevAct, tourAct, arrivalTime,driver,vehicle);
|
||||||
return waiting + servicing;
|
return waiting + servicing;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
public double getActivityDuration(TourActivity prevAct, TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
||||||
return tourAct.getOperationTime();
|
return tourAct.getOperationTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -171,7 +171,7 @@ public class SolutionPrinter {
|
||||||
}
|
}
|
||||||
double c = problem.getTransportCosts().getTransportCost(prevAct.getLocation(), act.getLocation(), prevAct.getEndTime(), route.getDriver(),
|
double c = problem.getTransportCosts().getTransportCost(prevAct.getLocation(), act.getLocation(), prevAct.getEndTime(), route.getDriver(),
|
||||||
route.getVehicle());
|
route.getVehicle());
|
||||||
c += problem.getActivityCosts().getActivityCost(act, act.getArrTime(), route.getDriver(), route.getVehicle());
|
c += problem.getActivityCosts().getActivityCost(prevAct, act, act.getArrTime(), route.getDriver(), route.getVehicle());
|
||||||
costs += c;
|
costs += c;
|
||||||
out.format(leftAlgin, routeNu, getVehicleString(route), act.getName(), jobId, Math.round(act.getArrTime()),
|
out.format(leftAlgin, routeNu, getVehicleString(route), act.getName(), jobId, Math.round(act.getArrTime()),
|
||||||
Math.round(act.getEndTime()), Math.round(costs));
|
Math.round(act.getEndTime()), Math.round(costs));
|
||||||
|
|
@ -179,7 +179,7 @@ public class SolutionPrinter {
|
||||||
}
|
}
|
||||||
double c = problem.getTransportCosts().getTransportCost(prevAct.getLocation(), route.getEnd().getLocation(), prevAct.getEndTime(),
|
double c = problem.getTransportCosts().getTransportCost(prevAct.getLocation(), route.getEnd().getLocation(), prevAct.getEndTime(),
|
||||||
route.getDriver(), route.getVehicle());
|
route.getDriver(), route.getVehicle());
|
||||||
c += problem.getActivityCosts().getActivityCost(route.getEnd(), route.getEnd().getArrTime(), route.getDriver(), route.getVehicle());
|
c += problem.getActivityCosts().getActivityCost(prevAct, route.getEnd(), route.getEnd().getArrTime(), route.getDriver(), route.getVehicle());
|
||||||
costs += c;
|
costs += c;
|
||||||
out.format(leftAlgin, routeNu, getVehicleString(route), route.getEnd().getName(), "-", Math.round(route.getEnd().getArrTime()), "undef",
|
out.format(leftAlgin, routeNu, getVehicleString(route), route.getEnd().getName(), "-", Math.round(route.getEnd().getArrTime()), "undef",
|
||||||
Math.round(costs));
|
Math.round(costs));
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ public class ActivityTimeTracker implements ActivityVisitor {
|
||||||
operationStartTime = actArrTime;
|
operationStartTime = actArrTime;
|
||||||
} else operationStartTime = actArrTime;
|
} else operationStartTime = actArrTime;
|
||||||
|
|
||||||
double operationEndTime = operationStartTime + activityCosts.getActivityDuration(activity,actArrTime,route.getDriver(),route.getVehicle());
|
double operationEndTime = operationStartTime + activityCosts.getActivityDuration(prevAct, activity,actArrTime,route.getDriver(),route.getVehicle());
|
||||||
|
|
||||||
actEndTime = operationEndTime;
|
actEndTime = operationEndTime;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,12 +35,12 @@ public class ExampleActivityCostFunction implements VehicleRoutingActivityCosts
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getActivityCost(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
public double getActivityCost(TourActivity prevAct, TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
||||||
if (arrivalTime == Time.TOURSTART || arrivalTime == Time.UNDEFINED) {
|
if (arrivalTime == Time.TOURSTART || arrivalTime == Time.UNDEFINED) {
|
||||||
return 0.0;
|
return 0.0;
|
||||||
} else {
|
} else {
|
||||||
//waiting + act-time
|
//waiting + act-time
|
||||||
double endTime = Math.max(arrivalTime, tourAct.getTheoreticalEarliestOperationStartTime()) + getActivityDuration(tourAct,arrivalTime,driver,vehicle);
|
double endTime = Math.max(arrivalTime, tourAct.getTheoreticalEarliestOperationStartTime()) + getActivityDuration(prevAct, tourAct,arrivalTime,driver,vehicle);
|
||||||
double timeAtAct = endTime - arrivalTime;
|
double timeAtAct = endTime - arrivalTime;
|
||||||
|
|
||||||
double totalCost = timeAtAct * parameter_timeAtAct;
|
double totalCost = timeAtAct * parameter_timeAtAct;
|
||||||
|
|
@ -58,7 +58,7 @@ public class ExampleActivityCostFunction implements VehicleRoutingActivityCosts
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
public double getActivityDuration(TourActivity prevAct, TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
||||||
return tourAct.getOperationTime();
|
return tourAct.getOperationTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,6 @@ import com.graphhopper.jsprit.core.util.Solutions;
|
||||||
import junit.framework.Assert;
|
import junit.framework.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.experimental.categories.Category;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by schroeder on 22/07/15.
|
* Created by schroeder on 22/07/15.
|
||||||
|
|
@ -59,12 +58,12 @@ public class VariableDepartureAndWaitingTime_IT {
|
||||||
activityCosts = new VehicleRoutingActivityCosts() {
|
activityCosts = new VehicleRoutingActivityCosts() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getActivityCost(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
public double getActivityCost(TourActivity prevAct, TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
||||||
return vehicle.getType().getVehicleCostParams().perWaitingTimeUnit * Math.max(0, tourAct.getTheoreticalEarliestOperationStartTime() - arrivalTime);
|
return vehicle.getType().getVehicleCostParams().perWaitingTimeUnit * Math.max(0, tourAct.getTheoreticalEarliestOperationStartTime() - arrivalTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
public double getActivityDuration(TourActivity prevAct, TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
||||||
return tourAct.getOperationTime();
|
return tourAct.getOperationTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,12 +60,12 @@ public class ServiceInsertionAndLoadConstraintsTest {
|
||||||
VehicleRoutingActivityCosts activityCosts = new VehicleRoutingActivityCosts() {
|
VehicleRoutingActivityCosts activityCosts = new VehicleRoutingActivityCosts() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getActivityCost(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
public double getActivityCost(TourActivity prevAct, TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
public double getActivityDuration(TourActivity prevAct, TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
||||||
return tourAct.getOperationTime();
|
return tourAct.getOperationTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -68,12 +68,12 @@ public class ShipmentInsertionCalculatorTest {
|
||||||
VehicleRoutingActivityCosts activityCosts = new VehicleRoutingActivityCosts() {
|
VehicleRoutingActivityCosts activityCosts = new VehicleRoutingActivityCosts() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getActivityCost(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
public double getActivityCost(TourActivity prevAct, TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
public double getActivityDuration(TourActivity prevAct, TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
||||||
return tourAct.getOperationTime();
|
return tourAct.getOperationTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -68,12 +68,12 @@ public class TestRouteLevelActivityInsertionCostEstimator {
|
||||||
activityCosts = new VehicleRoutingActivityCosts() {
|
activityCosts = new VehicleRoutingActivityCosts() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getActivityCost(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
public double getActivityCost(TourActivity prevAct, TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
||||||
return Math.max(0., arrivalTime - tourAct.getTheoreticalLatestOperationStartTime());
|
return Math.max(0., arrivalTime - tourAct.getTheoreticalLatestOperationStartTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
public double getActivityDuration(TourActivity prevAct, TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
||||||
return tourAct.getOperationTime();
|
return tourAct.getOperationTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -78,12 +78,12 @@ public class TestRouteLevelServiceInsertionCostEstimator {
|
||||||
activityCosts = new VehicleRoutingActivityCosts() {
|
activityCosts = new VehicleRoutingActivityCosts() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getActivityCost(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
public double getActivityCost(TourActivity prevAct, TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
||||||
return Math.max(0., arrivalTime - tourAct.getTheoreticalLatestOperationStartTime());
|
return Math.max(0., arrivalTime - tourAct.getTheoreticalLatestOperationStartTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
public double getActivityDuration(TourActivity prevAct, TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
||||||
return tourAct.getOperationTime();
|
return tourAct.getOperationTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -259,19 +259,19 @@ public class VehicleRoutingProblemTest {
|
||||||
builder.setActivityCosts(new VehicleRoutingActivityCosts() {
|
builder.setActivityCosts(new VehicleRoutingActivityCosts() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getActivityCost(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
public double getActivityCost(TourActivity prevAct, TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
||||||
return 4.0;
|
return 4.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
public double getActivityDuration(TourActivity prevAct, TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
|
||||||
return tourAct.getOperationTime();
|
return tourAct.getOperationTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
VehicleRoutingProblem problem = builder.build();
|
VehicleRoutingProblem problem = builder.build();
|
||||||
assertEquals(4.0, problem.getActivityCosts().getActivityCost(null, 0.0, null, null), 0.01);
|
assertEquals(4.0, problem.getActivityCosts().getActivityCost(null,null, 0.0, null, null), 0.01);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue