Package org.opt4j.optimizer.ea
Class Spea2
- java.lang.Object
-
- org.opt4j.optimizer.ea.Spea2
-
- All Implemented Interfaces:
Selector
public class Spea2 extends Object implements Selector
The
Spea2-Selector is a Java implementation of the SPEA2-MOEA.The
Spea2-Selector will not work properly if theObjectivesare not fixed, i.e., theObjectivesof anIndividualchange during the optimization process. This caused by the internal caching of distances, etc. In this case, it is recommended to use theNsga2.- See Also:
- "SPEA2: Improving the Strength Pareto Evolutionary Algorithm For Multiobjective Optimization, Eckart Zitzler, Marco Laumanns, and Lothar Thiele, In Evolutionary Methods for Design, Optimisation, and Control, pages 19–26, 2002."
-
-
Field Summary
Fields Modifier and Type Field Description protected double[][]distanceprotected booleanfitnessDirtyprotected LinkedList<Integer>freeIDsprotected Set<org.opt4j.optimizer.ea.Spea2.IndividualSet>individualSetsprotected Map<Individual,org.opt4j.optimizer.ea.Spea2.IndividualSet>mapprotected Randrandomprotected inttournament
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidadd(Individual individual)Add a newIndividual.protected doublecalculateDistance(org.opt4j.optimizer.ea.Spea2.IndividualSet w0, org.opt4j.optimizer.ea.Spea2.IndividualSet w1)Calculate the distance between twoSpea2.IndividualSets.protected voidcalculateFitness()Calculate the fitness.protected doubledistance(org.opt4j.optimizer.ea.Spea2.IndividualSet w0, org.opt4j.optimizer.ea.Spea2.IndividualSet w1)Return the distance of twoSpea2.IndividualSets.protected List<org.opt4j.optimizer.ea.Spea2.IndividualSet>getDominated()Returns all dominatedSpea2.IndividualSets (fitness > 0).Collection<Individual>getLames(int lambda, Collection<Individual> population)Collection<Individual>getLamesFromNonDominated(int count)Returns a specific number of lames from the non-dominatedIndividuals.protected doublegetMinDistance(org.opt4j.optimizer.ea.Spea2.IndividualSet w0)protected List<org.opt4j.optimizer.ea.Spea2.IndividualSet>getNearest(int n, Collection<org.opt4j.optimizer.ea.Spea2.IndividualSet> candidates)Returns n with nearest neighbor based on distances.protected List<org.opt4j.optimizer.ea.Spea2.IndividualSet>getNonDominated()Returns all non-dominatedSpea2.IndividualSets (fitness == 0).Collection<Individual>getParents(int mu, Collection<Individual> population)Selects a subset ofIndividuals and returns it as a newCollection.voidinit(int maxsize)Sets the maximal number ofIndividuals.protected voidremove(Individual individual)Remove anIndividual.protected voidupdate(Collection<Individual> population)Update with current population.
-
-
-
Field Detail
-
random
protected final Rand random
-
tournament
protected final int tournament
-
map
protected final Map<Individual,org.opt4j.optimizer.ea.Spea2.IndividualSet> map
-
individualSets
protected final Set<org.opt4j.optimizer.ea.Spea2.IndividualSet> individualSets
-
freeIDs
protected final LinkedList<Integer> freeIDs
-
distance
protected double[][] distance
-
fitnessDirty
protected boolean fitnessDirty
-
-
Constructor Detail
-
Spea2
@Inject public Spea2(int tournament, Rand random)- Parameters:
tournament- the number of individuals that fight against each other to become a parentrandom- the random number generator
-
-
Method Detail
-
init
public void init(int maxsize)
Description copied from interface:SelectorSets the maximal number ofIndividuals.
-
getParents
public Collection<Individual> getParents(int mu, Collection<Individual> population)
Description copied from interface:SelectorSelects a subset ofIndividuals and returns it as a newCollection. These so called parents can be used to form the next generation.- Specified by:
getParentsin interfaceSelector- Parameters:
mu- the number of parents to selectpopulation- the list of individuals- Returns:
- the parents
-
getLames
public Collection<Individual> getLames(int lambda, Collection<Individual> population)
Description copied from interface:SelectorSelects a subset oflambdaIndividuals and returns it as a newCollection. These individuals can be erased in the next generation.
-
getLamesFromNonDominated
public Collection<Individual> getLamesFromNonDominated(int count)
Returns a specific number of lames from the non-dominatedIndividuals.- Parameters:
count- the specified number- Returns:
- a collection of the lame individuals
-
getNearest
protected List<org.opt4j.optimizer.ea.Spea2.IndividualSet> getNearest(int n, Collection<org.opt4j.optimizer.ea.Spea2.IndividualSet> candidates)
Returns n with nearest neighbor based on distances.- Parameters:
n- the number of required IndividualSetscandidates- the candidate IndividualSets- Returns:
- the n nearest neighbors
-
getMinDistance
protected double getMinDistance(org.opt4j.optimizer.ea.Spea2.IndividualSet w0)
-
update
protected void update(Collection<Individual> population)
Update with current population.- Parameters:
population- the current population
-
distance
protected double distance(org.opt4j.optimizer.ea.Spea2.IndividualSet w0, org.opt4j.optimizer.ea.Spea2.IndividualSet w1)Return the distance of twoSpea2.IndividualSets.- Parameters:
w0- first setw1- second set- Returns:
- the distance
-
add
protected void add(Individual individual)
Add a newIndividual.- Parameters:
individual- the individual to add
-
remove
protected void remove(Individual individual)
Remove anIndividual.- Parameters:
individual- the individual to remove
-
calculateDistance
protected double calculateDistance(org.opt4j.optimizer.ea.Spea2.IndividualSet w0, org.opt4j.optimizer.ea.Spea2.IndividualSet w1)Calculate the distance between twoSpea2.IndividualSets.- Parameters:
w0- the first setw1- the second set- Returns:
- the distance
-
calculateFitness
protected void calculateFitness()
Calculate the fitness.
-
getDominated
protected List<org.opt4j.optimizer.ea.Spea2.IndividualSet> getDominated()
Returns all dominatedSpea2.IndividualSets (fitness > 0).- Returns:
- all dominated IndividualSets
-
getNonDominated
protected List<org.opt4j.optimizer.ea.Spea2.IndividualSet> getNonDominated()
Returns all non-dominatedSpea2.IndividualSets (fitness == 0).- Returns:
- all non-dominated individualSets
-
-