44 #ifndef ROL_OPTIMIZATIONPROBLEM_HPP 45 #define ROL_OPTIMIZATIONPROBLEM_HPP 47 #include "Teuchos_ParameterList.hpp" 75 Teuchos::RCP<Objective<Real> >
obj_;
76 Teuchos::RCP<Vector<Real> >
sol_;
77 Teuchos::RCP<BoundConstraint<Real> >
bnd_;
78 Teuchos::RCP<EqualityConstraint<Real> >
con_;
79 Teuchos::RCP<InequalityConstraint<Real> >
incon_;
80 Teuchos::RCP<Vector<Real> >
mul_;
85 const static size_type
OPT = 0;
86 const static size_type
SLACK = 1;
92 : obj_(Teuchos::null), sol_(Teuchos::null), bnd_(Teuchos::null),
93 con_(Teuchos::null), mul_(Teuchos::null),
94 parlist_(Teuchos::null), hasSlack_(false) {}
99 const Teuchos::RCP<Teuchos::ParameterList> &parlist = Teuchos::null)
100 : obj_(obj), sol_(sol), bnd_(Teuchos::null), con_(Teuchos::null), mul_(Teuchos::null),
101 parlist_(parlist), hasSlack_(false) {
102 if ( parlist != Teuchos::null ) {
103 if ( bnd != Teuchos::null ) {
104 Teuchos::ParameterList &stepList = parlist->sublist(
"Step");
105 std::string step = stepList.get(
"Type",
"Trust Region");
106 if ( bnd->isActivated() && step ==
"Interior Point" ) {
107 Teuchos::ParameterList &iplist = stepList.sublist(
"Interior Point");
108 Real mu = iplist.get(
"Initial Barrier Penalty",1.0);
109 Real slack_ival = iplist.get(
"Initial Slack Variable Value",1.0);
113 Teuchos::RCP<Vector<Real> > lmult1 = sol->dual().clone();
114 Teuchos::RCP<Vector<Real> > lmult2 = sol->dual().clone();
117 Elementwise::Fill<Real> fill(slack_ival);
118 Teuchos::RCP<Vector<Real> > slack1 = sol->clone();
119 slack1->applyUnary(fill);
120 Teuchos::RCP<Vector<Real> > slack2 = sol->clone();
121 slack2->applyUnary(fill);
128 Teuchos::RCP<Objective<Real> > barrier
135 bnd_ = Teuchos::rcp(&*bnd,
false);
143 const Teuchos::RCP<Teuchos::ParameterList> &parlist = Teuchos::null)
144 : obj_(obj), sol_(sol), bnd_(Teuchos::null), con_(con), mul_(mul),
145 parlist_(parlist), hasSlack_(false) {}
152 const Teuchos::RCP<Teuchos::ParameterList> &parlist = Teuchos::null)
153 : obj_(obj), sol_(sol), bnd_(Teuchos::null), con_(con), mul_(mul),
154 parlist_(parlist), hasSlack_(true) {
155 if ( parlist != Teuchos::null ) {
156 Teuchos::ParameterList &stepList = parlist->sublist(
"Step");
157 std::string step = stepList.get(
"Type",
"Trust Region");
158 if ( bnd->isActivated() && step ==
"Interior Point" ) {
159 Teuchos::ParameterList &iplist = stepList.sublist(
"Interior Point");
160 Real mu = iplist.get(
"Initial Barrier Penalty",1.0);
161 Real slack_ival = iplist.get(
"Initial Slack Variable Value",1.0);
165 Teuchos::RCP<Vector<Real> > lmult1 = sol->clone();
166 Teuchos::RCP<Vector<Real> > lmult2 = sol->clone();
169 Elementwise::Fill<Real> fill(slack_ival);
170 Teuchos::RCP<Vector<Real> > slack1 = sol->clone();
171 slack1->applyUnary(fill);
172 Teuchos::RCP<Vector<Real> > slack2 = sol->clone();
173 slack2->applyUnary(fill);
180 Teuchos::RCP<Objective<Real> > barrier
198 const Teuchos::RCP<Teuchos::ParameterList> &parlist )
199 : obj_(Teuchos::null), sol_(Teuchos::null),
200 con_(Teuchos::null), mul_(Teuchos::null),
201 parlist_(Teuchos::null), hasSlack_(true) {
205 using Elementwise::Fill;
207 using Teuchos::RCP;
using Teuchos::rcp;
209 Teuchos::ParameterList &iplist = parlist->sublist(
"Interior Point");
211 Real mu = iplist.get(
"Initial Barrier Penalty",1.0);
212 Real slack_ival = iplist.get(
"Initial Slack Variable Value",1.0);
214 con_ = rcp(
new CompositeConstraint<Real>(incon) );
217 RCP<Vector<Real> > slack = inmul->dual().clone();
219 Fill<Real> fill(slack_ival);
221 slack->applyUnary(fill);
242 const Teuchos::RCP<Teuchos::ParameterList> &parlist )
243 : obj_(Teuchos::null), sol_(Teuchos::null), bnd_(bnd),
244 con_(Teuchos::null), mul_(Teuchos::null),
245 parlist_(Teuchos::null), hasSlack_(true) {
249 using Elementwise::Fill;
251 using Teuchos::RCP;
using Teuchos::rcp;
253 Teuchos::ParameterList &iplist = parlist->sublist(
"Interior Point");
255 Real mu = iplist.get(
"Initial Barrier Penalty",1.0);
256 Real slack_ival = iplist.get(
"Initial Slack Variable Value",1.0);
258 con_ = rcp(
new CompositeConstraint<Real>(incon) );
261 RCP<Vector<Real> > slack = inmul->dual().clone();
263 Fill<Real> fill(slack_ival);
265 slack->applyUnary(fill);
290 const Teuchos::RCP<Teuchos::ParameterList> &parlist )
291 : obj_(Teuchos::null), sol_(Teuchos::null),
292 con_(Teuchos::null), mul_(Teuchos::null),
293 parlist_(parlist), hasSlack_(true) {
297 using Elementwise::Fill;
299 using Teuchos::RCP;
using Teuchos::rcp;
301 Teuchos::ParameterList &iplist = parlist->sublist(
"Interior Point");
303 Real mu = iplist.get(
"Initial Barrier Penalty",1.0);
304 Real slack_ival = iplist.get(
"Initial Slack Variable Value",1.0);
306 con_ = rcp(
new CompositeConstraint<Real>(incon,eqcon) );
309 RCP<Vector<Real> > slack = inmul->dual().clone();
311 Fill<Real> fill(slack_ival);
313 slack->applyUnary(fill);
336 const Teuchos::RCP<Teuchos::ParameterList> &parlist )
337 : obj_(Teuchos::null), sol_(Teuchos::null), bnd_(bnd),
338 con_(Teuchos::null), mul_(Teuchos::null),
339 parlist_(parlist), hasSlack_(true) {
343 using Elementwise::Fill;
345 using Teuchos::RCP;
using Teuchos::rcp;
347 Teuchos::ParameterList &iplist = parlist->sublist(
"Interior Point");
349 Real mu = iplist.get(
"Initial Barrier Penalty",1.0);
350 Real slack_ival = iplist.get(
"Initial Slack Variable Value",1.0);
352 con_ = rcp(
new CompositeConstraint<Real>(incon,eqcon) );
355 RCP<Vector<Real> > slack = inmul->dual().clone();
357 Fill<Real> fill(slack_ival);
359 slack->applyUnary(fill);
427 const bool printToStream =
true,
428 std::ostream & outStream = std::cout,
430 const int order = 1 ) {
432 Teuchos::RCP<PV> ds = Teuchos::rcp_static_cast<PV>(sol_->clone());
435 return obj_->checkGradient(*sol_,*ds,printToStream,outStream,numSteps,order);
438 return obj_->checkGradient(*sol_,d,printToStream,outStream,numSteps,order);
443 const bool printToStream =
true,
444 std::ostream & outStream = std::cout,
446 const int order = 1 ) {
448 Teuchos::RCP<PV> vs = Teuchos::rcp_static_cast<PV>(sol_->clone());
451 return obj_->checkHessVec(*sol_,*vs,printToStream,outStream,numSteps,order);
454 return obj_->checkHessVec(*sol_,v,printToStream,outStream,numSteps,order);
Provides the interface to evaluate objective functions.
OptimizationProblem(const Teuchos::RCP< Objective< Real > > &obj, const Teuchos::RCP< Vector< Real > > &sol, const Teuchos::RCP< BoundConstraint< Real > > &bnd, const Teuchos::RCP< EqualityConstraint< Real > > &eqcon, const Teuchos::RCP< Vector< Real > > &eqmul, const Teuchos::RCP< InequalityConstraint< Real > > &incon, const Teuchos::RCP< Vector< Real > > &inmul, const Teuchos::RCP< Teuchos::ParameterList > &parlist)
OptimizationProblem(const Teuchos::RCP< Objective< Real > > &obj, const Teuchos::RCP< Vector< Real > > &sol, const Teuchos::RCP< EqualityConstraint< Real > > &con, const Teuchos::RCP< Vector< Real > > &mul, const Teuchos::RCP< Teuchos::ParameterList > &parlist=Teuchos::null)
virtual std::vector< std::vector< Real > > checkObjectiveGradient(const Vector< Real > &d, const bool printToStream=true, std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS, const int order=1)
PartitionedVector< Real > PV
Defines the linear algebra of vector space on a generic partitioned vector.
OptimizationProblem(const Teuchos::RCP< Objective< Real > > &obj, const Teuchos::RCP< Vector< Real > > &sol, const Teuchos::RCP< BoundConstraint< Real > > &bnd, const Teuchos::RCP< EqualityConstraint< Real > > &con, const Teuchos::RCP< Vector< Real > > &mul, const Teuchos::RCP< Teuchos::ParameterList > &parlist=Teuchos::null)
Has both inequality and equality constraints. Treat inequality constraint as equality with slack vari...
Teuchos::RCP< Objective< Real > > obj_
Teuchos::RCP< Teuchos::ParameterList > getParameterList(void)
void RandomizeVector(Vector< Real > &x, const Real &lower=0.0, const Real &upper=1.0)
Fill a ROL::Vector with uniformly-distributed random numbers in the interval [lower,upper].
OptimizationProblem(void)
Provides an implementation for bound inequality constraints.
Teuchos::RCP< Vector< Real > > CreatePartitionedVector(const Teuchos::RCP< Vector< Real > > &a)
Defines the linear algebra or vector space interface.
Teuchos::RCP< BoundConstraint< Real > > getBoundConstraint(void)
void setObjective(const Teuchos::RCP< Objective< Real > > &obj)
Defines the equality constraint operator interface.
OptimizationProblem(const Teuchos::RCP< Objective< Real > > &obj, const Teuchos::RCP< Vector< Real > > &sol, const Teuchos::RCP< InequalityConstraint< Real > > &incon, const Teuchos::RCP< Vector< Real > > &inmul, const Teuchos::RCP< Teuchos::ParameterList > &parlist)
void setSolutionVector(const Teuchos::RCP< Vector< Real > > &sol)
Teuchos::RCP< Vector< Real > > mul_
static const size_type OPT
Adds barrier term to generic objective.
virtual ~OptimizationProblem(void)
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &parlist)
Teuchos::RCP< Vector< Real > > getMultiplierVector(void)
Provides the interface to apply upper and lower bound constraints.
#define ROL_NUM_CHECKDERIV_STEPS
Number of steps for derivative checks.
OptimizationProblem(const Teuchos::RCP< Objective< Real > > &obj, const Teuchos::RCP< Vector< Real > > &sol, const Teuchos::RCP< EqualityConstraint< Real > > &eqcon, const Teuchos::RCP< Vector< Real > > &eqmul, const Teuchos::RCP< InequalityConstraint< Real > > &incon, const Teuchos::RCP< Vector< Real > > &inmul, const Teuchos::RCP< Teuchos::ParameterList > &parlist)
Teuchos::RCP< Teuchos::ParameterList > parlist_
Teuchos::RCP< EqualityConstraint< Real > > con_
Teuchos::RCP< InequalityConstraint< Real > > incon_
OptimizationProblem(const Teuchos::RCP< Objective< Real > > &obj, const Teuchos::RCP< Vector< Real > > &sol, const Teuchos::RCP< BoundConstraint< Real > > &bnd, const Teuchos::RCP< InequalityConstraint< Real > > &incon, const Teuchos::RCP< Vector< Real > > &inmul, const Teuchos::RCP< Teuchos::ParameterList > &parlist)
Teuchos::RCP< BoundConstraint< Real > > bnd_
std::vector< PV >::size_type size_type
Teuchos::RCP< EqualityConstraint< Real > > getEqualityConstraint(void)
OptimizationProblem(const Teuchos::RCP< Objective< Real > > &obj, const Teuchos::RCP< Vector< Real > > &sol, const Teuchos::RCP< BoundConstraint< Real > > &bnd=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > &parlist=Teuchos::null)
static const size_type SLACK
Log barrier objective for interior point methods.
Teuchos::RCP< Vector< Real > > getSolutionVector(void)
Teuchos::RCP< Vector< Real > > sol_
void setMultiplierVector(const Teuchos::RCP< Vector< Real > > &mul)
Provides a unique argument for inequality constraints, which otherwise behave exactly as equality con...
void setEqualityConstraint(const Teuchos::RCP< EqualityConstraint< Real > > &con)
void setBoundConstraint(const Teuchos::RCP< BoundConstraint< Real > > &bnd)
virtual std::vector< std::vector< Real > > checkObjectiveHessVec(const Vector< Real > &v, const bool printToStream=true, std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS, const int order=1)
Create a logarithmic penalty objective from upper and lower bound vectors.
Teuchos::RCP< Objective< Real > > getObjective(void)