.addModels(modelBuilders) .addEvents(b.build()) .instanceId(id) .build();
/** * Sets up a scenario. */ @Before public void setUp() { scenario = Scenario .builder() .addEvent(EventC.create(100)) .addEvent(EventA.create(0)) .addEvent(EventA.create(1)) .addEvent(EventB.create(0)) .addEvent(EventB.create(0)) .addEvent(EventC.create(5)) .build(); assertThat(scenario).isNotNull(); TestUtil.testEnum(ScenarioController.EventType.class); final ClockController clock = mock(ClockController.class); when(clock.getEventAPI()).thenReturn(mock(EventAPI.class)); final SimulatorAPI sim = mock(SimulatorAPI.class); dependencyProvider = mock(DependencyProvider.class); when(dependencyProvider.get(ClockController.class)).thenReturn(clock); when(dependencyProvider.get(Clock.class)).thenReturn(clock); when(dependencyProvider.get(SimulatorAPI.class)).thenReturn(sim); }
/** * Tests {@link ScenarioIO#readerAdapter(com.google.common.base.Function)}. * @throws IOException When IO fails. */ @Test public void testReaderAdapter() throws IOException { final Scenario s = Scenario.builder() .addModel(TimeModel.builder().withTickLength(7L)) .build(); final Path tmpDir = Files.createTempDirectory("rinsim-scenario-io-test"); final Path file = Paths.get(tmpDir.toString(), "test.scen"); ScenarioIO.write(s, file); final Scenario out = ScenarioIO.reader().apply(file); final Scenario convertedOut = verifyNotNull(ScenarioIO.readerAdapter(ScenarioConverters.toRealtime()) .apply(file)); assertThat(s).isEqualTo(out); assertThat(s).isNotEqualTo(convertedOut); assertThat(convertedOut.getModelBuilders()) .contains(TimeModel.builder() .withRealTime() .withStartInClockMode(ClockMode.SIMULATED) .withTickLength(7L)); Files.delete(file); Files.delete(tmpDir); }
.addEvent(AddDepotEvent.create(-1, DEPOT_LOC)) .addEvent(AddVehicleEvent.create(-1, VehicleDTO.builder() .speed(VEHICLE_SPEED_KMH) .build())) .addEvent( AddParcelEvent.create(Parcel.builder(P1_PICKUP, P1_DELIVERY) .neededCapacity(0) .addEvent( AddParcelEvent.create(Parcel.builder(P2_PICKUP, P2_DELIVERY) .neededCapacity(0) .addEvent( AddParcelEvent.create(Parcel.builder(P3_PICKUP, P3_DELIVERY) .neededCapacity(0) .addEvent(TimeOutEvent.create(M60)) .scenarioLength(M60) .addModel( PDPRoadModel.builder( RoadModelBuilders.plane() .addModel( DefaultPDPModel.builder() .withTimeWindowPolicy(TimeWindowPolicies.TARDY_ALLOWED))
.addEvent(AddDepotEvent.create(-1, DEPOT_LOC)) .addEvent(AddVehicleEvent.create(-1, VehicleDTO.builder() .speed(VEHICLE_SPEED_KMH) .build())) .addEvent( AddParcelEvent.create(Parcel.builder(P1_PICKUP, P1_DELIVERY) .neededCapacity(0) .addEvent( AddParcelEvent.create(Parcel.builder(P2_PICKUP, P2_DELIVERY) .neededCapacity(0) .addEvent( AddParcelEvent.create(Parcel.builder(P3_PICKUP, P3_DELIVERY) .neededCapacity(0) .addEvent(TimeOutEvent.create(M60)) .scenarioLength(M60) .addModel( PDPRoadModel.builder( RoadModelBuilders.plane() .addModel( DefaultPDPModel.builder() .withTimeWindowPolicy(TimeWindowPolicies.TARDY_ALLOWED))
sb.addEvent(AddVehicleEvent.create(100, VehicleDTO.builder() .startPosition(new Point(7, 7)) .availabilityTimeWindow(TimeWindow.create(0, 1000L)) .build())) .addEvent(AddDepotEvent.create(76, new Point(3, 3))) .addEvent(AddVehicleEvent.create(125, VehicleDTO.builder() .startPosition(new Point(6, 9)) .availabilityTimeWindow(TimeWindow.create(500, 10000L)) .build())) .addEvent(AddParcelEvent.create( Parcel.builder(new Point(0, 0), new Point(1, 1)) .pickupTimeWindow(TimeWindow.create(2500, 10000)) .deliveryDuration(800) .buildDTO())) .addEvent(TimeOutEvent.create(200000)) .addModel(RoadModelBuilders.plane() .withDistanceUnit(SI.CENTIMETER) .withMaxPoint(new Point(7d, 8.4)) .withMaxSpeed(7d) .withSpeedUnit(NonSI.MILES_PER_HOUR)) .addModel(DefaultPDPModel.builder() .withTimeWindowPolicy(TimeWindowPolicies.STRICT)) .setStopCondition(
.addModel( PDPGraphRoadModel.builderForGraphRm(RoadModelBuilders.staticGraph(g))) .addModel(DefaultPDPModel.builder()) .addEvents( Collections .nCopies( final long announceTime = rng.nextInt(DoubleMath.roundToInt( endTime * .8, RoundingMode.FLOOR)); b.addEvent(AddParcelEvent.create(Parcel .builder(g.getRandomNode(rng), g.getRandomNode(rng)) .orderAnnounceTime(announceTime) b.addEvent(TimeOutEvent.create(endTime)) .scenarioLength(endTime) .setStopCondition(StopConditions.limitedTime(endTime)); .addModel(ScenarioController.builder(b.build()) .withEventHandler(AddParcelEvent.class, AddParcelEvent.defaultHandler()) .withEventHandler(TimeOutEvent.class,
final Scenario.Builder b = Scenario .builder() .addModel(RoadModelBuilders.plane()) .addModel(DefaultPDPModel.builder()) .addModels(asList(models)) .addEvents( Collections .nCopies( final long announceTime = rng.nextInt(DoubleMath.roundToInt( endTime * .8, RoundingMode.FLOOR)); b.addEvent(AddParcelEvent.create(Parcel .builder( new Point(rng.nextDouble() * 10, rng.nextDouble() * 10), b.addEvent(TimeOutEvent.create(endTime)) .scenarioLength(endTime) .setStopCondition(StopConditions.limitedTime(endTime)); return b.build();
final Scenario scenario = Scenario .builder(problemClass) .instanceId("crazyfast") .scenarioLength(7L) .setStopCondition(StopConditions.alwaysTrue()) .addModel( RoadModelBuilders.plane() .withMinPoint(new Point(6, 6)) .withSpeedUnit(SI.METERS_PER_SECOND) .withMaxSpeed(1d)) .build(); .copyProperties(scenario); final Scenario copiedScen = builder.build(); assertEquals(scenario, copiedScen); .build();
.addEvents(events) .clearEvents(); assertTrue(b.eventList.isEmpty()); b.addEvents(events) .ensureFrequency(Predicates.equalTo(ev3), 1); assertEquals(asList(ev1, ev2, ev4, ev5, ev3), b.eventList); b.ensureFrequency(Predicates.equalTo(ev1), 3); assertEquals(asList(ev1, ev2, ev4, ev5, ev3, ev1, ev1), b.eventList); b.ensureFrequency(Predicates.equalTo(ev1), 3); assertEquals(asList(ev1, ev2, ev4, ev5, ev3, ev1, ev1), b.eventList); b.filterEvents(Predicates.instanceOf(EventB.class)); assertEquals(asList(ev4, ev5), b.eventList);
static Simulator.Builder init( TimedEventHandler<AddVehicleEvent> vehicleHandler, Iterable<? extends TimedEvent> events) { final Scenario scenario = Scenario.builder() .addEvent(AddDepotEvent.create(-1, new Point(5, 5))) .addEvent(AddVehicleEvent.create(-1, VehicleDTO.builder().build())) .addEvent(AddVehicleEvent.create(-1, VehicleDTO.builder().build())) .addEvents(events) .build(); final ScenarioController.Builder sb = ScenarioController.builder(scenario) .withEventHandler(AddParcelEvent.class, AddParcelEvent.defaultHandler()) .withEventHandler(AddVehicleEvent.class, vehicleHandler) .withEventHandler(AddDepotEvent.class, AddDepotEvent.defaultHandler()) .withEventHandler(TimeOutEvent.class, TimeOutEvent.ignoreHandler()) .withOrStopCondition(StatsStopConditions.vehiclesDoneAndBackAtDepot()) .withOrStopCondition(StatsStopConditions.timeOutEvent()); return Simulator.builder() .addModel(PDPRoadModel.builder(RoadModelBuilders.plane()) .withAllowVehicleDiversion(true)) .addModel(DefaultPDPModel.builder()) .addModel(TimeModel.builder() .withRealTime() .withStartInClockMode(ClockMode.SIMULATED) .withTickLength(100)) .addModel(sb) .addModel(StatsTracker.builder()); }
static Scenario createScenario(long... delays) { final long endTime = 15 * 60 * 1000; final VehicleDTO vehicle = VehicleDTO.builder() .startPosition(new Point(5, 5)) .availabilityTimeWindow(TimeWindow.create(0, endTime)) .build(); final Scenario.Builder scenario = Scenario.builder() .addEvent(AddDepotEvent.create(-1, new Point(5, 5))) .addEvent(AddVehicleEvent.create(-1, vehicle)) .addEvent(AddVehicleEvent.create(-1, vehicle)) .addEvent(TimeOutEvent.create(endTime)) .addModel(PDPRoadModel.builder(RoadModelBuilders.plane()) .withAllowVehicleDiversion(true)) .addModel(DefaultPDPModel.builder()) .addModel(TimeModel.builder().withTickLength(250)) .setStopCondition(StopConditions.and( StatsStopConditions.vehiclesDoneAndBackAtDepot(), StatsStopConditions.timeOutEvent())); final long[] dls = new long[3]; System.arraycopy(delays, 0, dls, 0, delays.length); scenario .addEvent(createParcel(0, dls[0], new Point(1, 1), new Point(9, 1))); scenario .addEvent(createParcel(1, dls[1], new Point(1, 2), new Point(9, 2))); scenario .addEvent(createParcel(2, dls[2], new Point(9, 9), new Point(1, 9))); return scenario.build(); }
/** * Tests detection and correct error message. * @throws IOException If something goes wrong with the filesystem. */ @Test public void testGraphRmbDirectIO() throws IOException { final Graph<LengthData> g = new TableGraph<>(); g.addConnection(new Point(0, 0), new Point(1, 0)); g.addConnection(new Point(1, 1), new Point(1, 0)); final Scenario s = Scenario.builder() .addModel(TimeModel.builder().withTickLength(7L)) .addModel(RoadModelBuilders.staticGraph(Suppliers.ofInstance(g))) .build(); boolean fail = false; try { ScenarioIO.write(s); } catch (final IllegalArgumentException e) { fail = true; assertThat(e.getMessage()) .isEqualTo("A graph cannot be serialized embedded in a scenario."); } assertThat(fail).isTrue(); } }
.removeModelsOfType(TimeModel.AbstractBuilder.class) .addModel(TimeModel.builder() .withRealTime() .withStartInClockMode(ClockMode.SIMULATED)) .clearEvents() .addEvents(events) .addEvent(TimeOutEvent.create(3 * 60 * 60 * 1000)) .build();
/** * Tests the removal of model builders. */ @Test public void testRemoveModelsOfType() { final Scenario.Builder builder = Scenario.builder(); builder.addModel(TimeModel.builder()) .addModel(TimeModel.builder().withRealTime()) .addModel(RoadModelBuilders.plane()) .addModel(CommModel.builder()); assertThat(builder.modelBuilders).hasSize(4); builder.removeModelsOfType(RoadModelBuilders.PlaneRMB.class); assertThat(builder.modelBuilders).hasSize(3); assertThat(builder.modelBuilders).containsExactly(TimeModel.builder(), TimeModel.builder().withRealTime(), CommModel.builder()); builder.removeModelsOfType(RoadModelBuilders.AbstractGraphRMB.class); builder.removeModelsOfType(TimeModel.AbstractBuilder.class); assertThat(builder.modelBuilders).hasSize(1); assertThat(builder.modelBuilders).containsExactly(CommModel.builder()); builder.removeModelsOfType(CommModel.Builder.class); assertThat(builder.modelBuilders).isEmpty(); }
/** * Tests whether events are sorted by time. */ @Test public void testSorting() { final List<TimedEvent> events = new ArrayList<>(10); final AddObjectEvent A1 = AddObjectEvent.create(0, new Point(1, 0)); final AddObjectEvent A2 = AddObjectEvent.create(0, new Point(2, 0)); final AddObjectEvent B = AddObjectEvent.create(1, new Point(1, 1)); final AddObjectEvent C = AddObjectEvent.create(2, new Point(1, 0)); final AddObjectEvent D1 = AddObjectEvent.create(3, new Point(1, 2)); final AddObjectEvent D2 = AddObjectEvent.create(3, new Point(1, 3)); final AddObjectEvent E = AddObjectEvent.create(4, new Point(2, 0)); final AddObjectEvent F = AddObjectEvent.create(5, new Point(4, 0)); events.addAll(asList(A1, A2, B, C, D1, D2, E, F)); Collections.reverse(events); final Scenario s = Scenario.builder().addEvents(events).build(); final List<TimedEvent> res = newArrayList(s.getEvents()); assertEquals(asList(A2, A1, B, C, D2, D1, E, F), res); assertFalse(res.equals(events)); assertEquals(events.size(), res.size()); }
/** * Test the default settings of a scenario. */ @Test public void testDefaults() { final Scenario.Builder builder = Scenario .builder(Scenario.DEFAULT_PROBLEM_CLASS); assertThat(builder.getTimeWindow()) .isEqualTo(TimeWindow.create(0, 8 * 60 * 60 * 1000)); assertThat(builder.getStopCondition()) .isEqualTo(StopConditions.alwaysFalse()); final Scenario scenario = builder.build(); assertTrue(scenario.getModelBuilders().isEmpty()); assertSame(Scenario.DEFAULT_PROBLEM_CLASS, scenario.getProblemClass()); assertEquals("", scenario.getProblemInstanceId()); assertThat(scenario.getStopCondition()).isEqualTo( StopConditions.alwaysFalse()); assertEquals(TimeWindow.create(0, 8 * 60 * 60 * 1000), scenario.getTimeWindow()); }
/** * Tests that when a time model already exists, its properties are copied. */ @Test public void testCopyProperties() { final Scenario s = Scenario.builder() .addModel(TimeModel.builder() .withTickLength(754L) .withTimeUnit(NonSI.DAY)) .addModel(CommModel.builder()) .build(); final Scenario converted = verifyNotNull(ScenarioConverters.toRealtime().apply(s)); assertThat(converted.getModelBuilders()) .contains(TimeModel.builder() .withRealTime() .withStartInClockMode(ClockMode.SIMULATED) .withTickLength(754L) .withTimeUnit(NonSI.DAY)); }