From b9e43e1174066e94b8eae02ea6b3d7332fc5f1e4 Mon Sep 17 00:00:00 2001 From: Fabian Becker Date: Thu, 30 Oct 2014 16:27:35 +0100 Subject: [PATCH] Fix GUI hidden properties (setProblem) in Optimizers --- .../AdaptiveDifferentialEvolution.java | 27 +------ src/eva2/optimization/strategies/CBNPSO.java | 9 --- .../strategies/ClusterBasedNichingEA.java | 2 + .../strategies/ClusteringHillClimbing.java | 70 +------------------ .../DynamicParticleSwarmOptimization.java | 4 +- .../strategies/GeneticAlgorithm.java | 10 --- .../strategies/IslandModelEA.java | 2 + .../strategies/MemeticAlgorithm.java | 2 + .../strategies/MultiObjectiveEA.java | 2 + .../strategies/NelderMeadSimplex.java | 7 -- .../optimization/strategies/NichePSO.java | 2 + .../ParticleFilterOptimization.java | 2 + .../PopulationBasedIncrementalLearning.java | 7 +- .../strategies/ScatterSearch.java | 2 + .../strategies/ThresholdAlgorithm.java | 15 ---- .../strategies/WingedMultiObjectiveEA.java | 50 +------------ 16 files changed, 26 insertions(+), 187 deletions(-) diff --git a/src/eva2/optimization/strategies/AdaptiveDifferentialEvolution.java b/src/eva2/optimization/strategies/AdaptiveDifferentialEvolution.java index 77b3e5ce..d53e25f2 100644 --- a/src/eva2/optimization/strategies/AdaptiveDifferentialEvolution.java +++ b/src/eva2/optimization/strategies/AdaptiveDifferentialEvolution.java @@ -20,7 +20,7 @@ import java.util.ArrayList; * Yu, Shen, Chen, et.al. in 2014 (IEEE Transaction on Cybernetics, DOI: 10.1109/TCYB.2013.2279211). */ @Description("Differential Evolution with Two-Level Parameter Adaption (Yu, Shen, Chen, et.al., 2014") -public class AdaptiveDifferentialEvolution implements InterfaceOptimizer { +public class AdaptiveDifferentialEvolution extends AbstractOptimizer { protected Population population; @Parameter(name = "groups", description = "Number of sub-groups to use during optimization.") @@ -153,36 +153,11 @@ public class AdaptiveDifferentialEvolution implements InterfaceOptimizer { } } - @Override - public Population getPopulation() { - return population; - } - - @Override - public void setPopulation(Population pop) { - this.population = pop; - } - @Override public InterfaceSolutionSet getAllSolutions() { return null; } - /** - * Sets the optimization problem. Will cast to AbstractOptimizationProblem. - * - * @param problem The optimization problem. - */ - @Override - public void setProblem(InterfaceOptimizationProblem problem) { - this.optimizationProblem = (AbstractOptimizationProblem) problem; - } - - @Override - public InterfaceOptimizationProblem getProblem() { - return this.optimizationProblem; - } - @Override public String getStringRepresentation() { return null; diff --git a/src/eva2/optimization/strategies/CBNPSO.java b/src/eva2/optimization/strategies/CBNPSO.java index f3d2d2c5..3f8ad323 100644 --- a/src/eva2/optimization/strategies/CBNPSO.java +++ b/src/eva2/optimization/strategies/CBNPSO.java @@ -81,8 +81,6 @@ public class CBNPSO extends ClusterBasedNichingEA implements Serializable { /** * Return the period of the sinusoidal sigma adaption or -1 if not applicable. - * - * @param p */ public int getSigmaAdaptionPeriod() { ParamAdaption[] prmAd = getParameterControl(); @@ -177,10 +175,6 @@ public class CBNPSO extends ClusterBasedNichingEA implements Serializable { * is in [0,1] if any solutions have been identified, or -1 if the archive * is empty. * - * @param cbpso - * @param pop - * @param iteration - * @param maxIteration * @return */ public double getInterestingSolutionRatio() { @@ -196,9 +190,6 @@ public class CBNPSO extends ClusterBasedNichingEA implements Serializable { Population archived = solSet.getSolutions(); Population interesting = archived.filterByFitness(fitThres, 0); -// Population archived = getArchivedSolutions(); -// Population interesting = archived.filterByFitness(fitThres, 0); - if (archived.size() > 0) { return ((double) interesting.size()) / ((double) archived.size()); } else { diff --git a/src/eva2/optimization/strategies/ClusterBasedNichingEA.java b/src/eva2/optimization/strategies/ClusterBasedNichingEA.java index 9818388d..e04780db 100644 --- a/src/eva2/optimization/strategies/ClusterBasedNichingEA.java +++ b/src/eva2/optimization/strategies/ClusterBasedNichingEA.java @@ -27,6 +27,7 @@ import eva2.tools.EVAERROR; import eva2.tools.chart2d.*; import eva2.tools.math.Mathematics; import eva2.util.annotation.Description; +import eva2.util.annotation.Hidden; import java.util.*; @@ -786,6 +787,7 @@ public class ClusterBasedNichingEA extends AbstractOptimizer implements Interfac * @param problem */ @Override + @Hidden public void setProblem(InterfaceOptimizationProblem problem) { this.optimizationProblem = problem; this.optimizer.setProblem(this.optimizationProblem); diff --git a/src/eva2/optimization/strategies/ClusteringHillClimbing.java b/src/eva2/optimization/strategies/ClusteringHillClimbing.java index cd918c02..e2b38ae5 100644 --- a/src/eva2/optimization/strategies/ClusteringHillClimbing.java +++ b/src/eva2/optimization/strategies/ClusteringHillClimbing.java @@ -10,7 +10,6 @@ import eva2.optimization.population.Population; import eva2.optimization.population.PopulationInterface; import eva2.optimization.population.SolutionSet; import eva2.problems.AbstractOptimizationProblem; -import eva2.problems.F1Problem; import eva2.problems.InterfaceAdditionalPopulationInformer; import eva2.problems.InterfaceOptimizationProblem; import eva2.tools.Pair; @@ -36,17 +35,11 @@ import java.io.Serializable; */ @Description("Similar to multi-start HC, but clusters the population during optimization to remove redundant individuals for efficiency." + "If the local search step does not achieve a minimum improvement, the population may be reinitialized.") -public class ClusteringHillClimbing implements InterfacePopulationChangedEventListener, - InterfaceOptimizer, Serializable, InterfaceAdditionalPopulationInformer { +public class ClusteringHillClimbing extends AbstractOptimizer implements InterfacePopulationChangedEventListener, Serializable, InterfaceAdditionalPopulationInformer { - transient private InterfacePopulationChangedEventListener populationChangedEventListener; - transient private String identifier = ""; - private Population population = new Population(); private transient Population archive = new Population(); - private InterfaceOptimizationProblem optimizationProblem = new F1Problem(); private int hcEvalCycle = 1000; private int initialPopSize = 100; - private int loopCnt = 0; private int notifyGuiEvery = 50; private double sigmaClust = 0.01; private double minImprovement = 0.000001; @@ -82,7 +75,6 @@ public class ClusteringHillClimbing implements InterfacePopulationChangedEventLi initialStepSize = other.initialStepSize; reduceFactor = other.reduceFactor; mutator = (MutateESFixedStepSize) other.mutator.clone(); - loopCnt = 0; } @Override @@ -99,40 +91,8 @@ public class ClusteringHillClimbing implements InterfacePopulationChangedEventLi setLocalSearchMethod(getLocalSearchMethod()); } - /** - * This method will set the problem that is to be optimized - * - * @param problem - */ - @Override - public void setProblem(InterfaceOptimizationProblem problem) { - this.optimizationProblem = problem; - } - - @Override - public InterfaceOptimizationProblem getProblem() { - return this.optimizationProblem; - } - - @Override - public void addPopulationChangedEventListener(InterfacePopulationChangedEventListener ea) { - this.populationChangedEventListener = ea; - } - - @Override - public boolean removePopulationChangedEventListener( - InterfacePopulationChangedEventListener ea) { - if (populationChangedEventListener == ea) { - populationChangedEventListener = null; - return true; - } else { - return false; - } - } - @Override public void initialize() { - loopCnt = 0; mutator = new MutateESFixedStepSize(initialStepSize); archive = new Population(); hideHideable(); @@ -151,7 +111,6 @@ public class ClusteringHillClimbing implements InterfacePopulationChangedEventLi */ @Override public void initializeByPopulation(Population pop, boolean reset) { - loopCnt = 0; this.population = (Population) pop.clone(); population.addPopulationChangedEventListener(null); if (reset) { @@ -161,20 +120,10 @@ public class ClusteringHillClimbing implements InterfacePopulationChangedEventLi } } - /** - * Something has changed - */ - protected void firePropertyChangedEvent(String name) { - if (this.populationChangedEventListener != null) { - this.populationChangedEventListener.registerPopulationStateChanged(this, name); - } - } - @Override public void optimize() { double improvement; - loopCnt++; population.addPopulationChangedEventListener(this); population.setNotifyEvalInterval(notifyGuiEvery); Pair popD; @@ -244,23 +193,6 @@ public class ClusteringHillClimbing implements InterfacePopulationChangedEventLi } } - /** - * Assuming that all optimizer will store thier data in a population we will - * allow acess to this population to query to current state of the - * optimizer. - * - * @return The population of current solutions to a given problem. - */ - @Override - public Population getPopulation() { - return this.population; - } - - @Override - public void setPopulation(Population pop) { - this.population = pop; - } - @Override public InterfaceSolutionSet getAllSolutions() { Population tmp = new Population(); diff --git a/src/eva2/optimization/strategies/DynamicParticleSwarmOptimization.java b/src/eva2/optimization/strategies/DynamicParticleSwarmOptimization.java index ed9266d6..4b238414 100644 --- a/src/eva2/optimization/strategies/DynamicParticleSwarmOptimization.java +++ b/src/eva2/optimization/strategies/DynamicParticleSwarmOptimization.java @@ -11,6 +11,7 @@ import eva2.tools.SelectedTag; import eva2.tools.math.Mathematics; import eva2.tools.math.RNG; import eva2.util.annotation.Description; +import eva2.util.annotation.Hidden; /** * This extends our particle swarm implementation to dynamic optimization problems. @@ -130,7 +131,7 @@ public class DynamicParticleSwarmOptimization extends ParticleSwarmOptimization * * @param index The individual to update. * @param pop The current population. - * @param best The best individual found so far. + * @param indy The best individual found so far. */ private void updateQuantumIndividual(int index, AbstractEAIndividual indy, Population pop) { InterfaceDataTypeDouble endy = (InterfaceDataTypeDouble) indy; @@ -473,6 +474,7 @@ public class DynamicParticleSwarmOptimization extends ParticleSwarmOptimization @Override + @Hidden public void setProblem(InterfaceOptimizationProblem problem) { super.setProblem(problem); if (problem instanceof AbstractOptimizationProblem) { diff --git a/src/eva2/optimization/strategies/GeneticAlgorithm.java b/src/eva2/optimization/strategies/GeneticAlgorithm.java index c73e41dc..c79e6489 100644 --- a/src/eva2/optimization/strategies/GeneticAlgorithm.java +++ b/src/eva2/optimization/strategies/GeneticAlgorithm.java @@ -186,16 +186,6 @@ public class GeneticAlgorithm extends AbstractOptimizer implements java.io.Seria } } - /** - * This method will set the problem that is to be optimized - * - * @param problem - */ - @Override - public void setProblem(InterfaceOptimizationProblem problem) { - this.optimizationProblem = problem; - } - @Override public InterfaceOptimizationProblem getProblem() { return this.optimizationProblem; diff --git a/src/eva2/optimization/strategies/IslandModelEA.java b/src/eva2/optimization/strategies/IslandModelEA.java index 64016f4b..92a268b0 100644 --- a/src/eva2/optimization/strategies/IslandModelEA.java +++ b/src/eva2/optimization/strategies/IslandModelEA.java @@ -12,6 +12,7 @@ import eva2.problems.F8Problem; import eva2.problems.InterfaceOptimizationProblem; import eva2.problems.TF1Problem; import eva2.util.annotation.Description; +import eva2.util.annotation.Hidden; /** * The one and only island model for parallelization. Since parallelization @@ -297,6 +298,7 @@ public class IslandModelEA implements InterfacePopulationChangedEventListener, I * @param problem */ @Override + @Hidden public void setProblem(InterfaceOptimizationProblem problem) { this.optimizationProblem = problem; this.optimizer.setProblem(problem); diff --git a/src/eva2/optimization/strategies/MemeticAlgorithm.java b/src/eva2/optimization/strategies/MemeticAlgorithm.java index 1a8d32ad..418d075c 100644 --- a/src/eva2/optimization/strategies/MemeticAlgorithm.java +++ b/src/eva2/optimization/strategies/MemeticAlgorithm.java @@ -11,6 +11,7 @@ import eva2.problems.F1Problem; import eva2.problems.InterfaceLocalSearchable; import eva2.problems.InterfaceOptimizationProblem; import eva2.util.annotation.Description; +import eva2.util.annotation.Hidden; import java.util.Hashtable; @@ -196,6 +197,7 @@ public class MemeticAlgorithm implements InterfaceOptimizer, java.io.Serializabl * @param problem */ @Override + @Hidden public void setProblem(InterfaceOptimizationProblem problem) { this.optimizationProblem = problem; this.globalOptimizer.setProblem(this.optimizationProblem); diff --git a/src/eva2/optimization/strategies/MultiObjectiveEA.java b/src/eva2/optimization/strategies/MultiObjectiveEA.java index a7b12653..a6e90ecb 100644 --- a/src/eva2/optimization/strategies/MultiObjectiveEA.java +++ b/src/eva2/optimization/strategies/MultiObjectiveEA.java @@ -15,6 +15,7 @@ import eva2.problems.AbstractOptimizationProblem; import eva2.problems.FM0Problem; import eva2.problems.InterfaceOptimizationProblem; import eva2.util.annotation.Description; +import eva2.util.annotation.Hidden; /** * A generic framework for multi-objecitve optimization, you need to specify an @@ -183,6 +184,7 @@ public class MultiObjectiveEA implements InterfaceOptimizer, java.io.Serializabl * @param problem */ @Override + @Hidden public void setProblem(InterfaceOptimizationProblem problem) { this.optimizationProblem = problem; this.optimizer.setProblem(problem); diff --git a/src/eva2/optimization/strategies/NelderMeadSimplex.java b/src/eva2/optimization/strategies/NelderMeadSimplex.java index e3592201..6204dc29 100644 --- a/src/eva2/optimization/strategies/NelderMeadSimplex.java +++ b/src/eva2/optimization/strategies/NelderMeadSimplex.java @@ -52,11 +52,6 @@ public class NelderMeadSimplex extends AbstractOptimizer implements Serializable return new NelderMeadSimplex(this); } - @Override - public void setProblem(InterfaceOptimizationProblem problem) { - optimizationProblem = (AbstractOptimizationProblem) problem; - } - public boolean setProblemAndPopSize(InterfaceOptimizationProblem problem) { setProblem(problem); if (optimizationProblem instanceof AbstractProblemDouble) { @@ -77,8 +72,6 @@ public class NelderMeadSimplex extends AbstractOptimizer implements Serializable for (int i = 0; i < r.length; i++) { r[i] = 2 * centroid[i] - refX[i]; } -// double alpha = 1.3; -// for (int i=0; i