44 #ifndef ROL_SMOOTHCVARQUAD_HPP 45 #define ROL_SMOOTHCVARQUAD_HPP 100 Teuchos::RCP<PlusFunction<Real> >
pf_;
110 Real zero(0), one(1);
111 TEUCHOS_TEST_FOR_EXCEPTION((
prob_ <= zero) || (
prob_ >= one), std::invalid_argument,
112 ">>> ERROR (ROL::QuantileQuadrangle): Confidence level must be between 0 and 1!");
113 TEUCHOS_TEST_FOR_EXCEPTION((
lam_ < zero) || (
lam_ > one), std::invalid_argument,
114 ">>> ERROR (ROL::QuantileQuadrangle): Convex combination parameter must be positive!");
115 TEUCHOS_TEST_FOR_EXCEPTION((
eps_ <= zero), std::invalid_argument,
116 ">>> ERROR (ROL::QuantileQuadrangle): Smoothing parameter must be positive!");
117 TEUCHOS_TEST_FOR_EXCEPTION(
pf_ == Teuchos::null, std::invalid_argument,
118 ">>> ERROR (ROL::QuantileQuadrangle): PlusFunction pointer is null!");
168 Teuchos::ParameterList& list
169 = parlist.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"Quantile-Based Quadrangle");
171 prob_ = list.get<Real>(
"Confidence Level");
172 lam_ = list.get<Real>(
"Convex Combination Parameter");
173 eps_ = list.get<Real>(
"Smoothing Parameter");
183 Real err = (
beta_-one)*
pf_->evaluate(x,deriv)
184 + ((deriv%2) ? -one : one)*(one-
alpha_)*
pf_->evaluate(-x,deriv);
189 Real zero(0), one(1);
190 Real X = ((deriv==0) ? x : ((deriv==1) ? one : zero));
191 Real reg =
error(x,deriv) + X;
198 Real x =
eps_, two(2), p1(0.1), one(1), zero(0);
201 Real t(1), diff(0), err(0);
202 std::cout << std::right << std::setw(20) <<
"CHECK REGRET: v'(eps) is correct? \n";
203 std::cout << std::right << std::setw(20) <<
"t" 204 << std::setw(20) <<
"v'(x)" 205 << std::setw(20) <<
"(v(x+t)-v(x-t))/2t" 206 << std::setw(20) <<
"Error" 208 for (
int i = 0; i < 13; i++) {
211 diff = (vy-vx)/(two*t);
212 err = std::abs(diff-dv);
213 std::cout << std::scientific << std::setprecision(11) << std::right
214 << std::setw(20) << t
215 << std::setw(20) << dv
216 << std::setw(20) << diff
217 << std::setw(20) << err
229 std::cout << std::right << std::setw(20) <<
"CHECK REGRET: v''(eps) is correct? \n";
230 std::cout << std::right << std::setw(20) <<
"t" 231 << std::setw(20) <<
"v''(x)" 232 << std::setw(20) <<
"(v'(x+t)-v'(x-t))/2t" 233 << std::setw(20) <<
"Error" 235 for (
int i = 0; i < 13; i++) {
238 diff = (vy-vx)/(two*t);
239 err = std::abs(diff-dv);
240 std::cout << std::scientific << std::setprecision(11) << std::right
241 << std::setw(20) << t
242 << std::setw(20) << dv
243 << std::setw(20) << diff
244 << std::setw(20) << err
257 std::cout << std::right << std::setw(20) <<
"CHECK REGRET: v'(0) is correct? \n";
258 std::cout << std::right << std::setw(20) <<
"t" 259 << std::setw(20) <<
"v'(x)" 260 << std::setw(20) <<
"(v(x+t)-v(x-t))/2t" 261 << std::setw(20) <<
"Error" 263 for (
int i = 0; i < 13; i++) {
266 diff = (vy-vx)/(two*t);
267 err = std::abs(diff-dv);
268 std::cout << std::scientific << std::setprecision(11) << std::right
269 << std::setw(20) << t
270 << std::setw(20) << dv
271 << std::setw(20) << diff
272 << std::setw(20) << err
284 std::cout << std::right << std::setw(20) <<
"CHECK REGRET: v''(0) is correct? \n";
285 std::cout << std::right << std::setw(20) <<
"t" 286 << std::setw(20) <<
"v''(x)" 287 << std::setw(20) <<
"(v'(x+t)-v'(x-t))/2t" 288 << std::setw(20) <<
"Error" 290 for (
int i = 0; i < 13; i++) {
293 diff = (vy-vx)/(two*t);
294 err = std::abs(diff-dv);
295 std::cout << std::scientific << std::setprecision(11) << std::right
296 << std::setw(20) << t
297 << std::setw(20) << dv
298 << std::setw(20) << diff
299 << std::setw(20) << err
312 std::cout << std::right << std::setw(20) <<
"CHECK REGRET: v'(-eps) is correct? \n";
313 std::cout << std::right << std::setw(20) <<
"t" 314 << std::setw(20) <<
"v'(x)" 315 << std::setw(20) <<
"(v(x+t)-v(x-t))/2t" 316 << std::setw(20) <<
"Error" 318 for (
int i = 0; i < 13; i++) {
321 diff = (vy-vx)/(two*t);
322 err = std::abs(diff-dv);
323 std::cout << std::scientific << std::setprecision(11) << std::right
324 << std::setw(20) << t
325 << std::setw(20) << dv
326 << std::setw(20) << diff
327 << std::setw(20) << err
339 std::cout << std::right << std::setw(20) <<
"CHECK REGRET: v''(-eps) is correct? \n";
340 std::cout << std::right << std::setw(20) <<
"t" 341 << std::setw(20) <<
"v''(x)" 342 << std::setw(20) <<
"(v'(x+t)-v'(x-t))/2t" 343 << std::setw(20) <<
"Error" 345 for (
int i = 0; i < 13; i++) {
348 diff = (vy-vx)/(two*t);
349 err = std::abs(diff-dv);
350 std::cout << std::scientific << std::setprecision(11) << std::right
351 << std::setw(20) << t
352 << std::setw(20) << dv
353 << std::setw(20) << diff
354 << std::setw(20) << err
void checkInputs(void) const
QuantileQuadrangle(Teuchos::ParameterList &parlist)
Constructor.
Provides a general interface for risk measures generated through the expectation risk quadrangle...
Provides an interface for a convex combination of the expected value and the conditional value-at-ris...
virtual void checkRegret(void)
Run default derivative tests for the scalar regret function.
Real regret(Real x, int deriv=0)
Evaluate the scalar regret function at x.
Real error(Real x, int deriv=0)
Teuchos::RCP< PlusFunction< Real > > pf_
QuantileQuadrangle(Real prob, Real eps, Teuchos::RCP< PlusFunction< Real > > &pf)
Constructor.
void checkRegret(void)
Run default derivative tests for the scalar regret function.
QuantileQuadrangle(Real prob, Real lam, Real eps, Teuchos::RCP< PlusFunction< Real > > &pf)
Constructor.