44 #ifndef ROL_TYPE_ALGORITHM_DEF_H
45 #define ROL_TYPE_ALGORITHM_DEF_H
55 template<
typename Real>
63 template<
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;
96 template<
typename Real>
98 const bool combineStatus) {
102 status_->add(status);
105 template<
typename Real>
107 std::ostream &outStream ) {
123 template<
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);
136 template<
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);
152 template<
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);
179 template<
typename Real>
181 std::ios_base::fmtflags osFlags(os.flags());
183 os << std::setw(6) << std::left <<
"iter";
184 os << std::setw(15) << std::left <<
"value";
185 os << std::setw(15) << std::left <<
"cnorm";
186 os << std::setw(15) << std::left <<
"gLnorm";
187 os << std::setw(15) << std::left <<
"snorm";
188 os << std::setw(10) << std::left <<
"#fval";
189 os << std::setw(10) << std::left <<
"#grad";
194 template<
typename Real>
199 template<
typename Real>
201 std::ios_base::fmtflags osFlags(os.flags());
202 os << std::scientific << std::setprecision(6);
203 if ( write_header ) writeHeader(os);
204 if ( state_->iter == 0 ) {
206 os << std::setw(6) << std::left << state_->iter;
207 os << std::setw(15) << std::left << state_->value;
208 os << std::setw(15) << std::left << state_->cnorm;
209 os << std::setw(15) << std::left << state_->gnorm;
214 os << std::setw(6) << std::left << state_->iter;
215 os << std::setw(15) << std::left << state_->value;
216 os << std::setw(15) << std::left << state_->cnorm;
217 os << std::setw(15) << std::left << state_->gnorm;
218 os << std::setw(15) << std::left << state_->snorm;
219 os << std::setw(10) << std::left << state_->nfval;
220 os << std::setw(10) << std::left << state_->ngrad;
226 template<
typename Real>
228 std::ios_base::fmtflags osFlags(os.flags());
229 os <<
"Optimization Terminated with Status: ";
235 template<
typename Real>
241 template<
typename Real>
Provides the interface to evaluate objective functions.
const Ptr< Constraint< Real > > & getConstraint()
Get the equality constraint.
const Ptr< Vector< Real > > & getPrimalOptimizationVector()
Get the primal optimization space vector.
virtual ROL::Ptr< Vector > clone() const =0
Clone to make a new (uninitialized) vector.
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.
Contains definitions of custom data types in ROL.
virtual void writeHeader(std::ostream &os) const
Print iterate header.
Defines the linear algebra or vector space interface.
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...
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...
Provides an interface to check status of optimization algorithms for problems with equality constrain...
std::string EExitStatusToString(EExitStatus tr)
const Ptr< Objective< Real > > & getObjective()
Get the objective function.
virtual void writeName(std::ostream &os) const
Print step name.
const Ptr< Vector< Real > > & getResidualVector()
Get the primal constraint space vector.
const Ptr< Vector< Real > > & getMultiplierVector()
Get the dual constraint space vector.
void finalizeIteration()
Transform the optimization variables to the native parameterization after an optimization algorithm h...
virtual void writeOutput(std::ostream &os, const bool write_header=false) const
Print iterate status.
Provides an interface to check status of optimization algorithms.
void setStatusTest(const Ptr< StatusTest< Real >> &status, bool combineStatus=false)
const Ptr< CombinedStatusTest< Real > > status_
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.
EProblem getProblemType()
Get the optimization problem type (U, B, E, or G).
virtual void writeExitStatus(std::ostream &os) const
void initialize(const Vector< Real > &x, const Vector< Real > &g, const Vector< Real > &mul, const Vector< Real > &c)
Ptr< const AlgorithmState< Real > > getState() const
Provides an interface to check two status tests of optimization algorithms.
const Ptr< Vector< Real > > & getDualOptimizationVector()
Get the dual optimization space vector.
Algorithm()
Constructor, given a step and a status test.
Defines the general constraint operator interface.