package jcgp; import java.util.Random; import jcgp.ea.EvolutionaryAlgorithm; import jcgp.ea.StandardEA; import jcgp.ea.StandardMutator; import jcgp.fitness.FitnessFunction; import jcgp.fitness.TestFitFunction; import jcgp.function.Addition; import jcgp.function.Function; import jcgp.function.FunctionSet; import jcgp.function.Subtraction; import jcgp.population.Population; public class CGP { public static class Parameters { private static int rows, columns, inputs, outputs, mutationRate, generations, runs, populationSize; /** * @return the populationSize */ public static int getPopulationSize() { return populationSize; } /** * @param populationSize the populationSize to set */ private static void setPopulationSize(int populationSize) { Parameters.populationSize = populationSize; } /** * @return the rows */ public static int getRows() { return rows; } /** * @return the columns */ public static int getColumns() { return columns; } /** * @return the inputs */ public static int getInputs() { return inputs; } /** * @return the outputs */ public static int getOutputs() { return outputs; } /** * @return the mutationRate */ public static int getMutationRate() { return mutationRate; } /** * @return the generations */ public static int getGenerations() { return generations; } /** * @return the runs */ public static int getRuns() { return runs; } /** * @param rows the rows to set */ private static void setRows(int rows) { Parameters.rows = rows; } /** * @param columns the columns to set */ private static void setColumns(int columns) { Parameters.columns = columns; } /** * @param inputs the inputs to set */ private static void setInputs(int inputs) { Parameters.inputs = inputs; } /** * @param outputs the outputs to set */ private static void setOutputs(int outputs) { Parameters.outputs = outputs; } /** * @param mutationRate the mutationRate to set */ private static void setMutationRate(int mutationRate) { Parameters.mutationRate = mutationRate; } /** * @param generations the generations to set */ private static void setGenerations(int generations) { Parameters.generations = generations; } /** * @param runs the runs to set */ private static void setRuns(int runs) { Parameters.runs = runs; } } public static class Utilities { public static int getRandomInt(int limit){ return numberGenerator.nextInt(limit); } public static double getRandomDouble(int limit){ return numberGenerator.nextDouble() * limit; } public static Function getRandomFunction() { return functionSet.getFunction(Utilities.getRandomInt(functionSet.getFunctionCount())); } public static Function getFunction(int index) { return functionSet.getFunction(index); } } // system-wide resources private static FunctionSet functionSet; private static Random numberGenerator; // private FitnessFunction fitnessFunction; private EvolutionaryAlgorithm ea; private Population population; public CGP() { initialise(); fitnessFunction.evaluatePopulation(population); ea.evolve(population); } /** * */ private void initialise() { // initialise random number generator numberGenerator = new Random(1234); // initialise parameters Parameters.setInputs(3); Parameters.setColumns(3); Parameters.setRows(3); Parameters.setOutputs(3); Parameters.setGenerations(10); Parameters.setMutationRate(1); Parameters.setRuns(5); Parameters.setPopulationSize(5); // initialise function set functionSet = new FunctionSet(); functionSet.setFunctions(new Addition(), new Subtraction()); // initialise EA ea = new StandardEA(new StandardMutator()); // initialise fitness function fitnessFunction = new TestFitFunction(); // initialise population population = new Population(Parameters.getInputs(), Parameters.getRows(), Parameters.getColumns(), Parameters.getOutputs(), Parameters.getPopulationSize()); } }