org.apache.commons.math3.optim.nonlinear.scalar.gradient
Class NonLinearConjugateGradientOptimizer

java.lang.Object
  extended by org.apache.commons.math3.optim.BaseOptimizer<PAIR>
      extended by org.apache.commons.math3.optim.BaseMultivariateOptimizer<PointValuePair>
          extended by org.apache.commons.math3.optim.nonlinear.scalar.MultivariateOptimizer
              extended by org.apache.commons.math3.optim.nonlinear.scalar.GradientMultivariateOptimizer
                  extended by org.apache.commons.math3.optim.nonlinear.scalar.gradient.NonLinearConjugateGradientOptimizer

public class NonLinearConjugateGradientOptimizer
extends GradientMultivariateOptimizer

Non-linear conjugate gradient optimizer.

This class supports both the Fletcher-Reeves and the Polak-Ribière update formulas for the conjugate search directions. It also supports optional preconditioning.

Since:
2.0
Version:
$Id: NonLinearConjugateGradientOptimizer.java 1416643 2012-12-03 19:37:14Z tn $

Nested Class Summary
static class NonLinearConjugateGradientOptimizer.BracketingStep
          The initial step is a factor with respect to the search direction (which itself is roughly related to the gradient of the function).
static class NonLinearConjugateGradientOptimizer.Formula
          Available choices of update formulas for the updating the parameter that is used to compute the successive conjugate search directions.
static class NonLinearConjugateGradientOptimizer.IdentityPreconditioner
          Default identity preconditioner.
private  class NonLinearConjugateGradientOptimizer.LineSearchFunction
          Internal class for line search.
 
Field Summary
private  double initialStep
          Initial step used to bracket the optimum in line search.
private  Preconditioner preconditioner
          Preconditioner (may be null).
private  UnivariateSolver solver
          solver to use in the line search (may be null).
private  NonLinearConjugateGradientOptimizer.Formula updateFormula
          Update formula for the beta parameter.
 
Fields inherited from class org.apache.commons.math3.optim.BaseOptimizer
evaluations, iterations
 
Constructor Summary
NonLinearConjugateGradientOptimizer(NonLinearConjugateGradientOptimizer.Formula updateFormula, ConvergenceChecker<PointValuePair> checker)
          Constructor with default line search solver and preconditioner.
NonLinearConjugateGradientOptimizer(NonLinearConjugateGradientOptimizer.Formula updateFormula, ConvergenceChecker<PointValuePair> checker, UnivariateSolver lineSearchSolver)
          Constructor with default preconditioner.
NonLinearConjugateGradientOptimizer(NonLinearConjugateGradientOptimizer.Formula updateFormula, ConvergenceChecker<PointValuePair> checker, UnivariateSolver lineSearchSolver, Preconditioner preconditioner)
           
 
Method Summary
protected  PointValuePair doOptimize()
          Performs the bulk of the optimization algorithm.
private  double findUpperBound(UnivariateFunction f, double a, double h)
          Finds the upper bound b ensuring bracketing of a root between a and b.
 PointValuePair optimize(OptimizationData... optData)
          Stores data and performs the optimization.
private  void parseOptimizationData(OptimizationData... optData)
          Scans the list of (required and optional) optimization data that characterize the problem.
 
Methods inherited from class org.apache.commons.math3.optim.nonlinear.scalar.GradientMultivariateOptimizer
computeObjectiveGradient
 
Methods inherited from class org.apache.commons.math3.optim.nonlinear.scalar.MultivariateOptimizer
computeObjectiveValue, getGoalType
 
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

updateFormula

private final NonLinearConjugateGradientOptimizer.Formula updateFormula
Update formula for the beta parameter.


preconditioner

private final Preconditioner preconditioner
Preconditioner (may be null).


solver

private final UnivariateSolver solver
solver to use in the line search (may be null).


initialStep

private double initialStep
Initial step used to bracket the optimum in line search.

Constructor Detail

NonLinearConjugateGradientOptimizer

public NonLinearConjugateGradientOptimizer(NonLinearConjugateGradientOptimizer.Formula updateFormula,
                                           ConvergenceChecker<PointValuePair> checker)
Constructor with default line search solver and preconditioner.

Parameters:
updateFormula - formula to use for updating the β parameter, must be one of NonLinearConjugateGradientOptimizer.Formula.FLETCHER_REEVES or NonLinearConjugateGradientOptimizer.Formula.POLAK_RIBIERE.
checker - Convergence checker.

NonLinearConjugateGradientOptimizer

public NonLinearConjugateGradientOptimizer(NonLinearConjugateGradientOptimizer.Formula updateFormula,
                                           ConvergenceChecker<PointValuePair> checker,
                                           UnivariateSolver lineSearchSolver)
Constructor with default preconditioner.

Parameters:
updateFormula - formula to use for updating the β parameter, must be one of NonLinearConjugateGradientOptimizer.Formula.FLETCHER_REEVES or NonLinearConjugateGradientOptimizer.Formula.POLAK_RIBIERE.
checker - Convergence checker.
lineSearchSolver - Solver to use during line search.

NonLinearConjugateGradientOptimizer

public NonLinearConjugateGradientOptimizer(NonLinearConjugateGradientOptimizer.Formula updateFormula,
                                           ConvergenceChecker<PointValuePair> checker,
                                           UnivariateSolver lineSearchSolver,
                                           Preconditioner preconditioner)
Parameters:
updateFormula - formula to use for updating the β parameter, must be one of NonLinearConjugateGradientOptimizer.Formula.FLETCHER_REEVES or NonLinearConjugateGradientOptimizer.Formula.POLAK_RIBIERE.
checker - Convergence checker.
lineSearchSolver - Solver to use during line search.
preconditioner - Preconditioner.
Method Detail

optimize

public PointValuePair optimize(OptimizationData... optData)
                        throws TooManyEvaluationsException
Stores data and performs the optimization.

Overrides:
optimize in class GradientMultivariateOptimizer
Parameters:
optData - Optimization data. The following data will be looked for:
Returns:
a point/value pair that satifies the convergence criteria.
Throws:
TooManyEvaluationsException - if the maximal number of evaluations (of the objective function) is exceeded.

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.

parseOptimizationData

private void parseOptimizationData(OptimizationData... optData)
Scans the list of (required and optional) optimization data that characterize the problem.

Parameters:
optData - Optimization data. The following data will be looked for:
  • InitialStep

findUpperBound

private double findUpperBound(UnivariateFunction f,
                              double a,
                              double h)
Finds the upper bound b ensuring bracketing of a root between a and b.

Parameters:
f - function whose root must be bracketed.
a - lower bound of the interval.
h - initial step to try.
Returns:
b such that f(a) and f(b) have opposite signs.
Throws:
MathIllegalStateException - if no bracket can be found.


Copyright (c) 2003-2013 Apache Software Foundation