44 #ifndef ROL_GENMOREAUYOSIDACVAR_HPP 45 #define ROL_GENMOREAUYOSIDACVAR_HPP 122 Real zero(0), one(1);
123 TEUCHOS_TEST_FOR_EXCEPTION((prob_ <= zero) || (prob_ >= one), std::invalid_argument,
124 ">>> ERROR (ROL::GenMoreauYosidaCVaR): Confidence level must be between 0 and 1!");
125 TEUCHOS_TEST_FOR_EXCEPTION((lam_ < zero) || (lam_ > one), std::invalid_argument,
126 ">>> ERROR (ROL::GenMoreauYosidaCVaR): Convex combination parameter must be positive!");
127 TEUCHOS_TEST_FOR_EXCEPTION((eps_ <= zero), std::invalid_argument,
128 ">>> ERROR (ROL::GenMoreauYosidaCVaR): Smoothing parameter must be positive!");
135 beta_ = (one-alpha_*
prob_)/omp_;
178 Teuchos::ParameterList& list
179 = parlist.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"Generalized Moreau-Yosida CVaR");
180 prob_ = list.get<Real>(
"Confidence Level");
181 lam_ = list.get<Real>(
"Convex Combination Parameter");
182 eps_ = list.get<Real>(
"Smoothing Parameter");
188 Real zero(0), one(1);
189 Real X = ((deriv==0) ? x : ((deriv==1) ? one : zero));
190 return regret(x,deriv) - X;
194 Real zero(0), half(0.5), one(1), reg(0);
196 reg = ((deriv == 0) ? alpha_*x + half*lb_*oma_
197 : ((deriv == 1) ?
alpha_ : zero));
199 else if ( x >= ub_ ) {
200 reg = ((deriv == 0) ? beta_*x - half*ub_*bmo_
201 : ((deriv == 1) ?
beta_ : zero));
204 reg = ((deriv == 0) ? half/eps_*x*x + x
205 : ((deriv == 1) ? x/eps_ + one : one/
eps_));
212 Real zero(0), one(1), two(2), p1(0.1);
215 Real vx = zero, vy = zero;
220 std::cout << std::right << std::setw(20) <<
"CHECK REGRET: v'(ub) is correct? \n";
221 std::cout << std::right << std::setw(20) <<
"t" 222 << std::setw(20) <<
"v'(x)" 223 << std::setw(20) <<
"(v(x+t)-v(x-t))/2t" 224 << std::setw(20) <<
"Error" 226 for (
int i = 0; i < 13; i++) {
229 diff = (vy-vx)/(two*t);
230 err = std::abs(diff-dv);
231 std::cout << std::scientific << std::setprecision(11) << std::right
232 << std::setw(20) << t
233 << std::setw(20) << dv
234 << std::setw(20) << diff
235 << std::setw(20) << err
247 std::cout << std::right << std::setw(20) <<
"CHECK REGRET: v''(ub) is correct? \n";
248 std::cout << std::right << std::setw(20) <<
"t" 249 << std::setw(20) <<
"v''(x)" 250 << std::setw(20) <<
"(v'(x+t)-v'(x-t))/2t" 251 << std::setw(20) <<
"Error" 253 for (
int i = 0; i < 13; i++) {
256 diff = (vy-vx)/(two*t);
257 err = std::abs(diff-dv);
258 std::cout << std::scientific << std::setprecision(11) << std::right
259 << std::setw(20) << t
260 << std::setw(20) << dv
261 << std::setw(20) << diff
262 << std::setw(20) << err
275 std::cout << std::right << std::setw(20) <<
"CHECK REGRET: v'(0) is correct? \n";
276 std::cout << std::right << std::setw(20) <<
"t" 277 << std::setw(20) <<
"v'(x)" 278 << std::setw(20) <<
"(v(x+t)-v(x-t))/2t" 279 << std::setw(20) <<
"Error" 281 for (
int i = 0; i < 13; i++) {
284 diff = (vy-vx)/(two*t);
285 err = std::abs(diff-dv);
286 std::cout << std::scientific << std::setprecision(11) << std::right
287 << std::setw(20) << t
288 << std::setw(20) << dv
289 << std::setw(20) << diff
290 << std::setw(20) << err
302 std::cout << std::right << std::setw(20) <<
"CHECK REGRET: v''(0) is correct? \n";
303 std::cout << std::right << std::setw(20) <<
"t" 304 << std::setw(20) <<
"v''(x)" 305 << std::setw(20) <<
"(v'(x+t)-v'(x-t))/2t" 306 << std::setw(20) <<
"Error" 308 for (
int i = 0; i < 13; i++) {
311 diff = (vy-vx)/(two*t);
312 err = std::abs(diff-dv);
313 std::cout << std::scientific << std::setprecision(11) << std::right
314 << std::setw(20) << t
315 << std::setw(20) << dv
316 << std::setw(20) << diff
317 << std::setw(20) << err
330 std::cout << std::right << std::setw(20) <<
"CHECK REGRET: v'(lb) is correct? \n";
331 std::cout << std::right << std::setw(20) <<
"t" 332 << std::setw(20) <<
"v'(x)" 333 << std::setw(20) <<
"(v(x+t)-v(x-t))/2t" 334 << std::setw(20) <<
"Error" 336 for (
int i = 0; i < 13; i++) {
339 diff = (vy-vx)/(two*t);
340 err = std::abs(diff-dv);
341 std::cout << std::scientific << std::setprecision(11) << std::right
342 << std::setw(20) << t
343 << std::setw(20) << dv
344 << std::setw(20) << diff
345 << std::setw(20) << err
357 std::cout << std::right << std::setw(20) <<
"CHECK REGRET: v''(lb) is correct? \n";
358 std::cout << std::right << std::setw(20) <<
"t" 359 << std::setw(20) <<
"v''(x)" 360 << std::setw(20) <<
"(v'(x+t)-v'(x-t))/2t" 361 << std::setw(20) <<
"Error" 363 for (
int i = 0; i < 13; i++) {
366 diff = (vy-vx)/(two*t);
367 err = std::abs(diff-dv);
368 std::cout << std::scientific << std::setprecision(11) << std::right
369 << std::setw(20) << t
370 << std::setw(20) << dv
371 << std::setw(20) << diff
372 << std::setw(20) << err
Provides a general interface for risk measures generated through the expectation risk quadrangle...
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)
GenMoreauYosidaCVaR(Real prob, Real eps)
Constructor.
GenMoreauYosidaCVaR(Real prob, Real lam, Real eps)
Constructor.
void checkRegret(void)
Run default derivative tests for the scalar regret function.
GenMoreauYosidaCVaR(Teuchos::ParameterList &parlist)
Constructor.
void checkInputs(void) const