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

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

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

    • 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