35 #ifndef ROL_OBJECTIVE_FROM_BOUND_CONSTRAINT_H 36 #define ROL_OBJECTIVE_FROM_BOUND_CONSTRAINT_H 64 Real
apply(
const Real &x,
const Real &y )
const {
65 return y>
ROL_NINF ? std::log(x-y) : 0.0;
72 Real
apply(
const Real &x,
const Real &y )
const {
73 return y<
ROL_INF ? std::log(y-x) : 0.0;
80 Real
apply(
const Real &x,
const Real &y )
const {
88 Real
apply(
const Real &x,
const Real &y )
const {
89 return y<
ROL_INF ? 1./(y-x) : 0.0;
94 Elementwise::Multiply<Real>
mult_;
95 Elementwise::ReductionSum<Real>
sum_;
102 lo_( bc.getLowerVectorRCP() ),
103 up_( bc.getUpperVectorRCP() ) {
105 x_minus_lo_ = lo_->clone();
106 up_minus_x_ = up_->clone();
118 x_minus_lo_->applyBinary(logl,*lo_);
119 up_minus_x_->applyBinary(logu,*up_);
121 Real result = -(x_minus_lo_->reduce(sum_));
122 result -= (up_minus_x_->reduce(sum_));
136 x_minus_lo_->applyBinary(recipl, *lo_);
137 up_minus_x_->applyBinary(recipu, *up_);
140 g.
axpy(-1.0,*x_minus_lo_);
152 x_minus_lo_->applyBinary(recipl, *lo_);
153 up_minus_x_->applyBinary(recipu, *up_);
155 x_minus_lo_->applyBinary(mult_,*x_minus_lo_);
156 up_minus_x_->applyBinary(mult_,*up_minus_x_);
159 hv.
set(*x_minus_lo_);
160 hv.
plus(*up_minus_x_);
171 #endif // ROL_OBJECTIVE_FROM_BOUND_CONSTRAINT_H Provides the interface to evaluate objective functions.
Real apply(const Real &x, const Real &y) const
virtual void plus(const Vector &x)=0
Compute , where .
virtual void axpy(const Real alpha, const Vector &x)
Compute where .
virtual void applyBinary(const Elementwise::BinaryFunction< Real > &f, const Vector &x)
Real apply(const Real &x, const Real &y) const
Real apply(const Real &x, const Real &y) const
ObjectiveFromBoundConstraint(const BoundConstraint< Real > &bc)
Defines the linear algebra or vector space interface.
Elementwise::Multiply< Real > mult_
Elementwise::ReductionSum< Real > sum_
Teuchos::RCP< V > up_minus_x_
Real apply(const Real &x, const Real &y) const
Provides the interface to apply upper and lower bound constraints.
static const double ROL_INF
Real value(const Vector< Real > &x, Real &tol)
Compute value.
Teuchos::RCP< V > x_minus_lo_
void gradient(Vector< Real > &g, const Vector< Real > &x, Real &tol)
Compute gradient.
virtual void set(const Vector &x)
Set where .
static const double ROL_NINF
void hessVec(Vector< Real > &hv, const Vector< Real > &v, const Vector< Real > &x, Real &tol)
Apply Hessian approximation to vector.
Create a logarithmic penalty objective from upper and lower bound vectors.