@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; }
@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); }