108 const Real zero(0), one(1);
109 TEUCHOS_TEST_FOR_EXCEPTION((
prob_ <= zero) || (
prob_ >= one), std::invalid_argument,
110 ">>> ERROR (ROL::HMCR): Confidence level must be between 0 and 1!");
111 TEUCHOS_TEST_FOR_EXCEPTION((
lambda_ < zero) || (
lambda_ > one), std::invalid_argument,
112 ">>> ERROR (ROL::HMCR): Convex combination parameter must be positive!");
113 TEUCHOS_TEST_FOR_EXCEPTION((
order_ < 2), std::invalid_argument,
114 ">>> ERROR (ROL::HMCR): Norm order is less than 2!");
115 TEUCHOS_TEST_FOR_EXCEPTION(
plusFunction_ == Teuchos::null, std::invalid_argument,
116 ">>> ERROR (ROL::HMCR): PlusFunction pointer is null!");
129 HMCR(
const Real prob,
const Real lambda,
const unsigned order,
151 HMCR( Teuchos::ParameterList &parlist )
155 Teuchos::ParameterList &list
156 = parlist.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"HMCR");
158 prob_ = list.get<Real>(
"Confidence Level");
159 lambda_ = list.get<Real>(
"Convex Combination Parameter");
160 order_ = (unsigned)list.get<
int>(
"Order",2);
198 void update(
const Real val,
const Real weight) {
199 const Real rorder =
static_cast<Real
>(
order_);
204 pnorm_ += weight*std::pow(pf,rorder);
209 const Real power = one/
static_cast<Real
>(
order_);
210 std::vector<Real> val_in(2), val_out(2);
213 sampler.
sumAll(&val_in[0],&val_out[0],2);
214 return (one-
lambda_)*val_out[0]
220 const Real rorder0 =
static_cast<Real
>(
order_);
221 const Real rorder1 = rorder0 - one;
228 Real pf0p0 = std::pow(pf0,rorder0);
229 Real pf0p1 = std::pow(pf0,rorder1);
238 const Real zero(0), one(1);
239 std::vector<Real> val_in(2), val_out(2);
242 sampler.
sumAll(&val_in[0],&val_out[0],2);
247 if ( val_in[0] > zero ) {
248 const Real rorder0 =
static_cast<Real
>(
order_);
249 const Real rorder1 = rorder0 - one;
250 Real denom = std::pow(val_out[0],rorder1/rorder0);
255 var -=
lambda_*
coeff_*((denom > zero) ? val_out[1]/denom : zero);
265 const Real rorder0 =
static_cast<Real
>(
order_);
266 const Real rorder1 = rorder0-one;
267 const Real rorder2 = rorder1-one;
275 Real pf0p0 = std::pow(pf0,rorder0);
276 Real pf0p1 = std::pow(pf0,rorder1);
277 Real pf0p2 = std::pow(pf0,rorder2);
279 Real scale0 = (rorder1*pf0p2*pf1*pf1 + pf0p1*pf2)*(gv-
vvar_);
280 Real scale1 = pf0p1*pf1;
293 const Real zero(0), one(1);
294 std::vector<Real> val_in(4), val_out(4);
298 sampler.
sumAll(&val_in[0],&val_out[0],4);
304 if ( val_out[0] > zero ) {
305 const Real rorder0 =
static_cast<Real
>(
order_);
306 const Real rorder1 = rorder0-one;
307 const Real rorder2 = rorder0 + rorder1;
313 Real denom1 = std::pow(val_out[0],rorder1/rorder0);
314 Real denom2 = std::pow(val_out[0],rorder2/rorder0);
316 var = -coeff*(val_out[1]/denom1 + val_out[3]*val_out[2]/denom2);
Teuchos::RCP< PlusFunction< Real > > plusFunction_
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 > > gDualVector1_
void sumAll(Real *input, Real *output, int dim) const
HMCR(Teuchos::ParameterList &parlist)
Constructor.
void getGradient(Vector< Real > &g, SampleGenerator< Real > &sampler)
Return risk measure (sub)gradient.
Defines the linear algebra or vector space interface.
Teuchos::RCP< Vector< Real > > mDualVector1_
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 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.
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.
virtual 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.
Provides an interface for a convex combination of the expected value and the higher moment coherent r...
HMCR(const Real prob, const Real lambda, const unsigned order, const Teuchos::RCP< PlusFunction< Real > > &pf)
Constructor.
Teuchos::RCP< Vector< Real > > mDualVector0_
void checkInputs(void) const
Provides the interface to implement risk measures.
Teuchos::RCP< Vector< Real > > gDualVector0_