org.apache.commons.math.optimization.general
Class NonLinearConjugateGradientOptimizer

java.lang.Object
  extended by org.apache.commons.math.optimization.general.AbstractScalarDifferentiableOptimizer
      extended by org.apache.commons.math.optimization.general.NonLinearConjugateGradientOptimizer
All Implemented Interfaces:
DifferentiableMultivariateRealOptimizer

public class NonLinearConjugateGradientOptimizer
extends AbstractScalarDifferentiableOptimizer

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:
$Revision: 1070725 $ $Date: 2011-02-15 02:31:12 +0100 (mar. 15 f??vr. 2011) $

Nested Class Summary
private 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  UnivariateRealSolver solver
          solver to use in the line search (may be null).
private  ConjugateGradientFormula updateFormula
          Update formula for the beta parameter.
 
Fields inherited from class org.apache.commons.math.optimization.general.AbstractScalarDifferentiableOptimizer
checker, DEFAULT_MAX_ITERATIONS, goal, point
 
Constructor Summary
NonLinearConjugateGradientOptimizer(ConjugateGradientFormula updateFormula)
          Simple constructor with default settings.
 
Method Summary
protected  RealPointValuePair doOptimize()
          Perform the bulk of optimization algorithm.
private  double findUpperBound(UnivariateRealFunction f, double a, double h)
          Find the upper bound b ensuring bracketing of a root between a and b
 void setInitialStep(double initialStep)
          Set the initial step used to bracket the optimum in line search.
 void setLineSearchSolver(UnivariateRealSolver lineSearchSolver)
          Set the solver to use during line search.
 void setPreconditioner(Preconditioner preconditioner)
          Set the preconditioner.
 
Methods inherited from class org.apache.commons.math.optimization.general.AbstractScalarDifferentiableOptimizer
computeObjectiveGradient, computeObjectiveValue, getConvergenceChecker, getEvaluations, getGradientEvaluations, getIterations, getMaxEvaluations, getMaxIterations, incrementIterationsCounter, optimize, setConvergenceChecker, setMaxEvaluations, setMaxIterations
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

updateFormula

private final ConjugateGradientFormula updateFormula
Update formula for the beta parameter.


preconditioner

private Preconditioner preconditioner
Preconditioner (may be null).


solver

private UnivariateRealSolver 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(ConjugateGradientFormula updateFormula)
Simple constructor with default settings.

The convergence check is set to a SimpleVectorialValueChecker and the maximal number of iterations is set to AbstractScalarDifferentiableOptimizer.DEFAULT_MAX_ITERATIONS.

Parameters:
updateFormula - formula to use for updating the β parameter, must be one of ConjugateGradientFormula.FLETCHER_REEVES or ConjugateGradientFormula.POLAK_RIBIERE
Method Detail

setPreconditioner

public void setPreconditioner(Preconditioner preconditioner)
Set the preconditioner.

Parameters:
preconditioner - preconditioner to use for next optimization, may be null to remove an already registered preconditioner

setLineSearchSolver

public void setLineSearchSolver(UnivariateRealSolver lineSearchSolver)
Set the solver to use during line search.

Parameters:
lineSearchSolver - solver to use during line search, may be null to remove an already registered solver and fall back to the default Brent solver.

setInitialStep

public void setInitialStep(double initialStep)
Set the initial step used to bracket the optimum in line search.

The initial step is a factor with respect to the search direction, which itself is roughly related to the gradient of the function

Parameters:
initialStep - initial step used to bracket the optimum in line search, if a non-positive value is used, the initial step is reset to its default value of 1.0

doOptimize

protected RealPointValuePair doOptimize()
                                 throws FunctionEvaluationException,
                                        OptimizationException,
                                        IllegalArgumentException
Perform the bulk of optimization algorithm.

Specified by:
doOptimize in class AbstractScalarDifferentiableOptimizer
Returns:
the point/value pair giving the optimal value for objective function
Throws:
FunctionEvaluationException - if the objective function throws one during the search
OptimizationException - if the algorithm failed to converge
IllegalArgumentException - if the start point dimension is wrong

findUpperBound

private double findUpperBound(UnivariateRealFunction f,
                              double a,
                              double h)
                       throws FunctionEvaluationException,
                              OptimizationException
Find 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:
FunctionEvaluationException - if the function cannot be computed
OptimizationException - if no bracket can be found


Copyright (c) 2003-2011 Apache Software Foundation