44 #ifndef ROL_GOLDENSECTION_H 45 #define ROL_GOLDENSECTION_H 60 Teuchos::RCP<Vector<Real> >
xnew_;
61 Teuchos::RCP<LineSearch<Real> >
btls_;
69 tol_ = parlist.sublist(
"Step").sublist(
"Line Search").sublist(
"Line-Search Method").get(
"Bracketing Tolerance",1.e-8);
77 btls_->initialize(x,s,g,obj,con);
80 void run( Real &alpha, Real &fval,
int &ls_neval,
int &ls_ngrad,
90 Real c = 2.0/(1.0+sqrt(5.0));
100 Real val_tr = obj.
value(*xnew_,tol);
104 if ( val_tr < val_tl ) {
105 if (
LineSearch<Real>::status(
LINESEARCH_GOLDENSECTION,ls_neval,ls_ngrad,tr,fval,gs,val_tr,x,s,obj,con) ) {
115 if ( val_tl < val_tr ) {
125 Real tc1 = c*tl + (1.0-c)*tr;
128 Real val_tc1 = obj.
value(*xnew_,tol);
132 Real tc2 = (1.0-c)*tl + c*tr;
135 Real val_tc2 = obj.
value(*xnew_,tol);
139 if ( val_tl <= val_tc1 && val_tl <= val_tc2 && val_tl <= val_tr ) {
143 else if ( val_tc1 <= val_tl && val_tc1 <= val_tc2 && val_tc1 <= val_tr ) {
147 else if ( val_tc2 <= val_tl && val_tc2 <= val_tc1 && val_tc2 <= val_tr ) {
156 while ( !
LineSearch<Real>::status(
LINESEARCH_GOLDENSECTION,ls_neval,ls_ngrad,t,fval,gs,val_t,x,s,obj,con)
157 && (std::abs(tl-tr) >= tol_) ) {
158 if ( val_tc1 > val_tc2 ) {
164 tc2 = (1.0-c)*tl + c*tr;
167 val_tc2 = obj.
value(*xnew_,tol);
176 tc1 = c*tl + (1.0-c)*tr;
179 val_tc1 = obj.
value(*xnew_,tol);
183 if ( val_tl <= val_tc1 && val_tl <= val_tc2 && val_tl <= val_tr ) {
187 else if ( val_tc1 <= val_tl && val_tc1 <= val_tc2 && val_tc1 <= val_tr ) {
191 else if ( val_tc2 <= val_tl && val_tc2 <= val_tc1 && val_tc2 <= val_tr ) {
204 btls_->run(alpha,fval,ls_neval,ls_ngrad,gs,s,x,obj,con);
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)
void initialize(const Vector< Real > &x, const Vector< Real > &s, const Vector< Real > &g, Objective< Real > &obj, BoundConstraint< Real > &con)
Implements a golden section line search.
virtual Real value(const Vector< Real > &x, Real &tol)=0
Compute value.
virtual Teuchos::RCP< Vector > clone() const =0
Clone to make a new (uninitialized) vector.
Defines the linear algebra or vector space interface.
Provides interface for and implements line searches.
Teuchos::RCP< LineSearch< Real > > btls_
Implements a simple back tracking line search.
Provides the interface to apply upper and lower bound constraints.
GoldenSection(Teuchos::ParameterList &parlist)
virtual void update(const Vector< Real > &x, bool flag=true, int iter=-1)
Update objective function.
Teuchos::RCP< Vector< Real > > xnew_
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.
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)