Class OMOPSO

All Implemented Interfaces:
Algorithm, Configurable, Stateful

public class OMOPSO extends AbstractPSOAlgorithm
Implementation of OMOPSO, a multi-objective particle swarm optimizer (MOPSO). According to [2], OMOPSO is one of the top-performing PSO algorithms.

References:

  1. Sierra, M. R. and C. A. Coello Coello (2005). Improving PSO-based Multi-Objective Optimization using Crowding, Mutation and ε-Dominance. Evolutionary Multi-Criterion Optimization, pp. 505-519.
  2. Durillo, J. J., J. Garc�a-Nieto, A. J. Nebro, C. A. Coello Coello, F. Luna, and E. Alba (2009). Multi-Objective Particle Swarm Optimizers: An Experimental Comparison. Evolutionary Multi-Criterion Optimization, pp. 495-509.
  • Constructor Details

    • OMOPSO

      public OMOPSO(Problem problem, int maxIterations)
      Constructs a new OMOPSO instance with default settings.
      Parameters:
      problem - the problem
      maxIterations - the maximum number of iterations for scaling non-uniform mutation; typically this should be maxEvaluations / swarmSize
    • OMOPSO

      public OMOPSO(Problem problem, int swarmSize, int leaderSize, Epsilons epsilons, double mutationProbability, double mutationPerturbation, int maxIterations)
      Constructs a new OMOPSO instance.
      Parameters:
      problem - the problem
      swarmSize - the number of particles
      leaderSize - the number of leaders
      epsilons - the ε-values used in the external archive
      mutationProbability - the mutation probability for uniform and non-uniform mutation
      mutationPerturbation - the perturbation index for uniform and non-uniform mutation
      maxIterations - the maximum iterations for scaling the non-uniform mutation
  • Method Details

    • getMutationProbability

      public double getMutationProbability()
      Returns the mutation probability used by the uniform and non-uniform mutation operators.
      Returns:
      the mutation probability
    • setMutationProbability

      public void setMutationProbability(double mutationProbability)
      Sets the mutation probability used by the uniform and non-uniform mutation operators. The default value is 1 / N, where N is the number of decision variables.
      Parameters:
      mutationProbability - the mutation probability
    • getPerturbationIndex

      public double getPerturbationIndex()
      Returns the perturbation index used by uniform and non-uniform mutation.
      Returns:
      the perturbation index
    • setPerturbationIndex

      public void setPerturbationIndex(double perturbationIndex)
      Sets the perturbation index used by uniform and non-uniform mutation. The default value is 0.5.
      Parameters:
      perturbationIndex - the perturbation index
    • getArchive

      protected EpsilonBoxDominanceArchive getArchive()
      Description copied from class: AbstractPSOAlgorithm
      Returns the archive of non-dominated solutions; or null of no external archive is used.
      Overrides:
      getArchive in class AbstractPSOAlgorithm
      Returns:
      the archive or null
    • setArchive

      protected void setArchive(EpsilonBoxDominanceArchive archive)
    • setMaxIterations

      protected void setMaxIterations(int maxIterations)
      Sets the maximum number of iterations for scaling the non-uniform mutation. Typically this should be set to maxEvaluations / swarmSize.
      Parameters:
      maxIterations - the maximum number of iterations
    • mutate

      protected void mutate(int i)
      Description copied from class: AbstractPSOAlgorithm
      Applies the mutation operator to an individual particle.
      Overrides:
      mutate in class AbstractPSOAlgorithm
      Parameters:
      i - the index of the particle
    • 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