aboutsummaryrefslogtreecommitdiffstats
path: root/src/jcgp/backend/parser
diff options
context:
space:
mode:
Diffstat (limited to 'src/jcgp/backend/parser')
-rw-r--r--src/jcgp/backend/parser/ChromosomeParser.java177
-rw-r--r--src/jcgp/backend/parser/FunctionParser.java51
-rw-r--r--src/jcgp/backend/parser/ParameterParser.java77
-rw-r--r--src/jcgp/backend/parser/TestCaseParser.java90
4 files changed, 0 insertions, 395 deletions
diff --git a/src/jcgp/backend/parser/ChromosomeParser.java b/src/jcgp/backend/parser/ChromosomeParser.java
deleted file mode 100644
index fd03b7d..0000000
--- a/src/jcgp/backend/parser/ChromosomeParser.java
+++ /dev/null
@@ -1,177 +0,0 @@
-package jcgp.backend.parser;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.PrintWriter;
-import java.util.Scanner;
-
-import jcgp.backend.population.Chromosome;
-import jcgp.backend.population.Connection;
-import jcgp.backend.population.Input;
-import jcgp.backend.population.Node;
-import jcgp.backend.resources.Resources;
-
-/**
- * This class includes a method for parsing .chr files and another
- * for writing .chr files from given chromosomes.
- *
- * @author Eduardo Pedroni
- *
- */
-public abstract class ChromosomeParser {
-
- /**
- * Use this method to parse .chr files into a given chromosome.
- * <br><br>
- * This is not fully defensive as it doesn't check for number of inputs,
- * doesn't compare rows and columns individually and doesn't account for levels back. It
- * 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
- */
- public static void parse(File file, Chromosome chromosome, Resources resources) {
- /*
- * Count the nodes to make sure the size of the .chr file matches the experiment parameters.
- *
- * We do this by using the scanner to get the node and output portions of the file as they
- * are separated by 3 tab characters. Every number is replaced by a single known character,
- * and the length of the string with the new characters is compared with that of a string
- * where the new known character has been removed, yielding the total number of values.
- *
- */
- FileReader fr;
- try {
- fr = new FileReader(file);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- return;
- }
- Scanner in = new Scanner(fr);
- in.useDelimiter("\\t\\t\\t");
- String geneString = in.next().replaceAll("[0-9]+", "g");
- String outString = in.next().replaceAll("[0-9]+", "o");
- int geneCount = geneString.length() - geneString.replace("g", "").length();
- int outCount = outString.length() - outString.replace("o", "").length();
- in.close();
-
-
- // if the acquired values match the current parameters, apply them to the chromosome
- if ((geneCount == resources.nodes() * (resources.arity() + 1))
- && outCount == resources.outputs()) {
- // prepare a new scanner
- try {
- fr = new FileReader(file);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- return;
- }
- in = new Scanner(fr);
-
- int gene;
- Connection newConnection;
- Node changingNode;
- // for all nodes, columns first
- for (int c = 0; c < resources.columns(); c++) {
- for (int r = 0; r < resources.rows(); r++) {
- // store the changing node
- changingNode = chromosome.getNode(r, c);
-
- // for every connection
- for (int i = 0; i < resources.arity(); i++) {
- // get connection number from the .chr file
- gene = in.nextInt();
- System.out.println("r: " + r + " c: " + c + " i: " + i + " gene: " + gene);
- if (gene < resources.inputs()) {
- // connection was an input
- newConnection = chromosome.getInput(gene);
- } else {
- // connection was another node, calculate which from its number
- newConnection = chromosome.getNode((gene - resources.inputs()) % resources.rows(),
- (gene - resources.inputs()) / resources.rows());
- }
- changingNode.setConnection(i, newConnection);
- }
-
- // set the function, straight indexing should work - this is not entirely
- // safe, but it is not viable to check for functionset compatibility
- changingNode.setFunction(resources.getFunction(in.nextInt()));
- }
- }
-
- // outputs
- for (int o = 0; o < resources.outputs(); o ++) {
- gene = in.nextInt();
- if (gene < resources.inputs()) {
- // connection was an input
- newConnection = chromosome.getInput(gene);
- } else {
- // connection was another node, calculate which from its number
- newConnection = chromosome.getNode((gene - resources.inputs()) % resources.rows(),
- (gene - resources.inputs()) / resources.rows());
- }
- chromosome.getOutput(o).setConnection(0, newConnection);
- }
- in.close();
- } else {
- throw new IllegalArgumentException("The topology of the chromosome in " + file.getName() + " does not match that of the experiment.");
- }
- }
-
- /**
- * Writes a chromosome into the specified .chr file.
- *
- *
- * @param file the file to write to
- * @param chromosome the chromosome to save
- */
- public static void save(File file, Chromosome chromosome, Resources resources) {
- PrintWriter writer;
- try {
- writer = new PrintWriter(file);
- } catch (FileNotFoundException e) {
- // something bad happened
- return;
- }
-
- // 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) {
- writer.print(" " + ((Input) conn).getIndex());
- } else if (conn instanceof Node) {
- writer.print(" " + (((((Node) conn).getColumn() + 1) * resources.inputs()) + ((Node) conn).getRow()));
- } else {
- throw new ClassCastException("Could not handle " + conn.getClass() + " as a subclass of Connection");
- }
- }
- // print the function numbers
- writer.print(" " + resources.getFunctionIndex(chromosome.getNode(r, c).getFunction()));
- // node is done, print tab
- writer.print("\t");
- }
- }
- // nodes are done, print two tabs to separate from output
- writer.print("\t\t");
- for (int o = 0; o < resources.outputs(); o ++) {
- Connection source = chromosome.getOutput(o).getSource();
- if (source instanceof Input) {
- writer.print(" " + ((Input) source).getIndex());
- } else if (source instanceof Node) {
- writer.print(" " + (((((Node) source).getColumn() + 1) * resources.inputs()) + ((Node) source).getRow()));
- } else {
- throw new ClassCastException("Could not handle " + source.getClass() + " as a subclass of Connection");
- }
- }
-
- writer.close();
- System.out.println("writer is closed");
- }
-
-}
diff --git a/src/jcgp/backend/parser/FunctionParser.java b/src/jcgp/backend/parser/FunctionParser.java
deleted file mode 100644
index ab94899..0000000
--- a/src/jcgp/backend/parser/FunctionParser.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package jcgp.backend.parser;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.util.Scanner;
-
-import jcgp.backend.function.FunctionSet;
-import jcgp.backend.modules.problem.Problem;
-
-public class FunctionParser {
-
-private FunctionSet functionSet;
-
- private FunctionParser(Problem problem) {
- this.functionSet = problem.getFunctionSet();
- }
-
- public static void parseFunctions(File file, Problem problem) {
- FunctionParser pp = new FunctionParser(problem);
-
- FileReader fr;
- try {
- fr = new FileReader(file);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- return;
- }
-
- Scanner in = new Scanner(fr);
-
- while (in.hasNextLine()) {
- String line = in.nextLine();
- if (line.substring(line.length() - 1).matches("[0-9]")) {
- pp.parseAndSet(line.split("[^0-9]+"));
- }
- }
-
- in.close();
- }
-
- private void parseAndSet(String[] splitString) {
- int functionIndex = Integer.parseInt(splitString[splitString.length - 1]);
- if (Integer.parseInt(splitString[0]) != 0) {
- functionSet.enableFunction(functionIndex);
- } else {
- functionSet.disableFunction(functionIndex);
- }
-
- }
-}
diff --git a/src/jcgp/backend/parser/ParameterParser.java b/src/jcgp/backend/parser/ParameterParser.java
deleted file mode 100644
index f96ebf9..0000000
--- a/src/jcgp/backend/parser/ParameterParser.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package jcgp.backend.parser;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.util.Scanner;
-
-import jcgp.backend.resources.ModifiableResources;
-
-public class ParameterParser {
-
- private ModifiableResources resources;
-
- private ParameterParser(ModifiableResources resources) {
- this.resources = resources;
- }
-
- public static void parseParameters(File file, ModifiableResources resources) {
- ParameterParser pp = new ParameterParser(resources);
-
- FileReader fr;
- try {
- fr = new FileReader(file);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- return;
- }
-
- Scanner in = new Scanner(fr);
-
- while (in.hasNextLine()) {
- pp.parseAndSet(in.nextLine().split("( |\t)+"));
- }
-
- in.close();
- }
-
- private void parseAndSet(String[] splitString) {
- switch (splitString[1]) {
-
- case "population_size":
- resources.setPopulationSize(Integer.parseInt(splitString[0]));
- break;
-
- case "num_generations":
- resources.setGenerations(Integer.parseInt(splitString[0]));
- break;
-
- case "num_runs_total":
- resources.setRuns(Integer.parseInt(splitString[0]));
- break;
-
- case "num_rows":
- resources.setRows(Integer.parseInt(splitString[0]));
- break;
-
- case "num_cols":
- resources.setColumns(Integer.parseInt(splitString[0]));
- break;
-
- case "levels_back":
- resources.setLevelsBack(Integer.parseInt(splitString[0]));
- break;
-
- case "report_interval":
- resources.setReportInterval(Integer.parseInt(splitString[0]));
- break;
-
- case "global_seed":
- resources.setSeed(Integer.parseInt(splitString[0]));
- break;
-
- default:
- break;
- }
- }
-}
diff --git a/src/jcgp/backend/parser/TestCaseParser.java b/src/jcgp/backend/parser/TestCaseParser.java
deleted file mode 100644
index d47d663..0000000
--- a/src/jcgp/backend/parser/TestCaseParser.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package jcgp.backend.parser;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.util.Scanner;
-
-import jcgp.backend.modules.problem.TestCaseProblem;
-import jcgp.backend.resources.ModifiableResources;
-
-public class TestCaseParser {
-
- private TestCaseProblem<?> problem;
-
- public TestCaseParser(TestCaseProblem<?> problem) {
- this.problem = problem;
- }
-
- public void parse(File file) {
- FileReader fr;
- try {
- fr = new FileReader(file);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- return;
- }
-
- Scanner in = new Scanner(fr);
- boolean readingTestCases = false;
- int inputs = 0, outputs = 0;
-
- problem.clearTestCases();
-
- while (in.hasNextLine()) {
- String nextLine = in.nextLine();
-
- if (nextLine.startsWith(".i")) {
- String[] split = nextLine.split(" +");
- inputs = Integer.parseInt(split[1]);
- } else if (nextLine.startsWith(".o")) {
- String[] split = nextLine.split(" +");
- outputs = Integer.parseInt(split[1]);
- } else if (nextLine.startsWith(".p") || nextLine.startsWith(".t")) {
- readingTestCases = true;
- } else if (nextLine.startsWith(".e")) {
- readingTestCases = false;
- // set test cases? not safe probably
- } else if (readingTestCases) {
- String[] split = nextLine.split("( |\t)+");
- String[] inputCases = new String[inputs];
- String[] outputCases = new String[outputs];
- for (int i = 0; i < inputs; i++) {
- inputCases[i] = split[i];
- }
- for (int o = 0; o < outputs; o++) {
- outputCases[o] = split[o + inputs];
- }
-
- problem.addTestCase(inputCases, outputCases);
- }
- }
-
- in.close();
- }
-
- public static void parseParameters(File file, ModifiableResources resources) {
-
- FileReader fr;
- try {
- fr = new FileReader(file);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- return;
- }
-
- Scanner in = new Scanner(fr);
-
- while (in.hasNextLine()) {
- String nextLine = in.nextLine();
- if (nextLine.startsWith(".i")) {
- String[] split = nextLine.split(" +");
- resources.setInputs(Integer.parseInt(split[1]));
- } else if (nextLine.startsWith(".o")) {
- String[] split = nextLine.split(" +");
- resources.setOutputs(Integer.parseInt(split[1]));
- }
- }
- in.close();
- }
-}