diff --git a/src/eva2/optimization/modules/AbstractOptimizationParameters.java b/src/eva2/optimization/modules/AbstractOptimizationParameters.java index c71f25c7..16ba1d97 100644 --- a/src/eva2/optimization/modules/AbstractOptimizationParameters.java +++ b/src/eva2/optimization/modules/AbstractOptimizationParameters.java @@ -25,13 +25,11 @@ import java.util.logging.Logger; public abstract class AbstractOptimizationParameters implements InterfaceOptimizationParameters, Serializable { protected static final Logger LOGGER = Logger.getLogger(AbstractOptimizationParameters.class.getName()); - @Parameter(name = "Random Seed", description = "Random number seed, set to zero to use current system time.") protected long randomSeed = (long) 0.0; /** * The optimizer to be executed. */ - @Parameter(name = "Optimizer", description = "Choose an optimization strategy.") protected InterfaceOptimizer optimizer; /** @@ -39,14 +37,12 @@ public abstract class AbstractOptimizationParameters implements InterfaceOptimiz * When changed it is automatically applied to the * selected optimizer. */ - @Parameter(name = "Problem", description = "Choose the problem that is to optimize and the EA individual parameters.") protected InterfaceOptimizationProblem problem; /** * The termination criteria that terminated an * optimization run. */ - @Parameter(name = "Terminator", description = "Choose a termination criterion.") protected InterfaceTerminator terminator; /** @@ -54,7 +50,6 @@ public abstract class AbstractOptimizationParameters implements InterfaceOptimiz * This can be enabled in the UI and will perform additional * optimization e.g. with Hill Climbing. */ - @Parameter(name = "Post Processing", description = "Parameters for the post processing step.") protected InterfacePostProcessParams postProcessParams = new PostProcessParams(false); transient protected InterfacePopulationChangedEventListener populationChangedEventListener; @@ -183,6 +178,7 @@ public abstract class AbstractOptimizationParameters implements InterfaceOptimiz } @Override + @Parameter(description = "The optimization strategy to use.") public void setOptimizer(InterfaceOptimizer optimizer) { this.optimizer = optimizer; this.optimizer.setProblem(this.problem); @@ -219,6 +215,7 @@ public abstract class AbstractOptimizationParameters implements InterfaceOptimiz * @param problem */ @Override + @Parameter(description = "Choose the problem that is to optimize and the EA individual parameters.") public void setProblem(InterfaceOptimizationProblem problem) { this.problem = problem; this.optimizer.setProblem(this.problem); @@ -236,6 +233,7 @@ public abstract class AbstractOptimizationParameters implements InterfaceOptimiz * @param x Long seed. */ @Override + @Parameter(name = "seed", description = "Random number seed, set to zero to use current system time.") public void setRandomSeed(long x) { randomSeed = x; } @@ -257,6 +255,7 @@ public abstract class AbstractOptimizationParameters implements InterfaceOptimiz * @param term The new terminator */ @Override + @Parameter(description = "The termination criterion.") public void setTerminator(InterfaceTerminator term) { this.terminator = term; } @@ -272,6 +271,7 @@ public abstract class AbstractOptimizationParameters implements InterfaceOptimiz } @Override + @Parameter(description = "Parameters for the post processing step.") public void setPostProcessParams(InterfacePostProcessParams ppp) { postProcessParams = ppp; } diff --git a/src/eva2/optimization/operator/terminators/EvaluationTerminator.java b/src/eva2/optimization/operator/terminators/EvaluationTerminator.java index cccd5d61..9985048d 100644 --- a/src/eva2/optimization/operator/terminators/EvaluationTerminator.java +++ b/src/eva2/optimization/operator/terminators/EvaluationTerminator.java @@ -21,7 +21,6 @@ public class EvaluationTerminator implements InterfaceTerminator, /** * Number of fitness calls on the problem which is optimized. */ - @Parameter(name = "Max. Fitness Calls", description = "Number of calls to fitness function.") protected int maxFitnessCalls = 1000; public EvaluationTerminator() { @@ -67,6 +66,7 @@ public class EvaluationTerminator implements InterfaceTerminator, return ret; } + @Parameter(name = "calls", description = "Number of calls to fitness function.") public void setFitnessCalls(int x) { maxFitnessCalls = x; } diff --git a/src/eva2/optimization/operator/terminators/MaximumTimeTerminator.java b/src/eva2/optimization/operator/terminators/MaximumTimeTerminator.java index 1612ca3d..7a95f6d3 100644 --- a/src/eva2/optimization/operator/terminators/MaximumTimeTerminator.java +++ b/src/eva2/optimization/operator/terminators/MaximumTimeTerminator.java @@ -15,7 +15,6 @@ import eva2.util.annotation.Parameter; */ @Description("Terminate if a maximum time (seconds) was reached.") public class MaximumTimeTerminator implements InterfaceTerminator { - @Parameter(name = "maxTime", description = "Maximum time in seconds") private int maximumTime = 5; private long startTime; @@ -49,6 +48,7 @@ public class MaximumTimeTerminator implements InterfaceTerminator { return maximumTime; } + @Parameter(name = "time", description = "Maximum time in seconds") public void setMaximumTime(int maximumTime) { this.maximumTime = maximumTime; } diff --git a/src/eva2/optimization/strategies/AbstractOptimizer.java b/src/eva2/optimization/strategies/AbstractOptimizer.java index f9bbe927..369b48a0 100644 --- a/src/eva2/optimization/strategies/AbstractOptimizer.java +++ b/src/eva2/optimization/strategies/AbstractOptimizer.java @@ -14,7 +14,6 @@ import java.util.ArrayList; */ public abstract class AbstractOptimizer implements InterfaceOptimizer { - @Parameter(name = "Population", description = "Edit the properties of the population used.") protected Population population = new Population(); protected InterfaceOptimizationProblem optimizationProblem = new F1Problem(); @@ -56,6 +55,7 @@ public abstract class AbstractOptimizer implements InterfaceOptimizer { } @Override + @Parameter(description = "Edit the properties of the population used.") public void setPopulation(Population pop) { this.population = pop; } diff --git a/src/eva2/optimization/strategies/AdaptiveDifferentialEvolution.java b/src/eva2/optimization/strategies/AdaptiveDifferentialEvolution.java index 48b71a1c..945d2ca1 100644 --- a/src/eva2/optimization/strategies/AdaptiveDifferentialEvolution.java +++ b/src/eva2/optimization/strategies/AdaptiveDifferentialEvolution.java @@ -1,13 +1,12 @@ package eva2.optimization.strategies; -import eva2.optimization.population.InterfacePopulationChangedEventListener; import eva2.optimization.individuals.AbstractEAIndividual; +import eva2.optimization.population.InterfacePopulationChangedEventListener; import eva2.optimization.population.InterfaceSolutionSet; import eva2.optimization.population.Population; import eva2.problems.AbstractOptimizationProblem; import eva2.problems.F1Problem; import eva2.util.annotation.Description; -import eva2.util.annotation.Parameter; import java.util.ArrayList; @@ -19,13 +18,8 @@ import java.util.ArrayList; public class AdaptiveDifferentialEvolution extends AbstractOptimizer { protected Population population; - @Parameter(name = "groups", description = "Number of sub-groups to use during optimization.") protected int nonOverlappingGroups = 5; - - @Parameter(name = "F", description = "Differential Weight") protected double differentialWeight = 0.8; - - @Parameter(name = "CR", description = "Crossover Rate") protected double crossoverRate = 0.6; diff --git a/src/eva2/optimization/strategies/ArtificialBeeColony.java b/src/eva2/optimization/strategies/ArtificialBeeColony.java index ff3f5139..8191b8bd 100644 --- a/src/eva2/optimization/strategies/ArtificialBeeColony.java +++ b/src/eva2/optimization/strategies/ArtificialBeeColony.java @@ -23,7 +23,6 @@ public class ArtificialBeeColony extends AbstractOptimizer implements Serializab /** * A food source which could not be improved through "maxTrials" trials is abandoned by its employed bee. */ - @Parameter(name = "trials", description = "Maximum number of trials until bee abandons the food source") protected int maxTrials = 100; protected AbstractEAIndividual bestIndividual; @@ -243,6 +242,7 @@ public class ArtificialBeeColony extends AbstractOptimizer implements Serializab this.population = pop; } + @Parameter(name = "trials", description = "Maximum number of trials until bee abandons the food source") public void setMaxTrials(int maxTrials) { this.maxTrials = maxTrials; } diff --git a/src/eva2/optimization/strategies/DifferentialEvolution.java b/src/eva2/optimization/strategies/DifferentialEvolution.java index f746d322..b577b6c7 100644 --- a/src/eva2/optimization/strategies/DifferentialEvolution.java +++ b/src/eva2/optimization/strategies/DifferentialEvolution.java @@ -31,16 +31,12 @@ import java.util.Vector; public class DifferentialEvolution extends AbstractOptimizer implements java.io.Serializable { protected transient Population children = null; - @Parameter(name = "DEType", description = "Mutation type for DE") private eva2.optimization.enums.DEType DEType; - @Parameter(name = "F", description = "Differential Weight") private double differentialWeight = 0.8; - @Parameter(name = "CR", description = "Crossover Rate") private double crossoverRate = 0.6; - @Parameter(name = "Lambda", description = "Enhance greediness through amplification of the differential vector to the best individual for DE2.") private double lambda = 0.6; private double mt = 0.05; @@ -697,6 +693,7 @@ public class DifferentialEvolution extends AbstractOptimizer implements java.io. * * @param f */ + @Parameter(name = "F", description = "Differential Weight") public void setDifferentialWeight(double f) { this.differentialWeight = f; } @@ -715,6 +712,7 @@ public class DifferentialEvolution extends AbstractOptimizer implements java.io. * * @param k */ + @Parameter(name = "CR", description = "Crossover Rate") public void setCrossoverRate(double k) { if (k < 0) { k = 0; @@ -739,6 +737,7 @@ public class DifferentialEvolution extends AbstractOptimizer implements java.io. * * @param l */ + @Parameter(description = "Enhance greediness through amplification of the differential vector to the best individual for DE2.") public void setLambda(double l) { this.lambda = l; } @@ -775,6 +774,7 @@ public class DifferentialEvolution extends AbstractOptimizer implements java.io. * * @param s The type. */ + @Parameter(name = "type", description = "Mutation type for DE") public void setDEType(eva2.optimization.enums.DEType s) { this.DEType = s; // show mt for trig. DE only diff --git a/src/eva2/optimization/strategies/EvolutionStrategies.java b/src/eva2/optimization/strategies/EvolutionStrategies.java index e5640119..cec8e17f 100644 --- a/src/eva2/optimization/strategies/EvolutionStrategies.java +++ b/src/eva2/optimization/strategies/EvolutionStrategies.java @@ -24,14 +24,8 @@ import eva2.util.annotation.Parameter; */ @Description(value = "This is an Evolution Strategy. Note that the population size depends on mu (number of parents) and lambda (number of offspring)") public class EvolutionStrategies extends AbstractOptimizer implements java.io.Serializable { - - @Parameter(description = "Mu", name = "mu") protected int mu = 5; - - @Parameter(description = "Lambda", name = "lambda") protected int lambda = 20; - - @Parameter(description = "Determines whether the +-Strategy should be used.", name = "usePlus") protected boolean usePlusStrategy = false; private InterfaceSelection parentSelection = new SelectRandom(); private InterfaceSelection partnerSelection = new SelectRandom(); @@ -369,6 +363,7 @@ public class EvolutionStrategies extends AbstractOptimizer implements java.io.Se * * @param elitism */ + @Parameter(description = "Determines whether the +-Strategy should be used.", name = "usePlus") public void setPlusStrategy(boolean elitism) { this.usePlusStrategy = elitism; } @@ -405,8 +400,9 @@ public class EvolutionStrategies extends AbstractOptimizer implements java.io.Se /** * This method allows you to set parent population size myu * - * @param myu The parent population size. + * @param mu The parent population size. */ + @Parameter(description = "The parent population size.") public void setMu(int mu) { this.mu = mu; } @@ -424,6 +420,7 @@ public class EvolutionStrategies extends AbstractOptimizer implements java.io.Se * * @param lambda The children population size. */ + @Parameter(description = "The children population size.") public void setLambda(int lambda) { this.lambda = lambda; } diff --git a/src/eva2/optimization/strategies/FloodAlgorithm.java b/src/eva2/optimization/strategies/FloodAlgorithm.java index 027dc3fe..dbfe5784 100644 --- a/src/eva2/optimization/strategies/FloodAlgorithm.java +++ b/src/eva2/optimization/strategies/FloodAlgorithm.java @@ -26,7 +26,6 @@ public class FloodAlgorithm extends AbstractOptimizer implements java.io.Seriali GAIndividualBinaryData bestIndividual, testIndividual; public double initialFloodPeak = 2000.0, currentFloodPeak; - @Parameter(name = "drainRate", description = "Set the drain rate that reduces the current flood level each generation.") public double drainRate = 1.0; public FloodAlgorithm() { @@ -227,6 +226,7 @@ public class FloodAlgorithm extends AbstractOptimizer implements java.io.Seriali return this.drainRate; } + @Parameter(description = "Set the drain rate that reduces the current flood level each generation.") public void setDrainRate(double a) { this.drainRate = a; if (this.drainRate < 0) { diff --git a/src/eva2/problems/AbstractOptimizationProblem.java b/src/eva2/problems/AbstractOptimizationProblem.java index f2f2be5e..28749526 100644 --- a/src/eva2/problems/AbstractOptimizationProblem.java +++ b/src/eva2/problems/AbstractOptimizationProblem.java @@ -29,7 +29,6 @@ import eva2.util.annotation.Parameter; import javax.swing.*; import java.awt.*; import java.io.Serializable; -import java.util.Vector; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; @@ -72,10 +71,8 @@ public abstract class AbstractOptimizationProblem implements InterfaceOptimizati protected AbstractEAIndividual template = null; - @Parameter(name = "defaultAccuracy", description = "A default threshold to identify optima - e.g. the assumed minimal distance between any two optima.") private double defaultAccuracy = 0.001; // default accuracy for identifying optima. - @Parameter(name = "problemDimension", description = "Length of the x vector to be optimized.") protected int problemDimension = 10; /** @@ -561,6 +558,7 @@ public abstract class AbstractOptimizationProblem implements InterfaceOptimizati return defaultAccuracy; } + @Parameter(name = "accuracy", description = "A default threshold to identify optima - e.g. the assumed minimal distance between any two optima.") public void setDefaultAccuracy(double defAcc) { defaultAccuracy = defAcc; } diff --git a/src/eva2/problems/AbstractParallelOptimizationProblem.java b/src/eva2/problems/AbstractParallelOptimizationProblem.java index 497d2f46..1601961e 100644 --- a/src/eva2/problems/AbstractParallelOptimizationProblem.java +++ b/src/eva2/problems/AbstractParallelOptimizationProblem.java @@ -6,9 +6,7 @@ import eva2.util.annotation.Parameter; * This class is under construction. */ public abstract class AbstractParallelOptimizationProblem extends AbstractOptimizationProblem { - @Parameter(name = "localCPUs", description = "Set the number of local CPUS (only active in non-parallelized mode).") private int localCPUs = 4; - @Parameter(name = "paralellize", description = "Toggle between parallel and serial implementation.") private boolean parallelize = false; @Override @@ -34,6 +32,7 @@ public abstract class AbstractParallelOptimizationProblem extends AbstractOptimi return this.parallelize; } + @Parameter(description = "Toggle between parallel and serial implementation.") public void setParallelize(boolean b) { this.parallelize = b; } @@ -43,6 +42,7 @@ public abstract class AbstractParallelOptimizationProblem extends AbstractOptimi * * @param n Number of processors. */ + @Parameter(name = "cpu", description = "Set the number of local CPUS (only active in non-parallelized mode).") public void setNumberLocalCPUs(int n) { this.localCPUs = n; } diff --git a/src/eva2/util/annotation/Parameter.java b/src/eva2/util/annotation/Parameter.java index 875954ae..243fd7b2 100644 --- a/src/eva2/util/annotation/Parameter.java +++ b/src/eva2/util/annotation/Parameter.java @@ -3,9 +3,8 @@ package eva2.util.annotation; import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) +@Target(ElementType.METHOD) public @interface Parameter { - String name(); - + String name() default ""; String description(); }