diff options
Diffstat (limited to 'src/jcgp/CGP.java')
-rw-r--r-- | src/jcgp/CGP.java | 199 |
1 files changed, 196 insertions, 3 deletions
diff --git a/src/jcgp/CGP.java b/src/jcgp/CGP.java index d2cae80..e18e0ea 100644 --- a/src/jcgp/CGP.java +++ b/src/jcgp/CGP.java @@ -1,12 +1,205 @@ package jcgp; -public class CGP<T> { +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 int ROWS, COLUMNS, INPUTS, OUTPUTS, MUTATION_RATE, GENERATIONS, RUNS; + public static class Parameters { + private static int rows, columns, inputs, outputs, mutationRate, generations, runs, populationSize; - public CGP() { + /** + * @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()); + } } |