static int[][] toInventoriesArray(GlobalStateObject state, ArraysObject sva) { final UnmodifiableIterator<VehicleStateObject> iterator = state .getVehicles() .iterator(); final ImmutableList.Builder<ImmutableList<Integer>> invPairBuilder = ImmutableList .builder(); for (int i = 0; i < state.getVehicles().size(); i++) { final VehicleStateObject cur = iterator.next(); for (final Parcel dp : cur.getContents()) { invPairBuilder.add(ImmutableList.of(i, sva.parcel2index.get(dp).deliveryIndex)); } } final ImmutableList<ImmutableList<Integer>> inventoryPairs = invPairBuilder .build(); final int[][] inventories = new int[inventoryPairs.size()][2]; for (int i = 0; i < inventoryPairs.size(); i++) { inventories[i][0] = inventoryPairs.get(i).get(0); inventories[i][1] = inventoryPairs.get(i).get(1); } return inventories; }
static SolutionObject convertRouteToSolutionObject(GlobalStateObject state, VehicleStateObject vso, Map<Parcel, ParcelIndexObj> mapping, int[][] travelTime, int[] releaseDates, int[] dueDates, int[] serviceTimes, int[] vehicleTravelTimes, int remainingServiceTime) { final int[] route = new int[vso.getRoute().get().size() + 2]; final Set<Parcel> seen = newHashSet(); for (int i = 0; i < vso.getRoute().get().size(); i++) { final Parcel dto = vso.getRoute().get().get(i); if (vso.getContents().contains(dto) || seen.contains(dto)) { // it is in cargo route[i + 1] = mapping.get(dto).deliveryIndex; } else { checkArgument(state.getAvailableParcels().contains(dto), "This parcel should be available but is not: %s.", dto); // it is available route[i + 1] = mapping.get(dto).pickupIndex; } // TODO add error msg checkArgument(route[i + 1] > 0); seen.add(dto); } route[route.length - 1] = travelTime.length - 1; final int[] arrivalTimes = computeArrivalTimes(route, travelTime, remainingServiceTime, vehicleTravelTimes, serviceTimes, releaseDates); final int tardiness = computeRouteTardiness(route, arrivalTimes, serviceTimes, dueDates, remainingServiceTime); final int tt = computeTotalTravelTime(route, travelTime, vehicleTravelTimes); return new SolutionObject(route, arrivalTimes, tt + tardiness); }
static int[] toVehicleDestinations(GlobalStateObject state, ArraysObject sva) { final int v = state.getVehicles().size(); final UnmodifiableIterator<VehicleStateObject> iterator = state .getVehicles() .iterator(); final int[] destinations = new int[v]; for (int i = 0; i < v; i++) { final VehicleStateObject cur = iterator.next(); if (cur.getDestination().isPresent()) { final Parcel dest = cur.getDestination().get(); checkArgument(sva.parcel2index.containsKey(dest)); final boolean isInCargo = cur.getContents().contains(dest); final ParcelIndexObj pio = sva.parcel2index.get(dest); final int index = isInCargo ? pio.deliveryIndex : pio.pickupIndex; destinations[i] = index; } else { destinations[i] = 0; } checkArgument(destinations[i] >= 0, "Invalid destination.", cur.getDestination()); } return destinations; }
for (int j = 0; j < route.size(); j++) { final Parcel cur = route.get(j); final boolean inCargo = vso.getContents().contains(cur) || seen.contains(cur); seen.add(cur);
cargoBuilder.addAll(vs.getContents());
.noCurrentRoutes()); assertEquals(1, state.getAvailableParcels().size()); assertEquals(0, state.getVehicles().get(0).getContents().size()); final Solver solver = SolverValidator.wrap(new MultiVehicleSolverAdapter( new RandomMVArraysSolver(new MersenneTwister(123)), NonSI.MINUTE)); .noCurrentRoutes()); assertEquals(1, state2.getAvailableParcels().size()); assertEquals(0, state2.getVehicles().get(0).getContents().size()); .noCurrentRoutes()); assertTrue(state3.getAvailableParcels().isEmpty()); assertEquals(1, state3.getVehicles().get(0).getContents().size()); .useParcels(ImmutableSet.<Parcel>of()) .noCurrentRoutes()); assertEquals(1, state4.getVehicles().get(0).getContents().size()); assertTrue(state4.getAvailableParcels().isEmpty()); .useParcels(ImmutableSet.<Parcel>of()) .noCurrentRoutes()); assertEquals(1, state5.getVehicles().get(0).getContents().size()); assertTrue(state5.getAvailableParcels().isEmpty()); .useParcels(ImmutableSet.<Parcel>of()) .noCurrentRoutes()); assertTrue(state6.getVehicles().get(0).getContents().isEmpty()); assertTrue(state6.getAvailableParcels().isEmpty());
vs.getRemainingServiceTime()); final Set<Parcel> intersection = Sets.intersection( state.getAvailableParcels(), vs.getContents()); checkArgument( intersection.isEmpty(), intersection); final Set<Parcel> inventoryIntersection = Sets.intersection( inventoryParcels, vs.getContents()); checkArgument( inventoryIntersection.isEmpty(), + "time, found: %s.", inventoryIntersection); inventoryParcels.addAll(vs.getContents()); final boolean isAvailable = state.getAvailableParcels() .contains(vs.getDestination().get()); final boolean isInCargo = vs.getContents() .contains(vs.getDestination().get()); checkArgument(
expectedRoutes.add(HashMultiset.<Parcel>create()); final VehicleStateObject vehicle = state.getVehicles().get(i); expectedRoutes.get(i).addAll(vehicle.getContents()); if (vehicle.getDestination().isPresent() && !vehicle.getContents() .contains(vehicle.getDestination().get())) { expectedRoutes.get(i).add(vehicle.getDestination().get(), 2); undeliveredParcels.addAll(vehicle.getContents());
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()); } else { checkArgument( state.getVehicles().get(i).getContents().contains(p), "The parcel in this route is not available, which means it should" + " be in the contents of this vehicle. Parcel: %s.",
for (final Parcel p : route) { if (vso.getContents().contains(p) || !pickups.containsKey(p)) { if (multiset.count(p) == 2) { multiset.remove(p);
final Multiset<Parcel> routeContents = LinkedHashMultiset.create(route); for (final Parcel p : routeContents.elementSet()) { if (vso.getContents().contains(p)) { vso.getLocation(), vso.getConnection(), vso.getContents(), vso.getRemainingServiceTime(), vso.getDestination().orNull(),
vehicleTravelTimes[i][j] = Integer.MAX_VALUE; final boolean isInCargo = cur.getContents().contains(dest); final ParcelIndexObj pio = sva.parcel2index.get(dest); final int index = isInCargo ? pio.deliveryIndex : pio.pickupIndex;
.noCurrentRoutes()); assertEquals(2, state.getVehicles().size()); assertTrue(state.getVehicles().get(0).getContents().isEmpty()); assertFalse(state.getVehicles().get(0).getDestination().isPresent()); assertEquals(3, state.getAvailableParcels().size()); state = s.convert(SolveArgs.create().useAllParcels().noCurrentRoutes()); assertEquals(2, state.getVehicles().size()); assertTrue(state.getVehicles().get(0).getContents().isEmpty()); assertEquals(p1, state.getVehicles().get(0).getDestination().get()); assertEquals(3, state.getAvailableParcels().size()); state = s.convert(SolveArgs.create().useAllParcels().noCurrentRoutes()); assertEquals(2, state.getVehicles().size()); assertTrue(state.getVehicles().get(0).getContents().isEmpty()); assertEquals(p1, state.getVehicles().get(0).getDestination().get()); assertEquals(3, state.getAvailableParcels().size());
checkArgument(vs.getRoute().isPresent()); checkArgument( vs.getRoute().get().containsAll(vs.getContents()), "Vehicle %s's route doesn't contain all locations it has in cargo. " + "Route: %s, cargo: %s.", i, vs.getRoute().get(), vs.getContents()); if (vs.getDestination().isPresent()) { checkArgument(!vs.getRoute().get().isEmpty() if (vs.getContents().contains(dp)) { checkArgument( freq == 1,
final List<Parcel> conts = newArrayList(vso.getContents()); conts.removeAll(vso.getDestination().asSet()); assigned.addAll(conts);
+ "it was %s.", v.getRemainingServiceTime()); final Collection<Parcel> inCargo = v.getContents();
assertFalse(state2.getVehicles().get(0).getContents().contains(p1)); assertSame(p1, state2.getVehicles().get(0).getDestination().get()); assertEquals(29, state2.getVehicles().get(0).getRemainingServiceTime());
return ImmutableList.of( ImmutableList .copyOf(state.getVehicles().get(0).getContents()), ImmutableList.<Parcel>builder() .addAll(state.getAvailableParcels())
public ImmutableSet<Parcel> getContents() { return vehicle.getContents(); }
VehicleStateObject withRoute(ImmutableList<Parcel> route) { return create(getDto(), getLocation(), getConnection(), getContents(), getRemainingServiceTime(), getDestination().orNull(), route); }