44 #ifndef ROL_OPTIMIZATIONPROBLEMREFACTOR_HPP 45 #define ROL_OPTIMIZATIONPROBLEMREFACTOR_HPP 58 class OptimizationProblem {
69 typedef Elementwise::AbsoluteValue<Real>
ABS;
70 typedef Elementwise::Fill<Real>
FILL;
102 using Teuchos::RCP;
using Teuchos::rcp;
103 if (!isInitialized_) {
105 if( incon != Teuchos::null ) {
107 Real tol = std::sqrt(ROL_EPSILON<Real>());
110 RCP<V> s = li->dual().clone();
111 incon->value(*s,*x,tol);
112 s->applyUnary(
ABS());
118 RCP<V> sl = s->clone();
119 RCP<V> su = s->clone();
121 sl->applyUnary(
FILL(0.0) );
122 su->applyUnary(
FILL(ROL_INF<Real>()) );
124 sbnd = rcp(
new BND(sl,su) );
127 if( bnd == Teuchos::null ) {
128 xbnd = rcp(
new BND(*x) );
138 if( eqcon == Teuchos::null ) {
140 con_ = rcp(
new CCON(incon,x) );
144 con_ = rcp(
new CCON(incon,eqcon,x) );
147 obj_ = rcp(
new SLOBJ(obj) );
158 if( con_ == Teuchos::null ) {
159 if( bnd_ == Teuchos::null || !bnd_->isActivated() ) {
167 if( bnd_ == Teuchos::null || !bnd_->isActivated() ) {
174 isInitialized_ =
true;
189 : ORIGINAL_obj_(obj), ORIGINAL_sol_(x), ORIGINAL_bnd_(bnd),
190 ORIGINAL_econ_(eqcon), ORIGINAL_emul_(le),
191 ORIGINAL_icon_(incon), ORIGINAL_imul_(li),
192 isInitialized_(false) {
225 OptimizationProblem( obj, x, bnd, Teuchos::null, Teuchos::null, Teuchos::null, Teuchos::null ) { }
244 Teuchos::null, Teuchos::null ) { }
249 isInitialized_ =
false;
254 isInitialized_ =
false;
259 isInitialized_ =
false;
264 isInitialized_ =
false;
265 ORIGINAL_econ_ = con;
269 isInitialized_ =
false;
270 ORIGINAL_emul_ = mul;
274 isInitialized_ =
false;
275 ORIGINAL_icon_ = con;
279 isInitialized_ =
false;
280 ORIGINAL_imul_ = mul;
286 initialize(ORIGINAL_obj_,ORIGINAL_sol_,ORIGINAL_bnd_,
287 ORIGINAL_econ_,ORIGINAL_emul_,
288 ORIGINAL_icon_,ORIGINAL_imul_);
293 initialize(ORIGINAL_obj_,ORIGINAL_sol_,ORIGINAL_bnd_,
294 ORIGINAL_econ_,ORIGINAL_emul_,
295 ORIGINAL_icon_,ORIGINAL_imul_);
300 initialize(ORIGINAL_obj_,ORIGINAL_sol_,ORIGINAL_bnd_,
301 ORIGINAL_econ_,ORIGINAL_emul_,
302 ORIGINAL_icon_,ORIGINAL_imul_);
307 initialize(ORIGINAL_obj_,ORIGINAL_sol_,ORIGINAL_bnd_,
308 ORIGINAL_econ_,ORIGINAL_emul_,
309 ORIGINAL_icon_,ORIGINAL_imul_);
314 initialize(ORIGINAL_obj_,ORIGINAL_sol_,ORIGINAL_bnd_,
315 ORIGINAL_econ_,ORIGINAL_emul_,
316 ORIGINAL_icon_,ORIGINAL_imul_);
327 Teuchos::RCP<V> x = sol_->clone();
328 Teuchos::RCP<V> y = sol_->clone();
329 Teuchos::RCP<V> u = sol_->clone();
330 Teuchos::RCP<V> v = sol_->clone();
337 outStream <<
"\nPerforming OptimizationProblem diagnostics.\n\n";
339 outStream <<
"Checking vector operations in optimization vector space X." << std::endl;
340 x->checkVector(*y,*u,
true,outStream);
342 outStream <<
"Checking objective function." << std::endl;
344 obj_->checkGradient(*x,*v,
true,outStream,numSteps,order); outStream << std::endl;
345 obj_->checkHessVec(*x,*u,
true,outStream,numSteps,order); outStream << std::endl;
346 obj_->checkHessSym(*x,*u,*v,
true,outStream); outStream << std::endl;
348 if(con_ != Teuchos::null) {
349 Teuchos::RCP<V> c = mul_->dual().clone();
350 Teuchos::RCP<V> l = mul_->clone();
351 Teuchos::RCP<V> w = mul_->clone();
352 Teuchos::RCP<V> q = mul_->clone();
359 outStream <<
"Checking vector operations in constraint multiplier space C*." << std::endl;
360 l->checkVector(*q,*w,
true,outStream);
362 outStream <<
"Checking equality constraint." << std::endl;
363 con_->checkApplyJacobian(*x,*v,*c,
true,outStream,numSteps,order); outStream << std::endl;
364 con_->checkAdjointConsistencyJacobian(*l,*u,*x,
true,outStream); outStream << std::endl;
365 con_->checkApplyAdjointHessian(*x,*l,*v,*u,
true,outStream,numSteps,order); outStream << std::endl;
376 #endif // ROL_OPTIMIZATIONPROBLEMREFACTOR_HPP Provides the interface to evaluate objective functions.
SlacklessObjective< Real > SLOBJ
Teuchos::RCP< BoundConstraint< Real > > CreateBoundConstraint_Partitioned(const Teuchos::RCP< BoundConstraint< Real > > &bnd1, const Teuchos::RCP< BoundConstraint< Real > > &bnd2)
PartitionedVector< Real > PV
Defines the linear algebra of vector space on a generic partitioned vector.
Teuchos::RCP< Objective< Real > > obj_
virtual void setIMultiplierVector(const Teuchos::RCP< Vector< Real > > &mul)
Teuchos::RCP< EQCON > con_
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].
virtual void setSolutionVector(const Teuchos::RCP< Vector< Real > > &sol)
Teuchos::RCP< V > ORIGINAL_imul_
InequalityConstraint< Real > INCON
Teuchos::RCP< Vector< Real > > CreatePartitionedVector(const Teuchos::RCP< Vector< Real > > &a)
Teuchos::RCP< INCON > ORIGINAL_icon_
CompositeConstraint< Real > CCON
Defines the linear algebra or vector space interface.
Teuchos::RCP< V > ORIGINAL_emul_
Elementwise::Fill< Real > FILL
Teuchos::RCP< BoundConstraint< Real > > getBoundConstraint(void)
OptimizationProblem(const Teuchos::RCP< Objective< Real > > &obj, const Teuchos::RCP< Vector< Real > > &x)
Defines the equality constraint operator interface.
virtual void setEMultiplierVector(const Teuchos::RCP< Vector< Real > > &mul)
BoundConstraint< Real > BND
virtual void setInequalityConstraint(const Teuchos::RCP< InequalityConstraint< Real > > &con)
Teuchos::RCP< Vector< Real > > mul_
OptimizationProblem(const Teuchos::RCP< Objective< Real > > &obj, const Teuchos::RCP< Vector< Real > > &x, const Teuchos::RCP< EqualityConstraint< Real > > &eqcon, const Teuchos::RCP< Vector< Real > > &le, const Teuchos::RCP< InequalityConstraint< Real > > &incon, const Teuchos::RCP< Vector< Real > > &li)
Has both inequality and equality constraints. Treat inequality constraint as equality with slack vari...
virtual ~OptimizationProblem(void)
OptimizationProblem(const Teuchos::RCP< Objective< Real > > &obj, const Teuchos::RCP< Vector< Real > > &x, const Teuchos::RCP< EqualityConstraint< Real > > &eqcon, const Teuchos::RCP< Vector< Real > > &le)
Elementwise::AbsoluteValue< Real > ABS
void initialize(const Teuchos::RCP< Objective< Real > > &obj, const Teuchos::RCP< Vector< Real > > &x, const Teuchos::RCP< BoundConstraint< Real > > &bnd, const Teuchos::RCP< EqualityConstraint< Real > > &eqcon, const Teuchos::RCP< Vector< Real > > &le, const Teuchos::RCP< InequalityConstraint< Real > > &incon, const Teuchos::RCP< Vector< Real > > &li)
EProblem getProblemType(void)
virtual void setEqualityConstraint(const Teuchos::RCP< EqualityConstraint< Real > > &con)
Teuchos::RCP< Vector< Real > > getMultiplierVector(void)
Provides the interface to apply upper and lower bound constraints.
Teuchos::RCP< BND > ORIGINAL_bnd_
virtual void setObjective(const Teuchos::RCP< Objective< Real > > &obj)
Teuchos::RCP< EQCON > ORIGINAL_econ_
This class strips out the slack variables from objective evaluations to create the new objective ...
#define ROL_NUM_CHECKDERIV_STEPS
Number of steps for derivative checks.
Teuchos::RCP< EqualityConstraint< Real > > con_
OptimizationProblem(const Teuchos::RCP< Objective< Real > > &obj, const Teuchos::RCP< Vector< Real > > &x, const Teuchos::RCP< BoundConstraint< Real > > &bnd, const Teuchos::RCP< EqualityConstraint< Real > > &eqcon, const Teuchos::RCP< Vector< Real > > &le, const Teuchos::RCP< InequalityConstraint< Real > > &incon, const Teuchos::RCP< Vector< Real > > &li)
Teuchos::RCP< BoundConstraint< Real > > bnd_
OptimizationProblem(const Teuchos::RCP< Objective< Real > > &obj, const Teuchos::RCP< Vector< Real > > &x, const Teuchos::RCP< BoundConstraint< Real > > &bnd)
std::vector< PV >::size_type size_type
Teuchos::RCP< EqualityConstraint< Real > > getEqualityConstraint(void)
Teuchos::RCP< V > ORIGINAL_sol_
Teuchos::RCP< Vector< Real > > getSolutionVector(void)
Teuchos::RCP< Vector< Real > > sol_
Provides a unique argument for inequality constraints, which otherwise behave exactly as equality con...
virtual void setBoundConstraint(const Teuchos::RCP< BoundConstraint< Real > > &bnd)
Teuchos::RCP< OBJ > ORIGINAL_obj_
void check(std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS, const int order=1)
EqualityConstraint< Real > EQCON
OptimizationProblem(const Teuchos::RCP< Objective< Real > > &obj, const Teuchos::RCP< Vector< Real > > &x, const Teuchos::RCP< BoundConstraint< Real > > &bnd, const Teuchos::RCP< EqualityConstraint< Real > > &eqcon, const Teuchos::RCP< Vector< Real > > &le)
Teuchos::RCP< Objective< Real > > getObjective(void)