44 #ifndef ROL_BISECTION_H 45 #define ROL_BISECTION_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,
97 Real val_tr = obj.
value(*xnew_,tol);
101 if ( val_tr < val_tl ) {
102 if (
LineSearch<Real>::status(
LINESEARCH_BISECTION,ls_neval,ls_ngrad,tr,fval,gs,val_tr,x,s,obj,con) ) {
112 if ( val_tl < val_tr ) {
122 Real tc = (tl+tr)/2.0;
124 Real val_tc = obj.
value(*xnew_,tol);
128 if ( val_tc < val_t ) {
138 while ( !
LineSearch<Real>::status(
LINESEARCH_BISECTION,ls_neval,ls_ngrad,t,fval,gs,val_t,x,s,obj,con)
139 && std::abs(tr - tl) > tol_ ) {
143 val_t1 = obj.
value(*xnew_,tol);
149 val_t2 = obj.
value(*xnew_,tol);
152 if ( ( (val_tl <= val_tr) && (val_tl <= val_t1) && (val_tl <= val_t2) && (val_tl <= val_tc) )
153 || ( (val_t1 <= val_tr) && (val_t1 <= val_tl) && (val_t1 <= val_t2) && (val_t1 <= val_tc) ) ) {
154 if ( val_tl < val_t1 ) {
168 else if ( ( (val_tc <= val_tr) && (val_tc <= val_tl) && (val_tc <= val_t1) && (val_tc <= val_t2) ) ) {
177 else if ( ( (val_t2 <= val_tr) && (val_t2 <= val_tl) && (val_t2 <= val_t1) && (val_t2 <= val_tc) )
178 || ( (val_tr <= val_tl) && (val_tr <= val_t1) && (val_tr <= val_t2) && (val_tr <= val_tc) ) ) {
179 if ( val_tr < val_t2 ) {
199 btls_->run(alpha,fval,ls_neval,ls_ngrad,gs,s,x,obj,con);
Provides the interface to evaluate objective functions.
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)
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)
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.
Bisection(Teuchos::ParameterList &parlist)
Defines the linear algebra or vector space interface.
Provides interface for and implements line searches.
void initialize(const Vector< Real > &x, const Vector< Real > &s, const Vector< Real > &g, Objective< Real > &obj, BoundConstraint< Real > &con)
Implements a simple back tracking line search.
Teuchos::RCP< LineSearch< Real > > btls_
Provides the interface to apply upper and lower bound constraints.
Teuchos::RCP< Vector< Real > > xnew_
Implements a bisection line search.
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.