@Override public ImmutableSet<Parcel> getContents(Container container) { return delegate.getContents(container); }
@Test public void testDelayedPickup() { final Parcel pack1 = Parcel.builder(new Point(1, 1), new Point(2, 2)) .serviceDuration(10L) .neededCapacity(2d) .build(); final Vehicle truck = new TestVehicle( VehicleDTO.builder() .startPosition(new Point(1, 1)) .capacity(10) .speed(1.0) .build()); model.register(pack1); model.register(truck); rm.register(pack1); rm.register(truck); model.pickup(truck, pack1, TimeLapseFactory.create(0, 1)); assertTrue(model.getContents(truck).isEmpty()); assertEquals(model.getContentsSize(truck), 0, EPSILON); truck.tick(TimeLapseFactory.create(1, 10)); assertFalse(model.getContents(truck).isEmpty()); assertTrue(model.getContents(truck).contains(pack1)); assertEquals(model.getContentsSize(truck), 2, EPSILON); }
@Override protected final void doUpdate(Set<Parcel> onMap, long time) { final Collection<Parcel> inCargo = Collections.checkedCollection( pdpModel.get().getContents(vehicle.get()), Parcel.class); parcels.clear(); parcels.addAll(onMap); parcels.addAll(onMap); parcels.addAll(inCargo); updateCurrent(); }
model.pickup(truck, newPack, TimeLapseFactory.create(0, 1)); assertEquals(model.getContents(truck).size(), 9); assertEquals(model.getContentsSize(truck), 9.0, EPSILON);
@Override protected final void doUpdate(Set<Parcel> onMap, long time) { final Set<Parcel> inCargo = pdpModel.get().getContents(vehicle.get()); assignedParcels.clear(); for (final Parcel dp : onMap) { assignedParcels.add(dp, 2); } assignedParcels.addAll(inCargo); updateCurrent(); }
} else if (state.isPickedUp()) { if (!vehicle.getPDPModel().getContents(vehicle).contains(p)) { final Set<Parcel> contents = vehicle.getPDPModel().getContents(vehicle); routeList.addAll(Sets.difference(contents, routeSet.elementSet())); return routeList;
} else if (state.isPickedUp()) { if (!vehicle.getPDPModel().getContents(vehicle).contains(p)) { final Set<Parcel> contents = vehicle.getPDPModel().getContents(vehicle); routeList.addAll(Sets.difference(contents, routeSet.elementSet())); return routeList;
@Override protected void doUpdate(Set<Parcel> onMap, long time) { if (onMap.isEmpty() && pdpModel.get().getContents(vehicle.get()).isEmpty()) { route.clear(); } else {
if (getRoadModel().equalPosition(this, destination.get())) { getPDPModel().pickup(this, destination.get(), time); } else if (getPDPModel().getContents(this).contains(destination.get())) { if (getRoadModel().getPosition(this) .equals(destination.get().getDeliveryLocation())) {
if (getRoadModel().equalPosition(this, destination.get())) { getPDPModel().pickup(this, destination.get(), time); } else if (getPDPModel().getContents(this).contains(destination.get())) { if (getRoadModel().getPosition(this) .equals(destination.get().getDeliveryLocation())) {
Optional<Parcel> findTarget() { final Collection<Parcel> available = pm.get().getParcels( ParcelState.AVAILABLE); final ImmutableSet<Parcel> contents = pm.get().getContents(this); if (available.isEmpty() && contents.isEmpty()) { return Optional.absent(); } boolean pickup; if (!available.isEmpty() && !contents.isEmpty()) { pickup = rng.get().nextBoolean(); } else { pickup = !available.isEmpty(); } if (pickup) { return Optional.of(newArrayList(available).get( rng.get().nextInt(available.size()))); } return Optional.of(contents.asList().get( rng.get().nextInt(contents.size()))); }
@Override public void renderDynamic(GC gc, ViewPort vp, long time) { uiSchema.initialize(gc.getDevice()); final Collection<Parcel> parcels = pdpModel.getParcels( ParcelState.values()); final Image image = uiSchema.getImage(Box.class); checkState(image != null); synchronized (pdpModel) { final Set<Vehicle> vehicles = pdpModel.getVehicles(); final Map<Parcel, Vehicle> mapping = new LinkedHashMap<>(); for (final Vehicle v : vehicles) { for (final Parcel p : pdpModel.getContents(v)) { mapping.put(p, v); } if (pdpModel.getVehicleState(v) != VehicleState.IDLE) { final PDPModel.VehicleParcelActionInfo vpai = pdpModel .getVehicleActionInfo(v); mapping.put(vpai.getParcel(), vpai.getVehicle()); } } for (final Parcel p : parcels) { drawBox(p, gc, vp, time, image, mapping); } } }
float getField(Point in, Truck truck) { float field = 0.0f; for (final FieldEmitter emitter : emitters) { field = field + (float) (emitter.getStrength() / Point.distance(emitter.getPosition(), in)); } for (final Parcel p : verifyNotNull(pdpModel).getContents(truck)) { field = field + (float) (2 / Point.distance(p.getDeliveryLocation(), in)); } return field; }
float getField(Point in, Truck truck) { float field = 0.0f; for (final FieldEmitter emitter : emitters) { field = field + (float) (emitter.getStrength() / Point.distance(emitter.getPosition(), in)); } for (final Parcel p : verifyNotNull(pdpModel).getContents(truck)) { field = field + (float) (2 / Point.distance(p.getDeliveryLocation(), in)); } return field; }
@Override public void renderDynamic(GC gc, ViewPort vp, long time) { uiSchema.initialize(gc.getDevice()); final Collection<Parcel> parcels = pdpModel.getParcels( ParcelState.values()); final Image image = uiSchema.getImage(Box.class); checkState(image != null); synchronized (pdpModel) { final Set<Vehicle> vehicles = pdpModel.getVehicles(); final Map<Parcel, Vehicle> mapping = new LinkedHashMap<>(); for (final Vehicle v : vehicles) { for (final Parcel p : pdpModel.getContents(v)) { mapping.put(p, v); } if (pdpModel.getVehicleState(v) != VehicleState.IDLE) { final PDPModel.VehicleParcelActionInfo vpai = pdpModel .getVehicleActionInfo(v); mapping.put(vpai.getParcel(), vpai.getVehicle()); } } for (final Parcel p : parcels) { drawBox(p, gc, vp, time, image, mapping); } } }
@Nullable Parcel getDelivery(TimeLapse time, int distance) { Parcel target = null; double closest = distance; final PDPModel pm = getPDPModel(); for (final Parcel p : pm.getContents(this)) { final double dist = Point.distance(getRoadModel().getPosition(this), p.getDeliveryLocation()); if (dist < closest && pm.getTimeWindowPolicy().canDeliver(p.getDeliveryTimeWindow(), time.getTime(), p.getPickupDuration())) { closest = dist; target = p; } } return target; }
@Nullable Parcel getDelivery(TimeLapse time, int distance) { Parcel target = null; double closest = distance; final PDPModel pm = getPDPModel(); for (final Parcel p : pm.getContents(this)) { final double dist = Point.distance(getRoadModel().getPosition(this), p.getDeliveryLocation()); if (dist < closest && pm.getTimeWindowPolicy().canDeliver(p.getDeliveryTimeWindow(), time.getTime(), p.getPickupDuration())) { closest = dist; target = p; } } return target; }
@Test public void addPackageIn() { assertTrue(model.getParcels(ParcelState.AVAILABLE).isEmpty()); final Depot d = new TestDepot(10); final Parcel p1 = Parcel.builder(new Point(0, 0), new Point(0, 0)) .neededCapacity(1d) .build(); model.register(d); model.register(p1); rm.addObjectAt(d, new Point(0, 0)); model.addParcelIn(d, p1); assertEquals(1, model.getContents(d).size()); assertTrue(model.getContents(d).contains(p1)); }
final Set<Parcel> parcels = newHashSet(pdpModel .getParcels(ParcelState.AVAILABLE)); if (!pdpModel.getContents(vehicle).isEmpty()) { parcels.addAll(pdpModel.getContents(vehicle));
@Test(expected = IllegalArgumentException.class) public void testDeliverFail4() { final Vehicle truck = new TestVehicle( VehicleDTO.builder().startPosition(new Point(1, 1)).build()); rm.register(truck); model.register(truck); final Parcel pack1 = Parcel.builder(new Point(1, 1), new Point(2, 2)) .pickupDuration(10) .deliveryDuration(10) .neededCapacity(2d) .build(); rm.register(pack1); model.register(pack1); rm.addObjectAtSamePosition(pack1, truck); model.pickup(truck, pack1, TimeLapseFactory.create(0, 10)); assertTrue(model.getContents(truck).contains(pack1)); model.deliver(truck, pack1, TimeLapseFactory.create(0, 1)); }