@Override public Alterer<DoubleGene, Double> newAlterer(final double p) { return new MeanAlterer<>(p); }
@Test public void recombinate() { final int ngenes = 11; final int nchromosomes = 9; final int npopulation = 100; final ISeq<Phenotype<DoubleGene, Double>> p1 = newDoubleGenePopulation(ngenes, nchromosomes, npopulation); final MSeq<Phenotype<DoubleGene, Double>> p2 = p1.copy(); final int[] selected = new int[]{3, 34}; final MeanAlterer<DoubleGene, Double> crossover = new MeanAlterer<>(0.1); crossover.recombine(p2, selected, 3); Assert.assertEquals(diff(p1, p2), ngenes); }
final MeanAlterer<DoubleGene, Double> crossover = new MeanAlterer<>(p); .alter(population, 1) .getAlterations(); histogram.accept(alterations);
@Override protected int recombine( final MSeq<Phenotype<G, C>> population, final int[] individuals, final long generation ) { final Random random = RandomRegistry.getRandom(); final Phenotype<G, C> pt1 = population.get(individuals[0]); final Phenotype<G, C> pt2 = population.get(individuals[1]); final Genotype<G> gt1 = pt1.getGenotype(); final Genotype<G> gt2 = pt2.getGenotype(); //Choosing the Chromosome index for crossover. final int cindex = random.nextInt(min(gt1.length(), gt2.length())); final MSeq<Chromosome<G>> c1 = gt1.toSeq().copy(); final ISeq<Chromosome<G>> c2 = gt2.toSeq(); // Calculate the mean value of the gene array. final MSeq<G> mean = mean( c1.get(cindex).toSeq().copy(), c2.get(cindex).toSeq() ); c1.set(cindex, c1.get(cindex).newInstance(mean.toISeq())); population.set( individuals[0], pt1.newInstance(Genotype.of(c1), generation) ); return 1; }
public static void main(final String[] args) throws IOException { final String base = "/home/fwilhelm/Workspace/Development/Projects/" + "Jenetics/jenetics.tool/src/main/resources/io/jenetics/tool/moea"; final Path data = Paths.get(base, "circle_max_front.dat"); final Path output = Paths.get(base, "circle_max_front.svg"); final Engine<DoubleGene, Vec<double[]>> engine = Engine.builder(PROBLEM) .alterers( new Mutator<>(0.1), new MeanAlterer<>()) .offspringSelector(new TournamentSelector<>(3)) .survivorsSelector(UFTournamentSelector.ofVec()) .build(); final ISeq<Phenotype<DoubleGene, Vec<double[]>>> front = engine.stream() .limit(Limits.byFixedGeneration(100)) .collect(MOEA.toParetoSet(IntRange.of(100, 150))); final StringBuilder out = new StringBuilder(); out.append("#x y\n"); front.forEach(p -> { out.append(p.getFitness().data()[0]); out.append(" "); out.append(p.getFitness().data()[1]); out.append("\n"); }); Files.write(data, out.toString().getBytes()); final Gnuplot gnuplot = new Gnuplot(Paths.get(base, "circle_points.gp")); gnuplot.create(data, output); }
public static void main(final String[] args) throws IOException { final String base = "/home/fwilhelm/Workspace/Development/Projects/" + "Jenetics/jenetics.tool/src/main/resources/io/jenetics/tool/moea"; final Path data = Paths.get(base, "circle_min_front.dat"); final Path output = Paths.get(base, "circle_min_front.svg"); final Engine<DoubleGene, Vec<double[]>> engine = Engine.builder(PROBLEM) .alterers( new Mutator<>(0.1), new MeanAlterer<>()) .offspringSelector(new TournamentSelector<>(3)) .survivorsSelector(UFTournamentSelector.ofVec()) .minimizing() .build(); final ISeq<Phenotype<DoubleGene, Vec<double[]>>> front = engine.stream() .limit(Limits.byFixedGeneration(100)) .collect(MOEA.toParetoSet(IntRange.of(100, 150))); final StringBuilder out = new StringBuilder(); out.append("#x y\n"); front.forEach(p -> { out.append(p.getFitness().data()[0]); out.append(" "); out.append(p.getFitness().data()[1]); out.append("\n"); }); Files.write(data, out.toString().getBytes()); final Gnuplot gnuplot = new Gnuplot(Paths.get(base, "circle_points.gp")); gnuplot.create(data, output); }
public static void main(final String[] args) { final Engine<DoubleGene, Double> engine = Engine .builder( RastriginFunction::fitness, // Codec for 'x' vector. Codecs.ofVector(DoubleRange.of(-R, R), N)) .populationSize(500) .optimize(Optimize.MINIMUM) .alterers( new Mutator<>(0.03), new MeanAlterer<>(0.6)) .build(); final EvolutionStatistics<Double, ?> statistics = EvolutionStatistics.ofNumber(); final Phenotype<DoubleGene, Double> best = engine.stream() .limit(bySteadyFitness(7)) .peek(statistics) .collect(toBestPhenotype()); System.out.println(statistics); System.out.println(best); } }
.alterers( new Mutator<>(0.03), new MeanAlterer<>(0.6))
.alterers( new Mutator<>(0.03), new MeanAlterer<>(0.6))
.offspringSelector(new TournamentSelector<>(param.getTournamentSize())) .alterers( new MeanAlterer<>(0.175), new PolygonMutator<>(param.getMutationRate(), param.getMutationMultitude()), new UniformCrossover<>(0.5))
@Test public void join() { CompositeAlterer<DoubleGene, Double> alterer = CompositeAlterer.join( new Mutator<DoubleGene, Double>(), new SwapMutator<DoubleGene, Double>() ); Assert.assertEquals(alterer.getAlterers().length(), 2); Assert.assertEquals(alterer.getAlterers().get(0), new Mutator<DoubleGene, Double>()); Assert.assertEquals(alterer.getAlterers().get(1), new SwapMutator<DoubleGene, Double>()); alterer = CompositeAlterer.join(alterer, new MeanAlterer<>()); Assert.assertEquals(alterer.getAlterers().length(), 3); Assert.assertEquals(alterer.getAlterers().get(0), new Mutator<DoubleGene, Double>()); Assert.assertEquals(alterer.getAlterers().get(1), new SwapMutator<DoubleGene, Double>()); Assert.assertEquals(alterer.getAlterers().get(2), new MeanAlterer<DoubleGene, Double>()); alterer = CompositeAlterer.of( new MeanAlterer<>(), new SwapMutator<>(), alterer, new SwapMutator<>() ); Assert.assertEquals(alterer.getAlterers().length(), 6); Assert.assertEquals(alterer.getAlterers().get(0), new MeanAlterer<DoubleGene, Double>()); Assert.assertEquals(alterer.getAlterers().get(1), new SwapMutator<DoubleGene, Double>()); Assert.assertEquals(alterer.getAlterers().get(2), new Mutator<DoubleGene, Double>()); Assert.assertEquals(alterer.getAlterers().get(3), new SwapMutator<DoubleGene, Double>()); Assert.assertEquals(alterer.getAlterers().get(4), new MeanAlterer<DoubleGene, Double>()); Assert.assertEquals(alterer.getAlterers().get(5), new SwapMutator<DoubleGene, Double>()); }
.alterers( new Mutator<>(0.1), new MeanAlterer<>()) .offspringSelector(new TournamentSelector<>(2)) .survivorsSelector(UFTournamentSelector.ofVec())
public static void main(final String[] args) { final Problem<double[], DoubleGene, Double> problem = Problem.of( v -> Math.sin(v[0])*Math.cos(v[1]), Codecs.ofVector(DoubleRange.of(0, 2*Math.PI), 2) ); final Engine<DoubleGene, Double> engine1 = Engine.builder(problem) .minimizing() .alterers(new Mutator<>(0.2)) .selector(new MonteCarloSelector<>()) .build(); final Engine<DoubleGene, Double> engine2 = Engine.builder(problem) .minimizing() .alterers( new Mutator<>(0.1), new MeanAlterer<>()) .selector(new RouletteWheelSelector<>()) .build(); final Genotype<DoubleGene> result = ConcatEngine.of( engine1.limit(50), engine2.limit(() -> Limits.bySteadyFitness(30))) .stream() .collect(EvolutionResult.toBestGenotype()); System.out.println(result + ": " + problem.fitness().apply(problem.codec().decode(result))); }
public static void main(final String[] args) { final Problem<double[], DoubleGene, Double> problem = Problem.of( v -> Math.sin(v[0])*Math.cos(v[1]), Codecs.ofVector(DoubleRange.of(0, 2*Math.PI), 2) ); final Engine<DoubleGene, Double> engine1 = Engine.builder(problem) .minimizing() .alterers(new Mutator<>(0.2)) .selector(new MonteCarloSelector<>()) .build(); final Engine<DoubleGene, Double> engine2 = Engine.builder(problem) .minimizing() .alterers( new Mutator<>(0.1), new MeanAlterer<>()) .selector(new RouletteWheelSelector<>()) .build(); final Genotype<DoubleGene> result = CyclicEngine.of( engine1.limit(50), engine2.limit(() -> Limits.bySteadyFitness(30))) .stream() .limit(Limits.bySteadyFitness(1000)) .collect(EvolutionResult.toBestGenotype()); System.out.println(result + ": " + problem.fitness().apply(problem.codec().decode(result))); }
private static EvolutionStreamable<DoubleGene, Double> engine( final EvolutionResult<DoubleGene, Double> result, final Engine.Builder<DoubleGene, Double> builder ) { return var(result) < 0.2 ? builder.copy() .alterers(new Mutator<>(0.5)) .selector(new MonteCarloSelector<>()) .build() .limit(5) : builder.copy() .alterers( new Mutator<>(0.05), new MeanAlterer<>()) .selector(new RouletteWheelSelector<>()) .build() .limit(15); }