44 #ifndef ROL_EXPECTATIONQUAD_HPP 45 #define ROL_EXPECTATIONQUAD_HPP 109 virtual Real
regret(Real x,
int deriv = 0) = 0;
114 Real zero(0), half(0.5), two(2), one(1), oem3(1.e-3), fem4(5.e-4), p1(0.1);
118 std::cout << std::right << std::setw(20) <<
"CHECK REGRET: v(0) = 0? \n";
119 std::cout << std::right << std::setw(20) <<
"v(0)" <<
"\n";
120 std::cout << std::scientific << std::setprecision(11) << std::right
121 << std::setw(20) << std::abs(vx)
126 std::cout << std::right << std::setw(20) <<
"CHECK REGRET: x < v(x) for |x| > 0? \n";
127 std::cout << std::right << std::setw(20) <<
"x" 128 << std::right << std::setw(20) <<
"v(x)" 130 for (
int i = 0; i < 10; i++) {
131 x = scale*(Real)rand()/(Real)RAND_MAX - scale*half;
133 std::cout << std::scientific << std::setprecision(11) << std::right
134 << std::setw(20) << x
135 << std::setw(20) << vx
147 std::cout << std::right << std::setw(20) <<
"CHECK REGRET: v(x) is convex? \n";
148 std::cout << std::right << std::setw(20) <<
"v(l*x+(1-l)*y)" 149 << std::setw(20) <<
"l*v(x)+(1-l)*v(y)" 151 for (
int i = 0; i < 10; i++) {
152 x = scale*(Real)rand()/(Real)RAND_MAX - scale*half;
154 y = scale*(Real)rand()/(Real)RAND_MAX - scale*half;
156 l = (Real)rand()/(Real)RAND_MAX;
159 std::cout << std::scientific << std::setprecision(11) << std::right
160 << std::setw(20) << vz
161 << std::setw(20) << l*vx + (one-l)*vy
167 x = oem3*(Real)rand()/(Real)RAND_MAX - fem4;
173 std::cout << std::right << std::setw(20) <<
"CHECK REGRET: v'(x) is correct? \n";
174 std::cout << std::right << std::setw(20) <<
"t" 175 << std::setw(20) <<
"v'(x)" 176 << std::setw(20) <<
"(v(x+t)-v(x))/t" 177 << std::setw(20) <<
"Error" 179 for (
int i = 0; i < 13; i++) {
183 err = std::abs(diff-dv);
184 std::cout << std::scientific << std::setprecision(11) << std::right
185 << std::setw(20) << t
186 << std::setw(20) << dv
187 << std::setw(20) << diff
188 << std::setw(20) << err
194 x = oem3*(Real)rand()/(Real)RAND_MAX - fem4;
200 std::cout << std::right << std::setw(20) <<
"CHECK REGRET: v''(x) is correct? \n";
201 std::cout << std::right << std::setw(20) <<
"t" 202 << std::setw(20) <<
"v''(x)" 203 << std::setw(20) <<
"(v'(x+t)-v'(x))/t" 204 << std::setw(20) <<
"Error" 206 for (
int i = 0; i < 13; i++) {
210 err = std::abs(diff-dv);
211 std::cout << std::scientific << std::setprecision(11) << std::right
212 << std::setw(20) << t
213 << std::setw(20) << dv
214 << std::setw(20) << diff
215 << std::setw(20) << err
242 void update(
const Real val,
const Real weight) {
264 sampler.
sumAll(&val,&gval,1);
272 sampler.
sumAll(&stat,&gstat,1);
283 sampler.
sumAll(&stat,&gstat,1);
void update(const Real val, const Vector< Real > &g, const Real weight)
Update internal risk measure storage for gradient computation.
Provides a general interface for risk measures generated through the expectation risk quadrangle...
void getGradient(Vector< Real > &g, SampleGenerator< Real > &sampler)
Return risk measure (sub)gradient.
virtual void checkRegret(void)
Run default derivative tests for the scalar regret function.
Real getValue(SampleGenerator< Real > &sampler)
Return risk measure value.
Contains definitions of custom data types in ROL.
void sumAll(Real *input, Real *output, int dim) const
Defines the linear algebra or vector space interface.
Teuchos::RCP< const Vector< Real > > getVector(void) const
void setVector(const Vector< Real > &vec)
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.
void setStatistic(const Real stat)
virtual Real regret(Real x, int deriv=0)=0
Evaluate the scalar regret function at x.
Teuchos::RCP< const StdVector< Real > > getStatistic(void) const
virtual void reset(Teuchos::RCP< Vector< Real > > &x0, const Vector< Real > &x)
Reset internal risk measure storage. Called for value and gradient computation.
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 getHessVec(Vector< Real > &hv, SampleGenerator< Real > &sampler)
Return risk measure Hessian-times-a-vector.
Provides the interface to implement risk measures.
void update(const Real val, const Real weight)
Update internal risk measure storage for value computation.
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 > > dualVector_