@Override public void ruinEnds(Collection<VehicleRoute> routes, Collection<Job> unassignedJobs) { for (VehicleRoute r : routes) { Break aBreak = r.getVehicle().getBreak(); if (aBreak != null) { r.getTourActivities().removeJob(aBreak); logger.trace("ruin: {}", aBreak.getId()); unassignedJobs.add(aBreak); } } }
@Override public void ruinEnds(Collection<VehicleRoute> routes, Collection<Job> unassignedJobs) { for(VehicleRoute route : routes){ Break aBreak = route.getVehicle().getBreak(); boolean removed = route.getTourActivities().removeJob(aBreak); if(removed) logger.trace("ruin: {}", aBreak.getId()); } List<Break> breaks = new ArrayList<Break>(); for (Job j : unassignedJobs) { if (j instanceof Break) { breaks.add((Break) j); } } for(Break b : breaks){ unassignedJobs.remove(b); } }
protected boolean removeJob(Job job, VehicleRoute route) { if (jobIsInitial(job)) return false; boolean removed = route.getTourActivities().removeJob(job); if (removed) { logger.trace("ruin: {}", job.getId()); ruinListeners.removed(job, route); return true; } return false; } }
@Override public void inform(Event event) { if (event instanceof SwitchVehicle) { SwitchVehicle switchVehicle = (SwitchVehicle) event; if (vehiclesDifferent((SwitchVehicle) event)) { logger.trace("switch vehicle ({} to {})",((SwitchVehicle) event).getRoute().getVehicle().getId(),((SwitchVehicle) event).getVehicle().getId()); Break aBreak = ((SwitchVehicle) event).getRoute().getVehicle().getBreak(); if (aBreak != null) { boolean removed = ((SwitchVehicle) event).getRoute().getTourActivities().removeJob(aBreak); if (removed) logger.trace("remove {}",aBreak.getId()); } } switchVehicle.getRoute().setVehicleAndDepartureTime(switchVehicle.getVehicle(), ((SwitchVehicle) event).getDepartureTime()); } }
@Override public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) { Break aBreak = inRoute.getVehicle().getBreak(); if(aBreak != null){ boolean removed = inRoute.getTourActivities().removeJob(aBreak); if(removed){ logger.trace("ruin: {}", aBreak.getId()); stateManager.removed(aBreak,inRoute); stateManager.reCalculateStates(inRoute); } if(inRoute.getEnd().getArrTime() > aBreak.getTimeWindow().getEnd()){ InsertionData iData = breakInsertionCalculator.getInsertionData(inRoute, aBreak, inRoute.getVehicle(), inRoute.getDepartureTime(), inRoute.getDriver(), Double.MAX_VALUE); if(!(iData instanceof InsertionData.NoInsertionFound)){ logger.trace("insert: [jobId={}]{}", aBreak.getId(), iData); for(Event e : iData.getEvents()){ eventListeners.inform(e); } stateManager.informJobInserted(aBreak,inRoute,0,0); } } } }
@Override public void inform(Event event) { if (event instanceof InsertBreak) { InsertBreak insertActivity = (InsertBreak) event; if (!insertActivity.getNewVehicle().isReturnToDepot()) { if (insertActivity.getIndex() >= insertActivity.getVehicleRoute().getActivities().size()) { insertActivity.getVehicleRoute().getEnd().setLocation(insertActivity.getActivity().getLocation()); } } VehicleRoute vehicleRoute = ((InsertBreak) event).getVehicleRoute(); if (!vehicleRoute.isEmpty()) { if (vehicleRoute.getVehicle() != ((InsertBreak) event).getNewVehicle()) { if (vehicleRoute.getVehicle().getBreak() != null) { boolean removed = vehicleRoute.getTourActivities().removeJob(vehicleRoute.getVehicle().getBreak()); if (removed) logger.trace("remove old break " + vehicleRoute.getVehicle().getBreak()); } } } insertActivity.getVehicleRoute().getTourActivities().addActivity(insertActivity.getIndex(), ((InsertBreak) event).getActivity()); } }
@Override public void ruinEnds(Collection<VehicleRoute> routes, Collection<Job> unassignedJobs) { for(VehicleRoute route : routes){ Break aBreak = route.getVehicle().getBreak(); boolean removed = route.getTourActivities().removeJob(aBreak); if(removed) logger.trace("ruin: {}", aBreak.getId()); } List<Break> breaks = new ArrayList<Break>(); for (Job j : unassignedJobs) { if (j instanceof Break) { breaks.add((Break) j); } } for(Break b : breaks){ unassignedJobs.remove(b); } }
@Override public void ruinEnds(Collection<VehicleRoute> routes, Collection<Job> unassignedJobs) { for (VehicleRoute r : routes) { Break aBreak = r.getVehicle().getBreak(); if (aBreak != null) { r.getTourActivities().removeJob(aBreak); logger.trace("ruin: {}", aBreak.getId()); unassignedJobs.add(aBreak); } } }
protected boolean removeJob(Job job, VehicleRoute route) { if (jobIsInitial(job)) return false; boolean removed = route.getTourActivities().removeJob(job); if (removed) { logger.trace("ruin: {}", job.getId()); ruinListeners.removed(job, route); return true; } return false; } }
@Override public void inform(Event event) { if (event instanceof SwitchVehicle) { SwitchVehicle switchVehicle = (SwitchVehicle) event; if (vehiclesDifferent((SwitchVehicle) event)) { logger.trace("switch vehicle ({} to {})",((SwitchVehicle) event).getRoute().getVehicle().getId(),((SwitchVehicle) event).getVehicle().getId()); Break aBreak = ((SwitchVehicle) event).getRoute().getVehicle().getBreak(); if (aBreak != null) { boolean removed = ((SwitchVehicle) event).getRoute().getTourActivities().removeJob(aBreak); if (removed) logger.trace("remove {}",aBreak.getId()); } } switchVehicle.getRoute().setVehicleAndDepartureTime(switchVehicle.getVehicle(), ((SwitchVehicle) event).getDepartureTime()); } }
@Override public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) { Break aBreak = inRoute.getVehicle().getBreak(); if(aBreak != null){ boolean removed = inRoute.getTourActivities().removeJob(aBreak); if(removed){ logger.trace("ruin: {}", aBreak.getId()); stateManager.removed(aBreak,inRoute); stateManager.reCalculateStates(inRoute); } if(inRoute.getEnd().getArrTime() > aBreak.getTimeWindow().getEnd()){ InsertionData iData = breakInsertionCalculator.getInsertionData(inRoute, aBreak, inRoute.getVehicle(), inRoute.getDepartureTime(), inRoute.getDriver(), Double.MAX_VALUE); if(!(iData instanceof InsertionData.NoInsertionFound)){ logger.trace("insert: [jobId={}]{}", aBreak.getId(), iData); for(Event e : iData.getEvents()){ eventListeners.inform(e); } stateManager.informJobInserted(aBreak,inRoute,0,0); } } } }
@Override public void inform(Event event) { if (event instanceof InsertBreak) { InsertBreak insertActivity = (InsertBreak) event; if (!insertActivity.getNewVehicle().isReturnToDepot()) { if (insertActivity.getIndex() >= insertActivity.getVehicleRoute().getActivities().size()) { insertActivity.getVehicleRoute().getEnd().setLocation(insertActivity.getActivity().getLocation()); } } VehicleRoute vehicleRoute = ((InsertBreak) event).getVehicleRoute(); if (!vehicleRoute.isEmpty()) { if (vehicleRoute.getVehicle() != ((InsertBreak) event).getNewVehicle()) { if (vehicleRoute.getVehicle().getBreak() != null) { boolean removed = vehicleRoute.getTourActivities().removeJob(vehicleRoute.getVehicle().getBreak()); if (removed) logger.trace("remove old break " + vehicleRoute.getVehicle().getBreak()); } } } insertActivity.getVehicleRoute().getTourActivities().addActivity(insertActivity.getIndex(), ((InsertBreak) event).getActivity()); } }