From ee73f5dbe52cef482da7eabb7d40d550abaef91f Mon Sep 17 00:00:00 2001 From: Fabian Becker Date: Sat, 1 Nov 2014 18:32:21 +0100 Subject: [PATCH] Renamed init to initialize. Added @Parameter annotation to EAIndividual --- .../individuals/AbstractEAIndividual.java | 30 +++++----------- .../individuals/ESIndividualDoubleData.java | 4 +-- .../GAESIndividualBinaryDoubleData.java | 10 +++--- .../individuals/GAPIndividualProgramData.java | 10 +++--- ...IOBGAIndividualIntegerPermutationData.java | 10 +++--- .../operator/crossover/TestESCrossover.java | 4 +-- src/eva2/optimization/strategies/ANPSO.java | 2 +- .../strategies/ArtificialBeeColony.java | 2 +- .../strategies/GeneticAlgorithm.java | 36 ------------------- .../ParticleFilterOptimization.java | 2 +- .../ParticleSubSwarmOptimization.java | 2 +- .../strategies/tribes/TribesExplorer.java | 4 +-- .../tools/ImpactOfDimensionOnMOEAs.java | 2 +- .../AbstractMultiModalProblemKnown.java | 2 +- .../problems/AbstractOptimizationProblem.java | 2 +- src/eva2/problems/BKnapsackProblem.java | 2 +- 16 files changed, 37 insertions(+), 87 deletions(-) diff --git a/src/eva2/optimization/individuals/AbstractEAIndividual.java b/src/eva2/optimization/individuals/AbstractEAIndividual.java index b7ad9005..7466e444 100644 --- a/src/eva2/optimization/individuals/AbstractEAIndividual.java +++ b/src/eva2/optimization/individuals/AbstractEAIndividual.java @@ -14,6 +14,7 @@ import eva2.problems.InterfaceOptimizationProblem; import eva2.tools.EVAERROR; import eva2.tools.math.RNG; import eva2.util.annotation.Hidden; +import eva2.util.annotation.Parameter; import java.util.*; @@ -275,7 +276,7 @@ public abstract class AbstractEAIndividual implements IndividualInterface, java. * * @param opt The optimization problem that is to be solved. */ - public void init(InterfaceOptimizationProblem opt) { + public void initialize(InterfaceOptimizationProblem opt) { initializationOperator.initialize(this, opt); this.mutationOperator.initialize(this, opt); this.crossoverOperator.init(this, opt); @@ -814,6 +815,7 @@ public abstract class AbstractEAIndividual implements IndividualInterface, java. * * @param mutator The mutation operator. */ + @Parameter(name = "mutator", description = "The mutation operator to use.") public void setMutationOperator(InterfaceMutation mutator) { this.mutationOperator = mutator; } @@ -822,16 +824,13 @@ public abstract class AbstractEAIndividual implements IndividualInterface, java. return this.mutationOperator; } - public String mutationOperatorTipText() { - return "Choose the mutation operator to use."; - } - /** * This method allows you to set the mutation probability, e.g. the chance * that mutation occurs at all. * * @param mutprob The mutation probability. */ + @Parameter(name = "pm", description = "The chance that mutation occurs.") public void setMutationProbability(double mutprob) { if (mutprob < 0) { mutprob = 0; @@ -846,16 +845,13 @@ public abstract class AbstractEAIndividual implements IndividualInterface, java. return mutationProbability; } - public String mutationProbabilityTipText() { - return "The chance that mutation occurs."; - } - /** * This method allows you to choose from multiple crossover operators. Note: - * If the operator doeesn't suite the data nothing will happen. + * If the operator doesn't suite the data nothing will happen. * * @param crossover The crossover operator. */ + @Parameter(name = "crossover", description = "The crossover operator.") public void setCrossoverOperator(InterfaceCrossover crossover) { this.crossoverOperator = crossover; } @@ -864,15 +860,12 @@ public abstract class AbstractEAIndividual implements IndividualInterface, java. return this.crossoverOperator; } - public String crossoverOperatorTipText() { - return "Choose the crossover operator to use."; - } - /** * This method allows to set the crossover probability * * @param prob */ + @Parameter(name = "pc", description = "The crossover rate") public void setCrossoverProbability(double prob) { this.crossoverProbability = prob; if (this.crossoverProbability > 1) { @@ -887,22 +880,15 @@ public abstract class AbstractEAIndividual implements IndividualInterface, java. return this.crossoverProbability; } - public String crossoverProbabilityTipText() { - return "The chance that crossover occurs."; - } - public InterfaceInitialization getInitOperator() { return initializationOperator; } + @Parameter(name = "initop", description = "The initialization method for the individual") public void setInitOperator(InterfaceInitialization mInitOperator) { initializationOperator = mInitOperator; } - public String initOperatorTipText() { - return "An initialization method for the individual"; - } - /** * This method allows you to store an arbitrary value under an arbitrary * name. diff --git a/src/eva2/optimization/individuals/ESIndividualDoubleData.java b/src/eva2/optimization/individuals/ESIndividualDoubleData.java index 56caa43c..854995f6 100644 --- a/src/eva2/optimization/individuals/ESIndividualDoubleData.java +++ b/src/eva2/optimization/individuals/ESIndividualDoubleData.java @@ -244,8 +244,8 @@ public class ESIndividualDoubleData extends AbstractEAIndividual implements Inte * @param opt The optimization problem that is to be solved. */ @Override - public void init(InterfaceOptimizationProblem opt) { - super.init(opt); + public void initialize(InterfaceOptimizationProblem opt) { + super.initialize(opt); // evil operators may not respect the range, so at least give some hint if (!Mathematics.isInRange(genotype, range)) { EVAERROR.errorMsgOnce("Warning: Individual out of range after initialization (and potential initial crossover/mutation)!"); diff --git a/src/eva2/optimization/individuals/GAESIndividualBinaryDoubleData.java b/src/eva2/optimization/individuals/GAESIndividualBinaryDoubleData.java index 721d6e50..37bcc469 100644 --- a/src/eva2/optimization/individuals/GAESIndividualBinaryDoubleData.java +++ b/src/eva2/optimization/individuals/GAESIndividualBinaryDoubleData.java @@ -76,9 +76,9 @@ public class GAESIndividualBinaryDoubleData extends AbstractEAIndividual impleme * @param opt The optimization problem that is to be solved. */ @Override - public void init(InterfaceOptimizationProblem opt) { - ((AbstractEAIndividual) this.doubleIndividual).init(opt); - ((AbstractEAIndividual) this.binaryIndividual).init(opt); + public void initialize(InterfaceOptimizationProblem opt) { + ((AbstractEAIndividual) this.doubleIndividual).initialize(opt); + ((AbstractEAIndividual) this.binaryIndividual).initialize(opt); } @Override @@ -105,8 +105,8 @@ public class GAESIndividualBinaryDoubleData extends AbstractEAIndividual impleme ((AbstractEAIndividual) this.binaryIndividual).initByValue(((Object[]) obj)[0], opt); } } else { - ((AbstractEAIndividual) this.doubleIndividual).init(opt); - ((AbstractEAIndividual) this.binaryIndividual).init(opt); + ((AbstractEAIndividual) this.doubleIndividual).initialize(opt); + ((AbstractEAIndividual) this.binaryIndividual).initialize(opt); System.out.println("Initial value for GAESIndividualDoubleData is not suitable!"); } } diff --git a/src/eva2/optimization/individuals/GAPIndividualProgramData.java b/src/eva2/optimization/individuals/GAPIndividualProgramData.java index c924e35d..72a47d5c 100644 --- a/src/eva2/optimization/individuals/GAPIndividualProgramData.java +++ b/src/eva2/optimization/individuals/GAPIndividualProgramData.java @@ -72,9 +72,9 @@ public class GAPIndividualProgramData extends AbstractEAIndividual implements In * @param opt The optimization problem that is to be solved. */ @Override - public void init(InterfaceOptimizationProblem opt) { - ((AbstractEAIndividual) this.numberData).init(opt); - ((AbstractEAIndividual) this.programData).init(opt); + public void initialize(InterfaceOptimizationProblem opt) { + ((AbstractEAIndividual) this.numberData).initialize(opt); + ((AbstractEAIndividual) this.programData).initialize(opt); } @Override @@ -101,8 +101,8 @@ public class GAPIndividualProgramData extends AbstractEAIndividual implements In ((AbstractEAIndividual) this.programData).initByValue(((Object[]) obj)[0], opt); } } else { - ((AbstractEAIndividual) this.numberData).init(opt); - ((AbstractEAIndividual) this.programData).init(opt); + ((AbstractEAIndividual) this.numberData).initialize(opt); + ((AbstractEAIndividual) this.programData).initialize(opt); System.out.println("Initial value for GAPIndividualDoubleData is not suitable!"); } } diff --git a/src/eva2/optimization/individuals/GIOBGAIndividualIntegerPermutationData.java b/src/eva2/optimization/individuals/GIOBGAIndividualIntegerPermutationData.java index 2dc12cdd..084fe372 100644 --- a/src/eva2/optimization/individuals/GIOBGAIndividualIntegerPermutationData.java +++ b/src/eva2/optimization/individuals/GIOBGAIndividualIntegerPermutationData.java @@ -72,9 +72,9 @@ public class GIOBGAIndividualIntegerPermutationData extends AbstractEAIndividual * @param opt The optimization problem that is to be solved. */ @Override - public void init(InterfaceOptimizationProblem opt) { - ((AbstractEAIndividual) this.integerData).init(opt); - ((AbstractEAIndividual) this.permutationData).init(opt); + public void initialize(InterfaceOptimizationProblem opt) { + ((AbstractEAIndividual) this.integerData).initialize(opt); + ((AbstractEAIndividual) this.permutationData).initialize(opt); } @Override @@ -101,8 +101,8 @@ public class GIOBGAIndividualIntegerPermutationData extends AbstractEAIndividual ((AbstractEAIndividual) this.permutationData).initByValue(((Object[]) obj)[0], opt); } } else { - ((AbstractEAIndividual) this.integerData).init(opt); - ((AbstractEAIndividual) this.permutationData).init(opt); + ((AbstractEAIndividual) this.integerData).initialize(opt); + ((AbstractEAIndividual) this.permutationData).initialize(opt); System.out.println("Initial value for GIOBGAIndividualIntegerPermutationData is not suitable!"); } } diff --git a/src/eva2/optimization/operator/crossover/TestESCrossover.java b/src/eva2/optimization/operator/crossover/TestESCrossover.java index b4ec62c8..65adef3a 100644 --- a/src/eva2/optimization/operator/crossover/TestESCrossover.java +++ b/src/eva2/optimization/operator/crossover/TestESCrossover.java @@ -110,12 +110,12 @@ public class TestESCrossover implements java.io.Serializable { tmpIndyD.setDoubleRange(newRange); for (int i = 0; i < partners.getTargetSize(); i++) { tmpIndyEA = (AbstractEAIndividual) ((AbstractEAIndividual) tmpIndyD).clone(); - tmpIndyEA.init(optimizationProblem); + tmpIndyEA.initialize(optimizationProblem); partners.add(tmpIndyEA); } partners.init(); daddy = (AbstractEAIndividual) ((AbstractEAIndividual) tmpIndyD).clone(); - daddy.init(optimizationProblem); + daddy.initialize(optimizationProblem); plot.clearAll(); plot.setUnconnectedPoint(-2, -2, 0); plot.setUnconnectedPoint(2, 2, 0); diff --git a/src/eva2/optimization/strategies/ANPSO.java b/src/eva2/optimization/strategies/ANPSO.java index 215ea2e6..9df2c4b7 100644 --- a/src/eva2/optimization/strategies/ANPSO.java +++ b/src/eva2/optimization/strategies/ANPSO.java @@ -541,7 +541,7 @@ public class ANPSO extends NichePSO implements InterfaceAdditionalPopulationInfo if (reinitSuperfl) { for (int i = 0; i < tmpPop.size(); i++) { AbstractEAIndividual indy = tmpPop.getEAIndividual(i); - indy.init(optimizationProblem); + indy.initialize(optimizationProblem); indy.resetFitness(Double.MAX_VALUE); // TODO this is not so nice... they should be collected in a reinit-list and inserted at the beginning of the next optimize step ParticleSwarmOptimization.initIndividualDefaults(indy, 0.2); ParticleSwarmOptimization.initIndividualMemory(indy); diff --git a/src/eva2/optimization/strategies/ArtificialBeeColony.java b/src/eva2/optimization/strategies/ArtificialBeeColony.java index 8191b8bd..beacd1d5 100644 --- a/src/eva2/optimization/strategies/ArtificialBeeColony.java +++ b/src/eva2/optimization/strategies/ArtificialBeeColony.java @@ -194,7 +194,7 @@ public class ArtificialBeeColony extends AbstractOptimizer implements Serializab */ AbstractEAIndividual oldestIndy = getOldestIndividual(); if (oldestIndy.getAge() > this.maxTrials) { - oldestIndy.init(this.optimizationProblem); + oldestIndy.initialize(this.optimizationProblem); this.optimizationProblem.evaluate(oldestIndy); this.population.incrFunctionCalls(); } diff --git a/src/eva2/optimization/strategies/GeneticAlgorithm.java b/src/eva2/optimization/strategies/GeneticAlgorithm.java index 6c61366c..70bdd49a 100644 --- a/src/eva2/optimization/strategies/GeneticAlgorithm.java +++ b/src/eva2/optimization/strategies/GeneticAlgorithm.java @@ -1,6 +1,5 @@ package eva2.optimization.strategies; -import eva2.optimization.population.InterfacePopulationChangedEventListener; import eva2.optimization.individuals.AbstractEAIndividual; import eva2.optimization.operator.mutation.InterfaceAdaptOperatorGenerational; import eva2.optimization.operator.selection.InterfaceSelection; @@ -12,8 +11,6 @@ import eva2.optimization.population.SolutionSet; import eva2.problems.InterfaceOptimizationProblem; import eva2.util.annotation.Description; -import java.util.Vector; - /** * The traditional genetic algorithms as devised by Holland. To only special * here it the plague factor which reduces the population size to tune from a @@ -28,7 +25,6 @@ public class GeneticAlgorithm extends AbstractOptimizer implements java.io.Seria private boolean useElitism = true; private int plague = 0; private int numberOfPartners = 1; - transient private Vector changeListener; public GeneticAlgorithm() { } @@ -153,38 +149,6 @@ public class GeneticAlgorithm extends AbstractOptimizer implements java.io.Seria this.firePropertyChangedEvent(Population.NEXT_GENERATION_PERFORMED); } - /** - * This method allows you to add the LectureGUI as listener to the Optimizer - * - * @param ea - */ - @Override - public void addPopulationChangedEventListener(InterfacePopulationChangedEventListener ea) { - if (this.changeListener == null) { - this.changeListener = new Vector<>(); - } - this.changeListener.add(ea); - } - - @Override - public boolean removePopulationChangedEventListener( - InterfacePopulationChangedEventListener ea) { - return changeListener != null && changeListener.removeElement(ea); - } - - /** - * Something has changed - * - * @param name - */ - protected void firePropertyChangedEvent(String name) { - if (this.changeListener != null) { - for (int i = 0; i < this.changeListener.size(); i++) { - this.changeListener.get(i).registerPopulationStateChanged(this, name); - } - } - } - @Override public InterfaceOptimizationProblem getProblem() { return this.optimizationProblem; diff --git a/src/eva2/optimization/strategies/ParticleFilterOptimization.java b/src/eva2/optimization/strategies/ParticleFilterOptimization.java index 379a536a..e780edf9 100644 --- a/src/eva2/optimization/strategies/ParticleFilterOptimization.java +++ b/src/eva2/optimization/strategies/ParticleFilterOptimization.java @@ -146,7 +146,7 @@ public class ParticleFilterOptimization extends AbstractOptimizer implements jav int i; for (i = 0; (i + parents.getTargetSize()) < pop.getTargetSize(); i++) { immi = (AbstractEAIndividual) pop.getEAIndividual(0).clone(); - immi.init(getProblem()); + immi.initialize(getProblem()); parents.add(immi); } parents.synchSize(); diff --git a/src/eva2/optimization/strategies/ParticleSubSwarmOptimization.java b/src/eva2/optimization/strategies/ParticleSubSwarmOptimization.java index b2996da3..2f7183c0 100644 --- a/src/eva2/optimization/strategies/ParticleSubSwarmOptimization.java +++ b/src/eva2/optimization/strategies/ParticleSubSwarmOptimization.java @@ -481,7 +481,7 @@ public class ParticleSubSwarmOptimization extends ParticleSwarmOptimizationGCPSO for (int i = 0; i < tmp.getTargetSize(); i++) { tmpIndy = (AbstractEAIndividual) template.clone(); - tmpIndy.init(prob); + tmpIndy.initialize(prob); tmp.add(tmpIndy); } tmp.init(); diff --git a/src/eva2/optimization/strategies/tribes/TribesExplorer.java b/src/eva2/optimization/strategies/tribes/TribesExplorer.java index 9be3c417..da6f85c8 100644 --- a/src/eva2/optimization/strategies/tribes/TribesExplorer.java +++ b/src/eva2/optimization/strategies/tribes/TribesExplorer.java @@ -954,7 +954,7 @@ v[d] = cmin * v[d]; } @Override - public void init(InterfaceOptimizationProblem opt) { + public void initialize(InterfaceOptimizationProblem opt) { // TODO whats this for? for (int i = 0; i < this.position.x.length; i++) { this.position.x[0] = 0.; @@ -983,7 +983,7 @@ v[d] = cmin * v[d]; } this.setDoubleGenotype(x); } else { - this.init(opt); + this.initialize(opt); System.err.println("Initial value for ESIndividualDoubleData is not double[]!"); } } diff --git a/src/eva2/optimization/tools/ImpactOfDimensionOnMOEAs.java b/src/eva2/optimization/tools/ImpactOfDimensionOnMOEAs.java index 9ee4b7d4..0fe0f795 100644 --- a/src/eva2/optimization/tools/ImpactOfDimensionOnMOEAs.java +++ b/src/eva2/optimization/tools/ImpactOfDimensionOnMOEAs.java @@ -104,7 +104,7 @@ public class ImpactOfDimensionOnMOEAs { ((InterfaceDataTypeDouble) template).setDoubleDataLength(numberOfVariables); for (int i = 0; i < popSize; i++) { tmpIndy = (AbstractEAIndividual) template.clone(); - tmpIndy.init(null); + tmpIndy.initialize(null); pop.add(tmpIndy); } } diff --git a/src/eva2/problems/AbstractMultiModalProblemKnown.java b/src/eva2/problems/AbstractMultiModalProblemKnown.java index c05714d1..26b092f8 100644 --- a/src/eva2/problems/AbstractMultiModalProblemKnown.java +++ b/src/eva2/problems/AbstractMultiModalProblemKnown.java @@ -57,7 +57,7 @@ public abstract class AbstractMultiModalProblemKnown extends AbstractProblemDoub ((InterfaceDataTypeDouble) this.template).setDoubleRange(makeRange()); for (int i = 0; i < population.getTargetSize(); i++) { tmpIndy = (AbstractEAIndividual) this.template.clone(); - tmpIndy.init(this); + tmpIndy.initialize(this); population.add(tmpIndy); } // population initialize must be last diff --git a/src/eva2/problems/AbstractOptimizationProblem.java b/src/eva2/problems/AbstractOptimizationProblem.java index 28749526..17943a1f 100644 --- a/src/eva2/problems/AbstractOptimizationProblem.java +++ b/src/eva2/problems/AbstractOptimizationProblem.java @@ -191,7 +191,7 @@ public abstract class AbstractOptimizationProblem implements InterfaceOptimizati for (int i = 0; i < population.getTargetSize(); i++) { tmpIndy = (AbstractEAIndividual) template.clone(); - tmpIndy.init(prob); + tmpIndy.initialize(prob); population.add(tmpIndy); } // population initialize must be last diff --git a/src/eva2/problems/BKnapsackProblem.java b/src/eva2/problems/BKnapsackProblem.java index bea94ccc..43674ac3 100644 --- a/src/eva2/problems/BKnapsackProblem.java +++ b/src/eva2/problems/BKnapsackProblem.java @@ -160,7 +160,7 @@ public class BKnapsackProblem extends AbstractProblemBinary implements java.io.S } protected void initIndy(int k, AbstractEAIndividual indy) { - indy.init(this); + indy.initialize(this); if (RNG.flipCoin(this.problemSpecificInit)) { BitSet tmpSet = new BitSet(); tmpSet.clear();