Class LineSearchMore94
- java.lang.Object
-
- org.ddogleg.optimization.impl.LineSearchMore94
-
- All Implemented Interfaces:
- java.io.Serializable, IterativeOptimization, LineSearch
public class LineSearchMore94 extends java.lang.Object implements LineSearch
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:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor and Description LineSearchMore94()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method and Description doublegetFunction()Function value at the current stepdoublegetStep()Returns the current approximate solution for the line searchjava.lang.StringgetWarning()Provides feed back if something went wrong, but still produced a solution.voidinit(double funcAtZero, double derivAtZero, double funcAtInit, double stepInit, double stepMin, double stepMax)Initializes and resets the line search.booleanisConverged()Indicates if iteration stopped due to convergence or not.booleanisUpdated()True if the parameter(s) being optimized have been updatedbooleaniterate()Updates the search.LineSearchMore94setConvergence(double ftol, double gtol, double xtol)Configures the line search.voidsetFunction(CoupledDerivative function)Sets the function being optimized.
-
-
-
Method Detail
-
setConvergence
public LineSearchMore94 setConvergence(double ftol, double gtol, double xtol)
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 1e-3xtol- 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
public void setFunction(CoupledDerivative function)
Description copied from interface:LineSearchSets the function being optimized.- Specified by:
setFunctionin interfaceLineSearch- Parameters:
function- Line search function and derivative
-
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
public boolean iterate() throws OptimizationExceptionDescription 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 book keeping 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.
-
getStep
public double getStep()
Description copied from interface:LineSearchReturns the current approximate solution for the line search- Specified by:
getStepin interfaceLineSearch- Returns:
- current solution
-
getWarning
public java.lang.String getWarning()
Description copied from interface:IterativeOptimizationProvides feed back if something went wrong, but still produced a solution. If there is no message then null is returned. The meaning and type of messages are implementation specific.- Specified by:
getWarningin interfaceIterativeOptimization- Returns:
- Additional info on the computed solution.
-
getFunction
public double getFunction()
Description copied from interface:LineSearchFunction value at the current step- Specified by:
getFunctionin 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
-
-
DataMelt 3.0 © DataMelt by jWork.ORG