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 maxit_ = parlist.sublist(
"General").sublist(
"Krylov").get(
"Iteration Limit",20);
80 tol1_ = parlist.sublist(
"General").sublist(
"Krylov").get(
"Absolute Tolerance",1.e-4);
81 tol2_ = parlist.sublist(
"General").sublist(
"Krylov").get(
"Relative Tolerance",1.e-2);
87 primalVector_ = x.
clone();
99 const Real gtol = std::min(tol1_,tol2_*gnorm);
105 primalVector_->set(grad.
dual());
107 g_->set(primalVector_->dual());
112 s.
zero(); s_->zero();
114 Real snorm2 = 0.0, s1norm2 = 0.0;
123 Real pnorm2 = v_->dot(g_->dual());
132 Real gv = v_->dot(g_->dual());
136 for (iter = 0; iter <
maxit_; iter++) {
140 kappa = p_->dot(Hp_->dual());
142 sigma = (-sMp+sqrt(sMp*sMp+pnorm2*(del*del-snorm2)))/pnorm2;
151 s1norm2 = snorm2 + 2.0*alpha*sMp + alpha*alpha*pnorm2;
153 if (s1norm2 >= del*del) {
154 sigma = (-sMp+sqrt(sMp*sMp+pnorm2*(del*del-snorm2)))/pnorm2;
160 pRed_ += 0.5*alpha*gv;
165 g_->axpy(alpha,*Hp_);
174 gv = v_->dot(g_->dual());
179 sMp = beta*(sMp+alpha*pnorm2);
180 pnorm2 = gv + beta*beta*pnorm2;
183 pRed_ += sigma*(gv-0.5*sigma*kappa);
186 if (iter == maxit_) {
202 const Real gtol = std::min(tol1_,tol2_*gnorm);
206 Teuchos::RCP<Vector<Real> > sc = x.
clone();
207 cauchypoint(*sc,scnorm,del,iflag,iter,x,grad,gnorm,pObj);
208 Teuchos::RCP<Vector<Real> > xc = x.
clone();
215 Real snorm2 = snorm*snorm;
216 Teuchos::RCP<Vector<Real> > s1 = x.
clone();
221 Teuchos::RCP<Vector<Real> > g = x.
clone();
223 Teuchos::RCP<Vector<Real> > Hs = x.
clone();
226 Real normg = g->norm();
229 Teuchos::RCP<Vector<Real> > v = x.
clone();
233 Teuchos::RCP<Vector<Real> > p = x.
clone();
236 Real pnorm2 = v->dot(*g);
239 Teuchos::RCP<Vector<Real> > Hp = x.
clone();
248 Real gv = v->dot(*g);
252 for (iter = 0; iter <
maxit_; iter++) {
257 sigma = (-sMp+sqrt(sMp*sMp+pnorm2*(del*del-snorm2)))/pnorm2;
266 s1norm2 = snorm2 + 2.0*alpha*sMp + alpha*alpha*pnorm2;
268 if (s1norm2 >= del*del) {
269 sigma = (-sMp+sqrt(sMp*sMp+pnorm2*(del*del-snorm2)))/pnorm2;
275 pRed_ += 0.5*alpha*gv;
293 sMp = beta*(sMp+alpha*pnorm2);
294 pnorm2 = gv + beta*beta*pnorm2;
297 pRed_ += sigma*(gv-0.5*sigma*kappa);
300 if (iter == maxit_) {
void initialize(const Vector< Real > &x, const Vector< Real > &s, const Vector< Real > &g)
virtual const Vector & dual() const
Return dual representation of , for example, the result of applying a Riesz map, or change of basis...
bool isConActivated(void)
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.
void pruneActive(Vector< Real > &v, const Vector< Real > &g, const Vector< Real > &x)
virtual void zero()
Set to zero vector.
Contains definitions for helper functions in ROL.
Defines the linear algebra or vector space interface.
Teuchos::RCP< Vector< Real > > v_
void setPredictedReduction(const Real pRed)
Teuchos::RCP< Vector< Real > > Hp_
Teuchos::RCP< Vector< Real > > g_
Provides interface for truncated CG trust-region subproblem solver.
void run(Vector< Real > &s, Real &snorm, Real &del, int &iflag, int &iter, const Vector< Real > &x, const Vector< Real > &grad, const Real &gnorm, ProjectedObjective< Real > &pObj)
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 of...
Teuchos::RCP< Vector< Real > > s_
TruncatedCG(Teuchos::ParameterList &parlist)
static const double ROL_EPSILON
Platform-dependent machine epsilon.