aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEduardo Pedroni <ep625@york.ac.uk>2014-02-11 08:30:36 +0000
committerEduardo Pedroni <ep625@york.ac.uk>2014-02-11 08:30:36 +0000
commit3fc4bf4a2ea7c6cff9810b76964dd3c1388c0b3f (patch)
treef9f939b61474b5d201dede252881c2d4f526dc72 /src
parentd8ab8a2424a689cff4c787b0448c893facaadf6f (diff)
Updated README, made a few changes to Chromosome's mutation methods, will be working on that throughout the day
Diffstat (limited to 'src')
-rw-r--r--src/jcgp/Utilities.java4
-rw-r--r--src/jcgp/population/Chromosome.java46
-rw-r--r--src/jcgp/tests/ChromosomeTests.java6
3 files changed, 55 insertions, 1 deletions
diff --git a/src/jcgp/Utilities.java b/src/jcgp/Utilities.java
index 76f996e..f052595 100644
--- a/src/jcgp/Utilities.java
+++ b/src/jcgp/Utilities.java
@@ -29,6 +29,8 @@ public class Utilities {
* This method may always pick inputs, as they can be picked
* regardless of the column.
*
+ * TODO remove?
+ *
* @param chromosome the chromosome to pick from
* @param column the column to use as reference
* @return a random connection
@@ -55,6 +57,8 @@ public class Utilities {
* This method may always pick inputs, as they can be picked
* regardless of the column.
*
+ * TODO remove?
+ *
* @param chromosome the chromosome to pick from
* @param column the column to use as reference
* @param levelsBack whether or not to respect levels back
diff --git a/src/jcgp/population/Chromosome.java b/src/jcgp/population/Chromosome.java
index 195b95c..0dc3ff9 100644
--- a/src/jcgp/population/Chromosome.java
+++ b/src/jcgp/population/Chromosome.java
@@ -123,5 +123,51 @@ public class Chromosome {
return nodes[index / Parameters.getColumns()][index % Parameters.getColumns()];
}
}
+
+ /**
+ * Returns a random allowed connection respecting levels back.
+ * This method may always pick inputs, as they can be picked
+ * regardless of the column.
+ *
+ * @param column the column to use as reference
+ * @return a random connection
+ */
+ public Connection getRandomConnection(int column) {
+
+
+
+ return null;
+
+ }
+
+ /**
+ * Returns a random allowed connection.
+ *
+ * This method may always pick inputs, as they can be picked
+ * regardless of the column.
+ *
+ * TODO optimise for less random generations
+ *
+ * @param column the column to use as reference
+ * @param levelsBack whether or not to respect levels back
+ * @return a random connection
+ */
+ public Connection getRandomConnection(int column, boolean levelsBack) {
+
+ if (levelsBack) {
+ return getRandomConnection(chromosome, column);
+ } else {
+ // choose input or node
+ int connectionType = Utilities.getRandomInt(inputs.length + (nodes.length * column));
+ if (connectionType < inputs.length) {
+ // input
+ return chromosome.getInput(getRandomInt(Parameters.getInputs()));
+ } else {
+ // node
+ return chromosome.getNode(getRandomInt(Parameters.getRows()), getRandomInt(column));
+ }
+ }
+
+ }
}
diff --git a/src/jcgp/tests/ChromosomeTests.java b/src/jcgp/tests/ChromosomeTests.java
index 75e3596..50d17b9 100644
--- a/src/jcgp/tests/ChromosomeTests.java
+++ b/src/jcgp/tests/ChromosomeTests.java
@@ -11,6 +11,7 @@ import jcgp.function.FunctionSet;
import jcgp.function.Subtraction;
import jcgp.population.Chromosome;
import jcgp.population.Input;
+import jcgp.population.MutableElement;
import jcgp.population.Node;
import jcgp.population.Output;
@@ -90,7 +91,10 @@ public class ChromosomeTests {
assertTrue("Incorrect output returned.", outputReturn);
// get a mutable element, check that it is a Mutable
- boolean mutableReturn = chromosome.getRandomMutableElement() instanceof Output;
+ boolean mutableReturn = chromosome.getRandomMutableElement() != chromosome.getRandomMutableElement() && chromosome.getRandomMutableElement() instanceof MutableElement;
+ assertTrue("Returned the same element.", mutableReturn);
+
+
// set a fitness value, check if returned value is the same
chromosome.setFitness(10);