44 #ifndef ROL_TRUSTREGION_H 
   45 #define ROL_TRUSTREGION_H 
   90     ROL::ParameterList list = parlist.sublist(
"Step").sublist(
"Trust Region");
 
   92     eta0_    = list.get(
"Step Acceptance Threshold",            static_cast<Real>(0.05));
 
   93     eta1_    = list.get(
"Radius Shrinking Threshold",           static_cast<Real>(0.05));
 
   94     eta2_    = list.get(
"Radius Growing Threshold",             static_cast<Real>(0.9));
 
   95     gamma0_  = list.get(
"Radius Shrinking Rate (Negative rho)", static_cast<Real>(0.0625));
 
   96     gamma1_  = list.get(
"Radius Shrinking Rate (Positive rho)", static_cast<Real>(0.25));
 
   97     gamma2_  = list.get(
"Radius Growing Rate",                  static_cast<Real>(2.5));
 
   98     mu0_     = list.get(
"Sufficient Decrease Parameter",        static_cast<Real>(1.e-4));
 
   99     TRsafe_  = list.get(
"Safeguard Size",                       static_cast<Real>(100.0));
 
  102     ROL::ParameterList &glist = parlist.sublist(
"General");
 
  104     useInexact_.push_back(glist.get(
"Inexact Objective Function",     
false));
 
  105     useInexact_.push_back(glist.get(
"Inexact Gradient",               
false));
 
  106     useInexact_.push_back(glist.get(
"Inexact Hessian-Times-A-Vector", 
false));
 
  108     ROL::ParameterList &ilist = list.sublist(
"Inexact").sublist(
"Value");
 
  109     scale_       = ilist.get(
"Tolerance Scaling",                 static_cast<Real>(1.e-1));
 
  110     omega_       = ilist.get(
"Exponent",                          static_cast<Real>(0.9));
 
  111     force_       = ilist.get(
"Forcing Sequence Initial Value",    static_cast<Real>(1.0));
 
  112     updateIter_  = ilist.get(
"Forcing Sequence Update Frequency", static_cast<int>(10));
 
  113     forceFactor_ = ilist.get(
"Forcing Sequence Reduction Factor", static_cast<Real>(0.1));
 
  137     Real tol = std::sqrt(ROL_EPSILON<Real>());
 
  138     const Real one(1), 
zero(0);
 
  144     Real fold1 = fold, ftol = tol; 
 
  158       Real eta  = 
static_cast<Real
>(0.999)*std::min(
eta1_,one-
eta2_);
 
  170     Real aRed = fold1 - fnew;
 
  183       std::cout << std::endl;
 
  184       std::cout << 
"  Computation of actual and predicted reduction" << std::endl;
 
  185       std::cout << 
"    Current objective function value:        "   << fold1 << std::endl;
 
  186       std::cout << 
"    New objective function value:            "   << fnew  << std::endl;
 
  187       std::cout << 
"    Actual reduction:                        "   << aRed  << std::endl;
 
  188       std::cout << 
"    Predicted reduction:                     "   << 
pRed_ << std::endl;
 
  192     Real EPS = 
eps_*((one > std::abs(fold1)) ? one : std::abs(fold1));
 
  193     Real aRed_safe = aRed + EPS, pRed_safe = 
pRed_ + EPS;
 
  195     if (((std::abs(aRed_safe) < 
eps_) && (std::abs(pRed_safe) < 
eps_)) || aRed == 
pRed_) {
 
  199     else if ( std::isnan(aRed_safe) || std::isnan(pRed_safe) ) {
 
  204       rho = aRed_safe/pRed_safe;
 
  205       if (pRed_safe < zero && aRed_safe > zero) {
 
  208       else if (aRed_safe <= zero && pRed_safe > zero) {
 
  211       else if (aRed_safe <= zero && pRed_safe < zero) {
 
  220       std::cout << 
"    Safeguard:                               " << 
eps_      << std::endl;
 
  221       std::cout << 
"    Actual reduction with safeguard:         " << aRed_safe << std::endl;
 
  222       std::cout << 
"    Predicted reduction with safeguard:      " << pRed_safe << std::endl;
 
  223       std::cout << 
"    Ratio of actual and predicted reduction: " << rho       << std::endl;
 
  224       std::cout << 
"    Trust-region flag:                       " << flagTR    << std::endl;
 
  236       if ( rho >= 
eta0_ && (std::abs(aRed_safe) > 
eps_) ) {
 
  243         Real pgnorm = 
prim_->norm();
 
  247         Real lam = std::min(one, del/
prim_->norm());
 
  253         pgnorm *= 
prim_->norm();
 
  255         decr = ( aRed_safe >= 
mu0_*pgnorm );
 
  259           std::cout << 
"    Decrease lower bound (constraints):      " << 
mu0_*pgnorm       << std::endl;
 
  260           std::cout << 
"    Trust-region flag (constraints):         " << flagTR            << std::endl;
 
  261           std::cout << 
"    Is step feasible:                        " << bnd.
isFeasible(x) << std::endl;
 
  273       std::cout << 
"    Norm of step:                            " << snorm << std::endl;
 
  274       std::cout << 
"    Trust-region radius before update:       " << del   << std::endl;
 
  287         Real modelVal = model.
value(s,tol);
 
  289         Real theta = (one-
eta2_)*gs/((one-
eta2_)*(fold1+gs)+
eta2_*modelVal-fnew);
 
  290         del = std::min(
gamma1_*std::min(snorm,del),std::max(
gamma0_,theta)*del);
 
  292           std::cout << 
"    Interpolation model value:               " << modelVal << std::endl;
 
  293           std::cout << 
"    Interpolation step length:               " << theta    << std::endl;
 
  297         del = 
gamma1_*std::min(snorm,del);
 
  310       std::cout << 
"    Trust-region radius after update:        " << del << std::endl;
 
  311       std::cout << std::endl;
 
Provides the interface to evaluate objective functions. 
 
virtual const Vector & dual() const 
Return dual representation of , for example, the result of applying a Riesz map, or change of basis...
 
virtual ROL::Ptr< Vector > clone() const =0
Clone to make a new (uninitialized) vector. 
 
virtual void plus(const Vector &x)=0
Compute , where . 
 
bool isActivated(void) const 
Check if bounds are on. 
 
virtual Real value(const Vector< Real > &x, Real &tol)=0
Compute value. 
 
virtual void initialize(const Vector< Real > &x, const Vector< Real > &s, const Vector< Real > &g)
 
Contains definitions of custom data types in ROL. 
 
Provides interface for and implements trust-region subproblem solvers. 
 
void pruneActive(Vector< Real > &v, const Vector< Real > &x, Real eps=0)
Set variables to zero if they correspond to the -active set. 
 
Provides the interface to evaluate trust-region model functions. 
 
Defines the linear algebra or vector space interface. 
 
virtual const Ptr< const Vector< Real > > getGradient(void) const 
 
virtual void updatePredictedReduction(Real &pred, const Vector< Real > &s)
 
virtual Real dot(const Vector &x) const =0
Compute  where . 
 
Objective_SerialSimOpt(const Ptr< Obj > &obj, const V &ui) z0_ zero()
 
virtual void dualTransform(Vector< Real > &tv, const Vector< Real > &v)
 
Real getPredictedReduction(void) const 
 
ETrustRegionModel StringToETrustRegionModel(std::string s)
 
virtual Real value(const Vector< Real > &s, Real &tol)
Compute value. 
 
void setPredictedReduction(const Real pRed)
 
Real ROL_OVERFLOW(void)
Platform-dependent maximum double. 
 
ETrustRegionModel
Enumeration of trust-region model types. 
 
TrustRegion(ROL::ParameterList &parlist)
 
Provides the interface to apply upper and lower bound constraints. 
 
virtual void updateActualReduction(Real &ared, const Vector< Real > &s)
 
virtual void update(const Vector< Real > &x, bool flag=true, int iter=-1)
Update objective function. 
 
ETrustRegionFlag
Enumation of flags used by trust-region solvers. 
 
ETrustRegionModel TRmodel_
 
ROL::Ptr< Vector< Real > > dual_
 
virtual bool isFeasible(const Vector< Real > &v)
Check if the vector, v, is feasible. 
 
Contains definitions of enums for trust region algorithms. 
 
std::vector< bool > useInexact_
 
virtual void project(Vector< Real > &x)
Project optimization variables onto the bounds. 
 
virtual void run(Vector< Real > &s, Real &snorm, int &iflag, int &iter, const Real del, TrustRegionModel< Real > &model)=0
 
virtual void update(Vector< Real > &x, Real &fnew, Real &del, int &nfval, int &ngrad, ETrustRegionFlag &flagTR, const Vector< Real > &s, const Real snorm, const Real fold, const Vector< Real > &g, int iter, Objective< Real > &obj, BoundConstraint< Real > &bnd, TrustRegionModel< Real > &model)
 
ROL::Ptr< Vector< Real > > prim_