From ab6b7f279495b9fc3efd110124c7f60b04bcec2f Mon Sep 17 00:00:00 2001 From: Marcel Kronfeld Date: Mon, 16 Aug 2010 11:57:09 +0000 Subject: [PATCH] Minor changes. --- .../terminators/ParetoMetricTerminator.java | 3 ++- .../PopulationArchiveTerminator.java | 25 ++++--------------- .../PopulationMeasureTerminator.java | 17 ++++++------- .../problems/AbstractOptimizationProblem.java | 2 +- .../go/problems/AbstractProblemDouble.java | 2 +- .../go/strategies/EvolutionStrategyIPOP.java | 2 +- 6 files changed, 17 insertions(+), 34 deletions(-) diff --git a/src/eva2/server/go/operators/terminators/ParetoMetricTerminator.java b/src/eva2/server/go/operators/terminators/ParetoMetricTerminator.java index f4e079dd..12175ca4 100644 --- a/src/eva2/server/go/operators/terminators/ParetoMetricTerminator.java +++ b/src/eva2/server/go/operators/terminators/ParetoMetricTerminator.java @@ -80,7 +80,8 @@ public class ParetoMetricTerminator extends PopulationMeasureTerminator implemen public static String globalInfo() { return "Terminate if the pareto front of a multi-objective optimization process converges " + - "with respect to a certain measure."; + "with respect to a certain measure. Note that this only works with " + + "AbstractMultiObjectiveOptimizationProblem instances."; } public void setParetoMetric(InterfaceParetoFrontMetric pMetric) { diff --git a/src/eva2/server/go/operators/terminators/PopulationArchiveTerminator.java b/src/eva2/server/go/operators/terminators/PopulationArchiveTerminator.java index b56798c9..40ffaad0 100644 --- a/src/eva2/server/go/operators/terminators/PopulationArchiveTerminator.java +++ b/src/eva2/server/go/operators/terminators/PopulationArchiveTerminator.java @@ -12,26 +12,11 @@ import eva2.server.go.populations.Population; * */ public class PopulationArchiveTerminator extends PopulationMeasureTerminator { - IndividualWeightedFitnessComparator wfComp = new IndividualWeightedFitnessComparator(null); - -// private boolean isStillConverged(PopulationInterface pop) { -// Population archive = ((Population)pop).getArchive(); -// if (archive==null || (archive.size()<1)) { -// System.err.println("Error, population had no archive in " + this.getClass()); -// return false; -// } else { -// double bestScore = Population.getScore(archive.getEAIndividual(0), fitWeights); -// for (int i=1; i=oldScore) return true; -// else { -// oldScore=bestScore; -// return false; -// } -// } -// } + IndividualWeightedFitnessComparator wfComp = new IndividualWeightedFitnessComparator(new double[]{1.}); + + public static String globalInfo() { + return "Stop if a linear recombination of the best fitness stagnates for a certain period."; + } @Override protected double calcInitialMeasure(PopulationInterface pop) { diff --git a/src/eva2/server/go/operators/terminators/PopulationMeasureTerminator.java b/src/eva2/server/go/operators/terminators/PopulationMeasureTerminator.java index 47e95d34..48a29278 100644 --- a/src/eva2/server/go/operators/terminators/PopulationMeasureTerminator.java +++ b/src/eva2/server/go/operators/terminators/PopulationMeasureTerminator.java @@ -28,7 +28,7 @@ import eva2.tools.SelectedTag; public abstract class PopulationMeasureTerminator implements InterfaceTerminator, Serializable { public enum ChangeTypeEnum {relativeChange, absoluteChange, absoluteValue}; - public enum DirectionTypeEnum {decreaseImprovement, bidirectional}; + public enum DirectionTypeEnum {decrease, bidirectional}; public enum StagnationTypeEnum {fitnessCallBased, generationBased}; protected static boolean TRACE = false; @@ -41,7 +41,7 @@ Serializable { private StagnationTypeEnum stagnationMeasure = StagnationTypeEnum.fitnessCallBased; // private SelectedTag convCondition = new SelectedTag("Relative change", "Absolute change", "Absolute value"); private ChangeTypeEnum changeType = ChangeTypeEnum.relativeChange; - private DirectionTypeEnum condDirection = DirectionTypeEnum.decreaseImprovement; + private DirectionTypeEnum condDirection = DirectionTypeEnum.decrease; // private SelectedTag condImprovementOrChange = new SelectedTag("Decrease", "Improvement and Deterioration"); protected String msg="Not terminated."; @@ -243,7 +243,7 @@ Serializable { } public boolean doCheckImprovement() { - return (condDirection==DirectionTypeEnum.decreaseImprovement); + return (condDirection==DirectionTypeEnum.decrease); // return condImprovementOrChange.isSelectedString("Improvement"); } @@ -295,7 +295,7 @@ Serializable { return stagTime; } public String stagnationTimeTipText() { - return "Terminate if the population has not improved for this time"; + return "Terminate if the population has not improved/changed for this time"; } public StagnationTypeEnum getStagnationMeasure() { @@ -305,7 +305,7 @@ Serializable { this.stagnationMeasure = stagnationTimeIn; } public String stagnationMeasureTipText() { - return "Stagnation time is measured in fitness calls or generations."; + return "Stagnation time is measured in fitness calls or generations"; } public ChangeTypeEnum getConvergenceCondition() { @@ -313,21 +313,18 @@ Serializable { } public void setConvergenceCondition(ChangeTypeEnum convergenceCondition) { this.changeType = convergenceCondition; -// GenericObjectEditor.setHideProperty(this.getClass(), "convergenceThresholdUpper", isRelativeConvergence() || doCheckImprovement()); } public String convergenceConditionTipText() { - return "Select between absolute and relative convergence condition"; + return "Select absolute or relative convergence condition"; } public DirectionTypeEnum getCheckType() { return condDirection; -// return condImprovementOrChange; } public void setCheckType(DirectionTypeEnum dt) { this.condDirection = dt; -// GenericObjectEditor.setHideProperty(this.getClass(), "convergenceThresholdUpper", isRelativeConvergence() || doCheckImprovement()); } public String checkTypeTipText() { - return "Detect improvement only (decreasing measure) or change in both directions (de- and increase)."; + return "Detect improvement only (decreasing measure) or change in both directions (decrease and increase)"; } } \ No newline at end of file diff --git a/src/eva2/server/go/problems/AbstractOptimizationProblem.java b/src/eva2/server/go/problems/AbstractOptimizationProblem.java index 145ed22b..364917ee 100644 --- a/src/eva2/server/go/problems/AbstractOptimizationProblem.java +++ b/src/eva2/server/go/problems/AbstractOptimizationProblem.java @@ -486,7 +486,7 @@ implements InterfaceOptimizationProblem /*, InterfaceParamControllable*/, Serial Population pop = new Population(1); pop.add(orig); InterfaceTerminator term = new EvaluationTerminator(maxEvaluations); - if (epsilonFitConv > 0) term = new CombinedTerminator(new PhenotypeConvergenceTerminator(epsilonFitConv, 100*dim, StagnationTypeEnum.fitnessCallBased, ChangeTypeEnum.absoluteChange, DirectionTypeEnum.decreaseImprovement), term, false); + if (epsilonFitConv > 0) term = new CombinedTerminator(new PhenotypeConvergenceTerminator(epsilonFitConv, 100*dim, StagnationTypeEnum.fitnessCallBased, ChangeTypeEnum.absoluteChange, DirectionTypeEnum.decrease), term, false); int evalsPerf = PostProcess.processSingleCandidatesNMCMA(PostProcessMethod.nelderMead, pop, term, initRelPerturb, prob); overallDist = metric.distance(indy, pop.getBestEAIndividual()); //System.out.println(System.currentTimeMillis() + " in " + evalsPerf + " evals moved by "+ overallDist); diff --git a/src/eva2/server/go/problems/AbstractProblemDouble.java b/src/eva2/server/go/problems/AbstractProblemDouble.java index 56f59f8e..212c1af9 100644 --- a/src/eva2/server/go/problems/AbstractProblemDouble.java +++ b/src/eva2/server/go/problems/AbstractProblemDouble.java @@ -399,7 +399,7 @@ public abstract class AbstractProblemDouble extends AbstractOptimizationProblem tmpIndy.SetDoubleGenotype(pos); ((AbstractEAIndividual)tmpIndy).SetFitness(prob.eval(pos)); pop.add(tmpIndy); - FitnessConvergenceTerminator convTerm = new FitnessConvergenceTerminator(1e-25, 10, StagnationTypeEnum.generationBased, ChangeTypeEnum.absoluteChange, DirectionTypeEnum.decreaseImprovement); + FitnessConvergenceTerminator convTerm = new FitnessConvergenceTerminator(1e-25, 10, StagnationTypeEnum.generationBased, ChangeTypeEnum.absoluteChange, DirectionTypeEnum.decrease); int calls = PostProcess.processSingleCandidatesNMCMA(PostProcessMethod.nelderMead, pop, convTerm, 0.001, prob); return ((InterfaceDataTypeDouble)pop.getBestEAIndividual()).getDoubleData(); } diff --git a/src/eva2/server/go/strategies/EvolutionStrategyIPOP.java b/src/eva2/server/go/strategies/EvolutionStrategyIPOP.java index 122924fd..29642c40 100644 --- a/src/eva2/server/go/strategies/EvolutionStrategyIPOP.java +++ b/src/eva2/server/go/strategies/EvolutionStrategyIPOP.java @@ -159,7 +159,7 @@ public class EvolutionStrategyIPOP extends EvolutionStrategies implements Interf bestList = new LinkedList(); best = getPopulation().getBestEAIndividual(); dim = AbstractEAIndividual.getDoublePositionShallow(getPopulation().getEAIndividual(0)).length; - fitConvTerm = new FitnessConvergenceTerminator(stagThreshold, (isStagnationTimeUserDef()) ? stagTimeArbitrary : calcDefaultStagnationTime(), StagnationTypeEnum.generationBased, ChangeTypeEnum.absoluteChange, DirectionTypeEnum.decreaseImprovement); // gen. based, absolute + fitConvTerm = new FitnessConvergenceTerminator(stagThreshold, (isStagnationTimeUserDef()) ? stagTimeArbitrary : calcDefaultStagnationTime(), StagnationTypeEnum.generationBased, ChangeTypeEnum.absoluteChange, DirectionTypeEnum.decrease); // gen. based, absolute getPopulation().addPopulationChangedEventListener(this); getPopulation().setNotifyEvalInterval(initialLambda); }