@Test public void limit() { final Predicate<EvolutionResult<?, Double>> l = Limits.byFitnessConvergence(5, 10, 0.015); int g = 0; while (l.test(result(10 + g, 100 + g, Optimize.MAXIMUM))) { ++g; } Assert.assertEquals(g, 69); }
@Test // https://github.com/jenetics/jenetics/issues/318 public void initialFitnessConvergence() { final Problem<Double, DoubleGene, Double> problem = Problem.of( d -> 1.0, Codecs.ofScalar(DoubleRange.of(0, 1)) ); final Engine<DoubleGene, Double> engine = Engine.builder(problem).build(); final AtomicInteger count = new AtomicInteger(); final EvolutionResult<DoubleGene, Double> result = engine.stream() .limit(Limits.byFitnessConvergence(1, 2, 0.03)) .peek(er -> count.incrementAndGet()) .collect(EvolutionResult.toBestEvolutionResult()); Assert.assertNotNull(result); Assert.assertEquals(count.get(), 1); Assert.assertEquals(result.getTotalGenerations(), 1); Assert.assertEquals(result.getGeneration(), 1); }
public static void main(final String[] args) throws InterruptedException { final Args arguments = Args.of(args); final ISeq<Integer> sizes = arguments.intArgs("params"); final Runner<Double, BitGene, Double> runner = Runner.of( fitness -> KNAPSACK, epsilon -> Limits.byFitnessConvergence(sizes.get(0), sizes.get(1), epsilon), TRIAL_METER, Writer.text().map(Object::toString), Reader.text().map(Double::parseDouble), args ); runner.start(); runner.join(); }
@Test(invocationCount = 5) public void onesCountLimit() { final Problem<ISeq<BitGene>, BitGene, Integer> problem = Problem.of( genes -> (int)genes.stream().filter(BitGene::getBit).count(), Codec.of( Genotype.of(BitChromosome.of(20, 0.125)), gt -> gt.getChromosome().toSeq() ) ); final Engine<BitGene, Integer> engine = Engine.builder(problem) .build(); final EvolutionResult<BitGene, Integer> result = engine.stream() .limit(Limits.byFitnessConvergence(5, 10, 0.01)) .collect(EvolutionResult.toBestEvolutionResult()); Assert.assertTrue( result.getTotalGenerations() < 50, "Gen: " + result.getTotalGenerations() ); }