44#ifndef ROL_TYPE_ALGORITHM_DEF_H
45#define ROL_TYPE_ALGORITHM_DEF_H
55template<
typename Real>
63template<
typename Real>
68 if (state_->iterateVec == nullPtr) {
69 state_->iterateVec = x.
clone();
71 state_->iterateVec->set(x);
72 if (state_->lagmultVec == nullPtr) {
73 state_->lagmultVec = mul.
clone();
75 state_->lagmultVec->set(mul);
76 if (state_->stepVec == nullPtr) {
77 state_->stepVec = x.
clone();
79 state_->stepVec->zero();
80 if (state_->gradientVec == nullPtr) {
81 state_->gradientVec = g.
clone();
83 state_->gradientVec->set(g);
84 if (state_->constraintVec == nullPtr) {
85 state_->constraintVec = c.
clone();
87 state_->constraintVec->zero();
88 if (state_->minIterVec == nullPtr) {
89 state_->minIterVec = x.
clone();
91 state_->minIterVec->set(x);
92 state_->minIter = state_->iter;
93 state_->minValue = state_->value;
96template<
typename Real>
98 const bool combineStatus) {
102 status_->add(status);
105template<
typename Real>
107 std::ostream &outStream ) {
123template<
typename Real>
128 std::ostream &outStream ) {
129 Problem<Real> problem(makePtrFromRef(obj), makePtrFromRef(x));
130 problem.
addConstraint(
"NEC",makePtrFromRef(econ),makePtrFromRef(emul));
131 problem.
finalize(
false,
false,outStream);
132 run(problem,outStream);
136template<
typename Real>
143 std::ostream &outStream ) {
144 Problem<Real> problem(makePtrFromRef(obj), makePtrFromRef(x));
145 problem.
addConstraint(
"NEC",makePtrFromRef(econ),makePtrFromRef(emul));
146 problem.
addLinearConstraint(
"LEC",makePtrFromRef(linear_econ),makePtrFromRef(linear_emul));
147 problem.
finalize(
false,
false,outStream);
148 run(problem,outStream);
152template<
typename Real>
162 std::ostream &outStream ) {
163 Ptr<Vector<Real>> gp = g.
clone(), erp = eres.
clone(), lerp = linear_eres.
clone();
164 Problem<Real> problem(makePtrFromRef(obj), makePtrFromRef(x), gp);
165 problem.
addConstraint(
"NEC",makePtrFromRef(econ),makePtrFromRef(emul),erp,
false);
166 problem.
addLinearConstraint(
"LEC",makePtrFromRef(linear_econ),makePtrFromRef(linear_emul),lerp,
false);
167 problem.
finalize(
false,
false,outStream);
168 run(problem,outStream);
179template<
typename Real>
181 std::stringstream hist;
183 hist << std::setw(6) << std::left <<
"iter";
184 hist << std::setw(15) << std::left <<
"value";
185 hist << std::setw(15) << std::left <<
"cnorm";
186 hist << std::setw(15) << std::left <<
"gLnorm";
187 hist << std::setw(15) << std::left <<
"snorm";
188 hist << std::setw(10) << std::left <<
"#fval";
189 hist << std::setw(10) << std::left <<
"#grad";
194template<
typename Real>
199template<
typename Real>
201 std::stringstream hist;
202 hist << std::scientific << std::setprecision(6);
203 if ( write_header ) writeHeader(os);
204 if ( state_->iter == 0 ) {
206 hist << std::setw(6) << std::left << state_->iter;
207 hist << std::setw(15) << std::left << state_->value;
208 hist << std::setw(15) << std::left << state_->cnorm;
209 hist << std::setw(15) << std::left << state_->gnorm;
214 hist << std::setw(6) << std::left << state_->iter;
215 hist << std::setw(15) << std::left << state_->value;
216 hist << std::setw(15) << std::left << state_->cnorm;
217 hist << std::setw(15) << std::left << state_->gnorm;
218 hist << std::setw(15) << std::left << state_->snorm;
219 hist << std::setw(10) << std::left << state_->nfval;
220 hist << std::setw(10) << std::left << state_->ngrad;
226template<
typename Real>
228 std::stringstream hist;
229 hist <<
"Optimization Terminated with Status: ";
235template<
typename Real>
241template<
typename Real>
Contains definitions of custom data types in ROL.
Provides an interface to check two status tests of optimization algorithms.
Provides an interface to check status of optimization algorithms for problems with equality constrain...
Defines the general constraint operator interface.
Provides the interface to evaluate objective functions.
const Ptr< Vector< Real > > & getPrimalOptimizationVector()
Get the primal optimization space vector.
const Ptr< Vector< Real > > & getDualOptimizationVector()
Get the dual optimization space vector.
const Ptr< Vector< Real > > & getMultiplierVector()
Get the dual constraint space vector.
const Ptr< Constraint< Real > > & getConstraint()
Get the equality constraint.
EProblem getProblemType()
Get the optimization problem type (U, B, E, or G).
void addLinearConstraint(std::string name, const Ptr< Constraint< Real > > &linear_econ, const Ptr< Vector< Real > > &linear_emul, const Ptr< Vector< Real > > &linear_eres=nullPtr, bool reset=false)
Add a linear equality constraint.
void finalizeIteration()
Transform the optimization variables to the native parameterization after an optimization algorithm h...
void addConstraint(std::string name, const Ptr< Constraint< Real > > &econ, const Ptr< Vector< Real > > &emul, const Ptr< Vector< Real > > &eres=nullPtr, bool reset=false)
Add an equality constraint.
const Ptr< Objective< Real > > & getObjective()
Get the objective function.
const Ptr< Vector< Real > > & getResidualVector()
Get the primal constraint space vector.
virtual void finalize(bool lumpConstraints=false, bool printToStream=false, std::ostream &outStream=std::cout)
Tranform user-supplied constraints to consist of only bounds and equalities. Optimization problem can...
Provides an interface to check status of optimization algorithms.
virtual void writeName(std::ostream &os) const
Print step name.
virtual void writeOutput(std::ostream &os, bool write_header=false) const
Print iterate status.
void initialize(const Vector< Real > &x, const Vector< Real > &g, const Vector< Real > &mul, const Vector< Real > &c)
virtual void run(Problem< Real > &problem, std::ostream &outStream=std::cout)
Run algorithm on equality constrained problems (Type-E). This is the primary Type-E interface.
virtual void writeExitStatus(std::ostream &os) const
virtual void writeHeader(std::ostream &os) const
Print iterate header.
Ptr< const AlgorithmState< Real > > getState() const
Algorithm()
Constructor, given a step and a status test.
void setStatusTest(const Ptr< StatusTest< Real > > &status, bool combineStatus=false)
const Ptr< CombinedStatusTest< Real > > status_
Defines the linear algebra or vector space interface.
virtual ROL::Ptr< Vector > clone() const =0
Clone to make a new (uninitialized) vector.
std::string EExitStatusToString(EExitStatus tr)