44 #ifndef ROL_CUBICINTERP_H 45 #define ROL_CUBICINTERP_H 59 Teuchos::RCP<Vector<Real> >
xnew_;
67 rho_ = parlist.sublist(
"Step").sublist(
"Line Search").sublist(
"Line-Search Method").get(
"Backtracking Rate",0.5);
76 void run( Real &alpha, Real &fval,
int &ls_neval,
int &ls_ngrad,
89 fval = obj.
value(*xnew_,tol);
99 bool first_iter =
true;
101 while ( !
LineSearch<Real>::status(
LINESEARCH_CUBICINTERP,ls_neval,ls_ngrad,alpha,fold,gs,fval,x,s,obj,con) ) {
103 alpha1 = -gs*alpha*alpha/(2.0*(fval-fold-gs*alpha));
107 x1 = fval-fold-alpha*gs;
108 x2 = fvalp-fval-alpha2*gs;
109 a = (1.0/(alpha - alpha2))*( x1/(alpha*alpha) - x2/(alpha2*alpha2));
110 b = (1.0/(alpha - alpha2))*(-x1*alpha2/(alpha*alpha) + x2*alpha/(alpha2*alpha2));
112 alpha1 = -gs/(2.0*b);
115 alpha1 = (-b+sqrt(b*b-3.0*a*gs))/(3.0*a);
117 if ( alpha1 > 0.5*alpha ) {
124 if ( alpha1 <= 0.1*alpha ) {
127 else if ( alpha1 >= 0.5*alpha ) {
137 fval = obj.
value(*xnew_,tol);
Provides the interface to evaluate objective functions.
void updateIterate(Vector< Real > &xnew, const Vector< Real > &x, const Vector< Real > &s, Real alpha, BoundConstraint< Real > &con)
virtual Real getInitialAlpha(int &ls_neval, int &ls_ngrad, const Real fval, const Real gs, const Vector< Real > &x, const Vector< Real > &s, Objective< Real > &obj, BoundConstraint< Real > &con)
CubicInterp(Teuchos::ParameterList &parlist)
virtual Real value(const Vector< Real > &x, Real &tol)=0
Compute value.
void initialize(const Vector< Real > &x, const Vector< Real > &s, const Vector< Real > &g, Objective< Real > &obj, BoundConstraint< Real > &con)
virtual Teuchos::RCP< Vector > clone() const =0
Clone to make a new (uninitialized) vector.
Teuchos::RCP< Vector< Real > > xnew_
Defines the linear algebra or vector space interface.
Provides interface for and implements line searches.
Implements cubic interpolation back tracking line search.
Provides the interface to apply upper and lower bound constraints.
void run(Real &alpha, Real &fval, int &ls_neval, int &ls_ngrad, const Real &gs, const Vector< Real > &s, const Vector< Real > &x, Objective< Real > &obj, BoundConstraint< Real > &con)
virtual void update(const Vector< Real > &x, bool flag=true, int iter=-1)
Update objective function.
virtual void initialize(const Vector< Real > &x, const Vector< Real > &s, const Vector< Real > &g, Objective< Real > &obj, BoundConstraint< Real > &con)
static const double ROL_EPSILON
Platform-dependent machine epsilon.