package jcgp.modules.ea; import java.util.HashMap; import jcgp.JCGP.Resources; import jcgp.modules.mutator.Mutator; import jcgp.parameters.IntegerParameter; import jcgp.parameters.Parameter; import jcgp.population.Chromosome; import jcgp.population.Population; /** * (μ + λ) EA. * * * @author Eduardo Pedroni * */ public class StandardEA implements EvolutionaryAlgorithm { private Chromosome fittestChromosome; private IntegerParameter parents, offspring; private HashMap localParameters; public StandardEA() { 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 < (int) parameters.get("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 < (int) parameters.get("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 activate(Resources parameters) { parameters.setManagedParameter("popSize", true); return localParameters; } }