public class PowellOptimizer extends MultivariateOptimizer
Powell's algorithm. This code is translated and adapted from the Python version of this algorithm (as implemented in module optimize.py v0.5 of SciPy).
The default stopping criterion is based on the differences of the function value between two successive iterations. It is however possible to define a custom convergence checker that might terminate the algorithm earlier.
Line search is performed by the LineSearch class.
Constraints are not supported: the call to optimize will throw MathUnsupportedOperationException if bounds are passed to it. In order to impose simple constraints, the objective function must be wrapped in an adapter like MultivariateFunctionMappingAdapter or MultivariateFunctionPenaltyAdapter.
Since:
2.2
  • Field Details

    • MIN_RELATIVE_TOLERANCE

      private static final double MIN_RELATIVE_TOLERANCE
      Minimum relative tolerance.
    • relativeThreshold

      private final double relativeThreshold
      Relative threshold.
    • absoluteThreshold

      private final double absoluteThreshold
      Absolute threshold.
    • line

      private final LineSearch line
      Line search.
  • Constructor Details

    • PowellOptimizer

      public PowellOptimizer(double rel, double abs, ConvergenceChecker<PointValuePair> checker)
      This constructor allows to specify a user-defined convergence checker, in addition to the parameters that control the default convergence checking procedure.
      The internal line search tolerances are set to the square-root of their corresponding value in the multivariate optimizer.
      Parameters:
      rel - Relative threshold.
      abs - Absolute threshold.
      checker - Convergence checker.
      Throws:
      NotStrictlyPositiveException - if abs <= 0.
      NumberIsTooSmallException - if rel < 2 * Math.ulp(1d).
    • PowellOptimizer

      public PowellOptimizer(double rel, double abs, double lineRel, double lineAbs, ConvergenceChecker<PointValuePair> checker)
      This constructor allows to specify a user-defined convergence checker, in addition to the parameters that control the default convergence checking procedure and the line search tolerances.
      Parameters:
      rel - Relative threshold for this optimizer.
      abs - Absolute threshold for this optimizer.
      lineRel - Relative threshold for the internal line search optimizer.
      lineAbs - Absolute threshold for the internal line search optimizer.
      checker - Convergence checker.
      Throws:
      NotStrictlyPositiveException - if abs <= 0.
      NumberIsTooSmallException - if rel < 2 * Math.ulp(1d).
    • PowellOptimizer

      public PowellOptimizer(double rel, double abs)
      The parameters control the default convergence checking procedure.
      The internal line search tolerances are set to the square-root of their corresponding value in the multivariate optimizer.
      Parameters:
      rel - Relative threshold.
      abs - Absolute threshold.
      Throws:
      NotStrictlyPositiveException - if abs <= 0.
      NumberIsTooSmallException - if rel < 2 * Math.ulp(1d).
    • PowellOptimizer

      public PowellOptimizer(double rel, double abs, double lineRel, double lineAbs)
      Builds an instance with the default convergence checking procedure.
      Parameters:
      rel - Relative threshold.
      abs - Absolute threshold.
      lineRel - Relative threshold for the internal line search optimizer.
      lineAbs - Absolute threshold for the internal line search optimizer.
      Throws:
      NotStrictlyPositiveException - if abs <= 0.
      NumberIsTooSmallException - if rel < 2 * Math.ulp(1d).
  • Method Details

    • doOptimize

      protected PointValuePair doOptimize()
      Performs the bulk of the optimization algorithm.
      Specified by:
      doOptimize in class BaseOptimizer<PointValuePair>
      Returns:
      the point/value pair giving the optimal value of the objective function.
    • newPointAndDirection

      private double[][] newPointAndDirection(double[] p, double[] d, double optimum)
      Compute a new point (in the original space) and a new direction vector, resulting from the line search.
      Parameters:
      p - Point used in the line search.
      d - Direction used in the line search.
      optimum - Optimum found by the line search.
      Returns:
      a 2-element array containing the new point (at index 0) and the new direction (at index 1).
    • checkParameters

      private void checkParameters()
      Throws:
      MathUnsupportedOperationException - if bounds were passed to the optimize method.