aboutsummaryrefslogtreecommitdiffstats
path: root/src/jcgp/CGP.java
diff options
context:
space:
mode:
authorEduardo Pedroni <ep625@york.ac.uk>2014-03-09 23:32:05 +0000
committerEduardo Pedroni <ep625@york.ac.uk>2014-03-09 23:32:05 +0000
commitc0269683bcc7fde0d437ae84cd89a93d9d8fd81b (patch)
tree62ef738e29ae310dff513cc44193c5169c4ea4ca /src/jcgp/CGP.java
parentd63d3145f0f2abcee1bb88457324f4aaf9b9320e (diff)
Started refactoring backend in preparation for integration with the GUI
Diffstat (limited to 'src/jcgp/CGP.java')
-rw-r--r--src/jcgp/CGP.java137
1 files changed, 99 insertions, 38 deletions
diff --git a/src/jcgp/CGP.java b/src/jcgp/CGP.java
index 6ac8ff8..1004001 100644
--- a/src/jcgp/CGP.java
+++ b/src/jcgp/CGP.java
@@ -1,79 +1,140 @@
package jcgp;
+import java.util.HashMap;
import java.util.Random;
+import javafx.beans.property.SimpleIntegerProperty;
import jcgp.modules.ea.EvolutionaryAlgorithm;
import jcgp.modules.ea.StandardEA;
import jcgp.modules.fitness.FitnessFunction;
import jcgp.modules.fitness.TestCase;
import jcgp.modules.fitness.TruthTableEvaluator;
import jcgp.modules.function.Arithmetic;
+import jcgp.modules.function.BitwiseLogic;
+import jcgp.modules.function.BooleanLogic;
import jcgp.modules.function.FunctionSet;
import jcgp.modules.mutator.Mutator;
-import jcgp.modules.mutator.StandardMutator;
+import jcgp.modules.mutator.PointMutator;
import jcgp.parameters.BooleanParameter;
+import jcgp.parameters.DoubleParameter;
import jcgp.parameters.IntegerParameter;
+import jcgp.parameters.Parameter;
import jcgp.parameters.Parameters;
import jcgp.population.Population;
public class CGP {
// CGP components
- private EvolutionaryAlgorithm evolutionaryAlgorithm;
- private Mutator mutator;
- private Population population;
- private FitnessFunction fitnessFunction;
+ private Mutator[] mutators = new Mutator[] {
+ new PointMutator()};
+ private Mutator mutator = mutators[0];
+
+ private EvolutionaryAlgorithm[] evolutionaryAlgorithms = new EvolutionaryAlgorithm[] {
+ new StandardEA()};
+ private EvolutionaryAlgorithm evolutionaryAlgorithm = evolutionaryAlgorithms[0];
+
+ private FitnessFunction[] fitnessFunctions = new FitnessFunction[] {
+ new TruthTableEvaluator()};
+ private FitnessFunction fitnessFunction = fitnessFunctions[0];
+
+ private FunctionSet[] functionSets = new FunctionSet[] {
+ new FunctionSet("Arithmetic",
+ new Arithmetic.Addition(),
+ new Arithmetic.Subtraction(),
+ new Arithmetic.Multiplication(),
+ new Arithmetic.Division()),
+
+ new FunctionSet("32-bit logic",
+ new BitwiseLogic.And(),
+ new BitwiseLogic.Or(),
+ new BitwiseLogic.Nand(),
+ new BitwiseLogic.Nor(),
+ new BitwiseLogic.Xor(),
+ new BitwiseLogic.Xnor(),
+ new BitwiseLogic.Not()),
+
+ new FunctionSet("1-bit logic",
+ new BooleanLogic.And(),
+ new BooleanLogic.Or(),
+ new BooleanLogic.Nand(),
+ new BooleanLogic.Nor(),
+ new BooleanLogic.Xor(),
+ new BooleanLogic.Xnor(),
+ new BooleanLogic.Not())};
+ private Population population;
+
+ private static HashMap<String, Parameter> parameters = new HashMap<String, Parameter>();
+
public CGP() {
- initialise();
+ createBaseParameters();
for (int i = 0; i < Parameters.getTotalGenerations(); i++) {
- Parameters.setCurrentGeneration(i);
+
+ ((SimpleIntegerProperty) get("currentGen").getValue()).set(i);
fitnessFunction.evaluate(population);
evolutionaryAlgorithm.evolve(population, mutator);
+
if (evolutionaryAlgorithm.getFittestChromosome().getFitness() >= 3) {
- if (Parameters.getDebug()) {
- evolutionaryAlgorithm.getFittestChromosome().printNodes();
- }
break;
}
}
}
- /**
- *
- */
- private void initialise() {
+ private void createBaseParameters() {
// make fundamental parameters
- Parameters.add("Rows", new IntegerParameter(3));
- Parameters.add("Columns", new IntegerParameter(3));
- Parameters.add("Inputs", new IntegerParameter(3));
- Parameters.add("Outputs", new IntegerParameter(3));
- Parameters.add("population", new IntegerParameter(5));
-
- Parameters.add("generations", new IntegerParameter(100));
- Parameters.add("runs", new IntegerParameter(5));
-
- Parameters.add("debug", new BooleanParameter(false));
+ parameters.put("rows", new IntegerParameter(3, "Rows"));
+ parameters.put("columns", new IntegerParameter(3, "Columns"));
+ parameters.put("inputs", new IntegerParameter(3, "Inputs"));
+ parameters.put("outputs", new IntegerParameter(3, "Outputs"));
+ parameters.put("popSize", new IntegerParameter(5, "Population"));
- // initialise function set
- FunctionSet functionSet = new FunctionSet(new Arithmetic.Addition(), new Arithmetic.Subtraction(), new Arithmetic.Multiplication());
+ parameters.put("nodes", new IntegerParameter(9, "", true, true));
- // initialise utilities
- Utilities.setResources(new Random(1234), functionSet);
+ parameters.put("gens", new IntegerParameter(100, "Generations"));
+ parameters.put("currentGen", new IntegerParameter(0, "Generation"));
+ parameters.put("runs", new IntegerParameter(5, "Runs"));
- // initialise fitness function and truth table
- TruthTable.setTestCases(new TestCase(new Object[] {2, 5, 4}, new Object[] {1, 10, 15}));
- fitnessFunction = new TruthTableEvaluator();
-
- // initialise EA
- evolutionaryAlgorithm = new StandardEA();
- mutator = new StandardMutator();
-
- // initialise population
- population = new Population();
+ parameters.put("debug", new BooleanParameter(false, "Debug"));
+ }
+// /**
+// *
+// */
+// private void loadModules() {
+// // initialise function set
+// FunctionSet functionSet = new FunctionSet(new Arithmetic.Addition(), new Arithmetic.Subtraction(), new Arithmetic.Multiplication());
+//
+// // initialise utilities
+// Utilities.setResources(new Random(1234), functionSet);
+//
+// // initialise fitness function and truth table
+// TruthTable.setTestCases(new TestCase(new Object[] {2, 5, 4}, new Object[] {1, 10, 15}));
+// fitnessFunction = new TruthTableEvaluator();
+//
+// // initialise EA
+// evolutionaryAlgorithm = new StandardEA();
+// mutator = new StandardMutator();
+//
+// // initialise population
+// population = new Population();
+// }
+
+ // Parameter methods
+ public static void registerParameter(String key, Parameter value) {
+ parameters.put(key, value);
+ }
+
+ public static Parameter get(String key) {
+ return parameters.get(key);
+ }
+
+ public static boolean contains(String key) {
+ return parameters.containsKey(key);
}
+
+ // Utility methods
+
}