aboutsummaryrefslogtreecommitdiffstats
path: root/src/jcgp/backend/modules/fitness
diff options
context:
space:
mode:
authorEduardo Pedroni <ep625@york.ac.uk>2014-04-01 23:00:53 +0100
committerEduardo Pedroni <ep625@york.ac.uk>2014-04-01 23:00:53 +0100
commit02fd2bc7059da416937beb1abe67e5ca60379030 (patch)
tree609341fe10aaa0f2dc45a1e72eba20bd24fb1281 /src/jcgp/backend/modules/fitness
parenta757deacded0d7357a9f68462d3f2051e16004ee (diff)
Settings pane now actually controls the parameters, not much left to do.
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;
+ }
+}