org.apache.commons.math3.optim.nonlinear.scalar.noderiv

## Class PowellOptimizer

- java.lang.Object
- - org.apache.commons.math3.optim.BaseOptimizer<PAIR>
  - - org.apache.commons.math3.optim.BaseMultivariateOptimizer<PointValuePair>
    - - org.apache.commons.math3.optim.nonlinear.scalar.MultivariateOptimizer
      - - org.apache.commons.math3.optim.nonlinear.scalar.noderiv.PowellOptimizer

    public class PowellOptimizer
    extends MultivariateOptimizer

Powell 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.
The internal line search optimizer is a `BrentOptimizer` with a convergence checker set to `SimpleUnivariateValueChecker`.

Since:
  2.2
Version:
  $Id: PowellOptimizer.java 1413594 2012-11-26 13:16:39Z erans $

### Nested Class Summary

Nested Classes
`private class` `PowellOptimizer.LineSearch` Class for finding the minimum of the objective function along a given direction.

### Field Summary

Fields
`private double` `absoluteThreshold` Absolute threshold.
`private PowellOptimizer.LineSearch` `line` Line search.
`private static double` `MIN_RELATIVE_TOLERANCE` Minimum relative tolerance.
`private double` `relativeThreshold` Relative threshold.

### Fields inherited from class org.apache.commons.math3.optim.BaseOptimizer

`evaluations, iterations`

### Constructor Summary

Constructors
Constructor and Description
`PowellOptimizer(double rel, double abs)` The parameters control the default convergence checking procedure.
`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.
`PowellOptimizer(double rel, double abs, double lineRel, double lineAbs)` Builds an instance with the default convergence checking procedure.
`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.

### Method Summary

Methods
`protected PointValuePair` `doOptimize()` Performs the bulk of the optimization algorithm.
`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.

### Methods inherited from class org.apache.commons.math3.optim.nonlinear.scalar.MultivariateOptimizer

`computeObjectiveValue, getGoalType, optimize`

### Methods inherited from class org.apache.commons.math3.optim.BaseMultivariateOptimizer

`getLowerBound, getStartPoint, getUpperBound`

### Methods inherited from class org.apache.commons.math3.optim.BaseOptimizer

`getConvergenceChecker, getEvaluations, getIterations, getMaxEvaluations, getMaxIterations, incrementEvaluationCount, incrementIterationCount`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### 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 PowellOptimizer.LineSearch line

Line search.

### Constructor Detail

#### 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 Detail

#### 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).