aboutsummaryrefslogtreecommitdiffstats
path: root/src/jcgp/CGP.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jcgp/CGP.java')
-rw-r--r--src/jcgp/CGP.java199
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());
+ }
}