Class LineSearchMore94
- All Implemented Interfaces:
Serializable,IterativeOptimization,LineSearch,VerbosePrint
Line search algorithm that provides a guaranteed sufficient decrease according to the Wolfe condition. This is the same algorithm by Minpack-2 [2]. The logic in the code below is based off of [2] but the original paper [1] was being looked at too.
Wolfe condition
φ(α) ≤ φ(0) + ftol*αφ'(0)
|φ'(α)| ≤ gtol*|φ'(0)|
where ftol and gtol determine the precision needed to terminate the search..
This is basically a "cleaned up" version of the code from:.
MINPACK-2 Project. November 1993.
Argonne National Laboratory and University of Minnesota.
Brett M. Averick, Richard G. Carter, and Jorge J. More'.
Permission has been given by Jorge Moré (after he emerged from underwater) to redistribute csrch on
July 8th 2012 via e-mail.
[1] Jorge J. More and David J. Thuente, "Line Search Algorithms with Guaranteed Sufficient Decrease"
ACM Transactions of Mathematical Software, Vol 20 , No. 3, September 1994, Pages 286-307
[2] MINPACK-2 source code http://ftp.mcs.anl.gov/pub/MINPACK-2/csrch/
- See Also:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptiondoubleFunction value at the current stepdoublegetGTol()from wolfe condition.doublegetStep()Returns the current approximate solution for the line searchvoidinit(double funcAtZero, double derivAtZero, double funcAtInit, double stepInit, double stepMin, double stepMax) Initializes and resets the line search.booleanIndicates if iteration stopped due to convergence or not.booleanTrue if the parameter(s) being optimized have been updatedbooleaniterate()Updates the search.voidsetConvergence(double ftol, double gtol) Specify convergence criteria for line searchsetConvergence(double ftol, double gtol, double xtol) Configures the line search.voidsetFunction(CoupledDerivative function, double fmin) Sets the function being optimized.voidsetVerbose(@Nullable PrintStream out, int level) If set to a non-null output then extra information will be printed to the specified stream.voidsetVerbose(@Nullable PrintStream out, @Nullable Set<String> configuration) If set to a non-null output then extra information will be printed to the specified stream.
-
Constructor Details
-
LineSearchMore94
public LineSearchMore94()
-
-
Method Details
-
setConvergence
Configures the line search.- Parameters:
ftol- Tolerance for sufficient decrease. ftol>0. Smaller value for loose tolerance. Try 1e-4gtol- Tolerance for curvature condition. gtol ≥ 0. Larger value for loose tolerance. Try 0.9xtol- Relative tolerance for acceptable step. xtol ≥ 0. Larger value for loose tolerance. Try 1e-4.- Returns:
- Reference to this class to allow for command chaining.
-
setFunction
Description copied from interface:LineSearchSets the function being optimized.- Specified by:
setFunctionin interfaceLineSearch- Parameters:
function- Line search function and derivativefmin- Minimum possible function value
-
setConvergence
public void setConvergence(double ftol, double gtol) Description copied from interface:LineSearchSpecify convergence criteria for line search- Specified by:
setConvergencein interfaceLineSearch- Parameters:
ftol- Tolerance for sufficient decrease. ftol>0. Smaller value for loose tolerance. Try 1e-4gtol- Tolerance for curvature condition. gtol ≥ 0. Larger value for loose tolerance. Try 0.9
-
init
public void init(double funcAtZero, double derivAtZero, double funcAtInit, double stepInit, double stepMin, double stepMax) Description copied from interface:LineSearchInitializes and resets the line search. In some implementations a reasonable minimum and maximum step bound is set here.- Specified by:
initin interfaceLineSearch- Parameters:
funcAtZero- Value of f(0)derivAtZero- Derivative of at f(0)funcAtInit- Value of f at initial value of step: f(step)stepInit- Initial step sizestepMin- Minimum allowed step.stepMax- Maximum allowed step.
-
iterate
Description copied from interface:IterativeOptimizationUpdates 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 bookkeeping step might have been done. To see if parameters have changed call
IterativeOptimization.isUpdated().- Specified by:
iteratein interfaceIterativeOptimization- Returns:
- true if it has converged or that no more progress can be made.
- Throws:
OptimizationException
-
isConverged
public boolean isConverged()Description copied from interface:IterativeOptimizationIndicates if iteration stopped due to convergence or not.- Specified by:
isConvergedin interfaceIterativeOptimization- Returns:
- True if iteration stopped because it converged.
-
setVerbose
Description copied from interface:IterativeOptimizationIf set to a non-null output then extra information will be printed to the specified stream.- Specified by:
setVerbosein 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.
-
setVerbose
public void setVerbose(@Nullable @Nullable PrintStream out, @Nullable @Nullable Set<String> configuration) Description copied from interface:VerbosePrintIf set to a non-null output then extra information will be printed to the specified stream.- Specified by:
setVerbosein interfaceVerbosePrint- Parameters:
out- Stream that is printed to. Set to null to disableconfiguration- (Future use) Set which specifies flags that can be used to turn on and off different output
-
getStep
public double getStep()Description copied from interface:LineSearchReturns the current approximate solution for the line search- Specified by:
getStepin interfaceLineSearch- Returns:
- current solution
-
getFunction
public double getFunction()Description copied from interface:LineSearchFunction value at the current step- Specified by:
getFunctionin interfaceLineSearch
-
getGTol
public double getGTol()Description copied from interface:LineSearchfrom wolfe condition. Used to estimate max line search step- Specified by:
getGTolin interfaceLineSearch
-
isUpdated
public boolean isUpdated()Description copied from interface:IterativeOptimizationTrue if the parameter(s) being optimized have been updated- Specified by:
isUpdatedin interfaceIterativeOptimization- Returns:
- True if parameters have been updated
-