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_;
92 :
obj_(Teuchos::null),
sol_(Teuchos::null),
bnd_(Teuchos::null),
93 con_(Teuchos::null),
mul_(Teuchos::null),
99 const Teuchos::RCP<Teuchos::ParameterList> &parlist = Teuchos::null)
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( step ==
"Interior Point" ) {
107 if ( bnd->isActivated() ) {
108 Teuchos::ParameterList &iplist = stepList.sublist(
"Interior Point");
109 Real mu = iplist.get(
"Initial Barrier Penalty",1.0);
110 Real slack_ival = iplist.get(
"Initial Slack Variable Value",1.0);
114 Teuchos::RCP<Vector<Real> > lmult1 = sol->dual().clone();
115 Teuchos::RCP<Vector<Real> > lmult2 = sol->dual().clone();
118 Elementwise::Fill<Real> fill(slack_ival);
119 Teuchos::RCP<Vector<Real> > slack1 = sol->clone();
120 slack1->applyUnary(fill);
121 Teuchos::RCP<Vector<Real> > slack2 = sol->clone();
122 slack2->applyUnary(fill);
129 Teuchos::RCP<Objective<Real> > barrier
151 const Teuchos::RCP<Teuchos::ParameterList> &parlist = Teuchos::null)
160 const Teuchos::RCP<Teuchos::ParameterList> &parlist = Teuchos::null)
163 if ( parlist != Teuchos::null ) {
164 Teuchos::ParameterList &stepList = parlist->sublist(
"Step");
165 std::string step = stepList.get(
"Type",
"Trust Region");
166 if ( bnd->isActivated() && step ==
"Interior Point" ) {
167 Teuchos::ParameterList &iplist = stepList.sublist(
"Interior Point");
168 Real mu = iplist.get(
"Initial Barrier Penalty",1.0);
169 Real slack_ival = iplist.get(
"Initial Slack Variable Value",1.0);
173 Teuchos::RCP<Vector<Real> > lmult1 = sol->clone();
174 Teuchos::RCP<Vector<Real> > lmult2 = sol->clone();
177 Elementwise::Fill<Real> fill(slack_ival);
178 Teuchos::RCP<Vector<Real> > slack1 = sol->clone();
179 slack1->applyUnary(fill);
180 Teuchos::RCP<Vector<Real> > slack2 = sol->clone();
181 slack2->applyUnary(fill);
188 Teuchos::RCP<Objective<Real> > barrier
207 const Teuchos::RCP<Teuchos::ParameterList> &parlist )
208 :
obj_(Teuchos::null),
sol_(Teuchos::null),
209 con_(Teuchos::null),
mul_(Teuchos::null),
214 using Elementwise::Fill;
216 using Teuchos::RCP;
using Teuchos::rcp;
218 Teuchos::ParameterList &iplist = parlist->sublist(
"Interior Point");
220 Real mu = iplist.get(
"Initial Barrier Penalty",1.0);
221 Real slack_ival = iplist.get(
"Initial Slack Variable Value",1.0);
226 RCP<Vector<Real> > slack = inmul->dual().clone();
228 Fill<Real> fill(slack_ival);
230 slack->applyUnary(fill);
251 const Teuchos::RCP<Teuchos::ParameterList> &parlist )
253 con_(Teuchos::null),
mul_(Teuchos::null),
258 using Elementwise::Fill;
260 using Teuchos::RCP;
using Teuchos::rcp;
262 Teuchos::ParameterList &iplist = parlist->sublist(
"Interior Point");
264 Real mu = iplist.get(
"Initial Barrier Penalty",1.0);
265 Real slack_ival = iplist.get(
"Initial Slack Variable Value",1.0);
270 RCP<Vector<Real> > slack = inmul->dual().clone();
272 Fill<Real> fill(slack_ival);
274 slack->applyUnary(fill);
299 const Teuchos::RCP<Teuchos::ParameterList> &parlist )
300 :
obj_(Teuchos::null),
sol_(Teuchos::null),
301 con_(Teuchos::null),
mul_(Teuchos::null),
306 using Elementwise::Fill;
308 using Teuchos::RCP;
using Teuchos::rcp;
310 Teuchos::ParameterList &iplist = parlist->sublist(
"Interior Point");
312 Real mu = iplist.get(
"Initial Barrier Penalty",1.0);
313 Real slack_ival = iplist.get(
"Initial Slack Variable Value",1.0);
318 RCP<Vector<Real> > slack = inmul->dual().clone();
320 Fill<Real> fill(slack_ival);
322 slack->applyUnary(fill);
345 const Teuchos::RCP<Teuchos::ParameterList> &parlist )
347 con_(Teuchos::null),
mul_(Teuchos::null),
352 using Elementwise::Fill;
354 using Teuchos::RCP;
using Teuchos::rcp;
356 Teuchos::ParameterList &iplist = parlist->sublist(
"Interior Point");
358 Real mu = iplist.get(
"Initial Barrier Penalty",1.0);
359 Real slack_ival = iplist.get(
"Initial Slack Variable Value",1.0);
364 RCP<Vector<Real> > slack = inmul->dual().clone();
366 Fill<Real> fill(slack_ival);
368 slack->applyUnary(fill);
436 const bool printToStream =
true,
437 std::ostream & outStream = std::cout,
439 const int order = 1 ) {
441 Teuchos::RCP<PV> ds = Teuchos::rcp_static_cast<
PV>(
sol_->clone());
444 return obj_->checkGradient(*
sol_,*ds,printToStream,outStream,numSteps,order);
447 return obj_->checkGradient(*
sol_,d,printToStream,outStream,numSteps,order);
452 const bool printToStream =
true,
453 std::ostream & outStream = std::cout,
455 const int order = 1 ) {
457 Teuchos::RCP<PV> vs = Teuchos::rcp_static_cast<
PV>(
sol_->clone());
460 return obj_->checkHessVec(*
sol_,*vs,printToStream,outStream,numSteps,order);
463 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.
Has both inequality and equality constraints. Treat inequality constraint as equality with slack vari...
virtual ~OptimizationProblem(void)
void set(const V &x)
Set where .
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)