44 #ifndef ROL_QUANTILERADIUSQUADRANGLE_HPP 45 #define ROL_QUANTILERADIUSQUADRANGLE_HPP 51 #include "Teuchos_Array.hpp" 52 #include "Teuchos_ParameterList.hpp" 75 TEUCHOS_TEST_FOR_EXCEPTION((prob_>one || prob_<zero), std::invalid_argument,
76 ">>> ERROR (ROL::QuantileRadiusQuadrangle): Confidence level out of range!");
77 TEUCHOS_TEST_FOR_EXCEPTION((coeff_<zero), std::invalid_argument,
78 ">>> ERROR (ROL::QuantileRadiusQuadrangle): Coefficient is negative!");
84 xvar_.clear(); xvar_.resize(2,zero);
85 vvar_.clear(); vvar_.resize(2,zero);
86 vec_.clear(); vec_.resize(2,zero);
93 Teuchos::ParameterList &list
94 = parlist.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"Quantile-Radius Quadrangle");
96 prob_ = list.get<Real>(
"Confidence Level");
97 coeff_ = list.get<Real>(
"Coefficient");
106 :
RiskMeasure<Real>(), plusFunction_(pf), prob_(prob), coeff_(coeff), firstReset_(true) {
114 vec_.assign(2,static_cast<Real>(0));
116 dualVector_ = (x0->dual()).clone();
129 void update(
const Real val,
const Real weight) {
130 Real half(0.5), one(1);
131 Real pf1 = plusFunction_->evaluate(val-xvar_[0],0);
132 Real pf2 = plusFunction_->evaluate(-val-xvar_[1],0);
138 sampler.
sumAll(&val,&cvar,1);
139 cvar += half*coeff_*(xvar_[0] + xvar_[1]);
144 Real half(0.5), one(1);
145 Real pf1 = plusFunction_->evaluate(val-xvar_[0],1);
146 Real pf2 = plusFunction_->evaluate(-val-xvar_[1],1);
147 Real c = half*weight*coeff_/(one-
prob_);
156 std::vector<Real> var(2);
157 sampler.
sumAll(&vec_[0],&var[0],2);
168 Real half(0.5), one(1);
169 Real pf11 = plusFunction_->evaluate(val-xvar_[0],1);
170 Real pf12 = plusFunction_->evaluate(val-xvar_[0],2);
171 Real pf21 = plusFunction_->evaluate(-val-xvar_[1],1);
172 Real pf22 = plusFunction_->evaluate(-val-xvar_[1],2);
173 Real c = half*weight*coeff_/(one-
prob_);
174 vec_[0] -= c*pf12*(gv-vvar_[0]);
175 vec_[1] -= c*pf22*(-gv-vvar_[1]);
182 std::vector<Real> var(2);
183 sampler.
sumAll(&vec_[0],&var[0],2);
void checkInputs(void) const
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.
Real getValue(SampleGenerator< Real > &sampler)
Return risk measure value.
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 sumAll(Real *input, Real *output, int dim) const
void getHessVec(Vector< Real > &hv, SampleGenerator< Real > &sampler)
Return risk measure Hessian-times-a-vector.
Defines the linear algebra or vector space interface.
QuantileRadiusQuadrangle(const Real prob, const Real coeff, const Teuchos::RCP< PlusFunction< Real > > &pf)
void setVector(const Vector< Real > &vec)
void update(const Real val, const Vector< Real > &g, const Real weight)
Update internal risk measure storage for gradient computation.
std::vector< Real > xvar_
Teuchos::RCP< Vector< Real > > dualVector_
void setStatistic(const Real stat)
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 update(const Real val, const Real weight)
Update internal risk measure storage for value computation.
std::vector< Real > vvar_
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< PlusFunction< Real > > plusFunction_
Provides the interface to implement risk measures.
QuantileRadiusQuadrangle(Teuchos::ParameterList &parlist)