NOX
Development
|
More'-Thuente Line Search. Original code by Dianne O'Leary, modfified by Tammy Kolda and Roger Pawlowski for the NOX project. This version has been slightly optimized and also supports Homer Walker's work on adaptive forcing terms and Ared/Pred conditions. It also allows for arbitrary merit functions and norms to be supplied by the user. More...
#include <NOX_LineSearch_MoreThuente.H>
Public Member Functions | |
MoreThuente (const Teuchos::RCP< NOX::GlobalData > &gd, Teuchos::ParameterList ¶ms) | |
Constructor. | |
~MoreThuente () | |
Destructor. | |
bool | reset (const Teuchos::RCP< NOX::GlobalData > &gd, Teuchos::ParameterList ¶ms) |
bool | compute (NOX::Abstract::Group &newgrp, double &step, const NOX::Abstract::Vector &dir, const NOX::Solver::Generic &s) |
Perform a line search. More... | |
Public Member Functions inherited from NOX::LineSearch::Generic | |
Generic () | |
Default constructor. | |
virtual | ~Generic () |
Destructor. | |
More'-Thuente Line Search. Original code by Dianne O'Leary, modfified by Tammy Kolda and Roger Pawlowski for the NOX project. This version has been slightly optimized and also supports Homer Walker's work on adaptive forcing terms and Ared/Pred conditions. It also allows for arbitrary merit functions and norms to be supplied by the user.
This code is based on the More'-Thuente line search from the 1983 MINPACK Project. More specifically, this code is based on Dianne O'Leary's 1991 Matlab-implementation of the More'-Thuente line search. The original comments are preserved in the descriptions of the individual subroutines. What follows is an updated summary.
The merit function we are minimizing is given by
(alternatively the user can define this)
The purpose of the More'-Thuente line search is to find a step which satisfies a sufficient decrease condition and a curvature condition. At each stage the subroutine updates an interval of uncertainty with endpoints stx and sty. The interval of uncertainty is initially chosen so that it contains a minimizer of the modified function
If a step is obtained for which the modified function has a nonpositive function value and nonnegative derivative, then the interval of uncertainty is chosen so that it contains a minimizer of .
The algorithm is designed to find a step which satisfies one of two sufficient decrease conditions:
(1) Armijo-Goldstein Condition
or
(2) Ared/Pred Condtition
and the curvature condition
If ftol is less than gtol and if, for example, the function is bounded below, then there is always a step which satisfies both conditions. If no step can be found which satisfies both conditions, then the algorithm usually stops when rounding errors prevent further progress. In this case stp only satisfies the sufficient decrease condition.
Modifications from NOX::LineSearch::MoreThuente
Implementation
This line search can be called via NOX::LineSearch::Manager.
This line search is used if "More'-Thuente" is the "Method" in the "Line Search" sublist. (See NOX::LineSearch::Manager for details.)
The following parameters can be specified for this line search in the "More'-Thuente" sublist of the "Line Search" sublist:
"Recovery Step Type" - Determines the step size to take when the line search fails. Choices are:
Output Parameters
A sublist for output parameters will be created called "Output" in the parameter list used to instantiate or reset the class. Valid output parameters are:
|
virtual |
Perform a line search.
On input:
grp | The initial solution vector, . |
dir | A vector of directions to be used in the line search, . |
s | The nonlinear solver. |
On output:
step | The distance the direction was scaled, . |
grp | The grp is updated with a new solution, , resulting from the linesearch. Normally, for a single direction line search, this is computed as: |
Ideally, (e.g the final direction is a descent direction).
Note that the dir
object is a std::vector. For typical line searches as described in the above equation, this vector is of size one. We have used a std::vector to allow for special cases of multi-directional line searches such as the Bader/Schnabel curvillinear line search.
Return value is true for a successful line search computation.
Implements NOX::LineSearch::Generic.
References NOX::Solver::Generic::getPreviousSolutionGroup().