From 1fd678821cf133c7c431daea687f3467bb0be2dd Mon Sep 17 00:00:00 2001 From: Eduardo Pedroni Date: Tue, 4 Feb 2014 16:20:33 +0000 Subject: Added fitness evaluation mechanism, though it might not be a very good design. Tests will be done to verify that. --- src/jcgp/fitness/FitnessEvaluator.java | 17 ---------- src/jcgp/fitness/FitnessFunction.java | 4 +-- src/jcgp/fitness/ParameterMismatchException.java | 10 ++++++ src/jcgp/fitness/TestCase.java | 41 ++++++++++++++++++++++++ src/jcgp/fitness/TestFitFunction.java | 17 ---------- src/jcgp/fitness/TruthTableEvaluator.java | 26 +++++++++++++++ 6 files changed, 79 insertions(+), 36 deletions(-) delete mode 100644 src/jcgp/fitness/FitnessEvaluator.java create mode 100644 src/jcgp/fitness/ParameterMismatchException.java create mode 100644 src/jcgp/fitness/TestCase.java delete mode 100644 src/jcgp/fitness/TestFitFunction.java create mode 100644 src/jcgp/fitness/TruthTableEvaluator.java (limited to 'src/jcgp/fitness') diff --git a/src/jcgp/fitness/FitnessEvaluator.java b/src/jcgp/fitness/FitnessEvaluator.java deleted file mode 100644 index 5ecf679..0000000 --- a/src/jcgp/fitness/FitnessEvaluator.java +++ /dev/null @@ -1,17 +0,0 @@ -package jcgp.fitness; - -import jcgp.population.Population; - -public class FitnessEvaluator { - - private FitnessFunction fitnessFunction; - - public FitnessEvaluator(FitnessFunction fitnessFunction) { - this.fitnessFunction = fitnessFunction; - } - - public void evaluateFitness(Population population) { - - } - -} diff --git a/src/jcgp/fitness/FitnessFunction.java b/src/jcgp/fitness/FitnessFunction.java index 2155542..6fa63ef 100644 --- a/src/jcgp/fitness/FitnessFunction.java +++ b/src/jcgp/fitness/FitnessFunction.java @@ -3,7 +3,7 @@ package jcgp.fitness; import jcgp.population.Population; public interface FitnessFunction { - - public void evaluatePopulation(Population population); + + public void evaluate(Population population); } diff --git a/src/jcgp/fitness/ParameterMismatchException.java b/src/jcgp/fitness/ParameterMismatchException.java new file mode 100644 index 0000000..0ca69a7 --- /dev/null +++ b/src/jcgp/fitness/ParameterMismatchException.java @@ -0,0 +1,10 @@ +package jcgp.fitness; + +public class ParameterMismatchException extends RuntimeException { + + /** + * + */ + private static final long serialVersionUID = -3161318886125868134L; + +} diff --git a/src/jcgp/fitness/TestCase.java b/src/jcgp/fitness/TestCase.java new file mode 100644 index 0000000..e2bd5ed --- /dev/null +++ b/src/jcgp/fitness/TestCase.java @@ -0,0 +1,41 @@ +package jcgp.fitness; + +import jcgp.CGP.Parameters; + +public class TestCase { + + private int[] inputs; + private int[] outputs; + + public TestCase(int[] inputs, int[] outputs) throws ParameterMismatchException { + if (inputs.length == Parameters.getInputs()) { + this.inputs = inputs; + } else { + throw new ParameterMismatchException(); + } + + if (outputs.length == Parameters.getOutputs()) { + this.outputs = outputs; + } else { + throw new ParameterMismatchException(); + } + + } + + public int getInput(int index) { + return inputs[index]; + } + + public int getOutput(int index) { + return outputs[index]; + } + + public int[] getInputs() { + return inputs; + } + + public int[] getOutputs() { + return outputs; + } + +} diff --git a/src/jcgp/fitness/TestFitFunction.java b/src/jcgp/fitness/TestFitFunction.java deleted file mode 100644 index 00ee833..0000000 --- a/src/jcgp/fitness/TestFitFunction.java +++ /dev/null @@ -1,17 +0,0 @@ -package jcgp.fitness; - -import jcgp.population.Chromosome; -import jcgp.population.Population; - -public class TestFitFunction implements FitnessFunction { - - @Override - public void evaluatePopulation(Population population) { - - for (Chromosome c : population) { - int i = c.getOutput(0).calculate(); - System.out.println(i); - c.setFitness(1); - } - } -} diff --git a/src/jcgp/fitness/TruthTableEvaluator.java b/src/jcgp/fitness/TruthTableEvaluator.java new file mode 100644 index 0000000..64ca209 --- /dev/null +++ b/src/jcgp/fitness/TruthTableEvaluator.java @@ -0,0 +1,26 @@ +package jcgp.fitness; + +import jcgp.CGP.Parameters; +import jcgp.CGP.TruthTable; +import jcgp.population.Chromosome; +import jcgp.population.Population; + +public class TruthTableEvaluator implements FitnessFunction { + + @Override + public void evaluate(Population population) { + for (Chromosome chromosome : population) { + for (int t = 0; t < TruthTable.getTestCaseCount(); t++) { + chromosome.setInputs(TruthTable.getTestCase(t).getInputs()); + int fitness = 0; + for (int o = 0; o < Parameters.getOutputs(); o++) { + if (chromosome.getOutput(o).calculate() == TruthTable.getTestCase(t).getOutput(o)) { + fitness++; + } + } + chromosome.setFitness(fitness); + } + } + } + +} -- cgit v1.2.3