|
ROL
|
Provides an interface for the Kullback-Leibler distributionally robust expectation. More...
#include <ROL_KLDivergence.hpp>
Public Member Functions | |
| KLDivergence (const Real eps=1.e-2) | |
| Constructor. | |
| KLDivergence (ROL::ParameterList &parlist) | |
| Constructor. | |
| void | initialize (const Vector< Real > &x) |
| void | updateValue (Objective< Real > &obj, const Vector< Real > &x, const std::vector< Real > &xstat, Real &tol) |
| Real | getValue (const Vector< Real > &x, const std::vector< Real > &xstat, SampleGenerator< Real > &sampler) |
| void | updateGradient (Objective< Real > &obj, const Vector< Real > &x, const std::vector< Real > &xstat, Real &tol) |
| void | getGradient (Vector< Real > &g, std::vector< Real > &gstat, const Vector< Real > &x, const std::vector< Real > &xstat, SampleGenerator< Real > &sampler) |
| void | updateHessVec (Objective< Real > &obj, const Vector< Real > &v, const std::vector< Real > &vstat, const Vector< Real > &x, const std::vector< Real > &xstat, Real &tol) |
| void | getHessVec (Vector< Real > &hv, std::vector< Real > &hvstat, const Vector< Real > &v, const std::vector< Real > &vstat, const Vector< Real > &x, const std::vector< Real > &xstat, SampleGenerator< Real > &sampler) |
Private Member Functions | |
| void | checkInputs (void) const |
| Real | exponential (const Real arg1, const Real arg2) const |
| Real | exponential (const Real arg) const |
| Real | power (const Real arg, const Real pow) const |
Private Attributes | |
| Real | eps_ |
| Real | gval_ |
| Real | gvval_ |
| Real | hval_ |
| ROL::Ptr< Vector< Real > > | scaledGradient_ |
| ROL::Ptr< Vector< Real > > | scaledHessVec_ |
| bool | firstResetKLD_ |
Provides an interface for the Kullback-Leibler distributionally robust expectation.
This class defines a risk measure \(\mathcal{R}\) which arises in distributionally robust stochastic programming. \(\mathcal{R}\) is given by
\[ \mathcal{R}(X) = \sup_{\vartheta\in\mathfrak{A}} \mathbb{E}[\vartheta X] \]
where \(\mathfrak{A}\) is called the ambiguity (or uncertainty) set and is defined by a constraint on the Kullback-Leibler divergence, i.e.,
\[ \mathfrak{A} = \{\vartheta\in\mathcal{X}^*\,:\, \mathbb{E}[\vartheta] = 1,\; \vartheta \ge 0,\;\text{and}\; \mathbb{E}[\vartheta\log(\vartheta)] \le \epsilon\}. \]
\(\mathcal{R}\) is a law-invariant, coherent risk measure. Moreover, by a duality argument, \(\mathcal{R}\) can be reformulated as
\[ \mathcal{R}(X) = \inf_{\lambda > 0}\left\{ \lambda \epsilon + \lambda\mathbb{E}\left[\exp\left( \frac{X}{\lambda}\right)\right]\right\}. \]
ROL implements this by augmenting the optimization vector \(x_0\) with the parameter \(\lambda\), then minimizes jointly for \((x_0,\lambda)\).
Definition at line 47 of file ROL_KLDivergence.hpp.
|
inline |
Constructor.
| [in] | eps | is the tolerance for the KL divergence constraint |
Definition at line 84 of file ROL_KLDivergence.hpp.
References checkInputs(), eps_, and firstResetKLD_.
|
inline |
Constructor.
| [in] | parlist | is a parameter list specifying inputs |
parlist should contain sublists "SOL"->"Risk Measure"->"KL Divergence" and within the "KL Divergence" sublist should have the following parameters
Definition at line 97 of file ROL_KLDivergence.hpp.
References checkInputs(), eps_, and firstResetKLD_.
|
inlineprivate |
Definition at line 73 of file ROL_KLDivergence.hpp.
Referenced by KLDivergence(), and KLDivergence().
|
inline |
Definition at line 105 of file ROL_KLDivergence.hpp.
References ROL::Vector< Real >::clone(), ROL::Vector< Real >::dual(), firstResetKLD_, gval_, gvval_, hval_, scaledGradient_, scaledHessVec_, and zero.
|
inline |
Definition at line 117 of file ROL_KLDivergence.hpp.
References eps_, and exponential().
|
inline |
Definition at line 126 of file ROL_KLDivergence.hpp.
References eps_, ROL::ROL_INF(), and ROL::SampleGenerator< Real >::sumAll().
|
inline |
Definition at line 137 of file ROL_KLDivergence.hpp.
References eps_, exponential(), and gval_.
|
inline |
Definition at line 149 of file ROL_KLDivergence.hpp.
References eps_, gval_, ROL::ROL_INF(), ROL::Vector< Real >::scale(), and ROL::SampleGenerator< Real >::sumAll().
|
inline |
Definition at line 172 of file ROL_KLDivergence.hpp.
References eps_, exponential(), gval_, gvval_, hval_, scaledGradient_, and scaledHessVec_.
|
inline |
Definition at line 193 of file ROL_KLDivergence.hpp.
References ROL::Vector< Real >::axpy(), eps_, gval_, gvval_, hval_, ROL::ROL_INF(), ROL::Vector< Real >::scale(), scaledGradient_, scaledHessVec_, and ROL::SampleGenerator< Real >::sumAll().
|
inlineprivate |
Definition at line 237 of file ROL_KLDivergence.hpp.
References exponential(), and power().
Referenced by exponential(), updateGradient(), updateHessVec(), and updateValue().
|
inlineprivate |
Definition at line 246 of file ROL_KLDivergence.hpp.
References ROL::ROL_INF().
|
inlineprivate |
Definition at line 255 of file ROL_KLDivergence.hpp.
References ROL::ROL_INF().
Referenced by exponential().
|
private |
Definition at line 49 of file ROL_KLDivergence.hpp.
Referenced by checkInputs(), getGradient(), getHessVec(), getValue(), KLDivergence(), KLDivergence(), updateGradient(), updateHessVec(), and updateValue().
|
private |
Definition at line 51 of file ROL_KLDivergence.hpp.
Referenced by getGradient(), getHessVec(), initialize(), updateGradient(), and updateHessVec().
|
private |
Definition at line 52 of file ROL_KLDivergence.hpp.
Referenced by getHessVec(), initialize(), and updateHessVec().
|
private |
Definition at line 53 of file ROL_KLDivergence.hpp.
Referenced by getHessVec(), initialize(), and updateHessVec().
|
private |
Definition at line 54 of file ROL_KLDivergence.hpp.
Referenced by getHessVec(), initialize(), and updateHessVec().
|
private |
Definition at line 55 of file ROL_KLDivergence.hpp.
Referenced by getHessVec(), initialize(), and updateHessVec().
|
private |
Definition at line 57 of file ROL_KLDivergence.hpp.
Referenced by initialize(), KLDivergence(), and KLDivergence().