44 #ifndef ROL_OPTIMIZATIONPROBLEM_HPP 45 #define ROL_OPTIMIZATIONPROBLEM_HPP 47 #ifdef OPTIMIZATION_PROBLEM_REFACTOR 52 #include "Teuchos_ParameterList.hpp" 80 Teuchos::RCP<Objective<Real> >
obj_;
81 Teuchos::RCP<Vector<Real> >
sol_;
82 Teuchos::RCP<BoundConstraint<Real> >
bnd_;
83 Teuchos::RCP<EqualityConstraint<Real> >
con_;
84 Teuchos::RCP<InequalityConstraint<Real> >
incon_;
85 Teuchos::RCP<Vector<Real> >
mul_;
90 const static size_type
OPT = 0;
91 const static size_type
SLACK = 1;
97 : obj_(Teuchos::null), sol_(Teuchos::null), bnd_(Teuchos::null),
98 con_(Teuchos::null), mul_(Teuchos::null),
99 parlist_(Teuchos::null), hasSlack_(false) {}
104 const Teuchos::RCP<Teuchos::ParameterList> &parlist = Teuchos::null)
105 : obj_(obj), sol_(sol), bnd_(Teuchos::null), con_(Teuchos::null), mul_(Teuchos::null),
106 parlist_(parlist), hasSlack_(false) {
107 if ( parlist != Teuchos::null ) {
108 if ( bnd != Teuchos::null ) {
109 Teuchos::ParameterList &stepList = parlist->sublist(
"Step");
110 std::string step = stepList.get(
"Type",
"Trust Region");
111 if( step ==
"Interior Point" ) {
112 if ( bnd->isActivated() ) {
113 Teuchos::ParameterList &iplist = stepList.sublist(
"Interior Point");
114 Real mu = iplist.get(
"Initial Barrier Penalty",1.0);
115 Real slack_ival = iplist.get(
"Initial Slack Variable Value",1.0);
119 Teuchos::RCP<Vector<Real> > lmult1 = sol->dual().clone();
120 Teuchos::RCP<Vector<Real> > lmult2 = sol->dual().clone();
123 Elementwise::Fill<Real> fill(slack_ival);
124 Teuchos::RCP<Vector<Real> > slack1 = sol->clone();
125 slack1->applyUnary(fill);
126 Teuchos::RCP<Vector<Real> > slack2 = sol->clone();
127 slack2->applyUnary(fill);
134 Teuchos::RCP<Objective<Real> > barrier
156 const Teuchos::RCP<Teuchos::ParameterList> &parlist = Teuchos::null)
157 : obj_(obj), sol_(sol), bnd_(Teuchos::null), con_(con), mul_(mul),
158 parlist_(parlist), hasSlack_(false) {}
165 const Teuchos::RCP<Teuchos::ParameterList> &parlist = Teuchos::null)
166 : obj_(obj), sol_(sol), bnd_(Teuchos::null), con_(con), mul_(mul),
167 parlist_(parlist), hasSlack_(true) {
168 if ( parlist != Teuchos::null ) {
169 Teuchos::ParameterList &stepList = parlist->sublist(
"Step");
170 std::string step = stepList.get(
"Type",
"Trust Region");
171 if ( bnd->isActivated() && step ==
"Interior Point" ) {
172 Teuchos::ParameterList &iplist = stepList.sublist(
"Interior Point");
173 Real mu = iplist.get(
"Initial Barrier Penalty",1.0);
174 Real slack_ival = iplist.get(
"Initial Slack Variable Value",1.0);
178 Teuchos::RCP<Vector<Real> > lmult1 = sol->clone();
179 Teuchos::RCP<Vector<Real> > lmult2 = sol->clone();
182 Elementwise::Fill<Real> fill(slack_ival);
183 Teuchos::RCP<Vector<Real> > slack1 = sol->clone();
184 slack1->applyUnary(fill);
185 Teuchos::RCP<Vector<Real> > slack2 = sol->clone();
186 slack2->applyUnary(fill);
193 Teuchos::RCP<Objective<Real> > barrier
212 const Teuchos::RCP<Teuchos::ParameterList> &parlist )
213 : obj_(Teuchos::null), sol_(Teuchos::null),
214 con_(Teuchos::null), mul_(Teuchos::null),
215 parlist_(Teuchos::null), hasSlack_(true) {
219 using Elementwise::Fill;
221 using Teuchos::RCP;
using Teuchos::rcp;
223 Teuchos::ParameterList &iplist = parlist->sublist(
"Interior Point");
225 Real mu = iplist.get(
"Initial Barrier Penalty",1.0);
226 Real slack_ival = iplist.get(
"Initial Slack Variable Value",1.0);
231 RCP<Vector<Real> > slack = inmul->dual().clone();
233 Fill<Real> fill(slack_ival);
235 slack->applyUnary(fill);
256 const Teuchos::RCP<Teuchos::ParameterList> &parlist )
257 : obj_(Teuchos::null), sol_(Teuchos::null), bnd_(bnd),
258 con_(Teuchos::null), mul_(Teuchos::null),
259 parlist_(Teuchos::null), hasSlack_(true) {
263 using Elementwise::Fill;
265 using Teuchos::RCP;
using Teuchos::rcp;
267 Teuchos::ParameterList &iplist = parlist->sublist(
"Interior Point");
269 Real mu = iplist.get(
"Initial Barrier Penalty",1.0);
270 Real slack_ival = iplist.get(
"Initial Slack Variable Value",1.0);
275 RCP<Vector<Real> > slack = inmul->dual().clone();
277 Fill<Real> fill(slack_ival);
279 slack->applyUnary(fill);
304 const Teuchos::RCP<Teuchos::ParameterList> &parlist )
305 : obj_(Teuchos::null), sol_(Teuchos::null),
306 con_(Teuchos::null), mul_(Teuchos::null),
307 parlist_(parlist), hasSlack_(true) {
311 using Elementwise::Fill;
313 using Teuchos::RCP;
using Teuchos::rcp;
315 Teuchos::ParameterList &iplist = parlist->sublist(
"Interior Point");
317 Real mu = iplist.get(
"Initial Barrier Penalty",1.0);
318 Real slack_ival = iplist.get(
"Initial Slack Variable Value",1.0);
323 RCP<Vector<Real> > slack = inmul->dual().clone();
325 Fill<Real> fill(slack_ival);
327 slack->applyUnary(fill);
350 const Teuchos::RCP<Teuchos::ParameterList> &parlist )
351 : obj_(Teuchos::null), sol_(Teuchos::null), bnd_(bnd),
352 con_(Teuchos::null), mul_(Teuchos::null),
353 parlist_(parlist), hasSlack_(true) {
357 using Elementwise::Fill;
359 using Teuchos::RCP;
using Teuchos::rcp;
361 Teuchos::ParameterList &iplist = parlist->sublist(
"Interior Point");
363 Real mu = iplist.get(
"Initial Barrier Penalty",1.0);
364 Real slack_ival = iplist.get(
"Initial Slack Variable Value",1.0);
369 RCP<Vector<Real> > slack = inmul->dual().clone();
371 Fill<Real> fill(slack_ival);
373 slack->applyUnary(fill);
441 const bool printToStream =
true,
442 std::ostream & outStream = std::cout,
444 const int order = 1 ) {
446 Teuchos::RCP<PV> ds = Teuchos::rcp_static_cast<PV>(sol_->clone());
449 return obj_->checkGradient(*sol_,*ds,printToStream,outStream,numSteps,order);
452 return obj_->checkGradient(*sol_,d,printToStream,outStream,numSteps,order);
457 const bool printToStream =
true,
458 std::ostream & outStream = std::cout,
460 const int order = 1 ) {
462 Teuchos::RCP<PV> vs = Teuchos::rcp_static_cast<PV>(sol_->clone());
465 return obj_->checkHessVec(*sol_,*vs,printToStream,outStream,numSteps,order);
468 return obj_->checkHessVec(*sol_,v,printToStream,outStream,numSteps,order);
475 #endif // OPTIMIZATION_PROBLEM_REFACTOR 477 #endif // ROL_OPTIMIZATIONPROBLEM_HPP 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.
Has both inequality and equality constraints. Treat inequality constraint as equality with slack vari...
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 penalty objective from upper and lower bound vectors.
Teuchos::RCP< Objective< Real > > getObjective(void)