Class LineSearchFletcher86
- All Implemented Interfaces:
Serializable
,IterativeOptimization
,LineSearch
Line search which meets the strong Wolfe line condition. The Wolfe condition stipulates that αk (the step size)
should give sufficient decrease in the objective function below. The two parameters 0 <
ftol ≤ gtol <
1
determine how stringent the search is. For a full description of optimization parameters see [1].
Wolfe condition
φ(α) ≤ φ(0) + ftol*α*φ'(0)
| φ'(α)| ≤ gtol*|φ'(0)|
where φ is the objective function and φ' is its derivative.
A typical application of using this line search is to find the minimum of an 'N' dimensional function
along a line with slope 'p'. In which case φ(α) is defined below:
φ(αk) = f(xk + αk*pk)
[1] R. Fletcher, "Practical Methods of Optimization" 2nd Ed. 1986
- See Also:
-
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected boolean
bracket()
Searches for an upper bound.protected boolean
Checks to see if alpha is changing by a significant amount.double
Function value at the current stepdouble
getGTol()
from wolfe condition.double
getStep()
Returns the current approximate solution for the line searchvoid
init
(double funcAtZero, double derivAtZero, double funcAtInit, double initAlpha, double stepMin, double stepMax) Initializes and resets the line search.protected void
initializeSearch
(double valueZero, double derivZero, double initValue, double initAlpha) protected double
interpolate
(double boundA, double boundB) Use either quadratic of cubic interpolation to guess the minimum.boolean
Indicates if iteration stopped due to convergence or not.boolean
True if the parameter(s) being optimized have been updatedboolean
iterate()
Updates the search.protected boolean
section()
Using the found bracket for alpha it searches for a better estimate.void
setConvergence
(double ftol, double gtol) Specify convergence criteria for line searchvoid
setFunction
(CoupledDerivative function, double fmin) Sets the function being optimized.void
setVerbose
(@Nullable PrintStream out, int level) If set to a non-null output then extra information will be printed to the specified stream.
-
Field Details
-
tolStep
protected double tolStep -
function
-
valueZero
protected double valueZero -
derivZero
protected double derivZero -
stp
protected double stp -
fp
protected double fp -
gp
protected double gp -
stprev
protected double stprev -
fprev
protected double fprev -
gprev
protected double gprev
-
-
Constructor Details
-
LineSearchFletcher86
public LineSearchFletcher86(double t1, double t2, double t3) - Parameters:
t1
- Prevents alpha from growing too large during bracket phase. Try 9t2
- Prevents alpha from being too close to bounds during sectioning. Recommend t2<
c2. Try 0.1t3
- Prevents alpha from being too close to bounds during sectioning. Try 0.5
-
LineSearchFletcher86
public LineSearchFletcher86()
-
-
Method Details
-
setConvergence
public void setConvergence(double ftol, double gtol) Description copied from interface:LineSearch
Specify convergence criteria for line search- Specified by:
setConvergence
in interfaceLineSearch
- Parameters:
ftol
- Controls required reduction in value. Try 1e-4gtol
- Controls decrease in derivative magnitude. Try 0.9
-
setFunction
Sets the function being optimized.- Specified by:
setFunction
in interfaceLineSearch
- Parameters:
function
- Line search function and derivativefmin
- Minimum possible function value
-
init
public void init(double funcAtZero, double derivAtZero, double funcAtInit, double initAlpha, double stepMin, double stepMax) Description copied from interface:LineSearch
Initializes and resets the line search. In some implementations a reasonable minimum and maximum step bound is set here.- Specified by:
init
in interfaceLineSearch
- Parameters:
funcAtZero
- Value of f(0)derivAtZero
- Derivative of at f(0)funcAtInit
- Value of f at initial value of step: f(step)initAlpha
- Initial step sizestepMin
- Minimum allowed step.stepMax
- Maximum allowed step.
-
initializeSearch
protected void initializeSearch(double valueZero, double derivZero, double initValue, double initAlpha) -
iterate
public boolean iterate()Updates the search. If the search has terminated true is returned. After the search has terminated invoke
IterativeOptimization.isConverged()
to see if a solution has been converged to or if it stopped for some other reason.NOTE: The optimization parameters might not be modified after iterate() is called. An internal book keeping step might have been done. To see if parameters have changed call
IterativeOptimization.isUpdated()
.- Specified by:
iterate
in interfaceIterativeOptimization
- Returns:
- true if it has converged or that no more progress can be made.
-
bracket
protected boolean bracket()Searches for an upper bound. -
section
protected boolean section()Using the found bracket for alpha it searches for a better estimate. -
getStep
public double getStep()Description copied from interface:LineSearch
Returns the current approximate solution for the line search- Specified by:
getStep
in interfaceLineSearch
- Returns:
- current solution
-
setVerbose
Description copied from interface:IterativeOptimization
If set to a non-null output then extra information will be printed to the specified stream.- Specified by:
setVerbose
in interfaceIterativeOptimization
- Parameters:
out
- Stream that is printed to. Set to null to disablelevel
- (Future use) Parameter which can be used to specify level of verbose output. Set to zero for now.
-
checkSmallStep
protected boolean checkSmallStep()Checks to see if alpha is changing by a significant amount. If it change is too small it can get stuck in a loop\ -
interpolate
protected double interpolate(double boundA, double boundB) Use either quadratic of cubic interpolation to guess the minimum. -
isConverged
public boolean isConverged()Description copied from interface:IterativeOptimization
Indicates if iteration stopped due to convergence or not.- Specified by:
isConverged
in interfaceIterativeOptimization
- Returns:
- True if iteration stopped because it converged.
-
getFunction
public double getFunction()Description copied from interface:LineSearch
Function value at the current step- Specified by:
getFunction
in interfaceLineSearch
-
getGTol
public double getGTol()Description copied from interface:LineSearch
from wolfe condition. Used to estimate max line search step- Specified by:
getGTol
in interfaceLineSearch
-
isUpdated
public boolean isUpdated()Description copied from interface:IterativeOptimization
True if the parameter(s) being optimized have been updated- Specified by:
isUpdated
in interfaceIterativeOptimization
- Returns:
- True if parameters have been updated
-