79 BPOE(
const Real threshold,
const Real order=1)
80 :
RiskMeasure<Real>(), threshold_(threshold), order_(order), firstReset_(true) {
85 threshold_ = parlist.sublist(
"SOL").sublist(
"BPOE").get(
"Threshold",1.0);
86 order_ = parlist.sublist(
"SOL").sublist(
"BPOE").get(
"Moment Order",1.0);
103 dualVec1_ = (x0->dual()).clone();
104 dualVec2_ = (x0->dual()).clone();
112 void update(
const Real val,
const Real weight) {
113 const Real zero(0), one(1);
117 * ((order_==one) ? bp : std::pow(bp,order_));
124 sampler.
sumAll(&val,&bpoe,1);
125 return ((order_==one) ? bpoe : std::pow(bpoe,one/order_));
129 const Real zero(0), one(1), two(2);
132 Real pvalp0 = ((order_==one) ? bp : std::pow(bp,order_));
133 Real pvalp1 = ((order_==one) ? one : ((order_==two) ? bp : std::pow(bp,order_-one)));
141 const Real zero(0), one(1);
142 std::vector<Real> myvals(2), gvals(2);
145 sampler.
sumAll(&myvals[0],&gvals[0],2);
148 if ( gvals[0] > zero) {
149 Teuchos::RCP<Vector<Real> > gvec
152 Real norm = std::pow(gvals[0],(order_-one)/order_);
153 gvec->scale(xvar_/norm);
154 gvar = gvals[1]/norm;
161 const Real zero(0), one(1), two(2), three(3);
164 Real pvalp0 = ((order_==one) ? bp : std::pow(bp,order_));
165 Real pvalp1 = ((order_==one) ? one
166 : ((order_==two) ? bp : std::pow(bp,order_-one)));
167 Real pvalp2 = ((order_==one) ? zero
168 : ((order_==two) ? one
169 : ((order_==three) ? bp : std::pow(bp,order_-two))));
170 hvec_[0] += weight * pvalp0;
171 hvec_[1] += weight * pvalp1 * (val-
threshold_);
172 hvec_[2] += weight * pvalp2 * (val-
threshold_) * (val-threshold_);
173 hvec_[3] += weight * pvalp1 * gv;
174 hvec_[4] += weight * pvalp2 * (val-
threshold_) * gv;
176 dualVec1_->axpy(weight * pvalp2 * (val-threshold_), g);
177 dualVec2_->axpy(weight * pvalp2 * gv, g);
183 const Real zero(0), one(1), two(2);
184 std::vector<Real> gvals(5);
185 sampler.
sumAll(&hvec_[0],&gvals[0],5);
188 if ( gvals[0] > zero ) {
189 Teuchos::RCP<Vector<Real> > hvec
191 Real norm0 = ((order_==one) ? one
192 : ((order_==two) ? std::sqrt(gvals[0])
193 : std::pow(gvals[0],(order_-one)/order_)));
194 Real norm1 = ((order_==one) ? gvals[0]
195 : std::pow(gvals[0],(two*order_-one)/
order_));
196 hvar = (order_-one)*((gvals[2]/norm0 - gvals[1]*gvals[1]/norm1)*vvar_
197 +xvar_*(gvals[4]/norm0 - gvals[3]*gvals[1]/norm1))
201 hvec->scale(xvar_/norm0);
204 Real coeff = -(order_-one)*xvar_*(xvar_*gvals[3]+vvar_*gvals[1])/norm1+vvar_/norm0;
void update(const Real val, const Vector< Real > &g, const Real gv, const Vector< Real > &hv, const Real weight)
Update internal risk measure storage for Hessian-time-a-vector computation.
Provides the implementation of the buffered probability of exceedance.
Teuchos::RCP< Vector< Real > > dualVec1_
Real getValue(SampleGenerator< Real > &sampler)
Return risk measure value.
BPOE(const Real threshold, const Real order=1)
std::vector< Real > hvec_
void sumAll(Real *input, Real *output, int dim) const
Defines the linear algebra or vector space interface.
BPOE(Teuchos::ParameterList &parlist)
void getGradient(Vector< Real > &g, SampleGenerator< Real > &sampler)
Return risk measure (sub)gradient.
void reset(Teuchos::RCP< Vector< Real > > &x0, const Vector< Real > &x)
Reset internal risk measure storage. Called for value and gradient computation.
void getHessVec(Vector< Real > &hv, SampleGenerator< Real > &sampler)
Return risk measure Hessian-times-a-vector.
void update(const Real val, const Real weight)
Update internal risk measure storage for value computation.
void reset(Teuchos::RCP< Vector< Real > > &x0, const Vector< Real > &x, Teuchos::RCP< Vector< Real > > &v0, const Vector< Real > &v)
Reset internal risk measure storage. Called for Hessian-times-a-vector computation.
void update(const Real val, const Vector< Real > &g, const Real weight)
Update internal risk measure storage for gradient computation.
virtual void reset(Teuchos::RCP< Vector< Real > > &x0, const Vector< Real > &x)
Reset internal risk measure storage. Called for value and gradient computation.
Teuchos::RCP< Vector< Real > > dualVec2_
Provides the interface to implement risk measures.