44 #ifndef ROL_OPTIMIZATIONSOLVER_HPP
45 #define ROL_OPTIMIZATIONSOLVER_HPP
66 ROL::Ptr<Algorithm<Real> >
algo_;
69 ROL::Ptr<CombinedStatusTest<Real> >
status_;
70 ROL::Ptr<AlgorithmState<Real> >
state_;
72 ROL::Ptr<Vector<Real> >
x_;
73 ROL::Ptr<Vector<Real> >
g_;
74 ROL::Ptr<Vector<Real> >
l_;
75 ROL::Ptr<Vector<Real> >
c_;
77 ROL::Ptr<Objective<Real> >
obj_;
78 ROL::Ptr<BoundConstraint<Real> >
bnd_;
79 ROL::Ptr<Constraint<Real> >
con_;
99 ROL::ParameterList &parlist ) {
105 state_ = ROL::makePtr<AlgorithmState<Real>>();
108 stepname_ = parlist.sublist(
"Step").get(
"Type",
"Last Type (Dummy)");
132 status_ = ROL::makePtr<CombinedStatusTest<Real>>();
136 g_ =
x_->dual().clone();
145 c_ =
l_->dual().clone();
149 const Real one(1), ten(10);
151 ROL::Ptr<Objective<Real> > raw_obj = opt.
getObjective();
154 obj_ = ROL::makePtr<AugmentedLagrangian<Real>>(raw_obj,
con_,*
l_,1.0,*
x_,*
c_,parlist);
156 pen_ = parlist.sublist(
"Step").sublist(
"Augmented Lagrangian").get(
"Initial Penalty Parameter",ten);
159 ROL::Ptr<Objective<Real> > raw_obj = opt.
getObjective();
163 obj_ = ROL::makePtr<MoreauYosidaPenalty<Real>>(raw_obj,
bnd_,*
x_,parlist);
164 pen_ = parlist.sublist(
"Step").sublist(
"Moreau-Yosida Penalty").get(
"Initial Penalty Parameter",ten);
167 ROL::Ptr<Objective<Real> > raw_obj = opt.
getObjective();
171 obj_ = ROL::makePtr<InteriorPoint::PenalizedObjective<Real>>(raw_obj,
bnd_,*
x_,parlist);
172 pen_ = parlist.sublist(
"Step").sublist(
"Interior Point").get(
"Initial Barrier Parameter",ten);
175 ROL::Ptr<Objective<Real> > raw_obj = opt.
getObjective();
178 if(
bnd_->isActivated() ) {
179 obj_ = ROL::makePtr<BoundFletcher<Real> >(raw_obj,
con_,
bnd_,*
x_,*
c_,parlist);
182 obj_ = ROL::makePtr<Fletcher<Real> >(raw_obj,
con_,*
x_,*
c_,parlist);
184 pen_ = parlist.sublist(
"Step").sublist(
"Fletcher").get(
"Penalty Parameter",one);
191 pen_ = parlist.sublist(
"Step").sublist(
"Trust Region").get(
"Initial Radius",ten);
194 pen_ = parlist.sublist(
"Step").sublist(
"Bundle").get(
"Initial Trust-Region Parameter",ten);
215 const bool combineStatus =
true) {
217 return solve(bhs,status,combineStatus);
230 const bool combineStatus =
true ) {
234 if (status != ROL::nullPtr) {
235 if (!combineStatus) {
256 ROL_TEST_FOR_EXCEPTION(
true,std::invalid_argument,
257 "Error in OptimizationSolver::solve() : Unsupported problem type");
283 state_ = ROL::makePtr<AlgorithmState<Real>>();
297 void reset(
const bool resetAlgo =
true) {
306 ROL::dynamicPtrCast<AugmentedLagrangian<Real> >(
obj_)->
reset(*
l_,
pen_);
309 ROL::dynamicPtrCast<MoreauYosidaPenalty<Real> >(
obj_)->
reset(
pen_);
312 ROL::dynamicPtrCast<InteriorPoint::PenalizedObjective<Real> >(
obj_)->updatePenalty(
pen_);
331 template<
typename Real>
332 inline Ptr<OptimizationSolver<Real>>
334 ParameterList& parlist ) {
335 return makePtr<OptimizationSolver<Real>>(opt,parlist);
338 template<
typename Real>
339 inline Ptr<OptimizationSolver<Real>>
341 ParameterList& parlist ) {
342 return makePtr<OptimizationSolver<Real>>(*opt,parlist);
345 template<
typename Real>
346 inline Ptr<OptimizationSolver<Real>>
348 const Ptr<ParameterList>& parlist ) {
349 return makePtr<OptimizationSolver<Real>>(opt,*parlist);
352 template<
typename Real>
353 inline Ptr<OptimizationSolver<Real>>
355 const Ptr<ParameterList>& parlist ) {
356 return makePtr<OptimizationSolver<Real>>(*opt,*parlist);
361 #endif // ROL_OPTIMIZATIONSOLVER_HPP