From c0269683bcc7fde0d437ae84cd89a93d9d8fd81b Mon Sep 17 00:00:00 2001 From: Eduardo Pedroni Date: Sun, 9 Mar 2014 23:32:05 +0000 Subject: Started refactoring backend in preparation for integration with the GUI --- src/jcgp/CGP.java | 137 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 99 insertions(+), 38 deletions(-) (limited to 'src/jcgp/CGP.java') 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 parameters = new HashMap(); + 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 + } -- cgit v1.2.3