44 #ifndef ROL_RISKMEASUREINFO_HPP 45 #define ROL_RISKMEASUREINFO_HPP 47 #include "Teuchos_ParameterList.hpp" 54 int &nStatistic, std::vector<Real> &lower,
55 std::vector<Real> &upper,
bool &isBoundActivated,
56 const bool printToStream =
false,
57 std::ostream &outStream = std::cout) {
58 name = parlist.sublist(
"SOL").sublist(
"Risk Measure").get<std::string>(
"Name");
60 lower.clear(); upper.clear();
61 nStatistic = 0; isBoundActivated =
false;
62 if ( name ==
"CVaR" ||
64 name ==
"Moreau-Yosida CVaR" ||
65 name ==
"Log-Exponential Quadrangle" ||
66 name ==
"Log-Quantile Quadrangle" ||
67 name ==
"Mean-Variance Quadrangle" ||
68 name ==
"Quantile-Based Quadrangle" ||
69 name ==
"Smoothed Worst-Case Quadrangle" ||
70 name ==
"Truncated Mean Quadrangle" ) {
72 lower.resize(nStatistic,ROL_NINF<Real>());
73 upper.resize(nStatistic,ROL_INF<Real>());
75 else if ( name ==
"Quantile-Radius Quadrangle" ) {
77 lower.resize(nStatistic,ROL_NINF<Real>());
78 upper.resize(nStatistic,ROL_INF<Real>());
80 else if ( name ==
"Coherent Exponential Utility" ||
81 name ==
"KL Divergence" ) {
83 isBoundActivated =
true;
84 lower.resize(nStatistic,zero);
85 upper.resize(nStatistic,ROL_INF<Real>());
87 else if ( name ==
"Chi-Squared Divergence" ) {
89 isBoundActivated =
true;
90 lower.resize(nStatistic,ROL_NINF<Real>()); lower[0] = zero;
91 upper.resize(nStatistic,ROL_INF<Real>());
93 else if ( name ==
"Mixed-Quantile Quadrangle" ) {
94 Teuchos::ParameterList &list
95 = parlist.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"Mixed-Quantile Quadrangle");
96 Teuchos::Array<Real> prob
97 = Teuchos::getArrayFromStringParameter<Real>(list,
"Probability Array");
98 nStatistic = prob.size();
99 lower.resize(nStatistic,ROL_NINF<Real>());
100 upper.resize(nStatistic,ROL_INF<Real>());
102 else if ( name ==
"Super Quantile Quadrangle" ||
103 name ==
"Chebyshev-Kusuoka" ||
104 name ==
"Spectral Risk" ) {
105 Teuchos::ParameterList &list
106 = parlist.sublist(
"SOL").sublist(
"Risk Measure").sublist(name);
107 nStatistic = list.get(
"Number of Quadrature Points",5);
108 lower.resize(nStatistic,ROL_NINF<Real>());
109 upper.resize(nStatistic,ROL_INF<Real>());
111 else if ( name ==
"Exponential Utility" ||
112 name ==
"Mean Plus Deviation From Target" ||
113 name ==
"Mean Plus Deviation" ||
114 name ==
"Mean Plus Variance From Target" ||
115 name ==
"Mean Plus Variance" ) {
118 else if ( name ==
"Convex Combination Risk Measure" ) {
119 Teuchos::ParameterList &list
120 = parlist.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"Convex Combination Risk Measure");
122 Teuchos::Array<Real> lambda
123 = Teuchos::getArrayFromStringParameter<Real>(list,
"Convex Combination Parameters");
125 std::vector<std::string> riskString;
126 for (
typename Teuchos::Array<Real>::size_type i = 0; i < lambda.size(); ++i) {
127 std::ostringstream convert;
129 std::string si = convert.str();
130 Teuchos::ParameterList &ilist = list.sublist(si);
131 std::string name = ilist.get<std::string>(
"Name");
132 riskString.push_back(name);
134 for (
typename std::vector<Real>::size_type i = 0; i < riskString.size(); ++i) {
135 if ( riskString[i] ==
"CVaR" ||
136 riskString[i] ==
"HMCR" ||
137 riskString[i] ==
"Moreau-Yosida CVaR" ||
138 riskString[i] ==
"Log-Exponential Quadrangle" ||
139 riskString[i] ==
"Log-Quantile Quadrangle" ||
140 riskString[i] ==
"Mean-Variance Quadrangle" ||
141 riskString[i] ==
"Quantile-Based Quadrangle" ||
142 riskString[i] ==
"Smoothed Worst-Case Quadrangle" ||
143 riskString[i] ==
"Truncated Mean Quadrangle" ) {
145 lower.push_back(ROL_NINF<Real>());
146 upper.push_back(ROL_INF<Real>());
148 else if ( riskString[i] ==
"Quantile-Radius Quadrangle" ) {
150 lower.push_back(ROL_NINF<Real>()); lower.push_back(ROL_NINF<Real>());
151 upper.push_back(ROL_INF<Real>()); upper.push_back(ROL_INF<Real>());
153 else if ( riskString[i] ==
"Coherent Exponential Utility" ||
154 riskString[i] ==
"KL Divergence" ) {
156 isBoundActivated =
true;
157 lower.push_back(zero);
158 upper.push_back(ROL_INF<Real>());
160 else if ( riskString[i] ==
"Chi-Squared Divergence" ) {
162 isBoundActivated =
true;
163 lower.push_back(zero); lower.push_back(ROL_NINF<Real>());
164 upper.push_back(ROL_INF<Real>()); upper.push_back(ROL_INF<Real>());
166 else if ( riskString[i] ==
"Mixed-Quantile Quadrangle" ) {
167 Teuchos::ParameterList &MQlist = list.sublist(
"Mixed-Quantile Quadrangle");
168 Teuchos::Array<Real> prob
169 = Teuchos::getArrayFromStringParameter<Real>(MQlist,
"Probability Array");
170 nStatistic += prob.size();
171 for (
typename Teuchos::Array<Real>::size_type j = 0; j < prob.size(); ++j) {
172 lower.push_back(ROL_NINF<Real>());
173 upper.push_back(ROL_INF<Real>());
176 else if ( riskString[i] ==
"Super Quantile Quadrangle" ||
177 riskString[i] ==
"Chebyshev-Kusuoka" ||
178 riskString[i] ==
"Spectral Risk" ) {
179 Teuchos::ParameterList &SQlist = list.sublist(riskString[i]);
180 int nSQQstat = SQlist.get(
"Number of Quadrature Points",5);
181 nStatistic += nSQQstat;
182 for (
int j = 0; j < nSQQstat; ++j) {
183 lower.push_back(ROL_NINF<Real>());
184 upper.push_back(ROL_INF<Real>());
187 else if ( riskString[i] ==
"Exponential Utility" ||
188 riskString[i] ==
"Mean Plus Deviation From Target" ||
189 riskString[i] ==
"Mean Plus Deviation" ||
190 riskString[i] ==
"Mean Plus Variance From Target" ||
191 riskString[i] ==
"Mean Plus Variance" ) {
195 TEUCHOS_TEST_FOR_EXCEPTION(
true,std::invalid_argument,
196 ">>> (ROL::RiskMeasureInfo): Invalid risk measure " << riskString[i] <<
"!");
201 TEUCHOS_TEST_FOR_EXCEPTION(
true,std::invalid_argument,
202 ">>> (ROL::RiskMeasureInfo): Invalid risk measure " << name <<
"!");
206 if ( printToStream ) {
207 Teuchos::oblackholestream oldFormatState;
208 oldFormatState.copyfmt(outStream);
210 outStream << std::endl;
211 outStream << std::scientific << std::setprecision(6);
212 outStream << std::setfill(
'-') << std::setw(80) <<
"-" << std::endl;
213 outStream <<
" RISK MEASURE INFORMATION" << std::endl;
214 outStream << std::setfill(
'-') << std::setw(80) <<
"-" << std::endl;
215 outStream <<
" NAME" << std::endl;
216 outStream <<
" " << name << std::endl;
217 outStream <<
" NUMBER OF STATISTICS" << std::endl;
218 outStream <<
" " << nStatistic << std::endl;
219 outStream <<
" ARE BOUNDS ACTIVATED" << std::endl;
220 outStream <<
" " << (isBoundActivated ?
"TRUE" :
"FALSE") << std::endl;
221 if ( isBoundActivated ) {
222 outStream <<
" STATISTIC LOWER BOUNDS" << std::endl;
223 for (
int i = 0; i < nStatistic-1; ++i) {
224 outStream <<
" " << lower[i] << std::endl;
226 outStream <<
" " << lower[nStatistic-1] << std::endl;
227 outStream <<
" STATISTIC UPPER BOUNDS" << std::endl;
228 for (
int i = 0; i < nStatistic-1; ++i) {
229 outStream <<
" " << upper[i] << std::endl;
231 outStream <<
" " << upper[nStatistic-1] << std::endl;
233 outStream << std::setfill(
'-') << std::setw(80) <<
"-" << std::endl;
234 outStream << std::endl;
236 outStream.copyfmt(oldFormatState);
Contains definitions of custom data types in ROL.
void RiskMeasureInfo(Teuchos::ParameterList &parlist, std::string &name, int &nStatistic, std::vector< Real > &lower, std::vector< Real > &upper, bool &isBoundActivated, const bool printToStream=false, std::ostream &outStream=std::cout)