/** * Constructs a new {@link GlobalStateObject} with only the selected vehicle. * The current instance remains unchanged. * @param index The index of the vehicle to select. * @return A new object containing only the selected vehicle, all other values * are copied from this instance. */ public GlobalStateObject withSingleVehicle(int index) { checkArgument(index >= 0 && index < getVehicles().size(), "Invalid vehicle index (%s) must be >= 0 and < %s.", index, getVehicles().size()); return create(getAvailableParcels(), ImmutableList.of(getVehicles().get(index)), getTime(), getTimeUnit(), getSpeedUnit(), getDistUnit(), getRoadModelSnapshot()); }
static double decomposedCost(GlobalStateObject gso, ImmutableList<ImmutableList<Parcel>> routes, ObjectiveFunction objFunc) { double sum = 0d; for (int i = 0; i < gso.getVehicles().size(); i++) { sum += objFunc.computeCost(Solvers.computeStats(gso.withSingleVehicle(i), ImmutableList.of(routes.get(i)))); } return sum; }
static int[] toRemainingServiceTimes(GlobalStateObject state, Unit<Duration> outputTimeUnit) { final UnmodifiableIterator<VehicleStateObject> iterator = state .getVehicles() .iterator(); final int[] remainingServiceTimes = new int[state.getVehicles().size()]; for (int i = 0; i < state.getVehicles().size(); i++) { remainingServiceTimes[i] = DoubleMath.roundToInt( Measure.valueOf(iterator.next().getRemainingServiceTime(), state.getTimeUnit()) .doubleValue(outputTimeUnit), RoundingMode.CEILING); } return remainingServiceTimes; }
if (last == null || !isComputing() || last.getTime() > snapshot.getTime()) { return; for (int i = 0; i < snapshot.getVehicles().size(); i++) { if (snapshot.getVehicles().get(i).getDestination().isPresent() && !last.getVehicles().get(i).getDestination() .equals(snapshot.getVehicles().get(i).getDestination())) { significantChangeDetected = true; break;
routes.size() == state.getVehicles().size(), "There must be exactly one route for every vehicle, found %s routes " + "with %s vehicles.", routes.size(), state.getVehicles().size()); final Set<Parcel> inputParcels = newHashSet(state.getAvailableParcels()); final Set<Parcel> outputParcels = newHashSet(); for (int i = 0; i < routes.size(); i++) { final Set<Parcel> routeSet = ImmutableSet.copyOf(route); checkArgument( routeSet.containsAll(state.getVehicles().get(i).getContents()), "The route of vehicle %s doesn't visit all parcels in its cargo.", i); inputParcels.addAll(state.getVehicles().get(i).getContents()); if (state.getVehicles().get(i).getDestination().isPresent()) { checkArgument( state.getVehicles().get(i).getDestination().asSet() .contains(route.get(0)), "The route of vehicle %s should start with its current destination:" + " %s.", i, state.getVehicles().get(i).getDestination()); "Found a parcel which is already in another route: %s.", p); final int frequency = Collections.frequency(route, p); if (state.getAvailableParcels().contains(p)) { } else { checkArgument(
final VehicleStateObject vso = state.getVehicles().get(vehicleIndex); checkArgument(r.isPresent() || vso.getRoute().isPresent(), "Vehicle routes must either be specified as an argument or must be part" + " of the state object."); final RoadModelSnapshot snapshot = state.getRoadModelSnapshot(); final ImmutableList.Builder<Long> truckArrivalTimesBuilder = ImmutableList.builder(); truckArrivalTimesBuilder.add(state.getTime()); long time = state.getTime(); Point vehicleLocation = vso.getLocation(); final Measure<Double, Velocity> maxSpeed = Measure.valueOf(vso.getDto().getSpeed(), state.getSpeedUnit()); snapshot.getPathTo(conn.from(), conn.to(), state.getTimeUnit(), maxSpeed, heuristic).getTravelTime() * connectionPercentage; time += exitConnTT; : cur.getPickupLocation(); final RoadPath hp = snapshot.getPathTo(vehicleLocation, nextLoc, state.getTimeUnit(), maxSpeed, heuristic); final Measure<Double, Length> distance = state.getTimeUnit(), maxSpeed, heuristic); final Measure<Double, Length> distance =
checkArgument(state.getTime() >= 0, "Time must be >= 0, is %s.", state.getTime()); checkArgument(!state.getVehicles().isEmpty(), "At least one vehicle must be present."); final boolean routeIsPresent = state.getVehicles().get(0).getRoute() .isPresent(); final Set<Parcel> allParcels = newHashSet(); for (int i = 0; i < state.getVehicles().size(); i++) { final VehicleStateObject vs = state.getVehicles().get(i); checkArgument( vs.getRoute().isPresent() == routeIsPresent, for (int i = 0; i < state.getVehicles().size(); i++) { final VehicleStateObject vs = state.getVehicles().get(i); vs.getRemainingServiceTime()); final Set<Parcel> intersection = Sets.intersection( state.getAvailableParcels(), vs.getContents()); checkArgument( intersection.isEmpty(), final boolean isAvailable = state.getAvailableParcels() .contains(vs.getDestination().get()); final boolean isInCargo = vs.getContents() + "%s, vehicle: %s (out of %s), remaining service time: %s.", isAvailable, isInCargo, vs.getDestination(), i, state.getVehicles().size(),
@Nullable static SolutionObject[] toCurrentSolutions(GlobalStateObject state, Map<Parcel, ParcelIndexObj> mapping, int[][] travelTime, int[] releaseDates, int[] dueDates, int[] serviceTimes, int[][] vehicleTravelTimes, int[] remainingServiceTimes) { final SolutionObject[] sols = new SolutionObject[state.getVehicles() .size()]; for (int i = 0; i < state.getVehicles().size(); i++) { sols[i] = convertRouteToSolutionObject(state, state.getVehicles().get(i), mapping, travelTime, releaseDates, dueDates, serviceTimes, vehicleTravelTimes[i], remainingServiceTimes[i]); } return sols; }
public GlobalStateObject buildUnsafe() { checkState(snapshot != null, "Snapshot may not be null."); return GlobalStateObject.create( ImmutableSet.copyOf(availableParcels), ImmutableList.copyOf(vehicles), time, timeUnit, speedUnit, distUnit, snapshot); }
static int[][] toVehicleTravelTimes(GlobalStateObject state, ArraysObject sva, Unit<Duration> outputTimeUnit) { final int v = state.getVehicles().size(); final int n = sva.travelTime.length; .getVehicles() .iterator(); final Measure<Double, Velocity> speed = Measure.valueOf( cur.getDto().getSpeed(), state.getSpeedUnit()); Point.distance(cur.getLocation(), sva.location2index.get(index)), state.getDistUnit()), outputTimeUnit); Measure.valueOf( Point.distance(cur.getLocation(), sva.location2index.get(j)), state.getDistUnit()), outputTimeUnit);
/** * Retrieves all {@link Parcel}s. * @param state The {@link GlobalStateObject} that is used for retrieving the * parcels. * @return All parcels. */ public static ImmutableSet<Parcel> allParcels(GlobalStateObject state) { return ImmutableSet.<Parcel>builder() .addAll(state.getAvailableParcels()) .addAll(assignedParcels(state)) .build(); }
@Override public void run() { LOGGER.trace( "calling RealtimeSolver.receiveSnapshot(..) sim time: {}", state.getTime()); solver.receiveSnapshot(state); } });
.build(); final GlobalStateObject state = GlobalStateObject.create(availableParcels, vehicles, 0L, SI.MILLI(SI.SECOND), NonSI.KILOMETERS_PER_HOUR, SI.KILOMETER, ss); state.withSingleVehicle(0), ImmutableList.of(routes.get(0)))); final double cost1 = objFunc.computeCost(Solvers.computeStats( state.withSingleVehicle(1), ImmutableList.of(routes.get(1)))); assertEquals(cost, cost0 + cost1, 0.001);
static ImmutableList<Double> decomposedCost(GlobalStateObject state, ImmutableList<ImmutableList<Parcel>> schedule, ObjectiveFunction objFunc) { final ImmutableList.Builder<Double> builder = ImmutableList.builder(); for (int i = 0; i < schedule.size(); i++) { builder.add(objFunc.computeCost(Solvers.computeStats( state.withSingleVehicle(i), ImmutableList.of(schedule.get(i))))); } return builder.build(); }
@Override public ImmutableList<ImmutableList<Parcel>> solve(GlobalStateObject state) { checkArgument( state.getVehicles().size() == 1, "This solver can only deal with the single vehicle problem, found %s " + "vehicles.", state.getVehicles().size()); final VehicleStateObject v = state.getVehicles().iterator().next(); checkArgument( v.getRemainingServiceTime() == 0, final int numLocations = 2 + state.getAvailableParcels().size() * 2 + inCargo.size(); } else if (state.getAvailableParcels().size() + inCargo.size() == 1) { if (!state.getAvailableParcels().isEmpty()) { final Parcel dto = state.getAvailableParcels().iterator().next(); return ImmutableList.of(ImmutableList.of(dto, dto));
static ImmutableList<ImmutableList<Parcel>> createSchedule( GlobalStateObject state) { final ImmutableList.Builder<ImmutableList<Parcel>> b = ImmutableList .builder(); for (final VehicleStateObject vso : state.getVehicles()) { if (vso.getRoute().isPresent()) { b.add(vso.getRoute().get()); } else { b.add(ImmutableList.<Parcel>of()); } } return b.build(); }
vbuilder.build(); GlobalStateObject gso = GlobalStateObject.create(availableParcelsKeys, vehicleMap.keySet().asList(), time.getValue().longValue(), time.getUnit(), rm.getSpeedUnit(), rm.getDistanceUnit(), snapshot);
if (!pdpModel.get().getParcelState(ap).isPickedUp() && !pdpModel.get().getParcelState(ap).isTransitionState() && !state.getVehicles().get(0).getDestination().asSet() .contains(ap) && !ap.equals(lastReceivedParcel)) { && state.getTime() - auct.getLastUnsuccessTime() <= reauctionCooldownPeriod) { LOGGER.trace("Not reauctioning, was unsuccessful too recently"); baseline - lowestCost); final DoubleBid initialBid = DoubleBid.create(state.getTime(), decorator, toSwap, bidValue); auct.auctionParcel(decorator, state.getTime(), initialBid, new Listener() { @Override
/** * Retrieves all {@link Parcel}s that are not assigned to any vehicle. * @param state The {@link GlobalStateObject} that is used for retrieving the * unassigned parcels. * @return All unassigned parcels. */ public static ImmutableSet<Parcel> unassignedParcels( GlobalStateObject state) { final Set<Parcel> set = newLinkedHashSet(state.getAvailableParcels()); set.removeAll(assignedParcels(state)); return ImmutableSet.copyOf(set); }
final SolutionObject sol = sols[j]; final long[] arraysArrivalTimes = incrArr(sol.arrivalTimes, solverInput.getTime()); final long[] arrivalTimes = Longs.toArray(stats.arrivalTimes.get(j)); assertArrayEquals(arraysArrivalTimes, arrivalTimes);