44 #ifndef ROL_TRUNCATEDCG_H 45 #define ROL_TRUNCATEDCG_H 62 Teuchos::RCP<Vector<Real> >
s_;
63 Teuchos::RCP<Vector<Real> >
g_;
64 Teuchos::RCP<Vector<Real> >
v_;
65 Teuchos::RCP<Vector<Real> >
p_;
66 Teuchos::RCP<Vector<Real> >
Hp_;
79 Real em4(1e-4), em2(1e-2);
80 maxit_ = parlist.sublist(
"General").sublist(
"Krylov").get(
"Iteration Limit",20);
81 tol1_ = parlist.sublist(
"General").sublist(
"Krylov").get(
"Absolute Tolerance",em4);
82 tol2_ = parlist.sublist(
"General").sublist(
"Krylov").get(
"Relative Tolerance",em2);
103 Real tol = std::sqrt(ROL_EPSILON<Real>());
104 const Real zero(0), one(1), two(2), half(0.5);
108 Real snorm2(0), s1norm2(0);
111 Real gnorm =
g_->norm(), normg = gnorm;
112 const Real gtol = std::min(
tol1_,
tol2_*gnorm);
116 p_->set(*
v_);
p_->scale(-one);
117 Real pnorm2 =
v_->dot(
g_->dual());
120 Real kappa(0), beta(0), sigma(0), alpha(0), tmp(0), sMp(0);
121 Real gv =
v_->dot(
g_->dual());
124 for (iter = 0; iter <
maxit_; iter++) {
128 kappa =
p_->dot(
Hp_->dual());
130 sigma = (-sMp+sqrt(sMp*sMp+pnorm2*(del*del-snorm2)))/pnorm2;
139 s1norm2 = snorm2 + two*alpha*sMp + alpha*alpha*pnorm2;
141 if (s1norm2 >= del*del) {
142 sigma = (-sMp+sqrt(sMp*sMp+pnorm2*(del*del-snorm2)))/pnorm2;
148 pRed_ += half*alpha*gv;
153 g_->axpy(alpha,*
Hp_);
161 gv =
v_->dot(
g_->dual());
166 sMp = beta*(sMp+alpha*pnorm2);
167 pnorm2 = gv + beta*beta*pnorm2;
171 pRed_ += sigma*(gv-half*sigma*kappa);
190 Real tol = std::sqrt(ROL_EPSILON<Real>());
192 const Real gtol = std::min(
tol1_,
tol2_*gnorm);
196 Teuchos::RCP<Vector<Real> > sc = x.
clone();
197 cauchypoint(*sc,scnorm,del,iflag,iter,x,grad,gnorm,pObj);
198 Teuchos::RCP<Vector<Real> > xc = x.
clone();
205 Real snorm2 = snorm*snorm;
206 Teuchos::RCP<Vector<Real> > s1 = x.
clone();
211 Teuchos::RCP<Vector<Real> > g = x.
clone();
213 Teuchos::RCP<Vector<Real> > Hs = x.
clone();
216 Real normg = g->norm();
219 Teuchos::RCP<Vector<Real> > v = x.
clone();
223 Teuchos::RCP<Vector<Real> > p = x.
clone();
226 Real pnorm2 = v->dot(*g);
229 Teuchos::RCP<Vector<Real> > Hp = x.
clone();
238 Real gv = v->dot(*g);
242 for (iter = 0; iter <
maxit_; iter++) {
247 sigma = (-sMp+sqrt(sMp*sMp+pnorm2*(del*del-snorm2)))/pnorm2;
256 s1norm2 = snorm2 + 2.0*alpha*sMp + alpha*alpha*pnorm2;
258 if (s1norm2 >= del*del) {
259 sigma = (-sMp+sqrt(sMp*sMp+pnorm2*(del*del-snorm2)))/pnorm2;
265 pRed_ += 0.5*alpha*gv;
283 sMp = beta*(sMp+alpha*pnorm2);
284 pnorm2 = gv + beta*beta*pnorm2;
287 pRed_ += sigma*(gv-0.5*sigma*kappa);
void initialize(const Vector< Real > &x, const Vector< Real > &s, const Vector< Real > &g)
virtual void axpy(const Real alpha, const Vector &x)
Compute where .
virtual void initialize(const Vector< Real > &x, const Vector< Real > &s, const Vector< Real > &g)
void reducedHessVec(Vector< Real > &Hv, const Vector< Real > &v, const Vector< Real > &p, const Vector< Real > &d, const Vector< Real > &x, Real &tol)
Apply the reduced Hessian to a vector, v. The reduced Hessian first removes elements of v correspondi...
Contains definitions of custom data types in ROL.
Teuchos::RCP< Vector< Real > > primalVector_
Teuchos::RCP< Vector< Real > > p_
virtual Teuchos::RCP< Vector > clone() const =0
Clone to make a new (uninitialized) vector.
Provides interface for and implements trust-region subproblem solvers.
Provides the interface to evaluate trust-region model functions.
virtual void zero()
Set to zero vector.
Contains definitions for helper functions in ROL.
Defines the linear algebra or vector space interface.
virtual void dualTransform(Vector< Real > &tv, const Vector< Real > &v)
Teuchos::RCP< Vector< Real > > v_
virtual const Teuchos::RCP< const Vector< Real > > getGradient(void) const
void setPredictedReduction(const Real pRed)
Teuchos::RCP< Vector< Real > > Hp_
virtual void hessVec(Vector< Real > &hv, const Vector< Real > &v, const Vector< Real > &s, Real &tol)
Apply Hessian approximation to vector.
void run(Vector< Real > &s, Real &snorm, int &iflag, int &iter, const Real del, TrustRegionModel< Real > &model)
Teuchos::RCP< Vector< Real > > g_
Provides interface for truncated CG trust-region subproblem solver.
virtual void set(const Vector &x)
Set where .
virtual Real norm() const =0
Returns where .
void reducedPrecond(Vector< Real > &Mv, const Vector< Real > &v, const Vector< Real > &p, const Vector< Real > &d, const Vector< Real > &x, Real &tol)
Apply the reduced preconditioner to a vector, v. The reduced preconditioner first removes elements ...
virtual void precond(Vector< Real > &Pv, const Vector< Real > &v, const Vector< Real > &s, Real &tol)
Apply preconditioner to vector.
Teuchos::RCP< Vector< Real > > s_
TruncatedCG(Teuchos::ParameterList &parlist)
virtual void primalTransform(Vector< Real > &tv, const Vector< Real > &v)