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; /** * (μ + λ) EA. * * * @author Eduardo Pedroni * */ public class MuPlusLambda implements EvolutionaryAlgorithm { private Chromosome fittestChromosome; private IntegerParameter parents, offspring; private HashMap localParameters; public MuPlusLambda() { parents = new IntegerParameter(1, "Parents"); offspring = new IntegerParameter(4, "Offspring"); localParameters = new HashMap(); localParameters.put("mu", parents); localParameters.put("lambda", offspring); } @Override public void evolve(Population population, Mutator mutator, Resources parameters) { // select fittest chromosome int fittest = 0; for (int i = 1; i < parameters.getInt("popSize"); i++) { if (population.getChromosome(i).getFitness() >= population.getChromosome(fittest).getFitness()) { fittest = 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); } } } @Override public Chromosome getFittestChromosome() { return fittestChromosome; } @Override public HashMap getLocalParameters() { return localParameters; } @Override public String toString() { return "(μ + λ)"; } @Override public ModuleStatus getStatus(Resources resources) { return ModuleStatus.READY; } }