## 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
`private class` `PowellOptimizer.LineSearch` Class for finding the minimum of the objective function along a given direction.

Field Summary
`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
`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
`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).

Copyright (c) 2003-2013 Apache Software Foundation