diff options
Diffstat (limited to 'src/jcgp/backend/population/Mutable.java')
-rw-r--r-- | src/jcgp/backend/population/Mutable.java | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/jcgp/backend/population/Mutable.java b/src/jcgp/backend/population/Mutable.java new file mode 100644 index 0000000..3ce7065 --- /dev/null +++ b/src/jcgp/backend/population/Mutable.java @@ -0,0 +1,53 @@ +package jcgp.backend.population; + +/** + * {@code Mutable} declares the expected behaviour of any + * part of a chromosome that is mutable, more specifically + * nodes or outputs. Inputs are not mutable since they don't have + * connections or functions. + * <br><br> + * This interface provides a way to deal with mutable elements + * generically without having to specify whether they are nodes + * or outputs. In this way a random mutable element can be picked and + * dealt with more easily, facilitating mutations. + * + * @author Eduardo Pedroni + * + */ +public interface Mutable { + + /** + * This method sets the indexed connection to the specified new connection. + * Implementing classes may choose to ignore the given index (such as in the + * case of outputs, which only have one connection). + * + * @param index the connection index to set. + * @param newConnection the chromosome element to connect to. + */ + public void setConnection(int index, Connection newConnection); + + /** + * Asserts if the specified element is a copy of the elements + * this is called on.<br> + * This method returns true if and only if: + * <ul> + * <li>the elements being compared are not the same instance;</li> + * <li>the connections of the compared elements are not the same instance;</li> + * <li>the elements have the same function (in the case of Node);</li> + * <li>the grid position of the elements themselves are the same;</li> + * <li>the grid position of all equivalent connections are the same;</li> + * </ul> + * <br><br> + * The relationship computed by this method is: + * <ul> + * <li>symmetric: a.copyOf(b) == b.copyOf(a);</li> + * <li>not reflexive: a.copyOf(a) returns false;</li> + * <li>not transitive: if a.copyOf(b) is true and b.copyOf(c) is true, a.copyOf(c) is + * not necessarily true since it is possible that a == c.</li> + * </ul> + * @param element the mutable element to compare to. + * @return true if {@code element} is a copy of this element. + */ + boolean copyOf(Mutable element); + +} |