/** * Returns an unmodifiable list of activities on this route (without start/end). * * @return list of tourActivities */ public List<TourActivity> getActivities() { return Collections.unmodifiableList(tourActivities.getActivities()); }
@Override public String toString() { return "[start=" + start + "][end=" + end + "][departureTime=" + start.getEndTime() + "][vehicle=" + vehicle + "][driver=" + driver + "][nuOfActs=" + tourActivities.getActivities().size() + "]"; }
private List<TourActivity> getForwardLookingPath(VehicleRoute route, int actIndex) { List<TourActivity> forwardLookingPath = new ArrayList<TourActivity>(); int nuOfActsInPath = 0; int index = actIndex + 1; while (index < route.getTourActivities().getActivities().size() && nuOfActsInPath < nuOfActivities2LookForward) { forwardLookingPath.add(route.getTourActivities().getActivities().get(index)); index++; nuOfActsInPath++; } if (nuOfActsInPath < nuOfActivities2LookForward) { forwardLookingPath.add(route.getEnd()); } return forwardLookingPath; }
private TourActivities(TourActivities tour2copy) { for (TourActivity tourAct : tour2copy.getActivities()) { TourActivity newAct = tourAct.duplicate(); this.tourActivities.add(newAct); addJob(newAct); } }
/** * Builds the route. * * @return {@link VehicleRoute} * @throws IllegalArgumentException if there are still shipments that have been picked up though but not delivery. */ public VehicleRoute build() { if (!openShipments.isEmpty()) { throw new IllegalArgumentException("there are still shipments that have not been delivered yet."); } if (!vehicle.isReturnToDepot()) { if (!tourActivities.isEmpty()) { end.setLocation(tourActivities.getActivities().get(tourActivities.getActivities().size() - 1).getLocation()); } } return new VehicleRoute(this); }
@Override public void visit(VehicleRoute route) { if (visitors.isEmpty()) return; begin(route); for (TourActivity act : route.getTourActivities().getActivities()) { visit(act); } end(route); }
@Override public double getCosts(JobInsertionContext iFacts, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct) { List<TourActivity> path = new ArrayList<TourActivity>(); path.add(prevAct); path.add(newAct); path.add(nextAct); int actIndex; if (prevAct instanceof Start) actIndex = 0; else actIndex = iFacts.getRoute().getTourActivities().getActivities().indexOf(nextAct); if (nuOfActivities2LookForward > 0 && !(nextAct instanceof End)) { path.addAll(getForwardLookingPath(iFacts.getRoute(), actIndex)); } /* * calculates the path costs with new vehicle, c(forwardPath,newVehicle). */ double forwardPathCost_newVehicle = auxilliaryPathCostCalculator.costOfPath(path, depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); return forwardPathCost_newVehicle - (actCostsOld(iFacts.getRoute(), path.get(path.size() - 1)) - actCostsOld(iFacts.getRoute(), prevAct)); }
@Override public void handleJobInsertion(Job job, InsertionData iData, VehicleRoute route) { if (job instanceof Service) { route.setVehicleAndDepartureTime(iData.getSelectedVehicle(), iData.getVehicleDepartureTime()); if (!iData.getSelectedVehicle().isReturnToDepot()) { if (iData.getDeliveryInsertionIndex() >= route.getTourActivities().getActivities().size()) { setEndLocation(route, (Service) job); } } TourActivity activity = vehicleRoutingProblem.copyAndGetActivities(job).get(0); route.getTourActivities().addActivity(iData.getDeliveryInsertionIndex(), activity); } else delegator.handleJobInsertion(job, iData, route); }
PriorityQueue<InsertionData> bestInsertionsQueue = new PriorityQueue<InsertionData>(Math.max(2, currentRoute.getTourActivities().getActivities().size()), getComparator()); for (TourActivity nextAct : tour.getActivities()) { ConstraintsStatus hardActivityConstraintsStatus = hardActivityLevelConstraint.fulfilled(insertionContext, prevAct, serviceAct2Insert, nextAct, prevActDepTime_newVehicle); if (hardActivityConstraintsStatus.equals(ConstraintsStatus.FULFILLED)) { wholeTour.addAll(currentRoute.getTourActivities().getActivities()); wholeTour.add(end); wholeTour.add(data.getDeliveryInsertionIndex() + 1, serviceAct2Insert);
/** * Returns an unmodifiable list of activities on this route (without start/end). * * @return list of tourActivities */ public List<TourActivity> getActivities() { return Collections.unmodifiableList(tourActivities.getActivities()); }
private XYSeriesCollection makeSolutionSeries(VehicleRoutingProblem vrp, Collection<VehicleRoute> routes) throws NoLocationFoundException { Map<String, Coordinate> coords = makeMap(vrp.getAllLocations()); XYSeriesCollection coll = new XYSeriesCollection(); int counter = 1; for (VehicleRoute route : routes) { if (route.isEmpty()) continue; XYSeries series = new XYSeries(counter, false, true); Coordinate startCoord = getCoordinate(coords.get(route.getStart().getLocation().getId())); series.add(startCoord.getX() * scalingFactor, startCoord.getY() * scalingFactor); for (TourActivity act : route.getTourActivities().getActivities()) { Coordinate coord = getCoordinate(coords.get(act.getLocation().getId())); series.add(coord.getX() * scalingFactor, coord.getY() * scalingFactor); } Coordinate endCoord = getCoordinate(coords.get(route.getEnd().getLocation().getId())); series.add(endCoord.getX() * scalingFactor, endCoord.getY() * scalingFactor); coll.addSeries(series); counter++; } return coll; }
@Override public String toString() { return "[start=" + start + "][end=" + end + "][departureTime=" + start.getEndTime() + "][vehicle=" + vehicle + "][driver=" + driver + "][nuOfActs=" + tourActivities.getActivities().size() + "]"; }
xmlConfig.setProperty(path + "(" + routeCounter + ").start", route.getStart().getEndTime()); int actCounter = 0; for (TourActivity act : route.getTourActivities().getActivities()) { xmlConfig.setProperty(path + "(" + routeCounter + ").act(" + actCounter + ")[@type]", act.getName()); if (act instanceof TourActivity.JobActivity) {
xmlConfig.setProperty(solutionPath + "(" + counter + ").routes.route(" + routeCounter + ").start", route.getStart().getEndTime()); int actCounter = 0; for (TourActivity act : route.getTourActivities().getActivities()) { xmlConfig.setProperty(solutionPath + "(" + counter + ").routes.route(" + routeCounter + ").act(" + actCounter + ")[@type]", act.getName()); if (act instanceof TourActivity.JobActivity) {
boolean tourEnd = false; List<TourActivity> activities = currentRoute.getTourActivities().getActivities();
boolean tourEnd = false; List<TourActivity> activities = currentRoute.getTourActivities().getActivities();
private List<TourActivity> getForwardLookingPath(VehicleRoute route, int actIndex) { List<TourActivity> forwardLookingPath = new ArrayList<TourActivity>(); int nuOfActsInPath = 0; int index = actIndex + 1; while (index < route.getTourActivities().getActivities().size() && nuOfActsInPath < nuOfActivities2LookForward) { forwardLookingPath.add(route.getTourActivities().getActivities().get(index)); index++; nuOfActsInPath++; } if (nuOfActsInPath < nuOfActivities2LookForward) { forwardLookingPath.add(route.getEnd()); } return forwardLookingPath; }
private TourActivities(TourActivities tour2copy) { for (TourActivity tourAct : tour2copy.getActivities()) { TourActivity newAct = tourAct.duplicate(); this.tourActivities.add(newAct); addJob(newAct); } }
@Override public void visit(VehicleRoute route) { if (visitors.isEmpty()) return; begin(route); for (TourActivity act : route.getTourActivities().getActivities()) { visit(act); } end(route); }
@Override public void handleJobInsertion(Job job, InsertionData iData, VehicleRoute route) { if (job instanceof Service) { route.setVehicleAndDepartureTime(iData.getSelectedVehicle(), iData.getVehicleDepartureTime()); if (!iData.getSelectedVehicle().isReturnToDepot()) { if (iData.getDeliveryInsertionIndex() >= route.getTourActivities().getActivities().size()) { setEndLocation(route, (Service) job); } } TourActivity activity = vehicleRoutingProblem.copyAndGetActivities(job).get(0); route.getTourActivities().addActivity(iData.getDeliveryInsertionIndex(), activity); } else delegator.handleJobInsertion(job, iData, route); }