@Override
 public InsertionData getInsertionData(
     final VehicleRoute currentRoute,
     final Job jobToInsert,
     final Vehicle newVehicle,
     double newVehicleDepartureTime,
     final Driver newDriver,
     final double bestKnownPrice) {
   double fixcost_contribution = getFixCostContribution(currentRoute, jobToInsert, newVehicle);
   if (fixcost_contribution > bestKnownPrice) {
     return InsertionData.createEmptyInsertionData();
   }
   InsertionData iData =
       standardServiceInsertion.getInsertionData(
           currentRoute,
           jobToInsert,
           newVehicle,
           newVehicleDepartureTime,
           newDriver,
           bestKnownPrice);
   if (iData instanceof NoInsertionFound) {
     return iData;
   }
   double totalInsertionCost = iData.getInsertionCost() + fixcost_contribution;
   InsertionData insertionData =
       new InsertionData(
           totalInsertionCost,
           iData.getPickupInsertionIndex(),
           iData.getDeliveryInsertionIndex(),
           newVehicle,
           newDriver);
   insertionData.setVehicleDepartureTime(newVehicleDepartureTime);
   insertionData.getEvents().addAll(iData.getEvents());
   return insertionData;
 }
Example #2
0
 @Override
 public void handleJobInsertion(Job job, InsertionData iData, VehicleRoute route) {
   if (job instanceof Shipment) {
     List<AbstractActivity> acts = vehicleRoutingProblem.copyAndGetActivities(job);
     TourActivity pickupShipment = acts.get(0);
     TourActivity deliverShipment = acts.get(1);
     route.setVehicleAndDepartureTime(
         iData.getSelectedVehicle(), iData.getVehicleDepartureTime());
     if (!iData.getSelectedVehicle().isReturnToDepot()) {
       if (iData.getDeliveryInsertionIndex() >= route.getActivities().size()) {
         setEndLocation(route, (Shipment) job);
       }
     }
     route.getTourActivities().addActivity(iData.getDeliveryInsertionIndex(), deliverShipment);
     route.getTourActivities().addActivity(iData.getPickupInsertionIndex(), pickupShipment);
   } else delegator.handleJobInsertion(job, iData, route);
 }