Class RVEA

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

public class RVEA extends AbstractEvolutionaryAlgorithm
Implementation of the Reference Vector Guided Evolutionary Algorithm (RVEA). This version does not include the reference vector regeneration method proposed by the authors.

RVEA is similar in concept to NSGA-III, but replaces NSGA-III's dominance-based selection with an angle-penalized distance function. Additionally, whereas NSGA-III renormalizes the objectives every iteration, RVEA periodically scales the reference vectors, potentially reducing algorithm overhead.

References:

  1. R. Cheng, Y. Jin, M. Olhofer, and B. Sendhoff. "A Reference Vector Guided Evolutionary Algorithm for Many-objective Optimization." IEEE Transactions on Evolutionary Computation, Issue 99, 2016.
  • Constructor Details

    • RVEA

      public RVEA(Problem problem, int maxGeneration)
      Constructs a new instance of RVEA with default settings.
      Parameters:
      problem - the problem being solved
      maxGeneration - the maximum number of generations for the angle-penalized distance to transition between convergence and diversity
    • RVEA

      public RVEA(Problem problem, NormalBoundaryDivisions divisions, int maxGeneration)
      Constructs a new instance of RVEA with default settings.
      Parameters:
      problem - the problem being solved
      divisions - the number of divisions used by the reference vector guided population
      maxGeneration - the maximum number of generations for the angle-penalized distance to transition between convergence and diversity
    • RVEA

      public RVEA(Problem problem, int initialPopulationSize, ReferenceVectorGuidedPopulation population, Variation variation, Initialization initialization, int maxGeneration, int adaptFrequency)
      Constructs a new instance of the RVEA algorithm.
      Parameters:
      problem - the problem being solved
      initialPopulationSize - the initial population size
      population - the population used to store solutions
      variation - the variation operator
      initialization - the initialization method
      maxGeneration - the maximum number of generations for the angle-penalized distance to transition between convergence and diversity
      adaptFrequency - the frequency, in generations, that the reference vectors are normalized
  • Method Details

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

      public int getAdaptFrequency()
      Returns the frequency, in generations, that the reference vectors are normalized.
      Returns:
      the frequency, in generations
    • setAdaptFrequency

      public void setAdaptFrequency(int adaptFrequency)
      Sets the frequency, in generations, that the reference vectors are normalized.
      Parameters:
      adaptFrequency - the frequency, in generations
    • getPopulation

      public ReferenceVectorGuidedPopulation getPopulation()
      Description copied from interface: EvolutionaryAlgorithm
      Returns the current population of this evolutionary algorithm.
      Specified by:
      getPopulation in interface EvolutionaryAlgorithm
      Overrides:
      getPopulation in class AbstractEvolutionaryAlgorithm
      Returns:
      the current population of this evolutionary algorithm
    • 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
    • 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 AbstractEvolutionaryAlgorithm
      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 AbstractEvolutionaryAlgorithm
      Parameters:
      stream - the stream
      Throws:
      IOException - if an I/O error occurred
      ClassNotFoundException - if the stream referenced a class that is not defined