Class 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 the Objectives are not fixed, i.e., the Objectives of an Individual change during the optimization process. This caused by the internal caching of distances, etc. In this case, it is recommended to use the Nsga2.

    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 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
      • distance

        protected double[][] distance
      • fitnessDirty

        protected boolean fitnessDirty
    • Constructor Detail

      • Spea2

        @Inject
        public Spea2​(int tournament,
                     Rand random)
        Constructs a Spea2-Selector.
        Parameters:
        tournament - the number of individuals that fight against each other to become a parent
        random - the random number generator
    • Method Detail

      • init

        public void init​(int maxsize)
        Description copied from interface: Selector
        Sets the maximal number of Individuals.
        Specified by:
        init in interface Selector
        Parameters:
        maxsize - the number of individuals
      • getParents

        public Collection<Individual> getParents​(int mu,
                                                 Collection<Individual> population)
        Description copied from interface: Selector
        Selects a subset of Individuals and returns it as a new Collection. These so called parents can be used to form the next generation.
        Specified by:
        getParents in interface Selector
        Parameters:
        mu - the number of parents to select
        population - the list of individuals
        Returns:
        the parents
      • getLames

        public Collection<Individual> getLames​(int lambda,
                                               Collection<Individual> population)
        Description copied from interface: Selector
        Selects a subset of lambda Individuals and returns it as a new Collection. These individuals can be erased in the next generation.
        Specified by:
        getLames in interface Selector
        Parameters:
        lambda - the number of lames to select
        population - the list of individuals
        Returns:
        the worst lambda individuals
      • getLamesFromNonDominated

        public Collection<Individual> getLamesFromNonDominated​(int count)
        Returns a specific number of lames from the non-dominated Individuals.
        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 IndividualSets
        candidates - 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 two Spea2.IndividualSets.
        Parameters:
        w0 - first set
        w1 - second set
        Returns:
        the distance
      • add

        protected void add​(Individual individual)
        Add a new Individual.
        Parameters:
        individual - the individual to add
      • remove

        protected void remove​(Individual individual)
        Remove an Individual.
        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 two Spea2.IndividualSets.
        Parameters:
        w0 - the first set
        w1 - 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 dominated Spea2.IndividualSets (fitness > 0).
        Returns:
        all dominated IndividualSets
      • getNonDominated

        protected List<org.opt4j.optimizer.ea.Spea2.IndividualSet> getNonDominated()
        Returns all non-dominated Spea2.IndividualSets (fitness == 0).
        Returns:
        all non-dominated individualSets