diff options
author | Eduardo Pedroni <ep625@york.ac.uk> | 2014-01-31 16:45:45 +0000 |
---|---|---|
committer | Eduardo Pedroni <ep625@york.ac.uk> | 2014-01-31 16:45:45 +0000 |
commit | 2343cc0e456e0306711c0a7218d3027f17cffee7 (patch) | |
tree | efb26576ff4a283a87bd4b56deb9aba175924cfe /src/jcgp/population/Chromosome.java | |
parent | a02f1fff03ab58416da812597e67a0c7e21fdbd5 (diff) |
Added lots of utility methods for initialisation and mutation; the foundation is laid down and probably works, now it's time to test it and implement the standard CGP modules.
Diffstat (limited to 'src/jcgp/population/Chromosome.java')
-rw-r--r-- | src/jcgp/population/Chromosome.java | 57 |
1 files changed, 44 insertions, 13 deletions
diff --git a/src/jcgp/population/Chromosome.java b/src/jcgp/population/Chromosome.java index 2e22cf9..76667e5 100644 --- a/src/jcgp/population/Chromosome.java +++ b/src/jcgp/population/Chromosome.java @@ -2,16 +2,19 @@ package jcgp.population; import java.util.ArrayList; +import jcgp.CGP.Utilities; + public class Chromosome { - private ArrayList<Input> inputs; - private ArrayList<ArrayList<Node>> nodes; - private ArrayList<Output> outputs; + private final ArrayList<Input> inputs = new ArrayList<Input>(); + private final ArrayList<ArrayList<Node>> nodes = new ArrayList<ArrayList<Node>>();; + private final ArrayList<Output> outputs = new ArrayList<Output>(); private int fitness = 0; /** * Good citizen. + * * @param outputs * @param columns * @param rows @@ -20,13 +23,43 @@ public class Chromosome { */ public Chromosome(int inputCount, int rows, int columns, int outputCount) { - inputs = new ArrayList<Input>(inputCount); + instantiateElements(inputCount, rows, columns, outputCount); + + initialiseConnections(); + + } + + private void initialiseConnections() { + + // initialise nodes + for (int r = 0; r < nodes.size(); r++) { + for (int c = 0; c < nodes.size(); c++) { + Connection[] connections = new Connection[Utilities.getMaxArity()]; + for (int i = 0; i < connections.length; i++) { + connections[i] = Utilities.getRandomConnection(this, c); + } + nodes.get(r).get(c).initialise(Utilities.getRandomFunction(), connections); + } + } + + for (Output output : outputs) { + output.setConnection(Utilities.getRandomNode(this)); + } + + } + + /** + * @param inputCount + * @param rows + * @param columns + * @param outputCount + */ + private void instantiateElements(int inputCount, int rows, int columns, int outputCount) { for (int i = 0; i < inputCount; i++) { inputs.add(new Input()); } // rows first - nodes = new ArrayList<ArrayList<Node>>(rows); for (int r = 0; r < rows; r++) { nodes.add(new ArrayList<Node>(columns)); for (int c = 0; c < columns; c++) { @@ -34,11 +67,9 @@ public class Chromosome { } } - outputs = new ArrayList<Output>(outputCount); for (int o = 0; o < outputCount; o++) { outputs.add(new Output()); } - } public int getActiveNodeCount() { @@ -48,33 +79,33 @@ public class Chromosome { /** * @return the inputs */ - public final ArrayList<Input> getInputs() { + public ArrayList<Input> getInputs() { return inputs; } /** * @return the nodes */ - public final ArrayList<ArrayList<Node>> getNodes() { + public ArrayList<ArrayList<Node>> getNodes() { return nodes; } /** * @return the outputs */ - public final ArrayList<Output> getOutputs() { + public ArrayList<Output> getOutputs() { return outputs; } - public final Node getNode(int row, int column) { + public Node getNode(int row, int column) { return nodes.get(row).get(column); } - public final Output getOutput(int index) { + public Output getOutput(int index) { return outputs.get(index); } - public final Input getInputs(int index) { + public Input getInput(int index) { return inputs.get(index); } |