/** * Parses the command line arguments. Performs the experiment using * {@link #perform()} if the arguments allow it. * @param out The print stream to write the feedback from the cli system to. * @param args The arguments to parse. * @return {@link Optional} containing {@link ExperimentResults} if the * experiment was performed, {@link Optional#absent()} otherwise. */ public Optional<ExperimentResults> perform(PrintStream out, String... args) { LOGGER.trace("perform {}", Arrays.toString(args)); final Optional<String> error = ExperimentCli.safeExecute(this, args); if (error.isPresent()) { out.println(error.get()); return Optional.absent(); } return Optional.of(perform()); }
@Override public void execute(Builder builder, Optional<Integer> value) { builder.repeat(value.get()); } },
@Override public void execute(Builder builder, Optional<Long> value) { builder.withRandomSeed(value.get()); } },
.addConfiguration(MASConfiguration.builder() .addScenario(createScenario()) .repeat(2) .withRandomSeed(0) .withThreads(1) .usePostProcessor(new ExamplePostProcessor()) .showGui(View.builder() .with(PlaneRoadModelRenderer.builder()) .with(RoadUserRenderer.builder() .perform(System.out, arguments);
.addConfiguration(MASConfiguration.builder() .addScenario(createScenario()) .repeat(2) .withRandomSeed(0) .withThreads(1) .usePostProcessor(new ExamplePostProcessor()) .showGui(View.builder() .with(PlaneRoadModelRenderer.builder()) .with(RoadUserRenderer.builder() .perform(System.out, arguments);
.instance(); Experiment.builder() .withThreads(1) .addConfiguration(Central.solverConfiguration(dsc)) .addScenario(scenario) .repeat(10) .perform();
.instance(); final ExperimentResults results = Experiment.builder() .addConfiguration(Central.solverConfiguration(dsc)) .addScenario(scenario) .usePostProcessor(PostProcessors.statisticsPostProcessor(obj)) .perform(); assertEquals(1, results.getResults().size()); assertEquals(1, dsc.arraysSolver.getInputs().size());
.addScenario(scenario) .addConfiguration(Central.solverConfiguration(RandomSolver.supplier())) .withThreads(1) .usePostProcessor( PostProcessors.statisticsPostProcessor( Gendreau06ObjectiveFunction.instance(vehicleSpeedKmh), FailureStrategy.INCLUDE)) .showGui(View.builder() .with(PlaneRoadModelRenderer.builder()) .with(TimeLinePanel.builder()) .withColorAssociation(Parcel.class, new RGB(0, 255, 255)) .withColorAssociation(Depot.class, new RGB(255, 0, 255)))) .showGui(false) .perform();
final MASConfiguration c1 = ExperimentTestUtil.testConfig("c1"); final Experiment.Builder builder = Experiment.builder() .addScenario(s0) .addScenario(s1) .addConfiguration(c0) .addConfiguration(c1) .repeat(2) .withThreads(1) .repeatSeed(2) .withOrdering( SimulationProperty.SEED_REPS, SimulationProperty.REPS, SimulationProperty.SCENARIO, SimulationProperty.CONFIG) .withRandomSeed(123); final ExperimentResults er = builder.perform(); final List<SimulationResult> results = new ArrayList<>(er.getResults());
.withRandomSeed(RANDOM_SEED) .withThreads(1) .addConfiguration(MASConfiguration.pdptwBuilder() .setName("GradientFieldConfiguration") .addEventHandler(AddVehicleEvent.class, VehicleHandler.INSTANCE) .addModel(GradientModel.builder()) .build()) .addScenario(scenario) .showGui(viewBuilder) .repeat(1) .perform();
.withRandomSeed(RANDOM_SEED) .withThreads(1) .addConfiguration(MASConfiguration.pdptwBuilder() .setName("GradientFieldConfiguration") .addEventHandler(AddVehicleEvent.class, VehicleHandler.INSTANCE) .addModel(GradientModel.builder()) .build()) .addScenario(scenario) .showGui(viewBuilder) .repeat(1) .perform();
final MASConfiguration c0 = ExperimentTestUtil.testConfig("c0"); final Experiment.Builder builder = Experiment.builder() .addScenario(s0) .addScenario(s1) .addConfiguration(c0) .repeat(2) .withThreads(1) .repeatSeed(3) .withRandomSeed(123); final ExperimentResults er = builder.perform(); final List<SimulationResult> results = new ArrayList<>(er.getResults());
.addScenario(scenario) .addConfiguration(ExperimentTestUtil.testConfig("test")) .usePostProcessor(ExperimentTestUtil.testPostProcessor()) .withWarmup(100L) .withRandomSeed(123); builder.perform(); builder.withWarmup(0); assertThat(builder.warmupPeriodMs).isEqualTo(0); builder.perform(); assertThat(cmb.getCount()).isEqualTo(3); builder.withWarmup(-1); } catch (final IllegalArgumentException e) { fail = true;
.addScenario(s) .withThreads(1) .addConfiguration( RtCentral.solverConfigurationAdapt(RandomSolver.supplier(), "")) .usePostProcessor(PostProcessors .statisticsPostProcessor(Gendreau06ObjectiveFunction.instance())) .perform();
.computeDistributed() .addScenario(generatedScenario) .withRandomSeed(123) .repeat(1) .usePostProcessor(ExperimentTestUtil.testPostProcessor()) .addConfiguration(ExperimentTestUtil.testConfig("A")); final ExperimentResults resultsDistributed = experimentBuilder.perform(); final ExperimentResults resultsLocal = experimentBuilder .computeLocal() .perform(); assertEquals(resultsLocal, resultsDistributed);
static StatisticsDTO simulate(Scenario scenario) { final ExperimentResults results = Experiment.builder() .addScenario(scenario) .addConfiguration(Central.solverConfiguration( StochasticSuppliers.constant(TestSolvers.lazyInsertion()))) .withThreads(1) .usePostProcessor(PostProcessors.statisticsPostProcessor(OBJ_FUNC)) .showGui(View.builder() .withAutoPlay() // .withAutoClose() .withSpeedUp(4) // .withFullScreen() .withTitleAppendix("AAMAS 2016 Experiment") .with(RoadUserRenderer.builder() .withToStringLabel()) .with(PDPModelRenderer.builder()) .with(RouteRenderer.builder()) .with(PlaneRoadModelRenderer.builder()) .with(TimeLinePanel.builder()) .withResolution(1280, 1024)) .showGui(false) .perform(); final SimulationResult res = results.getResults().iterator().next(); final StatisticsDTO stats = (StatisticsDTO) res.getResultObject(); return stats; }
/** * Tests whether the SolverConfigurator works. */ @Test public void testConfigurator() { final Gendreau06Scenario scenario = Gendreau06Parser.parse( new File(ScenarioPaths.GENDREAU)); final StochasticSupplier<Solver> s = new StochasticSupplier<Solver>() { @Override public Solver get(long seed) { return SolverValidator.wrap(new MultiVehicleSolverAdapter( ArraysSolverValidator.wrap(new RandomMVArraysSolver( new MersenneTwister(seed))), SI.MILLI(SI.SECOND))); } }; final Experiment.Builder builder = Experiment.builder() .addScenario(scenario) .addConfiguration(Central.solverConfiguration(s)) .withRandomSeed(123); final ExperimentResults res1 = builder.perform(); final ExperimentResults res2 = builder.perform(); assertEquals(res1.getResults(), res2.getResults()); }
/** * Checks determinism of two subsequent identical JPPF experiments. */ @Test public void determinismJppfVsJppf() { final List<Integer> ints = asList(1, 2, 5, 10); final List<ExperimentResults> allResults = newArrayList(); final Experiment.Builder experimentBuilder = Experiment.builder() .computeDistributed() .addScenario(scenario) .withRandomSeed(123) .repeat(10) .addConfiguration(ExperimentTestUtil.testConfig("A")); for (final int i : ints) { allResults.add( experimentBuilder.numBatches(i) .perform()); } assertEquals(4, allResults.size()); for (int i = 0; i < allResults.size() - 1; i++) { assertEquals(allResults.get(i), allResults.get(i + 1)); } }
/** * Checks determinism of a local experiment and a JPPF experiment, both with * identical settings. Using a Gendreau scenario. */ @SuppressWarnings("unchecked") @Test public void determinismLocalVsJppf() { final Experiment.Builder experimentBuilder = Experiment.builder() .computeDistributed() .addScenario(scenario) .withRandomSeed(123) .repeat(1) .usePostProcessor(ExperimentTestUtil.testPostProcessor()) .addConfiguration(ExperimentTestUtil.testConfig("A")); final ExperimentResults results3 = experimentBuilder.perform(); experimentBuilder.computeLocal(); final ExperimentResults results4 = experimentBuilder.perform(); assertEquals(results3, results4); assertThat(results3.getResults().asList().get(0).getResultObject()) .isInstanceOf(ImmutableList.class); assertThat( (List<Point>) results3.getResults().asList().get(0).getResultObject()) .hasSize(10); }
/** * Test correct handling of failure during simulation. */ @Test public void testDefaultPostProcessorFailure() { final Scenario scenario = ScenarioTestUtil.createRandomScenario(123L, StatsTracker.builder(), FailureModel.builder()); final Experiment.Builder builder = Experiment.builder() .addScenario(scenario) .addConfiguration(ExperimentTestUtil.testConfig("test")) .withThreads(1) .repeat(3) .withRandomSeed(123); boolean fail = false; try { builder.perform(); } catch (final AbortExperimentException e) { assertThat(e.getCause().getMessage()).contains("FailureModel"); fail = true; } assertThat(fail).isTrue(); }