aboutsummaryrefslogtreecommitdiffstats
path: root/src/jcgp/backend/resources
diff options
context:
space:
mode:
Diffstat (limited to 'src/jcgp/backend/resources')
-rw-r--r--src/jcgp/backend/resources/ModifiableResources.java193
-rw-r--r--src/jcgp/backend/resources/Resources.java260
-rw-r--r--src/jcgp/backend/resources/parameters/BooleanParameter.java27
-rw-r--r--src/jcgp/backend/resources/parameters/DoubleParameter.java25
-rw-r--r--src/jcgp/backend/resources/parameters/IntegerParameter.java26
-rw-r--r--src/jcgp/backend/resources/parameters/Parameter.java22
6 files changed, 371 insertions, 182 deletions
diff --git a/src/jcgp/backend/resources/ModifiableResources.java b/src/jcgp/backend/resources/ModifiableResources.java
index a221f73..689f846 100644
--- a/src/jcgp/backend/resources/ModifiableResources.java
+++ b/src/jcgp/backend/resources/ModifiableResources.java
@@ -1,8 +1,6 @@
package jcgp.backend.resources;
import jcgp.backend.function.FunctionSet;
-import jcgp.backend.resources.parameters.BooleanParameter;
-import jcgp.backend.resources.parameters.DoubleParameter;
import jcgp.backend.resources.parameters.IntegerParameter;
/**
@@ -21,19 +19,191 @@ public class ModifiableResources extends Resources {
super();
}
- public void set(String key, Object value) {
- if (parameters.get(key) instanceof IntegerParameter) {
- ((IntegerParameter) parameters.get(key)).set(((Integer) value).intValue());
- } else if (parameters.get(key) instanceof DoubleParameter) {
- ((DoubleParameter) parameters.get(key)).set(((Double) value).doubleValue());
- } else if (parameters.get(key) instanceof BooleanParameter) {
- ((BooleanParameter) parameters.get(key)).set(((Boolean) value).booleanValue());
- }
+ /**
+ * @param rows the rows to set
+ */
+ public void setRows(int rows) {
+ this.rows.set(rows);
+ }
+
+ /**
+ * @param columns the columns to set
+ */
+ public void setColumns(int columns) {
+ this.columns.set(columns);
+ }
+
+ /**
+ * @param inputs the inputs to set
+ */
+ public void setInputs(int inputs) {
+ this.inputs.set(inputs);
+ }
+
+ /**
+ * @param outputs the outputs to set
+ */
+ public void setOutputs(int outputs) {
+ this.outputs.set(outputs);
+ }
+
+ /**
+ * @param populationSize the populationSize to set
+ */
+ public void setPopulationSize(int populationSize) {
+ this.populationSize.set(populationSize);
+ }
+
+ /**
+ * @param levelsBack the levelsBack to set
+ */
+ public void setLevelsBack(int levelsBack) {
+ this.levelsBack.set(levelsBack);
+ }
+
+ /**
+ * @param currentGeneration the currentGeneration to set
+ */
+ public void setCurrentGeneration(int currentGeneration) {
+ this.currentGeneration.set(currentGeneration);
+ }
+
+ /**
+ * @param generations the generations to set
+ */
+ public void setGenerations(int generations) {
+ this.generations.set(generations);
+ }
+
+ /**
+ * @param currentRun the currentRun to set
+ */
+ public void setCurrentRun(int currentRun) {
+ this.currentRun.set(currentRun);
+ }
+
+ /**
+ * @param runs the runs to set
+ */
+ public void setRuns(int runs) {
+ this.runs.set(runs);
+ }
+
+ /**
+ * @param arity the arity to set
+ */
+ public void setArity(int arity) {
+ this.arity.set(arity);
+ }
+
+ /**
+ * @param seed the seed to set
+ */
+ public void setSeed(int seed) {
+ this.seed.set(seed);
+ }
+
+ /**
+ * @param report the report to set
+ */
+ public void setReport(int report) {
+ this.report.set(report);
+ }
+
+ /**
+ * @return the rows
+ */
+ public IntegerParameter getRowsParameter() {
+ return rows;
+ }
+
+ /**
+ * @return the columns
+ */
+ public IntegerParameter getColumnsParameter() {
+ return columns;
+ }
+
+ /**
+ * @return the inputs
+ */
+ public IntegerParameter getInputsParameter() {
+ return inputs;
+ }
+
+ /**
+ * @return the outputs
+ */
+ public IntegerParameter getOutputsParameter() {
+ return outputs;
+ }
+
+ /**
+ * @return the populationSize
+ */
+ public IntegerParameter getPopulationSizeParameter() {
+ return populationSize;
+ }
+
+ /**
+ * @return the levelsBack
+ */
+ public IntegerParameter getLevelsBackParameter() {
+ return levelsBack;
+ }
+
+ /**
+ * @return the currentGeneration
+ */
+ public IntegerParameter getCurrentGenerationParameter() {
+ return currentGeneration;
+ }
+
+ /**
+ * @return the generations
+ */
+ public IntegerParameter getGenerationsParameter() {
+ return generations;
+ }
+
+ /**
+ * @return the currentRun
+ */
+ public IntegerParameter getCurrentRunParameter() {
+ return currentRun;
+ }
+
+ /**
+ * @return the runs
+ */
+ public IntegerParameter getRunsParameter() {
+ return runs;
+ }
+
+ /**
+ * @return the arity
+ */
+ public IntegerParameter getArityParameter() {
+ return arity;
+ }
+
+ /**
+ * @return the seed
+ */
+ public IntegerParameter getSeedParameter() {
+ return seed;
+ }
+
+ /**
+ * @return the report
+ */
+ public IntegerParameter getReportParameter() {
+ return report;
}
public void setFunctionSet(FunctionSet functionSet) {
this.functionSet = functionSet;
- set("arity", functionSet.getMaxArity());
+ setArity(functionSet.getMaxArity());
}
public void setConsole(Console console) {
@@ -56,5 +226,4 @@ public class ModifiableResources extends Resources {
console.print(s);
}
}
-
}
diff --git a/src/jcgp/backend/resources/Resources.java b/src/jcgp/backend/resources/Resources.java
index 13e0c51..c83fa35 100644
--- a/src/jcgp/backend/resources/Resources.java
+++ b/src/jcgp/backend/resources/Resources.java
@@ -1,16 +1,12 @@
package jcgp.backend.resources;
-import java.util.HashMap;
import java.util.Random;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import jcgp.backend.function.Function;
import jcgp.backend.function.FunctionSet;
-import jcgp.backend.resources.parameters.BooleanParameter;
-import jcgp.backend.resources.parameters.DoubleParameter;
import jcgp.backend.resources.parameters.IntegerParameter;
-import jcgp.backend.resources.parameters.Parameter;
import jcgp.backend.resources.parameters.ParameterStatus;
/**
@@ -23,12 +19,12 @@ import jcgp.backend.resources.parameters.ParameterStatus;
*
*/
public class Resources {
- protected HashMap<String, Parameter> parameters = new HashMap<String, Parameter>();
+ protected IntegerParameter rows, columns, inputs, outputs, populationSize,
+ levelsBack, currentGeneration, generations, currentRun, runs,
+ arity, seed, report;
protected Random numberGenerator = new Random();
-
protected FunctionSet functionSet;
-
// GUI console
protected Console console;
@@ -36,175 +32,234 @@ public class Resources {
createBaseParameters();
}
- public int getInt(String key) {
- if (parameters.get(key) instanceof IntegerParameter) {
- return ((IntegerParameter) parameters.get(key)).get();
- } else if (parameters.get(key) instanceof DoubleParameter) {
- return (int) ((DoubleParameter) parameters.get(key)).get();
- } else {
- throw new ClassCastException("Could not cast " + parameters.get(key).getClass() + " to int.");
- }
+ /**
+ * @return the rows
+ */
+ public int rows() {
+ return rows.get();
}
-
- public double getDouble(String key) {
- if (parameters.get(key) instanceof IntegerParameter) {
- return ((IntegerParameter) parameters.get(key)).get();
- } else if (parameters.get(key) instanceof DoubleParameter) {
- return ((DoubleParameter) parameters.get(key)).get();
- } else {
- throw new ClassCastException("Could not cast " + parameters.get(key).getClass() + " to double.");
- }
+
+ /**
+ * @return the columns
+ */
+ public int columns() {
+ return columns.get();
}
-
- public boolean getBoolean(String key) {
- if (parameters.get(key) instanceof BooleanParameter) {
- return ((BooleanParameter) parameters.get(key)).get();
- } else {
- throw new ClassCastException("Could not cast " + parameters.get(key).getClass() + " to int.");
- }
+
+ /**
+ * @return the inputs
+ */
+ public int inputs() {
+ return inputs.get();
}
-
- public Parameter getParameter(String key) {
- return parameters.get(key);
+
+ /**
+ * @return the outputs
+ */
+ public int outputs() {
+ return outputs.get();
}
-
- public boolean contains(String key) {
- return parameters.containsKey(key);
+
+ /**
+ * @return the populationSize
+ */
+ public int populationSize() {
+ return populationSize.get();
}
-
+
+ /**
+ * @return the levelsBack
+ */
+ public int levelsBack() {
+ return levelsBack.get();
+ }
+
+ /**
+ * @return the nodes
+ */
+ public int nodes() {
+ return columns.get() * rows.get();
+ }
+
+ /**
+ * @return the currentGeneration
+ */
+ public int currentGeneration() {
+ return currentGeneration.get();
+ }
+
+ /**
+ * @return the generations
+ */
+ public int generations() {
+ return generations.get();
+ }
+
+ /**
+ * @return the currentRun
+ */
+ public int currentRun() {
+ return currentRun.get();
+ }
+
+ /**
+ * @return the runs
+ */
+ public int runs() {
+ return runs.get();
+ }
+
+ /**
+ * @return the arity
+ */
+ public int arity() {
+ return arity.get();
+ }
+
+ /**
+ * @return the seed
+ */
+ public int seed() {
+ return seed.get();
+ }
+
+ /**
+ * @return the report
+ */
+ public int report() {
+ return report.get();
+ }
+
private void createBaseParameters() {
- parameters.put("rows", new IntegerParameter(8, "Rows", false, true) {
+ rows = new IntegerParameter(5, "Rows", false, true) {
@Override
- public void validate(int newValue) {
- if (newValue <= 0) {
+ public void validate(Number newValue) {
+ if (newValue.intValue() <= 0) {
status = ParameterStatus.INVALID;
status.setDetails("Chromosome must have at least 1 row.");
} else {
status = ParameterStatus.VALID;
}
}
- });
- parameters.put("columns", new IntegerParameter(9, "Columns", false, true) {
+ };
+
+ columns = new IntegerParameter(5, "Columns", false, true) {
@Override
- public void validate(int newValue) {
- if (newValue <= 0) {
+ public void validate(Number newValue) {
+ if (newValue.intValue() <= 0) {
status = ParameterStatus.INVALID;
status.setDetails("Chromosome must have at least 1 column.");
} else {
status = ParameterStatus.VALID;
}
}
- });
- parameters.put("inputs", new IntegerParameter(3, "Inputs", false, true) {
+ };
+
+ inputs = new IntegerParameter(3, "Inputs", false, true) {
@Override
- public void validate(int newValue) {
- if (newValue <= 0) {
+ public void validate(Number newValue) {
+ if (newValue.intValue() <= 0) {
status = ParameterStatus.INVALID;
status.setDetails("Chromosome must have at least 1 input.");
} else {
status = ParameterStatus.VALID;
}
}
- });
- parameters.put("outputs", new IntegerParameter(3, "Outputs", false, true) {
+ };
+
+ outputs = new IntegerParameter(3, "Outputs", false, true) {
@Override
- public void validate(int newValue) {
- if (newValue <= 0) {
+ public void validate(Number newValue) {
+ if (newValue.intValue() <= 0) {
status = ParameterStatus.INVALID;
status.setDetails("Chromosome must have at least 1 output.");
} else {
status = ParameterStatus.VALID;
}
}
- });
- parameters.put("popSize", new IntegerParameter(5, "Population", false, true) {
+ };
+
+ populationSize = new IntegerParameter(5, "Population", false, true) {
@Override
- public void validate(int newValue) {
- if (newValue <= 0) {
+ public void validate(Number newValue) {
+ if (newValue.intValue() <= 0) {
status = ParameterStatus.INVALID;
status.setDetails("Population size must be at least 1.");
} else {
status = ParameterStatus.VALID;
}
}
- });
- parameters.put("levelsBack", new IntegerParameter(2, "Levels back", false, true) {
+ };
+
+ levelsBack = new IntegerParameter(2, "Levels back", false, true) {
@Override
- public void validate(int newValue) {
- if (newValue <= 0) {
+ public void validate(Number newValue) {
+ if (newValue.intValue() <= 0) {
status = ParameterStatus.INVALID;
status.setDetails("Levels back must be at least 1.");
- } else if (newValue > getInt("columns")) {
+ } else if (newValue.intValue() > columns.get()) {
status = ParameterStatus.INVALID;
status.setDetails("Levels back must be less than or equal to the number of columns.");
} else {
status = ParameterStatus.VALID;
}
}
- });
-
- IntegerParameter nodes = new IntegerParameter(1, "Nodes", true, false) {
- @Override
- public void validate(int newValue) {
- // blank
- }
};
- nodes.valueProperty().bind(((IntegerParameter) parameters.get("rows")).valueProperty().multiply(((IntegerParameter) parameters.get("columns")).valueProperty()));
- parameters.put("nodes", nodes);
-
- parameters.put("generations", new IntegerParameter(1000000, "Generations") {
+
+ generations = new IntegerParameter(1000000, "Generations") {
@Override
- public void validate(int newValue) {
- if (newValue <= 0) {
+ public void validate(Number newValue) {
+ if (newValue.intValue() <= 0) {
status = ParameterStatus.INVALID;
status.setDetails("Number of generations must be greater than 0.");
- } else if (newValue < getInt("currentGen")) {
+ } else if (newValue.intValue() < currentGeneration.get()) {
status = ParameterStatus.WARNING_RESET;
status.setDetails("Setting generations to less than the current generation will cause the experiment to restart.");
} else {
status = ParameterStatus.VALID;
}
}
- });
- parameters.put("currentGen", new IntegerParameter(1, "Generation", true, false) {
+ };
+
+ currentGeneration = new IntegerParameter(1, "Generation", true, false) {
@Override
- public void validate(int newValue) {
+ public void validate(Number newValue) {
// blank
}
- });
+ };
- parameters.put("runs", new IntegerParameter(5, "Runs") {
+ runs = new IntegerParameter(5, "Runs") {
@Override
- public void validate(int newValue) {
- if (newValue <= 0) {
+ public void validate(Number newValue) {
+ if (newValue.intValue() <= 0) {
status = ParameterStatus.INVALID;
status.setDetails("Number of runs must be greater than 0.");
- } else if (newValue < getInt("currentRun")) {
+ } else if (newValue.intValue() < currentRun.get()) {
status = ParameterStatus.WARNING_RESET;
status.setDetails("Setting runs to less than the current run will cause the experiment to restart.");
} else {
status = ParameterStatus.VALID;
}
}
- });
- parameters.put("currentRun", new IntegerParameter(1, "Run", true, false) {
+ };
+
+ currentRun = new IntegerParameter(1, "Run", true, false) {
@Override
- public void validate(int newValue) {
+ public void validate(Number newValue) {
// blank
}
- });
+ };
- //parameters.put("arity", new IntegerParameter(functionSet.getMaxArity(), "Max arity", true, false) {
- parameters.put("arity", new IntegerParameter(0, "Max arity", true, false) {
+ arity = new IntegerParameter(0, "Max arity", true, false) {
@Override
- public void validate(int newValue) {
+ public void validate(Number newValue) {
// blank
}
- });
+ };
- IntegerParameter seed = new IntegerParameter(1234, "Seed", false, true) {
+ seed = new IntegerParameter(1234, "Seed", false, true) {
@Override
- public void validate(int newValue) {
+ public void validate(Number newValue) {
status = ParameterStatus.VALID;
}
};
@@ -217,19 +272,18 @@ public class Resources {
}
});
numberGenerator.setSeed(seed.get());
- parameters.put("seed", seed);
- parameters.put("report", new IntegerParameter(1, "Report", false, false) {
+ report = new IntegerParameter(1, "Report", false, false) {
@Override
- public void validate(int newValue) {
- if (newValue > getInt("generations")) {
+ public void validate(Number newValue) {
+ if (newValue.intValue() > generations.get()) {
status = ParameterStatus.WARNING;
status.setDetails("No reports will be printed.");
} else {
status = ParameterStatus.VALID;
}
}
- });
+ };
}
/*
@@ -271,8 +325,8 @@ public class Resources {
* These are affected by parameter report
*/
public void reportln(String s) {
- if (getInt("report") > 0) {
- if (getInt("currentGen") % getInt("report") == 0) {
+ if (report.get() > 0) {
+ if (currentGeneration.get() % report.get() == 0) {
System.out.println(s);
if (console != null) {
console.println(s);
@@ -282,8 +336,8 @@ public class Resources {
}
public void report(String s) {
- if (getInt("report") > 0) {
- if (getInt("currentGen") % getInt("report") == 0) {
+ if (report.get() > 0) {
+ if (currentGeneration.get() % report.get() == 0) {
System.out.print(s);
if (console != null) {
console.print(s);
diff --git a/src/jcgp/backend/resources/parameters/BooleanParameter.java b/src/jcgp/backend/resources/parameters/BooleanParameter.java
index cd17649..cc74a64 100644
--- a/src/jcgp/backend/resources/parameters/BooleanParameter.java
+++ b/src/jcgp/backend/resources/parameters/BooleanParameter.java
@@ -2,13 +2,11 @@ package jcgp.backend.resources.parameters;
import javafx.beans.property.SimpleBooleanProperty;
-public abstract class BooleanParameter extends Parameter {
-
- private SimpleBooleanProperty value;
-
+public abstract class BooleanParameter extends Parameter<Boolean> {
+
public BooleanParameter(boolean value, String name, boolean monitor, boolean critical) {
super(name, monitor, critical);
- this.value = new SimpleBooleanProperty(value);
+ this.valueProperty = new SimpleBooleanProperty(value);
}
/**
@@ -20,23 +18,6 @@ public abstract class BooleanParameter extends Parameter {
*/
public BooleanParameter(boolean value, String name) {
super(name, false, false);
- this.value = new SimpleBooleanProperty(value);
- }
-
- public boolean get() {
- return value.get();
- }
-
- public void set(boolean newValue) {
- if (!value.isBound()) {
- value.set(newValue);
- }
- }
-
- public abstract void validate(boolean newValue);
-
- @Override
- public SimpleBooleanProperty valueProperty() {
- return value;
+ this.valueProperty = new SimpleBooleanProperty(value);
}
}
diff --git a/src/jcgp/backend/resources/parameters/DoubleParameter.java b/src/jcgp/backend/resources/parameters/DoubleParameter.java
index 8464c83..b109446 100644
--- a/src/jcgp/backend/resources/parameters/DoubleParameter.java
+++ b/src/jcgp/backend/resources/parameters/DoubleParameter.java
@@ -2,35 +2,20 @@ package jcgp.backend.resources.parameters;
import javafx.beans.property.SimpleDoubleProperty;
-public abstract class DoubleParameter extends Parameter {
-
- protected SimpleDoubleProperty value;
+public abstract class DoubleParameter extends Parameter<Number> {
public DoubleParameter(double value, String name, boolean monitor, boolean critical) {
super(name, monitor, critical);
- this.value = new SimpleDoubleProperty(value);
+ this.valueProperty = new SimpleDoubleProperty(value);
}
public DoubleParameter(double value, String name) {
super(name, false, false);
- this.value = new SimpleDoubleProperty(value);
+ this.valueProperty = new SimpleDoubleProperty(value);
}
- public double get() {
- return value.get();
- }
-
- public void set(double newValue) {
- if (!value.isBound()) {
- value.set(newValue);
- }
- }
-
@Override
- public SimpleDoubleProperty valueProperty() {
- return value;
+ public Double get() {
+ return super.get().doubleValue();
}
-
- public abstract void validate(double newValue);
-
}
diff --git a/src/jcgp/backend/resources/parameters/IntegerParameter.java b/src/jcgp/backend/resources/parameters/IntegerParameter.java
index 2a7b2a7..7cf68bd 100644
--- a/src/jcgp/backend/resources/parameters/IntegerParameter.java
+++ b/src/jcgp/backend/resources/parameters/IntegerParameter.java
@@ -2,36 +2,20 @@ package jcgp.backend.resources.parameters;
import javafx.beans.property.SimpleIntegerProperty;
-public abstract class IntegerParameter extends Parameter {
-
- private SimpleIntegerProperty value;
+public abstract class IntegerParameter extends Parameter<Number> {
public IntegerParameter(int value, String name, boolean monitor, boolean critical) {
super(name, monitor, critical);
- this.value = new SimpleIntegerProperty(value);
+ this.valueProperty = new SimpleIntegerProperty(value);
}
public IntegerParameter(int value, String name) {
super(name, false, false);
- this.value = new SimpleIntegerProperty(value);
+ this.valueProperty = new SimpleIntegerProperty(value);
}
- public int get() {
- return value.get();
- }
-
- public void set(int newValue) {
- if (!value.isBound()) {
- validate(newValue);
- value.set(newValue);
- }
- }
-
@Override
- public SimpleIntegerProperty valueProperty() {
- return value;
+ public Integer get() {
+ return super.get().intValue();
}
-
- public abstract void validate(int newValue);
-
}
diff --git a/src/jcgp/backend/resources/parameters/Parameter.java b/src/jcgp/backend/resources/parameters/Parameter.java
index 7e12ff8..3990ae6 100644
--- a/src/jcgp/backend/resources/parameters/Parameter.java
+++ b/src/jcgp/backend/resources/parameters/Parameter.java
@@ -1,8 +1,9 @@
package jcgp.backend.resources.parameters;
import javafx.beans.property.Property;
+import javafx.beans.property.ReadOnlyProperty;
-public abstract class Parameter {
+public abstract class Parameter<T> {
protected boolean monitor, critical, reset = false;
@@ -10,6 +11,8 @@ public abstract class Parameter {
protected String name;
+ protected Property<T> valueProperty;
+
public Parameter(String name, boolean monitor, boolean critical) {
this.name = name;
this.monitor = monitor;
@@ -36,6 +39,19 @@ public abstract class Parameter {
return status;
}
- public abstract Property<?> valueProperty();
-
+ public ReadOnlyProperty<T> valueProperty() {
+ return valueProperty;
+ }
+
+ public T get() {
+ return valueProperty.getValue();
+ }
+
+ public void set(T newValue) {
+ if (!valueProperty.isBound()) {
+ valueProperty.setValue(newValue);
+ }
+ }
+
+ public abstract void validate(T newValue);
}