diff options
Diffstat (limited to 'src/jcgp/backend/modules/ea')
-rw-r--r-- | src/jcgp/backend/modules/ea/EvolutionaryAlgorithm.java | 3 | ||||
-rw-r--r-- | src/jcgp/backend/modules/ea/MuPlusLambda.java | 57 | ||||
-rw-r--r-- | src/jcgp/backend/modules/ea/TournamentSelection.java | 18 |
3 files changed, 40 insertions, 38 deletions
diff --git a/src/jcgp/backend/modules/ea/EvolutionaryAlgorithm.java b/src/jcgp/backend/modules/ea/EvolutionaryAlgorithm.java index ce457ef..7719111 100644 --- a/src/jcgp/backend/modules/ea/EvolutionaryAlgorithm.java +++ b/src/jcgp/backend/modules/ea/EvolutionaryAlgorithm.java @@ -3,13 +3,12 @@ package jcgp.backend.modules.ea; import jcgp.JCGP.Resources; import jcgp.backend.modules.Module; import jcgp.backend.modules.mutator.Mutator; -import jcgp.backend.population.Chromosome; import jcgp.backend.population.Population; public interface EvolutionaryAlgorithm extends Module { public abstract void evolve(Population population, Mutator mutator, Resources parameters); - public abstract Chromosome getFittestChromosome(); + public abstract int getFittestChromosome(); } diff --git a/src/jcgp/backend/modules/ea/MuPlusLambda.java b/src/jcgp/backend/modules/ea/MuPlusLambda.java index fcfba05..22a0876 100644 --- a/src/jcgp/backend/modules/ea/MuPlusLambda.java +++ b/src/jcgp/backend/modules/ea/MuPlusLambda.java @@ -1,13 +1,10 @@ package jcgp.backend.modules.ea; -import java.util.HashMap; - import jcgp.JCGP.Resources; import jcgp.backend.modules.ModuleStatus; import jcgp.backend.modules.mutator.Mutator; import jcgp.backend.parameters.IntegerParameter; import jcgp.backend.parameters.Parameter; -import jcgp.backend.population.Chromosome; import jcgp.backend.population.Population; /** @@ -19,52 +16,54 @@ import jcgp.backend.population.Population; */ public class MuPlusLambda implements EvolutionaryAlgorithm { - private Chromosome fittestChromosome; + private int fittestChromosome; private IntegerParameter parents, offspring; - - private HashMap<String, Parameter> localParameters; - - public MuPlusLambda() { - parents = new IntegerParameter(1, "Parents"); - offspring = new IntegerParameter(4, "Offspring"); - - localParameters = new HashMap<String, Parameter>(); - localParameters.put("mu", parents); - localParameters.put("lambda", offspring); + public MuPlusLambda() { + parents = new IntegerParameter(1, "Parents") { + @Override + protected void validate(int newValue) { + + } + }; + offspring = new IntegerParameter(4, "Offspring") { + @Override + protected void validate(int newValue) { + + } + }; } @Override - public void evolve(Population population, Mutator mutator, Resources parameters) { + public void evolve(Population population, Mutator mutator, Resources resources) { + // TODO actually use parents and offspring // select fittest chromosome - int fittest = 0; + fittestChromosome = 0; - for (int i = 1; i < parameters.getInt("popSize"); i++) { - if (population.getChromosome(i).getFitness() >= population.getChromosome(fittest).getFitness()) { - fittest = i; + for (int i = 1; i < resources.getInt("popSize"); i++) { + if (population.getChromosome(i).getFitness() >= population.getChromosome(fittestChromosome).getFitness()) { + fittestChromosome = i; } } - fittestChromosome = population.getChromosome(fittest); - population.setBestIndividual(fittest); + // create copies of fittest chromosome, mutate them - Chromosome fc = population.getChromosome(fittest); - for (int i = 0; i < parameters.getInt("popSize"); i++) { - if (i != fittest) { - population.getChromosome(i).copyConnections(fc); - mutator.mutate(population.getChromosome(i), parameters); + for (int i = 0; i < resources.getInt("popSize"); i++) { + if (i != fittestChromosome) { + population.copyChromosome(fittestChromosome, i); + mutator.mutate(population.getChromosome(i), resources); } } } @Override - public Chromosome getFittestChromosome() { + public int getFittestChromosome() { return fittestChromosome; } @Override - public HashMap<String, Parameter> getLocalParameters() { - return localParameters; + public Parameter[] getLocalParameters() { + return new Parameter[] {parents, offspring}; } @Override diff --git a/src/jcgp/backend/modules/ea/TournamentSelection.java b/src/jcgp/backend/modules/ea/TournamentSelection.java index 6cbaa45..3c4a539 100644 --- a/src/jcgp/backend/modules/ea/TournamentSelection.java +++ b/src/jcgp/backend/modules/ea/TournamentSelection.java @@ -7,39 +7,43 @@ import jcgp.backend.modules.ModuleStatus; import jcgp.backend.modules.mutator.Mutator; import jcgp.backend.parameters.IntegerParameter; import jcgp.backend.parameters.Parameter; -import jcgp.backend.population.Chromosome; import jcgp.backend.population.Population; public class TournamentSelection implements EvolutionaryAlgorithm { - private Chromosome fittestChromosome; + private int fittestChromosome; private IntegerParameter tournament; private HashMap<String, Parameter> localParameters; public TournamentSelection() { - tournament = new IntegerParameter(1, "Tournament size"); + tournament = new IntegerParameter(1, "Tournament size") { + @Override + protected void validate(int newValue) { + + } + }; localParameters = new HashMap<String, Parameter>(); localParameters.put("tournament", tournament); } @Override - public HashMap<String, Parameter> getLocalParameters() { - return localParameters; + public Parameter[] getLocalParameters() { + return new Parameter[] {tournament}; } @Override public void evolve(Population population, Mutator mutator, Resources parameters) { tournament.set(tournament.get() + 1); - fittestChromosome = population.getChromosome(0); + fittestChromosome = 0; // TODO implement this } @Override - public Chromosome getFittestChromosome() { + public int getFittestChromosome() { return fittestChromosome; } |