44 #ifndef ROL_COHERENTEXPUTILITY_HPP 45 #define ROL_COHERENTEXPUTILITY_HPP 85 dval1_(0), dval2_(0), dval3_(0), xstat_(0), vstat_(0) {}
92 scaledGradient1_ = (x0->dual()).clone();
93 scaledGradient2_ = (x0->dual()).clone();
94 dualVector1_ = (x0->dual()).clone();
95 dualVector2_ = (x0->dual()).clone();
98 scaledGradient1_->zero(); scaledGradient2_->zero();
99 dualVector1_->zero(); dualVector2_->zero();
100 dval1_ = zero; dval2_ = zero; dval3_ = zero;
111 void update(
const Real val,
const Real weight) {
117 sampler.
sumAll(&val,&ev,1);
118 return xstat_*std::log(ev);
122 Real ev = std::exp(val/xstat_);
131 std::vector<Real> myval(2,0), val(2,0);
134 sampler.
sumAll(&myval[0],&val[0],2);
137 Real gstat = std::log(myval[0]) - myval[1]/(myval[0]*
xstat_);
138 dualVector1_->scale(one/myval[0]);
146 Real ev = std::exp(val/xstat_);
149 dval1_ += weight * ev * val;
150 dval2_ += weight * ev * val * val;
151 dval3_ += weight * ev * val * gv;
154 scaledGradient1_->axpy(weight*ev*gv,g);
155 scaledGradient2_->axpy(weight*ev*val,g);
160 std::vector<Real> myval(5,0), val(5,0);
166 sampler.
sumAll(&myval[0],&val[0],5);
170 Real v02 = val[0]*val[0];
171 Real h11 = (val[3]*val[0] - val[2]*val[2])/(v02*xs3) *
vstat_;
172 Real h12 = (val[1]*val[2] - val[4]*val[0])/(v02*xs2);
175 sampler.
sumAll(*scaledGradient1_,*dualVector2_);
176 dualVector1_->axpy(one/xstat_,*dualVector2_);
177 dualVector1_->scale(one/val[0]);
178 dualVector2_->zero();
180 dualVector1_->axpy(vstat_*val[2]/(xs2*v02)-val[1]/(v02*xstat_),*dualVector2_);
181 dualVector2_->zero();
182 sampler.
sumAll(*scaledGradient2_,*dualVector2_);
183 dualVector1_->axpy(-vstat_/val[0],*dualVector2_);
Teuchos::RCP< Vector< Real > > dualVector2_
void sumAll(Real *input, Real *output, int dim) const
Teuchos::RCP< Vector< Real > > scaledGradient1_
void getHessVec(Vector< Real > &hv, SampleGenerator< Real > &sampler)
Return risk measure Hessian-times-a-vector.
Defines the linear algebra or vector space interface.
void update(const Real val, const Real weight)
Update internal risk measure storage for value computation.
void update(const Real val, const Vector< Real > &g, const Real weight)
Update internal risk measure storage for gradient computation.
Teuchos::RCP< Vector< Real > > dualVector1_
Provides the interface for the coherent entropic risk measure.
void reset(Teuchos::RCP< Vector< Real > > &x0, const Vector< Real > &x)
Reset internal risk measure storage. Called for value and gradient computation.
Real getValue(SampleGenerator< Real > &sampler)
Return risk measure value.
void getGradient(Vector< Real > &g, SampleGenerator< Real > &sampler)
Return risk measure (sub)gradient.
virtual void reset(Teuchos::RCP< Vector< Real > > &x0, const Vector< Real > &x)
Reset internal risk measure storage. Called for value and gradient computation.
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 interface to implement risk measures.
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.
Teuchos::RCP< Vector< Real > > scaledGradient2_