void compute( Vector<Real> &s, const Vector<Real> &x, Objective<Real> &obj, BoundConstraint<Real> &bnd, AlgorithmState<Real> &algo_state ) { Teuchos::RCP<StepState<Real> > step_state = Step<Real>::getState(); Real tol = std::sqrt(ROL_EPSILON<Real>()), one(1); // Compute unconstrained step obj.invHessVec(s,*(step_state->gradientVec),x,tol); s.scale(-one); }
void compute( Vector<Real> &s, const Vector<Real> &x, Objective<Real> &obj, BoundConstraint<Real> &bnd, AlgorithmState<Real> &algo_state ) { Real tol = std::sqrt(ROL_EPSILON<Real>()); Teuchos::RCP<StepState<Real> > step_state = Step<Real>::getState(); // Compute projected Newton step // ---> Apply inactive-inactive block of inverse hessian to gradient gp_->set(*(step_state->gradientVec)); bnd.pruneActive(*gp_,*(step_state->gradientVec),x,algo_state.gnorm); obj.invHessVec(s,*gp_,x,tol); bnd.pruneActive(s,*(step_state->gradientVec),x,algo_state.gnorm); // ---> Add in active gradient components gp_->set(*(step_state->gradientVec)); bnd.pruneInactive(*d_,*(step_state->gradientVec),x,algo_state.gnorm); s.plus(gp_->dual()); s.scale(-1.0); }