44 #ifndef ROL_POINTWISECDFOBJECTIVE_H 45 #define ROL_POINTWISECDFOBJECTIVE_H 50 #include "Teuchos_RCP.hpp" 58 std::vector<Teuchos::RCP<Distribution<Real> > >
dist_;
65 Real val = 0., hs = 0., xpt = 0., xwt = 0.;
66 for (
size_t k = 0; k < numSamples; k++) {
68 hs = 0.5 * (1. + erf((loc-xpt)/(sqrt2_*scale_)));
74 Real
gradientCDF(std::vector<Real> &gradx, std::vector<Real> &gradp,
77 gradx.resize(numSamples,0.); gradp.resize(numSamples,0.);
78 Real val = 0., hs = 0., xpt = 0., xwt = 0.;
79 for (
size_t k = 0; k < numSamples; k++) {
81 hs = 0.5 * (1. + erf((loc-xpt)/(sqrt2_*scale_)));
83 gradx[k] = -(xwt/(sqrt2_*sqrtpi_*
scale_))
84 * std::exp(-std::pow((loc-xpt)/(sqrt2_*scale_),2));
93 hvx.resize(numSamples,0.);
94 Real val = 0., hs = 0., xpt = 0., xwt = 0., scale3 = std::pow(scale_,3);
95 for (
size_t k = 0; k < numSamples; k++) {
97 hs = 0.5 * (1. + erf((loc-xpt)/(sqrt2_*scale_)));
99 hvx[k] = -(xwt/(sqrt2_*sqrtpi_*scale3))
100 * std::exp(-std::pow((loc-xpt)/(sqrt2_*scale_),2)) * (loc-xpt);
107 const Real scale = 1.e-2)
108 :
Objective<Real>(), dist_(dist), scale_(scale),
109 sqrt2_(std::sqrt(2.)), sqrtpi_(std::sqrt(M_PI)) {}
115 Real val = 0., diff = 0., xpt = 0.;
116 for (
size_t d = 0; d < dimension; d++) {
117 for (
size_t k = 0; k < numSamples; k++) {
119 diff = (
valueCDF(d,xpt,ex)-dist_[d]->evaluateCDF(xpt));
120 val += std::pow(diff,2);
130 const size_t numSamples = ex.getNumSamples();
131 std::vector<Real> gradx(numSamples,0.), gradp(numSamples,0.);
132 Real diff = 0., xpt = 0., val = 0., sum = 0.;
133 std::vector<Real> val_wt(numSamples,0.), tmp(dimension,0.);
134 std::vector<std::vector<Real> > val_pt(numSamples,tmp);
135 for (
size_t d = 0; d < dimension; d++) {
136 for (
size_t k = 0; k < numSamples; k++) {
137 xpt = (*ex.getPoint(k))[d];
139 diff = (val-dist_[d]->evaluateCDF(xpt));
141 for (
size_t j = 0; j < numSamples; j++) {
142 (val_pt[j])[d] += diff * gradx[j];
143 val_wt[j] += diff * gradp[j];
146 (val_pt[k])[d] += diff * (sum - dist_[d]->evaluatePDF(xpt));
149 for (
size_t k = 0; k < numSamples; k++) {
Provides the interface to evaluate objective functions.
Teuchos::RCP< const std::vector< Element > > getPoint(const size_t i) const
const size_t getDimension(void) const
const Element getWeight(const size_t i) const
void setWeight(const size_t i, const Element wt)
void gradient(Vector< Real > &g, const Vector< Real > &x, Real &tol)
Compute gradient.
Defines the linear algebra or vector space interface.
Real value(const Vector< Real > &x, Real &tol)
Compute value.
const size_t getNumSamples(void) const
std::vector< Teuchos::RCP< Distribution< Real > > > dist_
Provides the std::vector implementation of the ROL::Vector interface.
Real valueCDF(const size_t dim, const Real loc, const SROMVector< Real > &x) const
Real gradientCDF(std::vector< Real > &gradx, std::vector< Real > &gradp, const size_t dim, const Real loc, const SROMVector< Real > &x) const
PointwiseCDFObjective(const std::vector< Teuchos::RCP< Distribution< Real > > > &dist, const Real scale=1.e-2)
Real hessVecCDF(std::vector< Real > &hvx, const size_t dim, const Real loc, const SROMVector< Real > &x, const SROMVector< Real > &v) const
void setPoint(const size_t i, const std::vector< Element > &pt)