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; } }