49 #ifndef ROL_STDBOUNDCONSTRAINT_DEF_HPP 50 #define ROL_STDBOUNDCONSTRAINT_DEF_HPP 60 x_lo_.assign(x.begin(),x.end());
66 x_up_.assign(x.begin(),x.end());
71 lower_ = makePtr<StdVector<Real>>(makePtrFromRef(
x_lo_));
72 upper_ = makePtr<StdVector<Real>>(makePtrFromRef(
x_up_));
77 : x_lo_(l), x_up_(u), scale_(scale) {
80 for (
int i = 0; i <
dim_; i++ ) {
90 lower_ = makePtr<StdVector<Real>>(makePtrFromRef(
x_lo_));
91 upper_ = makePtr<StdVector<Real>>(makePtrFromRef(
x_up_));
96 bool lflag =
true, uflag =
true;
98 Ptr<const std::vector<Real>> ex =
101 for (
int i = 0; i < dim_; ++i ) {
102 if ( (*ex)[i] < x_lo_[i] ) {
109 for (
int i = 0; i < dim_; ++i ) {
110 if ( (*ex)[i] > x_up_[i] ) {
117 return (lflag && uflag);
123 Ptr<std::vector<Real>> ex =
126 for (
int i = 0; i < dim_; ++i ) {
127 (*ex)[i] = std::max(x_lo_[i],(*ex)[i]);
131 for (
int i = 0; i < dim_; ++i ) {
132 (*ex)[i] = std::min(x_up_[i],(*ex)[i]);
141 Ptr<std::vector<Real>> ex =
143 const Real eps(1e-1), tol(100.0*ROL_EPSILON<Real>()), one(1);
145 for (
int i = 0; i < dim_; ++i ) {
146 Real val = ((x_lo_[i] < -tol) ? (one-eps)*x_lo_[i]
147 : ((x_lo_[i] > tol) ? (one+eps)*x_lo_[i]
149 val = std::min(x_lo_[i]+eps*min_diff_, val);
150 (*ex)[i] = ((*ex)[i] < x_lo_[i]+tol) ? val : (*ex)[i];
154 for (
int i = 0; i < dim_; ++i ) {
155 Real val = ((x_up_[i] < -tol) ? (one+eps)*x_up_[i]
156 : ((x_up_[i] > tol) ? (one-eps)*x_up_[i]
158 val = std::max(x_up_[i]-eps*min_diff_, val);
159 (*ex)[i] = ((*ex)[i] > x_up_[i]-tol) ? val : (*ex)[i];
168 Ptr<const std::vector<Real>> ex =
170 Ptr<std::vector<Real>> ev =
172 Real epsn = std::min(scale_*eps,min_diff_);
173 for (
int i = 0; i < dim_; ++i ) {
174 if ( ((*ex)[i] <= x_lo_[i]+epsn) ) {
175 (*ev)[i] =
static_cast<Real
>(0);
184 Ptr<const std::vector<Real>> ex =
186 Ptr<std::vector<Real>> ev =
188 Real epsn = std::min(scale_*eps,min_diff_);
189 for (
int i = 0; i < dim_; ++i ) {
190 if ( ((*ex)[i] >= x_up_[i]-epsn) ) {
191 (*ev)[i] =
static_cast<Real
>(0);
200 Ptr<const std::vector<Real>> ex =
202 Ptr<const std::vector<Real>> eg =
204 Ptr<std::vector<Real>> ev =
206 Real epsn = std::min(scale_*xeps,this->min_diff_);
207 for (
int i = 0; i < dim_; ++i ) {
208 if ( (*ex)[i] <= x_lo_[i]+epsn && (*eg)[i] > geps ) {
209 (*ev)[i] =
static_cast<Real
>(0);
218 Ptr<const std::vector<Real>> ex =
220 Ptr<const std::vector<Real>> eg =
222 Ptr<std::vector<Real>> ev =
224 Real epsn = std::min(scale_*xeps,min_diff_);
225 for (
int i = 0; i < dim_; ++i ) {
226 if ( (*ex)[i] >= x_up_[i]-epsn && (*eg)[i] < -geps ) {
227 (*ev)[i] =
static_cast<Real
>(0);
Ptr< Vector< Real > > upper_
void projectInterior(Vector< Real > &x) override
Project optimization variables into the interior of the feasible set.
void activateLower(void)
Turn on lower bound.
void activate(void)
Turn on bounds.
std::vector< Real > x_lo_
Defines the linear algebra or vector space interface.
void pruneLowerActive(Vector< Real > &v, const Vector< Real > &x, Real eps=Real(0)) override
Set variables to zero if they correspond to the lower -active set.
void activateUpper(void)
Turn on upper bound.
Ptr< Vector< Real > > lower_
void pruneUpperActive(Vector< Real > &v, const Vector< Real > &x, Real eps=Real(0)) override
Set variables to zero if they correspond to the upper -active set.
void project(Vector< Real > &x) override
Project optimization variables onto the bounds.
StdBoundConstraint(std::vector< Real > &x, bool isLower=false, Real scale=Real(1))
Provides the interface to apply upper and lower bound constraints.
bool isFeasible(const Vector< Real > &x) override
Check if the vector, v, is feasible.
std::vector< Real > x_up_