aboutsummaryrefslogtreecommitdiffstats
path: root/src/jcgp/backend/modules
diff options
context:
space:
mode:
Diffstat (limited to 'src/jcgp/backend/modules')
-rw-r--r--src/jcgp/backend/modules/fitness/DigitalCircuit.java17
-rw-r--r--src/jcgp/backend/modules/fitness/FitnessFunction.java11
-rw-r--r--src/jcgp/backend/modules/fitness/Problem.java20
-rw-r--r--src/jcgp/backend/modules/fitness/SymbolicRegression.java17
-rw-r--r--src/jcgp/backend/modules/fitness/TestCaseProblem.java (renamed from src/jcgp/backend/modules/fitness/testcase/TestCaseEvaluator.java)45
5 files changed, 89 insertions, 21 deletions
diff --git a/src/jcgp/backend/modules/fitness/DigitalCircuit.java b/src/jcgp/backend/modules/fitness/DigitalCircuit.java
new file mode 100644
index 0000000..b01bdc5
--- /dev/null
+++ b/src/jcgp/backend/modules/fitness/DigitalCircuit.java
@@ -0,0 +1,17 @@
+package jcgp.backend.modules.fitness;
+
+import jcgp.backend.function.BitwiseLogic;
+
+public class DigitalCircuit extends TestCaseProblem<Integer> {
+
+ public DigitalCircuit() {
+ super();
+ functionSet = new BitwiseLogic();
+ }
+
+ @Override
+ public String toString() {
+ return "Digital circuit";
+ }
+
+}
diff --git a/src/jcgp/backend/modules/fitness/FitnessFunction.java b/src/jcgp/backend/modules/fitness/FitnessFunction.java
deleted file mode 100644
index d3b76cb..0000000
--- a/src/jcgp/backend/modules/fitness/FitnessFunction.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package jcgp.backend.modules.fitness;
-
-import jcgp.backend.modules.Module;
-import jcgp.backend.population.Population;
-import jcgp.backend.resources.Resources;
-
-public interface FitnessFunction extends Module {
-
- public void evaluate(Population population, Resources resources);
-
-}
diff --git a/src/jcgp/backend/modules/fitness/Problem.java b/src/jcgp/backend/modules/fitness/Problem.java
new file mode 100644
index 0000000..1e70c13
--- /dev/null
+++ b/src/jcgp/backend/modules/fitness/Problem.java
@@ -0,0 +1,20 @@
+package jcgp.backend.modules.fitness;
+
+import jcgp.backend.function.FunctionSet;
+import jcgp.backend.modules.Module;
+import jcgp.backend.population.Chromosome;
+import jcgp.backend.population.Population;
+import jcgp.backend.resources.Resources;
+
+public abstract class Problem implements Module {
+
+ protected FunctionSet functionSet;
+
+ public abstract void evaluate(Population population, Resources resources);
+
+ public FunctionSet getFunctionSet() {
+ return functionSet;
+ }
+
+ public abstract boolean isPerfectSolution(Chromosome fittest);
+}
diff --git a/src/jcgp/backend/modules/fitness/SymbolicRegression.java b/src/jcgp/backend/modules/fitness/SymbolicRegression.java
new file mode 100644
index 0000000..da2e69e
--- /dev/null
+++ b/src/jcgp/backend/modules/fitness/SymbolicRegression.java
@@ -0,0 +1,17 @@
+package jcgp.backend.modules.fitness;
+
+import jcgp.backend.function.IntegerArithmetic;
+
+public class SymbolicRegression extends TestCaseProblem<Integer> {
+
+ public SymbolicRegression() {
+ super();
+ functionSet = new IntegerArithmetic();
+ }
+
+ @Override
+ public String toString() {
+ return "Symbolic regression";
+ }
+
+}
diff --git a/src/jcgp/backend/modules/fitness/testcase/TestCaseEvaluator.java b/src/jcgp/backend/modules/fitness/TestCaseProblem.java
index 4b0654c..7753e26 100644
--- a/src/jcgp/backend/modules/fitness/testcase/TestCaseEvaluator.java
+++ b/src/jcgp/backend/modules/fitness/TestCaseProblem.java
@@ -1,11 +1,13 @@
-package jcgp.backend.modules.fitness.testcase;
+package jcgp.backend.modules.fitness;
import java.util.ArrayList;
-import java.util.Collections;
+import java.util.List;
-import jcgp.backend.modules.fitness.FitnessFunction;
+import jcgp.backend.population.Chromosome;
import jcgp.backend.population.Population;
import jcgp.backend.resources.Resources;
+import jcgp.backend.resources.parameters.IntegerParameter;
+import jcgp.backend.resources.parameters.Parameter;
/**
*
@@ -17,7 +19,7 @@ import jcgp.backend.resources.Resources;
* @author Eduardo Pedroni
*
*/
-public abstract class TestCaseEvaluator implements FitnessFunction {
+public abstract class TestCaseProblem<U> extends Problem {
public static class TestCase<T> {
@@ -46,7 +48,19 @@ public abstract class TestCaseEvaluator implements FitnessFunction {
}
}
- protected ArrayList<TestCase<?>> testCases;
+ private ArrayList<TestCase<U>> testCases;
+ private IntegerParameter maxFitness;
+
+ public TestCaseProblem() {
+ maxFitness = new IntegerParameter(0, "Max fitness", true, false) {
+ @Override
+ public void validate(int newValue) {
+ // blank
+ }
+ };
+ testCases = new ArrayList<TestCase<U>>();
+ }
+
@Override
public void evaluate(Population population, Resources resources) {
@@ -69,19 +83,30 @@ public abstract class TestCaseEvaluator implements FitnessFunction {
}
}
- public int getMaxFitness() {
+ @Override
+ public Parameter[] getLocalParameters() {
+ return new Parameter[]{maxFitness};
+ }
+
+ private int getMaxFitness() {
int fitness = 0;
- for (TestCase<?> tc : testCases) {
+ for (TestCase<U> tc : testCases) {
fitness += tc.getOutputs().length;
}
return fitness;
}
- public void setTestCases(TestCase<?>... testCases) {
- this.testCases = new ArrayList<TestCase<?>>();
- Collections.addAll(this.testCases, testCases);
+ public void setTestCases(List<TestCase<U>> testCases) {
+ this.testCases.clear();
+ this.testCases.addAll(testCases);
+ maxFitness.set(getMaxFitness());
+ }
+
+ @Override
+ public boolean isPerfectSolution(Chromosome fittest) {
+ return fittest.getFitness() >= maxFitness.get();
}
}