/** * Create a list of distribution, each for every parameter. * * @param parameters the selector creation parameters * @param selector the selector factory * @param opt the optimization strategy * @param populationCount the number of individuals for the test population * @param loops the number of selections performed for one population * @param <P> the parameter type * @return the selector distributions */ public static <P> List<Histogram<Double>> distributions( final List<P> parameters, final Function<P, Selector<DoubleGene, Double>> selector, final Optimize opt, final int populationCount, final int loops ) { return parameters.stream() .map(p -> distribution(selector.apply(p), opt, populationCount, loops)) .collect(Collectors.toList()); }
@Test(dataProvider = "expectedDistribution", groups = {"statistics"}) public void selectDistribution(final Named<double[]> expected, final Optimize opt) { retry(3, () -> { final int loops = 50; final int npopulation = POPULATION_COUNT; final Random random = new Random(); using(random, r -> { final Histogram<Double> distribution = SelectorTester.distribution( new RouletteWheelSelector<>(), opt, npopulation, loops ); assertDistribution(distribution, expected.value, 0.001, 5); }); }); }
@Test(dataProvider = "expectedDistribution", groups = {"statistics"}) public void selectDistribution(final Named<double[]> expected, final Optimize opt) { retry(3, () -> { final int loops = 50; final int npopulation = POPULATION_COUNT; final Random random = new Random(); using(random, r -> { final Histogram<Double> distribution = SelectorTester.distribution( new StochasticUniversalSelector<>(), opt, npopulation, loops ); assertDistribution(distribution, expected.value, 0.001, 5); }); }); }
@Test(dataProvider = "expectedDistribution", groups = {"statistics"}) public void selectDistribution(final Named<double[]> expected, final Optimize opt) { retry(3, () -> { final int loops = 50; final int npopulation = POPULATION_COUNT; final Random random = new Random(); using(random, r -> { final Histogram<Double> distribution = SelectorTester.distribution( new TruncationSelector<>(), opt, npopulation, loops ); assertDistribution(distribution, expected.value, 0.001, 10); }); }); }
@Test(dataProvider = "expectedDistribution", groups = {"statistics"}) public void selectDistribution( final Double b, final Named<double[]> expected, final Optimize opt ) { retry(3, () -> { final int loops = 50; final int npopulation = POPULATION_COUNT; final Random random = new Random(); using(random, r -> { final Histogram<Double> distribution = SelectorTester.distribution( new BoltzmannSelector<>(b), opt, npopulation, loops ); assertDistribution(distribution, expected.value, 0.001, 5); }); }); }
@Test(dataProvider = "expectedDistribution", groups = {"statistics"}) public void selectDistribution( final Integer tournamentSize, final Named<double[]> expected, final Optimize opt ) { retry(3, () -> { final int loops = 1; final int npopulation = POPULATION_COUNT; using(new Random(), r -> { final Histogram<Double> distribution = SelectorTester.distribution( new TournamentSelector<>(tournamentSize), opt, npopulation, loops ); assertDistribution(distribution, expected.value, 0.001, 20); }); }); }
@Test(dataProvider = "expectedDistribution", groups = {"statistics"}) public void selectDistribution( final Double c, final Named<double[]> expected, final Optimize opt ) { retry(3, () -> { final int loops = 50; final int npopulation = POPULATION_COUNT; final Random random = new Random(); using(random, r -> { final Histogram<Double> distribution = SelectorTester.distribution( new ExponentialRankSelector<>(c), opt, npopulation, loops ); assertDistribution(distribution, expected.value, 0.001, 5); }); }); }
@Test(dataProvider = "expectedDistribution", groups = {"statistics"}) public void selectDistribution( final Double nminus, final Named<double[]> expected, final Optimize opt ) { retry(3, () -> { final int loops = 50; final int npopulation = POPULATION_COUNT; final Random random = new Random(); using(random, r -> { final Histogram<Double> distribution = SelectorTester.distribution( new LinearRankSelector<>(nminus), opt, npopulation, loops ); assertDistribution(distribution, expected.value, 0.001, 5); }); }); }