From d63d3145f0f2abcee1bb88457324f4aaf9b9320e Mon Sep 17 00:00:00 2001 From: Eduardo Pedroni Date: Sat, 8 Mar 2014 14:48:25 +0000 Subject: Slowly refactoring Parameters to fit the GUI a little better... --- src/jcgp/modules/mutator/Mutator.java | 9 ++++++++ src/jcgp/modules/mutator/StandardMutator.java | 31 +++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 src/jcgp/modules/mutator/Mutator.java create mode 100644 src/jcgp/modules/mutator/StandardMutator.java (limited to 'src/jcgp/modules/mutator') diff --git a/src/jcgp/modules/mutator/Mutator.java b/src/jcgp/modules/mutator/Mutator.java new file mode 100644 index 0000000..10df8cd --- /dev/null +++ b/src/jcgp/modules/mutator/Mutator.java @@ -0,0 +1,9 @@ +package jcgp.modules.mutator; + +import jcgp.population.Chromosome; + +public interface Mutator { + + void mutate(Chromosome chromosome); + +} diff --git a/src/jcgp/modules/mutator/StandardMutator.java b/src/jcgp/modules/mutator/StandardMutator.java new file mode 100644 index 0000000..17bd0be --- /dev/null +++ b/src/jcgp/modules/mutator/StandardMutator.java @@ -0,0 +1,31 @@ +package jcgp.modules.mutator; + +import jcgp.Utilities; +import jcgp.parameters.Parameters; +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.getNodeCount() + Parameters.getOutputs()) / 100)); + + for (int i = 0; i < mutations; i++) { + MutableElement m = chromosome.getRandomMutableElement(); + + if (m instanceof Output) { + m.setConnection(chromosome.getRandomConnection()); + } else if (m instanceof Node) { + int geneType = Utilities.getRandomInt(1 + Parameters.getMaxArity()); + if (geneType < 1) { + ((Node) m).setFunction(Utilities.getRandomFunction()); + } else { + m.setConnection(chromosome.getRandomConnection(((Node) m).getColumn())); + } + } + } + } +} -- cgit v1.2.3