Class EpsilonBoxDominanceArchive

All Implemented Interfaces:
Iterable<Solution>, Stateful, Displayable, Formattable<Solution>

public class EpsilonBoxDominanceArchive extends NondominatedPopulation
A non-dominated population using an ε-box dominance comparator. ε-Dominance archives provide several important theoretical properties, such as guaranteed convergence and diversity if certain other conditions hold [1]. In addition, this archive also tracks ε-progress [2] by counting the number of ε-box improvements.

References:

  1. Laumanns, M. et al. "Combining Convergence and Diversity in Evolutionary Multi-Objective Optimization." Evolutionary Computation, 10(3):263-282, 2002.
  2. Hadka, D. and Reed, P. "Borg: An Auto-Adaptive Many-Objective Evolutionary Computing Framework." Evolutionary Computation, 21(2):231-259, 2013.
  • Constructor Details

    • EpsilonBoxDominanceArchive

      public EpsilonBoxDominanceArchive(double epsilon)
      Constructs an empty ε-box dominance archive using an additive ε-box dominance comparator with the specified ε.
      Parameters:
      epsilon - the ε value used by the additive ε-box dominance comparator
    • EpsilonBoxDominanceArchive

      public EpsilonBoxDominanceArchive(double epsilon, Iterable<? extends Solution> iterable)
      Constructs an ε-box dominance archive using an additive ε-box dominance comparator with the specified ε and initialized with the specified solutions.
      Parameters:
      epsilon - the ε value used by the additive ε-box dominance comparator
      iterable - the solutions used to initialize this archive
    • EpsilonBoxDominanceArchive

      public EpsilonBoxDominanceArchive(double[] epsilons)
      Constructs an empty ε-box dominance archive using an additive ε-box dominance comparator with the specified ε values.
      Parameters:
      epsilons - the ε values used by the additive ε-box dominance comparator
    • EpsilonBoxDominanceArchive

      public EpsilonBoxDominanceArchive(double[] epsilons, Iterable<? extends Solution> iterable)
      Constructs an ε-box dominance archive using an additive ε-box dominance comparator with the specified ε values and initialized with the specified solutions.
      Parameters:
      epsilons - the ε values used by the additive ε-box dominance comparator
      iterable - the solutions used to initialize this archive
    • EpsilonBoxDominanceArchive

      public EpsilonBoxDominanceArchive(Epsilons epsilons)
      Constructs an empty ε-box dominance archive using an additive ε-box dominance comparator with the specified ε values.
      Parameters:
      epsilons - the ε values used by the additive ε-box dominance comparator
    • EpsilonBoxDominanceArchive

      public EpsilonBoxDominanceArchive(Epsilons epsilons, Iterable<? extends Solution> iterable)
      Constructs an ε-box dominance archive using an additive ε-box dominance comparator with the specified ε values and initialized with the specified solutions.
      Parameters:
      epsilons - the ε values used by the additive ε-box dominance comparator
      iterable - the solutions used to initialize this archive
    • EpsilonBoxDominanceArchive

      public EpsilonBoxDominanceArchive(EpsilonBoxDominanceComparator comparator)
      Constructs an empty ε-box dominance archive using the specified ε-box dominance comparator.
      Parameters:
      comparator - the ε-box dominance comparator used by this archive
    • EpsilonBoxDominanceArchive

      public EpsilonBoxDominanceArchive(EpsilonBoxDominanceComparator comparator, Iterable<? extends Solution> iterable)
      Constructs an ε-box dominance archive using the specified ε-box dominance comparator and initialized with the specified solutions.
      Parameters:
      comparator - the ε-box dominance comparator used by this archive
      iterable - the solutions used to initialize this archive
  • Method Details

    • of

      public static EpsilonBoxDominanceArchive of(Population population, Epsilons epsilons)
      Converts the population to an ε-box dominance archive with the given ε values. To prevent unnecessary conversion, this checks if the original population is already an EpsilonBoxDominanceArchive with identical ε values.
      Parameters:
      population - the population to convert
      epsilons - the ε values
      Returns:
      the population converted to an ε-box dominance archive with the given ε values
    • add

      public boolean add(Solution newSolution)
      Description copied from class: NondominatedPopulation
      If newSolution is dominates any solution or is non-dominated with all solutions in this population, the dominated solutions are removed and newSolution is added to this population. Otherwise, newSolution is dominated and is not added to this population.
      Overrides:
      add in class NondominatedPopulation
      Parameters:
      newSolution - the solution to be added
      Returns:
      true if the population was modified as a result of this method; false otherwise.
    • getComparator

      public EpsilonBoxDominanceComparator getComparator()
      Returns the ε-box dominance comparator used by this archive.
      Overrides:
      getComparator in class NondominatedPopulation
      Returns:
      the ε-box dominance comparator used by this archive
    • getNumberOfImprovements

      public int getNumberOfImprovements()
      Returns the number of ε-box improvements that have occurred.
      Returns:
      the number of ε-box improvements that have occurred
    • getNumberOfDominatingImprovements

      public int getNumberOfDominatingImprovements()
      Returns the number of ε-box improvements dominating existing solutions that have occurred.
      Returns:
      the number of ε-box improvements dominating existing solutions that have occurred
    • copy

      Description copied from class: Population
      Returns a copy of this population. This can be thought of as a "deep copy", which creates a copy of both the population itself and copies of the individual solutions in the population. Consequently, the returned copy is completely independent, such that any modifications to the contents or order will not impact the original.

      Since creating such a "deep copy" can be expensive, prefer using the constructor Population(Iterable) or Population.addAll(Iterable) whenever possible. These alternatives are useful when filtering or reordering the solutions, but the solutions themselves are left unchanged.

      Overrides:
      copy in class NondominatedPopulation
      Returns:
      the copy of this population
    • saveState

      public void saveState(ObjectOutputStream stream) throws IOException
      Description copied from interface: Stateful
      Writes the state of this object to the stream. The order that objects are written to the stream is important. We recommend first calling super.saveState(stream) followed by writing each field.
      Specified by:
      saveState in interface Stateful
      Overrides:
      saveState in class Population
      Parameters:
      stream - the stream
      Throws:
      IOException - if an I/O error occurred
    • loadState

      public void loadState(ObjectInputStream stream) throws IOException, ClassNotFoundException
      Description copied from interface: Stateful
      Loads the state of this object from the stream. The order for reading objects from the stream must match the order they are written to the stream in Stateful.saveState(ObjectOutputStream).
      Specified by:
      loadState in interface Stateful
      Overrides:
      loadState in class Population
      Parameters:
      stream - the stream
      Throws:
      IOException - if an I/O error occurred
      ClassNotFoundException - if the stream referenced a class that is not defined