/** * 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(); }
/** * 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); }
@Override public ImmutableList<ImmutableList<Parcel>> solve( GlobalStateObject state) { return ImmutableList.of(ImmutableList.<Parcel>builder() .addAll(state.getAvailableParcels()) .addAll(state.getAvailableParcels()) .build(), ImmutableList.<Parcel>of()); } })).withSleepOnChange(true))
@Override public ImmutableList<ImmutableList<Parcel>> solve( GlobalStateObject state) { try { Thread.sleep(1000); } catch (final InterruptedException e) { throw new IllegalStateException(e); } return ImmutableList.of(ImmutableList.<Parcel>builder() .addAll(state.getAvailableParcels()) .addAll(state.getAvailableParcels()) .build(), ImmutableList.<Parcel>of()); } })));
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); }
/** * Constructs a new {@link GlobalStateObject} using the routes specified. * @param routes The routes to use, this will replace any existing routes in * the vehicles. Exactly one route must be specified for each * vehicle. * @return A newly constructed {@link GlobalStateObject} that only differs * from the current object in the vehicles' routes. */ public GlobalStateObject withRoutes( ImmutableList<ImmutableList<Parcel>> routes) { checkArgument(routes.size() == getVehicles().size()); final ImmutableList.Builder<VehicleStateObject> b = ImmutableList.builder(); for (int i = 0; i < getVehicles().size(); i++) { b.add(getVehicles().get(i).withRoute(routes.get(i))); } return create(getAvailableParcels(), b.build(), getTime(), getTimeUnit(), getSpeedUnit(), getDistUnit(), getRoadModelSnapshot()); }
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));
@Override public void solve(final GlobalStateObject state) { LOGGER.trace("Solve: {}, {} available parcels.", solver, state.getAvailableParcels().size());
/** * 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()); }
LOGGER.info("destination {} available: {}", gso.getVehicles().get(0).getDestination(), gso.getAvailableParcels());
LOGGER.warn("something went wrong"); LOGGER.warn("state"); LOGGER.warn("available: " + state.getAvailableParcels()); LOGGER.warn("vehicles:" + Joiner.on(System.lineSeparator()) .join(state.getVehicles()));
LinkedListMultimap.create(); final Set<Parcel> available = newLinkedHashSet(state.getAvailableParcels()); final Set<Parcel> destinations = newLinkedHashSet(); for (final VehicleStateObject vso : state.getVehicles()) { assigned.addAll(conts); if (vso.getDestination().isPresent() && state.getAvailableParcels().contains(vso.getDestination().get())) { assigned.add(vso.getDestination().get());
@Override public ImmutableList<ImmutableList<Parcel>> solve( GlobalStateObject state) throws InterruptedException { // quick! act busy! final long start = System.nanoTime(); LOGGER2.trace("start computing"); while (System.nanoTime() - start < busyNs) { if (Thread.interrupted()) { Thread.currentThread().interrupt(); LOGGER2.trace("interrupt"); throw new InterruptedException(); } final List<Integer> list = new ArrayList<>(); for (int i = 0; i < 100; i++) { list.add(new Integer(i)); } } final ImmutableList<ImmutableList<Parcel>> result = ImmutableList.of(state.getAvailableParcels().asList()); LOGGER2.trace("done computing: {}", result); return result; } }
.addAll(state.getAvailableParcels()) .addAll(state.getAvailableParcels()) .build(), ImmutableList.<Parcel>of()); .addAll(state.getAvailableParcels()) .addAll(state.getAvailableParcels()) .build()); } else if (snapshots.size() == 3) { .copyOf(state.getVehicles().get(0).getContents()), ImmutableList.<Parcel>builder() .addAll(state.getAvailableParcels()) .addAll(state.getAvailableParcels()) .build()); } else {
for (final Parcel p : state.getAvailableParcels()) { final ParcelVisit pickup = new ParcelVisit(p, VisitType.PICKUP); final ParcelVisit delivery = new ParcelVisit(p, VisitType.DELIVER);
@Override public void problemChanged(GlobalStateObject snapshot) { assertThat(scheduler.isPresent()).isTrue(); try { Thread.sleep(sleep); } catch (final InterruptedException e) { throw new IllegalStateException(e); } final ImmutableList<ImmutableList<Parcel>> schedule = ImmutableList .of(ImmutableList.copyOf(snapshot.getAvailableParcels()), ImmutableList.<Parcel>of()); scheduler.get().updateSchedule(snapshot, schedule); assertThat(scheduler.get().getCurrentSchedule()).isEqualTo(schedule); scheduler.get().doneForNow(); }
state.getAvailableParcels(), vehicleList.build(), state.getTime(),
@Override public boolean equals(Object o) { if (o == this) { return true; } if (o instanceof GlobalStateObject) { GlobalStateObject that = (GlobalStateObject) o; return (this.availableParcels.equals(that.getAvailableParcels())) && (this.vehicles.equals(that.getVehicles())) && (this.time == that.getTime()) && (this.timeUnit.equals(that.getTimeUnit())) && (this.speedUnit.equals(that.getSpeedUnit())) && (this.distUnit.equals(that.getDistUnit())) && (this.roadModelSnapshot.equals(that.getRoadModelSnapshot())); } return false; }
.noCurrentRoutes()); assertEquals(ImmutableSet.of(p1), state.getAvailableParcels()); checkVehicles(asList(v1), state.getVehicles()); .noCurrentRoutes()); assertTrue(state2.getAvailableParcels().contains(p1)); assertFalse(state2.getVehicles().get(0).getContents().contains(p1)); assertSame(p1, state2.getVehicles().get(0).getDestination().get());
assertTrue(state.getVehicles().get(0).getContents().isEmpty()); assertFalse(state.getVehicles().get(0).getDestination().isPresent()); assertEquals(3, state.getAvailableParcels().size()); assertEquals(v1.getWaitState(), v1.getState()); assertTrue(state.getVehicles().get(0).getContents().isEmpty()); assertEquals(p1, state.getVehicles().get(0).getDestination().get()); assertEquals(3, state.getAvailableParcels().size()); assertEquals(v1.getGotoState(), v1.getState()); sim.tick(); assertTrue(state.getVehicles().get(0).getContents().isEmpty()); assertEquals(p1, state.getVehicles().get(0).getDestination().get()); assertEquals(3, state.getAvailableParcels().size());