package jcgp.ea; import jcgp.CGP.Parameters; import jcgp.CGP.Utilities; import jcgp.population.Chromosome; import jcgp.population.MutableElement; import jcgp.population.Node; import jcgp.population.Output; public class StandardMutator implements Mutator { @Override public void mutate(Chromosome chromosome) { int mutations = (int) (Parameters.getMutationRate() * ((double) Parameters.getNodeNumber() / 100)); for (int i = 0; i < mutations; i++) { MutableElement m = Utilities.getRandomMutable(chromosome); if (m instanceof Output) { m.setConnection(Utilities.getRandomConnection(chromosome, m.getColumn())); } else if (m instanceof Node) { int geneType = Utilities.getRandomInt(1 + Parameters.getMaxArity()); if (geneType < 1) { ((Node) m).setFunction(Utilities.getRandomFunction()); } else { m.setConnection(Utilities.getRandomConnection(chromosome, m.getColumn())); } } } } }