/** * 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()); }
final int loops ) { final List<Histogram<Double>> histograms = distributions( parameters, selector, .collect(Collectors.toList()); print(writer, opt, selectors, parameters, histograms, populationCount, loops);
protected S selector() { return factory().newInstance(); }
private static void printv(final PrintStream writer) { println(writer, "#=============================================================================#"); println(writer, "# %-76s#", format("%s %s (%s) ", p("os.name"), p("os.version"), p("os.arch")) ); println(writer, "# %-76s#", format("java version \"%s\"", p("java.version")) ); println(writer, "# %-76s#", format("%s (build %s)", p("java.runtime.name"), p("java.runtime.version")) ); println(writer, "# %-76s#", format("%s (build %s)", p("java.vm.name"), p("java.vm.version")) ); println(writer,"#=============================================================================#"); }
format.setMaximumFractionDigits(15); printt(writer, "Creating selector distribution: %s", new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()) ); printv(writer); println(writer, "# %-76s#", format("Selector distributions (opt=%s, npop=%d, loops=%d):", opt, populationCount, loops)); for (Selector<?, ?> selector : selectors) { println(writer, "# %-76s#", format(" - %s", selector)); println(writer, "#=============================================================================#");
@Test(expectedExceptions = NullPointerException.class) public void selectNullPopulationArgument() { selector().select(null, 23, Optimize.MAXIMUM); }
private static void printt(final PrintStream writer, final String title, final Object... args) { println(writer, "#=============================================================================#"); println(writer, "# %-76s#", format(title, args)); println(writer, "#=============================================================================#"); }
.collect(ISeq.toISeq()); final Selector<DoubleGene, Double> selector = selector();
@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(expectedExceptions = IllegalArgumentException.class) public void selectNegativeCountArgument() { final Factory<Genotype<DoubleGene>> gtf = Genotype.of(DoubleChromosome.of(0.0, 1.0)); final MSeq<Phenotype<DoubleGene, Double>> population = MSeq.ofLength(2); for (int i = 0, n = 2; i < n; ++i) { population.set(i, Phenotype.of(gtf.newInstance(), 12, TestUtils.FF)); } selector().select(population.toISeq(), -1, Optimize.MAXIMUM); }
@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(expectedExceptions = NullPointerException.class) public void selectNullOptimizeArgument() { final Factory<Genotype<DoubleGene>> gtf = Genotype.of(DoubleChromosome.of(0.0, 1.0)); final MSeq<Phenotype<DoubleGene, Double>> population = MSeq.ofLength(2); for (int i = 0, n = 2; i < n; ++i) { population.set(i, Phenotype.of(gtf.newInstance(), 12, TestUtils.FF)); } selector().select(population.toISeq(), 1, null); }
@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 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 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); }); }); }
@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); }); }); }