71 min_value_(ROL_OVERFLOW<Real>()),
72 rec_value_(ROL_OVERFLOW<Real>()), target_(0.0), sigma_(0.0) {
74 delta_ = parlist.sublist(
"Step").sublist(
"Line Search").sublist(
"Line-Search Method").sublist(
"Path-Based Target Level").get(
"Target Relaxation Parameter",p1);
75 bound_ = parlist.sublist(
"Step").sublist(
"Line Search").sublist(
"Line-Search Method").sublist(
"Path-Based Target Level").get(
"Upper Bound on Path Length",one);
84 void run( Real &alpha, Real &fval,
int &ls_neval,
int &ls_ngrad,
85 const Real &gs,
const Vector<Real> &s,
const Vector<Real> &x,
86 Objective<Real> &obj )
override {
87 Real tol = std::sqrt(ROL_EPSILON<Real>()),
zero(0), half(0.5);
91 if ( fval < min_value_ ) {
94 target_ = rec_value_ - half*delta_;
95 if ( fval < target_ ) {
96 rec_value_ = min_value_;
100 if ( sigma_ > bound_ ) {
101 rec_value_ = min_value_;
106 target_ = rec_value_ - delta_;
108 alpha = (fval - target_)/std::abs(gs);
110 xnew_->set(x); xnew_->axpy(alpha,s);
112 obj.update(*xnew_,UpdateType::Trial);
113 fval = obj.value(*xnew_,tol);
116 sigma_ += alpha*std::sqrt(std::abs(gs));
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) override