Some adaptions of IPOP-ES
This commit is contained in:
parent
8258173239
commit
8a5f03d87a
@ -36,7 +36,9 @@ public class EvolutionStrategyIPOP extends EvolutionStrategies implements Interf
|
|||||||
int initialLambda = 10;
|
int initialLambda = 10;
|
||||||
|
|
||||||
private double stagThreshold = 10e-12;
|
private double stagThreshold = 10e-12;
|
||||||
private int stagTime = -1;
|
// private int stagTime = -1;
|
||||||
|
private int stagTimeArbitrary = 10;
|
||||||
|
private boolean useArbitraryStagTime = false;
|
||||||
|
|
||||||
double incPopSizeFact = 2.;
|
double incPopSizeFact = 2.;
|
||||||
FitnessConvergenceTerminator fitConvTerm = null;
|
FitnessConvergenceTerminator fitConvTerm = null;
|
||||||
@ -54,7 +56,7 @@ public class EvolutionStrategyIPOP extends EvolutionStrategies implements Interf
|
|||||||
initialLambda = other.initialLambda;
|
initialLambda = other.initialLambda;
|
||||||
incPopSizeFact = other.incPopSizeFact;
|
incPopSizeFact = other.incPopSizeFact;
|
||||||
stagThreshold = other.stagThreshold;
|
stagThreshold = other.stagThreshold;
|
||||||
stagTime = other.stagTime;
|
// stagTime = other.stagTime;
|
||||||
|
|
||||||
if (other.fitConvTerm != null) fitConvTerm = new FitnessConvergenceTerminator(other.fitConvTerm);
|
if (other.fitConvTerm != null) fitConvTerm = new FitnessConvergenceTerminator(other.fitConvTerm);
|
||||||
}
|
}
|
||||||
@ -63,8 +65,6 @@ public class EvolutionStrategyIPOP extends EvolutionStrategies implements Interf
|
|||||||
return new EvolutionStrategyIPOP(this);
|
return new EvolutionStrategyIPOP(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The optimize method will compute a 'improved' and evaluated population
|
|
||||||
*/
|
|
||||||
public void optimize() {
|
public void optimize() {
|
||||||
// Population nextGeneration, parents;
|
// Population nextGeneration, parents;
|
||||||
//
|
//
|
||||||
@ -99,6 +99,7 @@ public class EvolutionStrategyIPOP extends EvolutionStrategies implements Interf
|
|||||||
|
|
||||||
public void hideHideable() {
|
public void hideHideable() {
|
||||||
GenericObjectEditor.setHideProperty(this.getClass(), "population", true);
|
GenericObjectEditor.setHideProperty(this.getClass(), "population", true);
|
||||||
|
setStagnationTimeUserDef(isStagnationTimeUserDef());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -107,7 +108,12 @@ public class EvolutionStrategyIPOP extends EvolutionStrategies implements Interf
|
|||||||
private void boostPopSize() {
|
private void boostPopSize() {
|
||||||
// increase by at least one
|
// increase by at least one
|
||||||
int newLambda = Math.max((int)(getLambda()*incPopSizeFact), getLambda() + 1);
|
int newLambda = Math.max((int)(getLambda()*incPopSizeFact), getLambda() + 1);
|
||||||
super.setLambda(newLambda);
|
setLambda(newLambda);
|
||||||
|
// update the stagnation time in the terminator
|
||||||
|
if (!isStagnationTimeUserDef() && (fitConvTerm != null)) {
|
||||||
|
fitConvTerm.setStagnationTime(calcDefaultStagnationTime());
|
||||||
|
fitConvTerm.init(getProblem());
|
||||||
|
}
|
||||||
bestList.add(best);
|
bestList.add(best);
|
||||||
best = null;
|
best = null;
|
||||||
Population newPop = getPopulation().cloneWithoutInds();
|
Population newPop = getPopulation().cloneWithoutInds();
|
||||||
@ -129,6 +135,10 @@ public class EvolutionStrategyIPOP extends EvolutionStrategies implements Interf
|
|||||||
|
|
||||||
public void init() {
|
public void init() {
|
||||||
// setMu(initialMu);
|
// setMu(initialMu);
|
||||||
|
if (getMu()>initialLambda) {
|
||||||
|
setMu((initialLambda/2)+1);
|
||||||
|
System.err.println("Warning, too small initial lambda, adapting mu to " + getMu());
|
||||||
|
}
|
||||||
super.setLambda(initialLambda);
|
super.setLambda(initialLambda);
|
||||||
getPopulation().setNotifyEvalInterval(initialLambda);
|
getPopulation().setNotifyEvalInterval(initialLambda);
|
||||||
super.init();
|
super.init();
|
||||||
@ -136,12 +146,19 @@ public class EvolutionStrategyIPOP extends EvolutionStrategies implements Interf
|
|||||||
best = getPopulation().getBestEAIndividual();
|
best = getPopulation().getBestEAIndividual();
|
||||||
dim = AbstractEAIndividual.getDoublePosition(getPopulation().getEAIndividual(0)).length;
|
dim = AbstractEAIndividual.getDoublePosition(getPopulation().getEAIndividual(0)).length;
|
||||||
|
|
||||||
stagTime = (int)(10+Math.floor(30*dim/getPopulation().size()));
|
fitConvTerm = new FitnessConvergenceTerminator(stagThreshold, (isStagnationTimeUserDef()) ? stagTimeArbitrary : calcDefaultStagnationTime(), false, true); // gen. based, absolute
|
||||||
|
|
||||||
fitConvTerm = new FitnessConvergenceTerminator(stagThreshold, stagTime, false, true); // gen. based, absolute
|
|
||||||
getPopulation().addPopulationChangedEventListener(this);
|
getPopulation().addPopulationChangedEventListener(this);
|
||||||
getPopulation().setNotifyEvalInterval(initialLambda);
|
getPopulation().setNotifyEvalInterval(initialLambda);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default stagnation time in generations as suggested by Auger&Hansen 05.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private int calcDefaultStagnationTime() {
|
||||||
|
return (int)(10+Math.floor(30*dim/getLambda()));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test for the IPOP stopping criteria.
|
* Test for the IPOP stopping criteria.
|
||||||
@ -159,6 +176,7 @@ public class EvolutionStrategyIPOP extends EvolutionStrategies implements Interf
|
|||||||
// or if the range of these values and all fit values of the recent generation is below Tolfun = 10^-12
|
// or if the range of these values and all fit values of the recent generation is below Tolfun = 10^-12
|
||||||
//// interpret it a bit differently using FitnessConvergenceTerminator
|
//// interpret it a bit differently using FitnessConvergenceTerminator
|
||||||
if (fitConvTerm.isTerminated(new SolutionSet(pop))) {
|
if (fitConvTerm.isTerminated(new SolutionSet(pop))) {
|
||||||
|
// System.out.println(fitConvTerm.lastTerminationMessage());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,4 +266,59 @@ public class EvolutionStrategyIPOP extends EvolutionStrategies implements Interf
|
|||||||
public String incPopSizeFactTipText() {
|
public String incPopSizeFactTipText() {
|
||||||
return "Factor by which to increase lambda for each restart event, default is 2.";
|
return "Factor by which to increase lambda for each restart event, default is 2.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the stagThreshold
|
||||||
|
*/
|
||||||
|
public double getStagThreshold() {
|
||||||
|
return stagThreshold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param stagThreshold the stagThreshold to set
|
||||||
|
*/
|
||||||
|
public void setStagThreshold(double stagThreshold) {
|
||||||
|
this.stagThreshold = stagThreshold;
|
||||||
|
if (fitConvTerm != null) fitConvTerm.setConvergenceThreshold(stagThreshold);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the stagTime
|
||||||
|
*/
|
||||||
|
public int getStagnationGenerations() {
|
||||||
|
return stagTimeArbitrary;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param stagTime the stagTime to set
|
||||||
|
*/
|
||||||
|
public void setStagnationGenerations(int stagTime) {
|
||||||
|
this.stagTimeArbitrary = stagTime;
|
||||||
|
if (isStagnationTimeUserDef()) {
|
||||||
|
if (fitConvTerm != null) fitConvTerm.setStagnationTime(stagTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public String stagnationGenerationsTipText() {
|
||||||
|
return "Set a user defined stagnation time in generations.";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the useArbitraryStagTime
|
||||||
|
*/
|
||||||
|
public boolean isStagnationTimeUserDef() {
|
||||||
|
return useArbitraryStagTime;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param useArbitraryStagTime the useArbitraryStagTime to set
|
||||||
|
*/
|
||||||
|
public void setStagnationTimeUserDef(boolean useArbitraryStagTime) {
|
||||||
|
this.useArbitraryStagTime = useArbitraryStagTime;
|
||||||
|
GenericObjectEditor.setShowProperty(this.getClass(), "stagnationGenerations", useArbitraryStagTime);
|
||||||
|
if (fitConvTerm != null) {
|
||||||
|
if (useArbitraryStagTime) fitConvTerm.setStagnationTime(getStagnationGenerations());
|
||||||
|
else fitConvTerm.setStagnationTime(calcDefaultStagnationTime());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public String stagnationTimeUserDefTipText() {
|
||||||
|
return "Set or unset the user defined stagnation time.";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user