#include <NOX_Solver_TrustRegionBased.H>
Inheritance diagram for NOX::Solver::TrustRegionBased:
Public Member Functions | |
| TrustRegionBased (NOX::Abstract::Group &xgrp, NOX::StatusTest::Generic &t, NOX::Parameter::List &p) | |
| Constructor. | |
| virtual | ~TrustRegionBased () |
| Destructor. | |
| virtual bool | reset (NOX::Abstract::Group &xgrp, NOX::StatusTest::Generic &t, NOX::Parameter::List &p) |
| Reset the nonlinear solver for a new solve. | |
| virtual bool | reset (NOX::Abstract::Group &xgrp, NOX::StatusTest::Generic &t) |
| A soft reset of the nonlinear solver for a new problem. | |
| virtual NOX::StatusTest::StatusType | getStatus () |
| Check current convergence and failure status. | |
| virtual NOX::StatusTest::StatusType | iterate () |
| Do one nonlinear method iteration and return status. | |
| virtual NOX::StatusTest::StatusType | solve () |
| Solve the nonlinear problem and return final status. | |
| virtual const NOX::Abstract::Group & | getSolutionGroup () const |
| Return a reference to the current solution group. | |
| virtual const NOX::Abstract::Group & | getPreviousSolutionGroup () const |
| Return a reference to the previous solution group. | |
| virtual int | getNumIterations () const |
| Get number of iterations. | |
| virtual const NOX::Parameter::List & | getParameterList () const |
| Return a refernece to the solver parameters. | |
Protected Types | |
| enum | StepType { Newton, Cauchy, Dogleg } |
| Enumerated list for each direction that may be required in the Trust region computation. More... | |
Protected Member Functions | |
| virtual void | init () |
| Print out initialization information and calcuation the RHS. | |
| virtual void | invalid (const string ¶m, double value) const |
| Print and error message and throw and error. | |
| virtual void | printUpdate () |
| Prints the current iteration information. | |
Protected Attributes | |
| NOX::Abstract::Group * | solnPtr |
| Current solution. | |
| NOX::Abstract::Group * | oldSolnPtr |
| Previous solution pointer. | |
| NOX::Abstract::Group & | oldSoln |
| Previous solution reference. | |
| NOX::Abstract::Vector * | newtonVecPtr |
| Current search direction.pointer. | |
| NOX::Abstract::Vector & | newtonVec |
| Current Newton direction.reference. | |
| NOX::Abstract::Vector * | cauchyVecPtr |
| Current search direction.pointer. | |
| NOX::Abstract::Vector & | cauchyVec |
| Current Cauchy direction.reference. | |
| NOX::Abstract::Vector * | aVecPtr |
| Extra vector used in computations. | |
| NOX::Abstract::Vector & | aVec |
| Extra vector. | |
| NOX::Abstract::Vector * | bVecPtr |
| Extra vector used in computations. | |
| NOX::Abstract::Vector & | bVec |
| Extra vector. | |
| NOX::StatusTest::Generic * | testPtr |
| Stopping test. | |
| NOX::Parameter::List * | paramsPtr |
| Input parameters. | |
| NOX::Utils | utils |
| Printing Utils. | |
| NOX::Direction::Manager | newton |
| Newton Search Direction. | |
| NOX::Direction::Manager | cauchy |
| Cauchy Search Direction. | |
| double | radius |
| Radius of the trust region. | |
| double | minRatio |
| Minimum improvement ratio to accept step. | |
| double | minRadius |
| Minimum trust region radius. | |
| double | maxRadius |
| Maximum trust region radius. | |
| double | contractTriggerRatio |
| ratio < alpha triggers contraction | |
| double | expandTriggerRatio |
| ratio > beta triggers expansion | |
| double | expandFactor |
| Expansion factor. | |
| double | contractFactor |
| Constraction factor. | |
| double | recoveryStep |
| double | newF |
Value of at current solution. | |
| double | oldF |
Value of at previous solution. | |
| double | dx |
| norm(xnew - xold) | |
| int | nIter |
| Number of nonlinear iterations. | |
| NOX::StatusTest::StatusType | status |
| Status of nonlinear solver. | |
| StepType | stepType |
| Type of step to be taken. | |
| NOX::Parameter::UserNorm * | userNormPtr |
| Stores a user supplied norm if supplied in the parameter list. | |
| NOX::Parameter::MeritFunction * | userMeritFuncPtr |
| Stores a user supplied merit function if supplied in the parameter list. | |
| bool | useAredPredRatio |
| If set to true, the minimum improvement ratio condition uses an Ared/Pred approach. | |
| NOX::Parameter::PrePostOperator * | prePostOperatorPtr |
| Pointer to a user defined NOX::Abstract::PrePostOperator object. | |
| bool | havePrePostOperator |
| True if a PrePostOperator was registered with the solver. | |
Our goal is to solve:
where
. Alternatively, we might say that we wish to solve

The trust region subproblem (TRSP) at iteration
is given by

where
,
,
,
is the Jacobian of
at
, and
is the trust region radius.
The "improvement ratio" for a given step
is defined as

An iteration consists of the following steps.


as follows: If
, then
; else,
.

and
, do the following.
as follows:
, then take a Newton step by setting 
, then take a Cauchy step by setting 
where
with
.
and calculate 
, then
Otherwise 

and
, then shrink the trust region to the size of the Newton step:
.
, then shrink the trust region:
.
and
, then expand the trust region:
.
Input Paramters
The following parameters should be specified in the "Trust Region" sublist based to the solver.
) - Minimum allowable trust region radius. Defaults to 1.0e-6.
) - Maximum allowable trust region radius. Defaults to 1.0e+10.
) - Minimum improvement ratio to accept the step. Defaults to 1.0e-4.
) - If the improvement ratio is less than this value, then the trust region is contracted by the amount specified by the "Contraction Factor". Must be larger than "Minimum Improvement Ratio". Defaults to 0.1.
) - See above. Defaults to 0.25.
) - If the improvement ratio is greater than this value, then the trust region is contracted by the amount specified by the "Expansion Factor". Defaults to 0.75.
) - See above. Defaults to 4.0.
, as described above. The improvement ratio is replaced by an "Ared/Pred" sufficient decrease criteria similar to that used in line search algorithms (see Eisenstat and Walker, SIAM Journal on Optimization V4 no. 2 (1994) pp 393-422):
Output Paramters
A sublist for output parameters called "Output" will be created and contain the following parameters:
|
|
Enumerated list for each direction that may be required in the Trust region computation.
|
|
||||||||||||||||
|
Constructor. See reset() for description. |
|
||||||||||||
|
A soft reset of the nonlinear solver for a new problem. This is a light-weight version of reset that takes no parameter list. Therefore, this reset only resets counters, the initial guess (contained in the grp argument) and new status tests (contained in the tests argument). This reset allows problems to bypass the potentially time consuming parsing of the parameter lists. Implements NOX::Solver::Generic. |
|
||||||||||||||||
|
Reset the nonlinear solver for a new solve.
Implements NOX::Solver::Generic. |
|
|
Solve the nonlinear problem and return final status. By "solve", we call iterate() until the NOX::StatusTest value is either NOX::StatusTest::Converged or NOX::StatusTest::Failed. Implements NOX::Solver::Generic. |
|
|
Extra vector used in computations. We have both a pointer and a reference because we need to create a DERIVED object and then want to have a reference to it. |
|
|
Extra vector used in computations. We have both a pointer and a reference because we need to create a DERIVED object and then want to have a reference to it. |
|
|
Current search direction.pointer. We have both a pointer and a reference because we need to create a DERIVED object and then want to have a reference to it. |
|
|
Current search direction.pointer. We have both a pointer and a reference because we need to create a DERIVED object and then want to have a reference to it. |
|
|
Previous solution pointer. We have both a pointer and a reference because we need to create a DERIVED object and then want to have a reference to it. |
|
|
Take a step of this length in the Newton direction if the trust-region search fails |
1.3.9.1