aboutsummaryrefslogtreecommitdiffstats
path: root/src/jcgp/backend/modules/fitness
diff options
context:
space:
mode:
Diffstat (limited to 'src/jcgp/backend/modules/fitness')
-rw-r--r--src/jcgp/backend/modules/fitness/FitnessFunction.java11
-rw-r--r--src/jcgp/backend/modules/fitness/TestCase.java29
-rw-r--r--src/jcgp/backend/modules/fitness/TestCaseEvaluator.java45
3 files changed, 85 insertions, 0 deletions
diff --git a/src/jcgp/backend/modules/fitness/FitnessFunction.java b/src/jcgp/backend/modules/fitness/FitnessFunction.java
new file mode 100644
index 0000000..ffce9b7
--- /dev/null
+++ b/src/jcgp/backend/modules/fitness/FitnessFunction.java
@@ -0,0 +1,11 @@
+package jcgp.backend.modules.fitness;
+
+import jcgp.JCGP.Resources;
+import jcgp.backend.modules.Module;
+import jcgp.backend.population.Population;
+
+public interface FitnessFunction extends Module {
+
+ public void evaluate(Population population, Resources resources);
+
+}
diff --git a/src/jcgp/backend/modules/fitness/TestCase.java b/src/jcgp/backend/modules/fitness/TestCase.java
new file mode 100644
index 0000000..23f7ecf
--- /dev/null
+++ b/src/jcgp/backend/modules/fitness/TestCase.java
@@ -0,0 +1,29 @@
+package jcgp.backend.modules.fitness;
+
+public class TestCase {
+
+ private Object[] inputs;
+ private Object[] outputs;
+
+ public TestCase(Object[] inputs, Object[] outputs) {
+ this.inputs = inputs;
+ this.outputs = outputs;
+ }
+
+ public Object getInput(int index) {
+ return inputs[index];
+ }
+
+ public Object getOutput(int index) {
+ return outputs[index];
+ }
+
+ public Object[] getInputs() {
+ return inputs;
+ }
+
+ public Object[] getOutputs() {
+ return outputs;
+ }
+
+}
diff --git a/src/jcgp/backend/modules/fitness/TestCaseEvaluator.java b/src/jcgp/backend/modules/fitness/TestCaseEvaluator.java
new file mode 100644
index 0000000..3b67f28
--- /dev/null
+++ b/src/jcgp/backend/modules/fitness/TestCaseEvaluator.java
@@ -0,0 +1,45 @@
+package jcgp.backend.modules.fitness;
+
+import java.util.HashMap;
+
+import jcgp.JCGP.Resources;
+import jcgp.backend.modules.ModuleStatus;
+import jcgp.backend.parameters.Parameter;
+import jcgp.backend.population.Population;
+
+public class TestCaseEvaluator implements FitnessFunction {
+
+ @Override
+ public void evaluate(Population population, Resources resources) {
+ // for every chromosome in the population
+ for (int i = 0; i < resources.getInt("popSize"); i++) {
+ int fitness = 0;
+ // for every test case
+ for (int t = 0; t < resources.getTestCaseCount(); t++) {
+ population.getChromosome(i).setInputs(resources.getTestCase(t).getInputs());
+ // check every output
+ for (int o = 0; o < resources.getInt("outputs"); o++) {
+ if (population.getChromosome(i).getOutput(o).calculate() == resources.getTestCase(t).getOutput(o)) {
+ fitness++;
+ }
+ }
+ }
+ population.getChromosome(i).setFitness(fitness);
+ }
+ }
+
+ @Override
+ public HashMap<String, Parameter> getLocalParameters() {
+ return null;
+ }
+
+ @Override
+ public String toString() {
+ return "Test case";
+ }
+
+ @Override
+ public ModuleStatus getStatus(Resources resources) {
+ return null;
+ }
+}