From d63d3145f0f2abcee1bb88457324f4aaf9b9320e Mon Sep 17 00:00:00 2001 From: Eduardo Pedroni Date: Sat, 8 Mar 2014 14:48:25 +0000 Subject: Slowly refactoring Parameters to fit the GUI a little better... --- src/jcgp/modules/ea/EvolutionaryAlgorithm.java | 13 +++++++ src/jcgp/modules/ea/StandardEA.java | 50 ++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 src/jcgp/modules/ea/EvolutionaryAlgorithm.java create mode 100644 src/jcgp/modules/ea/StandardEA.java (limited to 'src/jcgp/modules/ea') diff --git a/src/jcgp/modules/ea/EvolutionaryAlgorithm.java b/src/jcgp/modules/ea/EvolutionaryAlgorithm.java new file mode 100644 index 0000000..8de8c87 --- /dev/null +++ b/src/jcgp/modules/ea/EvolutionaryAlgorithm.java @@ -0,0 +1,13 @@ +package jcgp.modules.ea; + +import jcgp.modules.mutator.Mutator; +import jcgp.population.Chromosome; +import jcgp.population.Population; + +public interface EvolutionaryAlgorithm { + + public abstract void evolve(Population population, Mutator mutator); + + public abstract Chromosome getFittestChromosome(); + +} diff --git a/src/jcgp/modules/ea/StandardEA.java b/src/jcgp/modules/ea/StandardEA.java new file mode 100644 index 0000000..2db8776 --- /dev/null +++ b/src/jcgp/modules/ea/StandardEA.java @@ -0,0 +1,50 @@ +package jcgp.modules.ea; + +import jcgp.modules.mutator.Mutator; +import jcgp.parameters.Parameters; +import jcgp.parameters.IntegerParameter; +import jcgp.parameters.BooleanParameter; +import jcgp.population.Chromosome; +import jcgp.population.Population; + +/** + * (1 + λ) EA. + * + * + * @author Eduardo Pedroni + * + */ +public class StandardEA implements EvolutionaryAlgorithm { + + private Chromosome fittestChromosome; + + @Override + public void evolve(Population population, Mutator mutator) { + // select fittest chromosome + int fittest = 0; + + for (int i = 1; i < ((IntegerParameter) Parameters.get("population")).getValue(); i++) { + if (population.getChromosome(i).getFitness() >= population.getChromosome(fittest).getFitness()) { + fittest = i; + } + } + fittestChromosome = population.getChromosome(fittest); + population.setBestIndividual(fittest); + if (((BooleanParameter) Parameters.get("debug")).getValue()) { + System.out.println("Best fitness: " + fittestChromosome.getFitness()); + } + // create copies of fittest chromosome, mutate them + Chromosome fc = population.getChromosome(fittest); + for (int i = 0; i < ((IntegerParameter) Parameters.get("population")).getValue(); i++) { + if (i != fittest) { + population.getChromosome(i).copyConnections(fc); + mutator.mutate(population.getChromosome(i)); + } + } + } + + @Override + public Chromosome getFittestChromosome() { + return fittestChromosome; + } +} -- cgit v1.2.3