package jcgp; import java.util.Random; import jcgp.ea.EvolutionaryAlgorithm; import jcgp.ea.Mutator; import jcgp.ea.StandardEA; import jcgp.ea.StandardMutator; import jcgp.fitness.FitnessFunction; import jcgp.fitness.TestCase; import jcgp.fitness.TruthTableEvaluator; import jcgp.function.Addition; import jcgp.function.FunctionSet; import jcgp.function.Multiplication; import jcgp.function.Subtraction; import jcgp.population.Population; public final class CGP { // CGP components private EvolutionaryAlgorithm ea; private Mutator mutator; private Population population; private FitnessFunction fitnessFunction; public CGP() { initialise(); for (int i = 0; i < Parameters.getTotalGenerations(); i++) { Parameters.setCurrentGeneration(i); fitnessFunction.evaluate(population); ea.evolve(population, mutator); if (ea.getBestFitness() >= 3) { break; } } } /** * */ private void initialise() { // initialise function set FunctionSet functionSet = new FunctionSet(new Addition(), new Subtraction(), new Multiplication()); // initialise utilities Utilities.setResources(new Random(1234), functionSet); // initialise parameters Parameters.setColumns(3); Parameters.setRows(6); Parameters.setInputs(3); Parameters.setOutputs(3); Parameters.setLevelsBack(3); Parameters.setPopulationSize(1, 4); Parameters.setMutationRate(10); Parameters.setTotalGenerations(5000); Parameters.setTotalRuns(5); Parameters.setMaxArity(functionSet.getMaxArity()); // 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 ea = new StandardEA(); mutator = new StandardMutator(); // initialise population population = new Population(); } }