aboutsummaryrefslogtreecommitdiffstats
path: root/src/jcgp/backend/parsers/ChromosomeParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jcgp/backend/parsers/ChromosomeParser.java')
-rw-r--r--src/jcgp/backend/parsers/ChromosomeParser.java56
1 files changed, 51 insertions, 5 deletions
diff --git a/src/jcgp/backend/parsers/ChromosomeParser.java b/src/jcgp/backend/parsers/ChromosomeParser.java
index 838ec48..6106dbd 100644
--- a/src/jcgp/backend/parsers/ChromosomeParser.java
+++ b/src/jcgp/backend/parsers/ChromosomeParser.java
@@ -29,9 +29,9 @@ public abstract class ChromosomeParser {
* is not viable to implement these defensive measures with the chromosome format used
* by CGP.
*
- * @param file the .chr file to parse from
- * @param chromosome the chromosome to configure
- * @param resources the experiment resources
+ * @param file the .chr file to parse from.
+ * @param chromosome the chromosome to configure.
+ * @param resources the experiment resources.
*/
public static void parse(File file, Chromosome chromosome, Resources resources) {
/*
@@ -134,8 +134,8 @@ public abstract class ChromosomeParser {
* The file is written in the standard .chr format and can
* be read by the original CGP implementation.
*
- * @param file the file to write to
- * @param chromosome the chromosome to save
+ * @param file the file to write to.
+ * @param chromosome the chromosome to save.
* @param resources a reference to the experiment's resources.
*/
public static void save(File file, Chromosome chromosome, Resources resources) {
@@ -187,4 +187,50 @@ public abstract class ChromosomeParser {
resources.println("[Parser] Chromosome saved successfully");
}
+
+ /**
+ * Writes a chromosome to the console in .chr format. Note
+ * that, if using a GUI console, that console must be flushed for the
+ * output to appear.
+ *
+ * @param chromosome the chromosome to save.
+ * @param resources a reference to the experiment's resources.
+ */
+ public static void print(Chromosome chromosome, Resources resources) {
+
+ // for all nodes, columns first
+ for (int c = 0; c < resources.columns(); c++) {
+ for (int r = 0; r < resources.rows(); r++) {
+ for (int i = 0; i < resources.arity(); i++) {
+ // print the connections, separated by spaces
+ Connection conn = chromosome.getNode(r, c).getConnection(i);
+ if (conn instanceof Input) {
+ resources.print(" " + ((Input) conn).getIndex());
+ } else if (conn instanceof Node) {
+ resources.print(" " + (((((Node) conn).getColumn() + 1) * resources.inputs()) + ((Node) conn).getRow()));
+ } else {
+ resources.println("[Parser] Error: could not handle " + conn.getClass() + " as a subclass of Connection");
+ }
+ }
+ // print the function numbers
+ resources.print(" " + resources.getFunctionIndex(chromosome.getNode(r, c).getFunction()));
+ // node is done, print tab
+ resources.print("\t");
+ }
+ }
+ // nodes are done, print two tabs to separate from output
+ resources.print("\t\t");
+ for (int o = 0; o < resources.outputs(); o ++) {
+ Connection source = chromosome.getOutput(o).getSource();
+ if (source instanceof Input) {
+ resources.print(" " + ((Input) source).getIndex());
+ } else if (source instanceof Node) {
+ resources.print(" " + (((((Node) source).getColumn() + 1) * resources.inputs()) + ((Node) source).getRow()));
+ } else {
+ resources.println("[Parser] Error: could not handle " + source.getClass() + " as a subclass of Connection");
+ }
+ }
+
+ resources.println("");
+ }
}