ROL
ROL_NonlinearCG_U.hpp
Go to the documentation of this file.
1// @HEADER
2// *****************************************************************************
3// Rapid Optimization Library (ROL) Package
4//
5// Copyright 2014 NTESS and the ROL contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10#ifndef ROL_NONLINEARCG_U_H
11#define ROL_NONLINEARCG_U_H
12
14#include "ROL_Types.hpp"
15#include "ROL_NonlinearCG.hpp"
16
24
25namespace ROL {
26
27template<typename Real>
28class NonlinearCG_U : public DescentDirection_U<Real> {
29private:
30
31 Ptr<NonlinearCG<Real>> nlcg_;
33 std::string ncgName_;
34
35public:
36
46 NonlinearCG_U( ParameterList &parlist,
47 const Ptr<NonlinearCG<Real>> &nlcg = nullPtr)
49 // Initialize secant object
50 ParameterList& Llist = parlist.sublist("Step").sublist("Line Search");
51 if ( nlcg == nullPtr ) {
52 ncgName_ = Llist.sublist("Descent Method").get("Nonlinear CG Type","Oren-Luenberger");
53 enlcg_
55 nlcg_ = ROL::makePtr<NonlinearCG<Real>>(enlcg_);
56 }
57 else {
58 ncgName_ = Llist.sublist("Descent Method").get("User Defined Nonlinear CG Name",
59 "Unspecified User Define Nonlinear CG Method");
60 }
61 }
62
63 void compute( Vector<Real> &s, Real &snorm, Real &sdotg, int &iter, int &flag,
64 const Vector<Real> &x, const Vector<Real> &g, Objective<Real> &obj) override {
65 nlcg_->run(s,g,x,obj);
66 //sdotg = -s.dot(g.dual());
67 sdotg = -s.apply(g);
68 if (sdotg >= static_cast<Real>(0)) {
69 s.set(g.dual());
70 //sdotg = -s.dot(g.dual());
71 sdotg = -s.apply(g);
72 }
73 s.scale(static_cast<Real>(-1));
74 snorm = s.norm();
75 iter = 0;
76 flag = 0;
77 }
78
79 std::string printName(void) const override {
80 std::stringstream name;
81 name << ncgName_ << " Nonlinear CG";
82 return name.str();
83 }
84}; // class ROL::NonlinearCG_U
85
86} // namespace ROL
87
88#endif
Contains definitions of custom data types in ROL.
Provides the interface to compute unconstrained optimization steps for line search.
Provides the interface to compute optimization steps with nonlinear CG.
NonlinearCG_U(ParameterList &parlist, const Ptr< NonlinearCG< Real > > &nlcg=nullPtr)
Constructor.
Ptr< NonlinearCG< Real > > nlcg_
NonlinearCG object (used for quasi-Newton)
void compute(Vector< Real > &s, Real &snorm, Real &sdotg, int &iter, int &flag, const Vector< Real > &x, const Vector< Real > &g, Objective< Real > &obj) override
std::string printName(void) const override
Provides the interface to evaluate objective functions.
Defines the linear algebra or vector space interface.
virtual Real apply(const Vector< Real > &x) const
Apply to a dual vector. This is equivalent to the call .
virtual Real norm() const =0
Returns where .
virtual void set(const Vector &x)
Set where .
virtual void scale(const Real alpha)=0
Compute where .
virtual const Vector & dual() const
Return dual representation of , for example, the result of applying a Riesz map, or change of basis,...
ENonlinearCG
@ NONLINEARCG_USERDEFINED
ENonlinearCG StringToENonlinearCG(std::string s)