/** * @return A new {@link Builder} instance with {@link #DEFAULT_PROBLEM_CLASS}. */ public static Builder builder() { return builder(DEFAULT_PROBLEM_CLASS); }
@Override public boolean equals(Object o) { if (o == this) { return true; } if (o instanceof Scenario) { Scenario that = (Scenario) o; return (this.events.equals(that.getEvents())) && (this.modelBuilders.equals(that.getModelBuilders())) && (this.timeWindow.equals(that.getTimeWindow())) && (this.stopCondition.equals(that.getStopCondition())) && (this.problemClass.equals(that.getProblemClass())) && (this.problemInstanceId.equals(that.getProblemInstanceId())); } return false; }
/** * Copies properties of the specified scenario into this builder. * @param scenario The scenario to copy the properties from. * @return This, as per the builder pattern. */ protected T copyProperties(Scenario scenario) { timeWindow = scenario.getTimeWindow(); stopCondition = scenario.getStopCondition(); return self(); }
/** * Copying builder. Creates a new builder that builds instances with the same * properties as the specified scenario. * @param scenario The scenario from which properties will be copied. * @return A new {@link Builder} instance. */ public static Builder builder(Scenario scenario) { return builder(scenario.getProblemClass()).copyProperties(scenario); }
final ProblemClass problemClass = new FakeProblemClass(); final Scenario scenario = Scenario .builder(problemClass) .instanceId("crazyfast") .scenarioLength(7L) .build(); assertThat(scenario.asQueue()).isEqualTo(scenario.getEvents()); assertEquals("crazyfast", scenario.getProblemInstanceId()); assertEquals(TimeWindow.create(0L, 7L), scenario.getTimeWindow()); assertThat(scenario.getStopCondition()).isEqualTo( StopConditions.alwaysTrue()); assertEquals(1, scenario.getModelBuilders().size()); assertThat(scenario.getModelBuilders().iterator().next() .getAssociatedType()).isSameAs(RoadUser.class); .builder(Scenario.DEFAULT_PROBLEM_CLASS) .copyProperties(scenario); assertEquals(scenario, copiedScen); final Scenario builderCopyScen = Scenario.builder(builder, Scenario.DEFAULT_PROBLEM_CLASS) .build();
/** * 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 no time model is available, a default is added. */ @Test public void testEmpty() { final Scenario empty = Scenario.builder().build(); assertThat(empty.getModelBuilders()).isEmpty(); final Scenario convertedEmpty = verifyNotNull(ScenarioConverters.toRealtime().apply(empty)); assertThat(convertedEmpty.getModelBuilders()) .contains(TimeModel.builder() .withRealTime() .withStartInClockMode(ClockMode.SIMULATED)); }
@Override public Builder copyProperties(Scenario scenario) { return super.copyProperties(scenario) .addEvents(scenario.getEvents()) .problemClass(scenario.getProblemClass()) .instanceId(scenario.getProblemInstanceId()) .addModels(scenario.getModelBuilders()); }
@Override public int compareTo(@Nullable SimulationResult o) { assert o != null; return ComparisonChain.start() .compare(getSimArgs().getScenario().getProblemClass().getId(), o.getSimArgs().getScenario().getProblemClass().getId()) .compare(getSimArgs().getScenario().getProblemInstanceId(), o.getSimArgs().getScenario().getProblemInstanceId()) .result(); }
final Set<Class<?>> required = collectClasses(s.getEvents()); final Map<Class<? extends TimedEvent>, TimedEventHandler<?>> m = newLinkedHashMap(getEventHandlers()); + " in the scenario: %s. Scenario (problem class:'%s', instance " + "id:'%s').", covered, m.entrySet(), required, s.getProblemClass(), s.getProblemInstanceId()); return new ScenarioController(sim, clockController, s, ImmutableMap.copyOf(m), getNumberOfTicks());
/** * @return A queue containing all events of this scenario. */ public Queue<TimedEvent> asQueue() { return newLinkedList(getEvents()); }
final Iterable<AddDepotEvent> depots = FluentIterable.from(s.getEvents()) .filter(AddDepotEvent.class); final Iterable<AddVehicleEvent> vehicles = FluentIterable.from( s.getEvents()) .filter(AddVehicleEvent.class); for (final ModelBuilder<?, ?> mb : s.getModelBuilders()) { if (RoadModel.class.isAssignableFrom(mb.getModelType())) { roadModels.add((RoadModel) mb.build(null));
/** * Measures the degree of dynamism of the specified scenario. * @param s The scenario to measure. * @return A double in range [0,1]. */ public static double measureDynamism(Scenario s) { return measureDynamism(s, s.getTimeWindow().end()); }
static Optional<TimeModel.AbstractBuilder<?>> getTimeModel(Scenario scen) { final List<TimeModel.AbstractBuilder<?>> timeModels = new ArrayList<>(); for (final ModelBuilder<?, ?> mb : scen.getModelBuilders()) { if (mb instanceof TimeModel.AbstractBuilder) { timeModels.add((AbstractBuilder<?>) mb); } } if (timeModels.isEmpty()) { return Optional.absent(); } checkArgument(timeModels.size() == 1, "More than one time model is not supported."); return Optional.<TimeModel.AbstractBuilder<?>>of(timeModels.get(0)); } }
/** * @return The {@link Scenario#getProblemClass()} of the scenario controlled * by this controller. */ public ProblemClass getScenarioProblemClass() { return scenario.getProblemClass(); }
/** * @return The {@link Scenario#getProblemInstanceId()} of the scenario * controlled by this controller. */ public String getScenarioId() { return scenario.getProblemInstanceId(); }
@Override public boolean equals(Object o) { if (o == this) { return true; } if (o instanceof ScenarioController.Builder) { ScenarioController.Builder that = (ScenarioController.Builder) o; return (this.scenario.equals(that.getScenario())) && (this.eventHandlers.equals(that.getEventHandlers())) && (this.numberOfTicks == that.getNumberOfTicks()) && (this.stopModelBuilder.equals(that.getStopModelBuilder())) && (this.ignoreRedundantHandlers == that.isIgnoreRedundantHandlers()); } return false; }
ScenarioController(SimulatorAPI sim, ClockController c, Scenario s, ImmutableMap<Class<? extends TimedEvent>, TimedEventHandler<?>> m, int t) { simulator = sim; clock = c; ticks = t; scenario = s; scenarioQueue = scenario.asQueue(); handlers = m; disp = new EventDispatcher(EventType.values()); final ScenarioController sc = this; clock.getEventAPI().addListener(new Listener() { @Override public void handleEvent(Event e) { if (clock.getCurrentTime() == 0) { dispatchSetupEvents(); } if (sc.endOfScenario) { clock.stop(); } } }, Clock.ClockEventType.STARTED); }