ROL
ROL_TypeE_CompositeStepAlgorithm.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#ifndef ROL_TYPEE_COMPOSITESTEPALGORITHM_H
10#define ROL_TYPEE_COMPOSITESTEPALGORITHM_H
11
13
20namespace ROL {
21namespace TypeE {
22
23template<typename Real>
25private:
26 // Parameter list.
27 ParameterList list_;
28
29 // Vectors used for cloning.
30 ROL::Ptr<Vector<Real> > xvec_;
31 ROL::Ptr<Vector<Real> > gvec_;
32 ROL::Ptr<Vector<Real> > cvec_;
33 ROL::Ptr<Vector<Real> > lvec_;
34
35 // Diagnostic return flags for subalgorithms.
39
40 // Stopping conditions.
43 Real tolCG_;
44 Real tolOSS_;
46
47 // Tolerances and stopping conditions for subalgorithms.
48 Real lmhtol_;
49 Real qntol_;
50 Real pgtol_;
53 Real tntmax_;
54
55 // Trust-region parameters.
56 Real zeta_;
57 Real Delta_;
59 Real eta_;
61
62 Real ared_;
63 Real pred_;
64 Real snorm_;
65 Real nnorm_;
66 Real tnorm_;
67
68 // Output flags.
69 bool infoQN_;
70 bool infoLM_;
71 bool infoTS_;
72 bool infoAC_;
73 bool infoLS_;
75
76 // Performance summary.
83
84 // Verbosity flags.
87
88 using TypeE::Algorithm<Real>::state_;
89 using TypeE::Algorithm<Real>::status_;
90
94 const Vector<Real> &g,
95 Vector<Real> &l,
96 const Vector<Real> &c,
97 Objective<Real> &obj,
99 std::ostream &outStream = std::cout);
100
104 const Vector<Real> &x,
105 const Vector<Real> &l,
106 Objective<Real> &obj,
107 Constraint<Real> &con,
108 std::ostream &os);
109
113 Vector<Real> &l,
114 const Vector<Real> &s,
115 Objective<Real> &obj,
116 Constraint<Real> &con,
117 std::ostream &os);
118
129 const Vector<Real> &x,
130 const Vector<Real> &gf,
131 Constraint<Real> &con,
132 std::ostream &os);
133
157 const Vector<Real> &c,
158 const Vector<Real> &x,
159 Real delta,
160 Constraint<Real> &con,
161 std::ostream &os);
162
178 Vector<Real> &tCP,
179 Vector<Real> &Wg,
180 const Vector<Real> &x,
181 const Vector<Real> &g,
182 const Vector<Real> &n,
183 const Vector<Real> &l,
184 Real delta,
185 Objective<Real> &obj,
186 Constraint<Real> &con,
187 std::ostream &os);
188
191 void accept(Vector<Real> &s, Vector<Real> &n, Vector<Real> &t, Real f_new, Vector<Real> &c_new,
192 Vector<Real> &gf_new, Vector<Real> &l_new, Vector<Real> &g_new,
193 const Vector<Real> &x, const Vector<Real> &l, Real f, const Vector<Real> &gf, const Vector<Real> &c,
194 const Vector<Real> &g, Vector<Real> &tCP, Vector<Real> &Wg,
195 Objective<Real> &obj, Constraint<Real> &con, std::ostream &os);
196
197 template<typename T> int sgn(T val) const;
198
199 void printInfoLS(const std::vector<Real> &res, std::ostream& os) const;
200
201 Real setTolOSS(const Real intol) const;
202
203
204public:
205
206 CompositeStepAlgorithm(ParameterList &list);
207
208 using TypeE::Algorithm<Real>::run;
209 virtual void run(Vector<Real> &x,
210 const Vector<Real> &g,
211 Objective<Real> &obj,
212 Constraint<Real> &econ,
213 Vector<Real> &emul,
214 const Vector<Real> &eres,
215 std::ostream &outStream = std::cout) override;
216
217 virtual void writeHeader(std::ostream& os) const override;
218
219 virtual void writeName(std::ostream& os) const override;
220
221 virtual void writeOutput(std::ostream& os, const bool print_header = false) const override;
222
223}; // class ROL::TypeE::CompositeStepAlgorithm
224
225} // namespace TypeE
226} // namespace ROL
227
229
230#endif
Defines the general constraint operator interface.
Provides the interface to evaluate objective functions.
const Ptr< AlgorithmState< Real > > state_
const Ptr< CombinedStatusTest< Real > > status_
Provides an interface to run equality constrained optimization algorithms using the Composite-Step Tr...
virtual void writeHeader(std::ostream &os) const override
Print iterate header.
void initialize(Vector< Real > &x, const Vector< Real > &g, Vector< Real > &l, const Vector< Real > &c, Objective< Real > &obj, Constraint< Real > &con, std::ostream &outStream=std::cout)
Initialize algorithm by computing a few quantities.
virtual void writeOutput(std::ostream &os, const bool print_header=false) const override
Print iterate status.
void computeTrial(Vector< Real > &s, const Vector< Real > &x, const Vector< Real > &l, Objective< Real > &obj, Constraint< Real > &con, std::ostream &os)
Compute trial step.
virtual void writeName(std::ostream &os) const override
Print step name.
void accept(Vector< Real > &s, Vector< Real > &n, Vector< Real > &t, Real f_new, Vector< Real > &c_new, Vector< Real > &gf_new, Vector< Real > &l_new, Vector< Real > &g_new, const Vector< Real > &x, const Vector< Real > &l, Real f, const Vector< Real > &gf, const Vector< Real > &c, const Vector< Real > &g, Vector< Real > &tCP, Vector< Real > &Wg, Objective< Real > &obj, Constraint< Real > &con, std::ostream &os)
Check acceptance of subproblem solutions, adjust merit function penalty parameter,...
void computeLagrangeMultiplier(Vector< Real > &l, const Vector< Real > &x, const Vector< Real > &gf, Constraint< Real > &con, std::ostream &os)
Compute Lagrange multipliers by solving the least-squares problem minimizing the gradient of the Lagr...
void printInfoLS(const std::vector< Real > &res, std::ostream &os) const
void updateRadius(Vector< Real > &x, Vector< Real > &l, const Vector< Real > &s, Objective< Real > &obj, Constraint< Real > &con, std::ostream &os)
Update trust-region radius, take step, etc.
void computeQuasinormalStep(Vector< Real > &n, const Vector< Real > &c, const Vector< Real > &x, Real delta, Constraint< Real > &con, std::ostream &os)
Compute quasi-normal step by minimizing the norm of the linearized constraint.
virtual void run(Vector< Real > &x, const Vector< Real > &g, Objective< Real > &obj, Constraint< Real > &econ, Vector< Real > &emul, const Vector< Real > &eres, std::ostream &outStream=std::cout) override
Run algorithm on equality constrained problems (Type-E). This general interface supports the use of d...
void solveTangentialSubproblem(Vector< Real > &t, Vector< Real > &tCP, Vector< Real > &Wg, const Vector< Real > &x, const Vector< Real > &g, const Vector< Real > &n, const Vector< Real > &l, Real delta, Objective< Real > &obj, Constraint< Real > &con, std::ostream &os)
Solve tangential subproblem.
Defines the linear algebra or vector space interface.