aboutsummaryrefslogtreecommitdiffstats
path: root/src/jcgp/ea/StandardMutator.java
diff options
context:
space:
mode:
authorEduardo Pedroni <ep625@york.ac.uk>2014-02-04 16:20:33 +0000
committerEduardo Pedroni <ep625@york.ac.uk>2014-02-04 16:20:33 +0000
commit1fd678821cf133c7c431daea687f3467bb0be2dd (patch)
treec23e7fe6a4076c6748d03b2cee9d41ff6e9734b2 /src/jcgp/ea/StandardMutator.java
parentd9671c354080de20bba4f70438af9242c8ecd675 (diff)
Added fitness evaluation mechanism, though it might not be a very good design. Tests will be done to verify that.
Diffstat (limited to 'src/jcgp/ea/StandardMutator.java')
-rw-r--r--src/jcgp/ea/StandardMutator.java22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/jcgp/ea/StandardMutator.java b/src/jcgp/ea/StandardMutator.java
index 731215d..cab5c76 100644
--- a/src/jcgp/ea/StandardMutator.java
+++ b/src/jcgp/ea/StandardMutator.java
@@ -1,13 +1,31 @@
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()));
+ }
+ }
+ }
}
-
}