if (solver.isScheduleUpdated()) { final GlobalStateObject state = solver.getCurrentState(SolveArgs.create()); ScheduleUtil.fixSchedule(solver.getCurrentSchedule(), state); LOGGER.warn("current schedule: "); LOGGER.warn(Joiner.on(System.lineSeparator()) .join(solver.getCurrentSchedule())); LOGGER.warn("fixed"); LOGGER.warn(Joiner.on(System.lineSeparator()).join(schedule)); && continuousUpdates && clock.getClockMode() == ClockMode.REAL_TIME) { solver.sendSnapshot( SolveArgs.create().useCurrentRoutes(getCurrentRoutes()));
ImmutableList.copyOf(((Truck) vehicle.get()).getRoute()); final GlobalStateObject state = solverHandle.get().getCurrentState( SolveArgs.create() .useCurrentRoutes(ImmutableList.of(currentRoute)) Solvers.computeStats(state, ImmutableList.of(currentRoute))); final EventAPI ev = solverHandle.get().getEventAPI(); final Bidder<DoubleBid> bidder = decorator; currentListener = new Listener() { solverHandle.get().getEventAPI() .addListener(currentListener, EventType.DONE); solverHandle.get().solve(state);
synchronized (solverHandle.get().getLock()) { synchronized (computing) { if (computing.get()) { final EventAPI ev = solverHandle.get().getEventAPI(); ev.removeListener(currentListener, EventType.DONE); solverHandle.get().cancel();
@Override public void handleEvent(Event e) { assertThat(s.isScheduleUpdated()).isTrue(); assertThat(s.getCurrentSchedule()).hasSize(1); assertThat(s.isScheduleUpdated()).isFalse(); } }, RtSimSolver.EventType.NEW_SCHEDULE);
solvers.get(0).solve(SolveArgs.create()); verify(clock, times(1)).switchToRealTime(); solvers.get(0).getEventAPI().addListener(eventHistory, EventType.NEW_SCHEDULE); solvers.get(1).solve(SolveArgs.create()); verify(clock, times(2)).switchToRealTime(); assertThat(solvers.get(0).isScheduleUpdated()).isFalse(); boolean fail = false; try { solvers.get(0).getCurrentSchedule(); } catch (final IllegalStateException e) { assertThat(e.getMessage()) assertThat(solvers.get(0).isScheduleUpdated()).isFalse(); assertThat(eventHistory.getHistory()).isEmpty(); assertThat(solvers.get(0).isScheduleUpdated()).isTrue(); assertThat(solvers.get(0).getCurrentSchedule()).isEmpty(); assertThat(solvers.get(0).isScheduleUpdated()).isFalse();
@Override public void tick(TimeLapse timeLapse) { LOGGER.trace("{} tick", timeLapse); if (timeLapse.getTime() == 200) { rtClock.switchToRealTime(); } else if (timeLapse.getTime() == 300) { sim.register( Parcel.builder(new Point(0, 0), new Point(4, 4)).build()); simSolver.solve(SolveArgs.create() .useCurrentRoutes(ImmutableList.of(ImmutableList.<Parcel>of()))); assertNoSchedule(simSolver); } else if (timeLapse.getTime() == 400) { LOGGER.trace(AffinityLock.dumpLocks()); } else if (timeLapse.getTime() == 1000) { sim.register( Parcel.builder(new Point(0, 0), new Point(4, 4)).build()); simSolver.solve(SolveArgs.create() .useCurrentRoutes(ImmutableList.of(ImmutableList.<Parcel>of()))); assertNoSchedule(simSolver); assertThat(simSolver.isScheduleUpdated()).isFalse(); } else if (timeLapse.getTime() == 6000) { assertThat(simSolver.isScheduleUpdated()).isTrue(); final ImmutableList<ImmutableList<Parcel>> result = simSolver.getCurrentSchedule(); assertThat(result).hasSize(1); assertThat(result.get(0)).hasSize(2); assertThat(simSolver.isScheduleUpdated()).isFalse(); sim.stop(); } }
void notifySolverOfChange(TimeLapse timeLapse, boolean sleepAfterNotify) { LOGGER.trace("notifySolverOfChange {} sleepAfterNotify:{}", timeLapse, sleepAfterNotify); verify(clock.getClockMode() == ClockMode.REAL_TIME, "Problem detected at %s.", timeLapse); problemHasChanged = false; solver.solve(SolveArgs.create().useCurrentRoutes(getCurrentRoutes())); if (sleepAfterNotify) { try { Thread.sleep(timeLapse.getTickLength() / 2); } catch (final InterruptedException e) { throw new IllegalStateException(e); } } }
Iterables.addAll(route, newRoute); final GlobalStateObject gso = simSolver.get().getCurrentState( SolveArgs.create() .useParcels(onMap) simSolver.get().solve(gso);
@Override public void handleEvent(Event e) { route = newLinkedList(simSolver.get().getCurrentSchedule().get(0)); LOGGER.trace("Computed new route for {}: {}.", vehicle.get(), route); rp.dispatchChangeEvent(); } }, EventType.NEW_SCHEDULE);
@Override public void setSolverProvider(RtSimSolverBuilder builder) { simSolver = Optional.of(builder.setVehicles(vehicle.asSet()).build(solver)); final RtSolverRoutePlanner rp = this; simSolver.get().getEventAPI().addListener(new Listener() { @Override public void handleEvent(Event e) { route = newLinkedList(simSolver.get().getCurrentSchedule().get(0)); LOGGER.trace("Computed new route for {}: {}.", vehicle.get(), route); rp.dispatchChangeEvent(); } }, EventType.NEW_SCHEDULE); }
final ImmutableList<Parcel> currentRoute = ImmutableList.copyOf(((Truck) vehicle.get()).getRoute()); final GlobalStateObject state = solverHandle.get().getCurrentState( SolveArgs.create().noCurrentRoutes().useParcels(assignedParcels)); final StatisticsDTO stats =
@Override public void handleEvent(Event e) { simSolver.get() .solve(SolveArgs.create() .useCurrentRoutes( ImmutableList.of(ImmutableList.<Parcel>of()))); } }, PDPModelEventType.NEW_PARCEL);
void assertNoSchedule(RtSimSolver ss) { boolean fail = false; try { ss.getCurrentSchedule(); } catch (final IllegalStateException e) { assertThat(e.getMessage()).contains("No schedule"); fail = true; } assertThat(fail).isTrue(); }
@Override public void setSolverProvider(RtSimSolverBuilder builder) { simSolver = Optional.of(builder.setVehicles(ImmutableSet.of(this)).build(solver)); final RtSimSolver s = simSolver.get(); s.getEventAPI().addListener(new Listener() { @Override public void handleEvent(Event e) { assertThat(s.isScheduleUpdated()).isTrue(); assertThat(s.getCurrentSchedule()).hasSize(1); assertThat(s.isScheduleUpdated()).isFalse(); } }, RtSimSolver.EventType.NEW_SCHEDULE); }
solverHandle.get().getCurrentSchedule(); final double newCost = objectiveFunction.computeCost( Solvers.computeStats(state, schedule));
simSolver.getEventAPI().addListener(new Listener() { @Override public void handleEvent(Event e) {
@Override public void tick(TimeLapse timeLapse) { if (timeLapse.getTime() == 100) { rtClock.switchToRealTime(); } else if (timeLapse.getTime() == 200) { sim.register( Parcel.builder(new Point(0, 0), new Point(4, 4)).build()); simSolver.solve(SolveArgs.create() .useCurrentRoutes(ImmutableList.of(ImmutableList.<Parcel>of()))); } else if (timeLapse.getTime() == 500) { throw new IllegalStateException("This is a test"); } }
/** * Test exception propagation. */ @Test public void testExceptionPropagation2() { final RtSimSolver rss = model.get(RtSimSolverBuilder.class).build(new Solver() { @Override public ImmutableList<ImmutableList<Parcel>> solve( GlobalStateObject state) { throw new IllegalArgumentException("This is a test"); } }); rss.solve(SolveArgs.create()); boolean fail = false; try { // loop is needed because the solver may be executed at a slightly later // time while (true) { model.tick(TimeLapseFactory.create(0, 1000)); } } catch (final IllegalArgumentException e) { assertThat(e.getMessage()).isEqualTo("This is a test"); fail = true; } assertThat(fail).isTrue(); }
rss.solve(SolveArgs.create());