Class IBEA

All Implemented Interfaces:
Extensible, Algorithm, Configurable, EvolutionaryAlgorithm, Stateful

public class IBEA extends AbstractEvolutionaryAlgorithm
Implementation of the Indicator-Based Evolutionary Algorithm (IBEA). Instead of using Pareto dominance to evaluate the quality of solutions, IBEA uses an indicator function (typically hypervolume but other indicator functions can be specified).

References:

  1. Zitzler, E. and S. Kunzli (2004). Indicator-Based Selection in Multiobjective Search. Parallel Problem Solving from Nature (PPSN VIII), pp. 832-842.
  • Constructor Details

    • IBEA

      public IBEA(Problem problem)
      Constructs a new IBEA instance with default settings.
      Parameters:
      problem - the problem
    • IBEA

      public IBEA(Problem problem, int initialPopulationSize, NondominatedPopulation archive, Initialization initialization, Variation variation, IndicatorFitnessEvaluator fitnessEvaluator)
      Constructs a new IBEA instance.
      Parameters:
      problem - the problem
      initialPopulationSize - the initial population size
      archive - the external archive; or null if no external archive is used
      initialization - the initialization operator
      variation - the variation operator
      fitnessEvaluator - the indicator fitness evaluator to use (e.g., hypervolume additive-epsilon indicator)
  • Method Details

    • getFitnessEvaluator

      public IndicatorFitnessEvaluator getFitnessEvaluator()
      Returns the indicator-based fitness evaluator.
      Returns:
      the indicator-based fitness evaluator
    • setFitnessEvaluator

      public void setFitnessEvaluator(IndicatorFitnessEvaluator fitnessEvaluator)
      Sets the indicator-based fitness evaluator. This value can not be null.
      Parameters:
      fitnessEvaluator - the indicator-based fitness evaluator
    • initialize

      public void initialize()
      Description copied from interface: Algorithm
      Performs any initialization that is required by this algorithm. This method should only be called once, though the specific implementation may choose to no-op or throw AlgorithmInitializationException if called multiple times.

      Implementations should always call super.initialize() to ensure the algorithm is initialized correctly.

      Specified by:
      initialize in interface Algorithm
      Overrides:
      initialize in class AbstractEvolutionaryAlgorithm
    • iterate

      protected void iterate()
      Description copied from class: AbstractAlgorithm
      Performs one iteration of the algorithm. This method should be overridden by implementations to perform each logical iteration of the algorithm.
      Specified by:
      iterate in class AbstractAlgorithm
    • setVariation

      public void setVariation(Variation variation)
      Description copied from class: AbstractEvolutionaryAlgorithm
      Replaces the variation operator to be used by this algorithm.
      Overrides:
      setVariation in class AbstractEvolutionaryAlgorithm
      Parameters:
      variation - the variation operator
    • setInitialPopulationSize

      public void setInitialPopulationSize(int initialPopulationSize)
      Description copied from class: AbstractEvolutionaryAlgorithm
      Sets the initial population size. This value can not be set after initialization.
      Overrides:
      setInitialPopulationSize in class AbstractEvolutionaryAlgorithm
      Parameters:
      initialPopulationSize - the initial population size
    • applyConfiguration

      public void applyConfiguration(TypedProperties properties)
      Description copied from interface: Configurable
      Applies the properties to this instance. It is strongly recommended to apply a configuration immediately after creating the instance, as some properties can not be changed after the class is used. Exceptions may be thrown if attempting to set such properties. After calling this method, we encourage users to call TypedProperties.warnIfUnaccessedProperties() to verify all properties were processed. This can identify simple mistakes like typos. If overriding this method, properties should only be updated if a new value is provided. Additionally, if updating any Configurable objects inside this object, they should be updated before calling super.applyConfiguration(properties).
      Parameters:
      properties - the user-defined properties
    • getConfiguration

      public TypedProperties getConfiguration()
      Description copied from interface: Configurable
      Gets the current configuration of this instance. In theory, these properties should be able to create a duplicate instance. Note however, they are unlikely to behave identically due to random numbers and other transient fields.
      Returns:
      the properties defining this instance