aboutsummaryrefslogtreecommitdiffstats
path: root/src/jcgp/backend/modules/fitness/testcase
diff options
context:
space:
mode:
Diffstat (limited to 'src/jcgp/backend/modules/fitness/testcase')
-rw-r--r--src/jcgp/backend/modules/fitness/testcase/TestCaseEvaluator.java75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/jcgp/backend/modules/fitness/testcase/TestCaseEvaluator.java b/src/jcgp/backend/modules/fitness/testcase/TestCaseEvaluator.java
new file mode 100644
index 0000000..51676e3
--- /dev/null
+++ b/src/jcgp/backend/modules/fitness/testcase/TestCaseEvaluator.java
@@ -0,0 +1,75 @@
+package jcgp.backend.modules.fitness.testcase;
+
+import java.util.ArrayList;
+
+import jcgp.backend.modules.fitness.FitnessFunction;
+import jcgp.backend.population.Population;
+import jcgp.backend.resources.Resources;
+
+/**
+ *
+ * This fitness function module implements a simple test case evaluator.
+ *
+ * A TestCase object is a
+ *
+ *
+ * @author Eduardo Pedroni
+ *
+ */
+public abstract class TestCaseEvaluator implements FitnessFunction {
+
+ public static class TestCase<T> {
+
+ private T[] inputs;
+ private T[] outputs;
+
+ public TestCase(T[] inputs, T[] outputs) {
+ this.inputs = inputs;
+ this.outputs = outputs;
+ }
+
+ public T getInput(int index) {
+ return inputs[index];
+ }
+
+ public T getOutput(int index) {
+ return outputs[index];
+ }
+
+ public T[] getInputs() {
+ return inputs;
+ }
+
+ public T[] getOutputs() {
+ return outputs;
+ }
+ }
+
+ protected ArrayList<TestCase> testCases;
+
+ @Override
+ public void evaluate(Population population, Resources resources) {
+ // for every chromosome in the population
+ for (int i = 0; i < resources.getInt("popSize"); i++) {
+ // assume an initial fitness of 0
+ int fitness = 0;
+ // for each test case
+ for (int t = 0; t < testCases.size(); t++) {
+ population.getChromosome(i).setInputs(testCases.get(t).getInputs());
+ // check each output
+ for (int o = 0; o < resources.getInt("outputs"); o++) {
+ if (population.getChromosome(i).getOutput(o).calculate() == testCases.get(t).getOutput(o)) {
+ fitness++;
+ }
+ }
+ }
+ // assign the resulting fitness to the respective individual
+ population.getChromosome(i).setFitness(fitness);
+ }
+ }
+
+ public int getMaxFitness() {
+ return 0;
+ }
+}
+