@Override public void tick(TimeLapse timeLapse) { rm.get().moveTo(this, destPos, timeLapse); }
@Override public void tick(TimeLapse timeLapse) { rm.get().moveTo(this, destPos, timeLapse); }
@SuppressWarnings("synthetic-access") @Nullable @Override public DefaultEvent handle(@Nullable StateEvent event, RouteFollowingVehicle context) { if (!route.isEmpty()) { checkCurrentParcelOwnership(); if (!isTooEarly(route.peek(), currentTime.get())) { return DefaultEvent.GOTO; } // else it is too early, and we do nothing } else if (currentTime.get().hasTimeLeft() && isEndOfDay(currentTime.get()) && !getRoadModel().equalPosition(context, depot.get())) { // check if it is time to go back to the depot getRoadModel().moveTo(context, depot.get(), currentTime.get()); } currentTime.get().consumeAll(); return null; } }
@SuppressWarnings("synthetic-access") @Nullable @Override public DefaultEvent handle(@Nullable StateEvent event, RouteFollowingVehicle context) { if (!route.isEmpty()) { checkCurrentParcelOwnership(); if (!isTooEarly(route.peek(), currentTime.get())) { return DefaultEvent.GOTO; } // else it is too early, and we do nothing } else if (currentTime.get().hasTimeLeft() && isEndOfDay(currentTime.get()) && !getRoadModel().equalPosition(context, depot.get())) { // check if it is time to go back to the depot getRoadModel().moveTo(context, depot.get(), currentTime.get()); } currentTime.get().consumeAll(); return null; } }
@SuppressWarnings("synthetic-access") @Nullable @Override public DefaultEvent handle(@Nullable StateEvent event, RouteFollowingVehicle context) { if (route.isEmpty()) { return DefaultEvent.NOGO; } else if (destination.get() != route.element()) { return DefaultEvent.REROUTE; } final Parcel cur = route.element(); if (getRoadModel().equalPosition(context, cur)) { return DefaultEvent.ARRIVED; } getRoadModel().moveTo(context, cur, currentTime.get(), context.routeHeuristic); if (getRoadModel().equalPosition(context, cur) && currentTime.get().hasTimeLeft()) { return DefaultEvent.ARRIVED; } return null; }
@SuppressWarnings("synthetic-access") @Nullable @Override public DefaultEvent handle(@Nullable StateEvent event, RouteFollowingVehicle context) { if (route.isEmpty()) { return DefaultEvent.NOGO; } else if (destination.get() != route.element()) { return DefaultEvent.REROUTE; } final Parcel cur = route.element(); if (getRoadModel().equalPosition(context, cur)) { return DefaultEvent.ARRIVED; } getRoadModel().moveTo(context, cur, currentTime.get(), context.routeHeuristic); if (getRoadModel().equalPosition(context, cur) && currentTime.get().hasTimeLeft()) { return DefaultEvent.ARRIVED; } return null; }
@Override protected void tickImpl(TimeLapse time) { getRoadModel().moveTo(this, destination, time); } }
@Override public void tick(TimeLapse timeLapse) { // every time step (tick) this gets called. Each time we chose a // different destination and move in that direction using the time // that was made available to us. if (!roadModel.containsObject(this)) { roadModel.addObjectAt(this, roadModel.getRandomPosition(rnd)); } roadModel.moveTo(this, roadModel.getRandomPosition(rnd), timeLapse); }
@Override public void tick(TimeLapse timeLapse) { // every time step (tick) this gets called. Each time we chose a // different destination and move in that direction using the time // that was made available to us. if (!roadModel.containsObject(this)) { roadModel.addObjectAt(this, roadModel.getRandomPosition(rnd)); } roadModel.moveTo(this, roadModel.getRandomPosition(rnd), timeLapse); }
pm.get().deliver(this, target.get(), time); } else { rm.get().moveTo(this, target.get().getDeliveryLocation(), time); pm.get().pickup(this, target.get(), time); } else { rm.get().moveTo(this, target.get(), time); final Set<Depot> depots = rm.get().getObjectsOfType(Depot.class); if (!depots.isEmpty()) { rm.get().moveTo(this, depots.iterator().next(), time);
@Override public void tick(TimeLapse timeLapse) { if (!destination.isPresent()) { destination = Optional.of(roadModel.get().getRandomPosition(rng)); } roadModel.get().moveTo(this, destination.get(), timeLapse); if (roadModel.get().getPosition(this).equals(destination.get())) { destination = Optional.absent(); } if (device.get().getUnreadCount() > 0) { lastReceiveTime = timeLapse.getStartTime(); device.get().getUnreadMessages(); device.get().broadcast(Messages.NICE_TO_MEET_YOU); } else if (device.get().getReceivedCount() == 0) { device.get().broadcast(Messages.HELLO_WORLD); } else if (lastReceiveTime > 10 * 1000) { device.get().broadcast(Messages.WHERE_IS_EVERYBODY); } }
@Override protected void tickImpl(TimeLapse time) { final Parcel p = getPDPModel().getParcels(ParcelState.values()) .iterator().next(); getRoadModel().moveTo(this, p, time); if (getRoadModel().equalPosition(this, p) && time.hasTimeLeft()) { getPDPModel().pickup(this, p, time); } }
@Override protected void tickImpl(TimeLapse time) { final RoadModel rm = getRoadModel(); final PDPModel pm = getPDPModel(); // we always go to the closest available parcel final Parcel closest = (Parcel) RoadModels .findClosestObject(rm.getPosition(this), rm, new Predicate<RoadUser>() { @Override public boolean apply(@Nullable RoadUser input) { return input instanceof Parcel && pm.getParcelState((Parcel) input) == ParcelState.AVAILABLE; } }); if (closest != null) { rm.moveTo(this, closest, time); if (rm.equalPosition(closest, this) && pm .getTimeWindowPolicy() .canPickup(closest.getPickupTimeWindow(), time.getTime(), closest.getPickupDuration())) { pm.pickup(this, closest, time); } } } }
@Override protected void tickImpl(TimeLapse time) { final RoadModel rm = getRoadModel(); final PDPModel pm = getPDPModel(); // we always go to the closest available parcel final Parcel closest = (Parcel) RoadModels .findClosestObject(rm.getPosition(this), rm, new Predicate<RoadUser>() { @Override public boolean apply(@Nullable RoadUser input) { return input instanceof Parcel && pm.getParcelState((Parcel) input) == ParcelState.AVAILABLE; } }); if (closest != null) { rm.moveTo(this, closest, time); if (rm.equalPosition(closest, this) && pm .getTimeWindowPolicy() .canPickup(closest.getPickupTimeWindow(), time.getTime(), closest.getPickupDuration())) { pm.pickup(this, closest, time); } } } }
@Override protected void tickImpl(TimeLapse time) { final RoadModel rm = getRoadModel(); final PDPModel pm = getPDPModel(); // we always go to the closest available parcel final Parcel closest = (Parcel) RoadModels.findClosestObject( rm.getPosition(this), rm, new Predicate<RoadUser>() { @Override public boolean apply(RoadUser input) { return input instanceof Parcel && pm.getParcelState((Parcel) input) == ParcelState.AVAILABLE; } }); if (closest != null) { rm.moveTo(this, closest, time); if (rm.equalPosition(closest, this) && pm.getTimeWindowPolicy().canPickup(closest.getPickupTimeWindow(), time.getTime(), closest.getPickupDuration())) { pm.pickup(this, closest, time); } } } }
@Test public void moveToHeuristicTest() { final MovingRoadUser fastestPathAgent = new SpeedyRoadUser(10); final MovingRoadUser shortestPathAgent = new SpeedyRoadUser(10); final Point origin = new Point(0, 0); final Point destination = new Point(0, 10); final Point midway = new Point(5, 5); // Graph with slow direct (shortest) route, but fast longer route. final Graph<MultiAttributeData> graph = new TableGraph<>(); graph.addConnection(origin, destination, MultiAttributeData.builder().setLength(10).setMaxSpeed(1).build()); graph.addConnection(origin, midway, MultiAttributeData.builder().setLength(10).setMaxSpeed(10).build()); graph.addConnection(midway, destination, MultiAttributeData.builder().setLength(10).setMaxSpeed(10).build()); final RoadModel moveModel = RoadModelBuilders.staticGraph(graph) .withDistanceUnit(SI.KILOMETER).withSpeedUnit(NonSI.KILOMETERS_PER_HOUR) .build(mock(DependencyProvider.class)); moveModel.addObjectAt(fastestPathAgent, origin); moveModel.addObjectAt(shortestPathAgent, origin); moveModel.moveTo(fastestPathAgent, destination, hour(1), GeomHeuristics.time(10)); moveModel.moveTo(shortestPathAgent, destination, hour(1), GeomHeuristics.euclidean()); // Agent chose speedy route assertEquals(midway, moveModel.getPosition(fastestPathAgent)); // Agent chose shortest route assertEquals(new Point(0, 1), moveModel.getPosition(shortestPathAgent)); }