Renamed init to initialize.

Added @Parameter annotation to EAIndividual
This commit is contained in:
Fabian Becker 2014-11-01 18:32:21 +01:00
parent d0268527b0
commit ee73f5dbe5
16 changed files with 37 additions and 87 deletions

View File

@ -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.

View File

@ -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)!");

View File

@ -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!");
}
}

View File

@ -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!");
}
}

View File

@ -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!");
}
}

View File

@ -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);

View File

@ -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);

View File

@ -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();
}

View File

@ -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<InterfacePopulationChangedEventListener> 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;

View File

@ -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();

View File

@ -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();

View File

@ -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[]!");
}
}

View File

@ -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);
}
}

View File

@ -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

View File

@ -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

View File

@ -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();