44 #ifndef ROL_RISKMEASUREINFO_HPP 45 #define ROL_RISKMEASUREINFO_HPP 47 #include "ROL_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 ==
"Generalized Moreau-Yosida CVaR" ||
66 name ==
"Log Quantile" ||
67 name ==
"Smoothed Worst Case" ||
68 name ==
"Safety Margin" ||
69 name ==
"Log Exponential" ||
70 name ==
"Truncated Mean" ) {
72 lower.resize(nStatistic,ROL_NINF<Real>());
73 upper.resize(nStatistic,ROL_INF<Real>());
75 else if ( name ==
"Quantile Radius" ) {
77 lower.resize(nStatistic,ROL_NINF<Real>());
78 upper.resize(nStatistic,ROL_INF<Real>());
80 else if ( name ==
"Coherent Entropic Risk" ||
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 CVaR" ) {
94 ROL::ParameterList &list
95 = parlist.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"Mixed CVaR");
96 std::vector<Real> prob
97 = ROL::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 ==
"Second Order CVaR" ||
103 name ==
"Chebyshev Spectral Risk" ||
104 name ==
"Spectral Risk" ) {
105 ROL::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 ==
"Entropic Risk" ||
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 ROL::ParameterList &list
120 = parlist.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"Convex Combination Risk Measure");
122 std::vector<Real> lambda
123 = ROL::getArrayFromStringParameter<Real>(list,
"Convex Combination Parameters");
125 std::vector<std::string> riskString;
127 std::ostringstream convert;
129 std::string si = convert.str();
130 ROL::ParameterList &ilist = list.sublist(si);
131 std::string namei = ilist.get<std::string>(
"Name");
132 riskString.push_back(namei);
135 if ( riskString[i] ==
"CVaR" ||
136 riskString[i] ==
"HMCR" ||
137 riskString[i] ==
"Moreau-Yosida CVaR" ||
138 riskString[i] ==
"Generalized Moreau-Yosida CVaR" ||
139 riskString[i] ==
"Log Quantile" ||
140 riskString[i] ==
"Smoothed Worst Case" ||
141 riskString[i] ==
"Safety Margin" ||
142 riskString[i] ==
"Log Exponential" ||
143 riskString[i] ==
"Truncated Mean" ) {
145 lower.push_back(ROL_NINF<Real>());
146 upper.push_back(ROL_INF<Real>());
148 else if ( riskString[i] ==
"Quantile Radius" ) {
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 Entropic Risk" ||
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 CVaR" ) {
167 ROL::ParameterList &MQlist = list.sublist(
"Mixed CVaR");
168 std::vector<Real> prob
169 = ROL::getArrayFromStringParameter<Real>(MQlist,
"Probability Array");
170 nStatistic += prob.size();
172 lower.push_back(ROL_NINF<Real>());
173 upper.push_back(ROL_INF<Real>());
176 else if ( riskString[i] ==
"Second Order CVaR" ||
177 riskString[i] ==
"Chebyshev Spectral Risk" ||
178 riskString[i] ==
"Spectral Risk" ) {
179 ROL::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] ==
"Entropic Risk" ||
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 ROL_TEST_FOR_EXCEPTION(
true,std::invalid_argument,
196 ">>> (ROL::RiskMeasureInfo): Invalid risk measure " << riskString[i] <<
"!");
201 ROL_TEST_FOR_EXCEPTION(
true,std::invalid_argument,
202 ">>> (ROL::RiskMeasureInfo): Invalid risk measure " << name <<
"!");
206 if ( printToStream ) {
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);
typename PV< Real >::size_type size_type
void RiskMeasureInfo(ROL::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)
basic_nullstream< char, char_traits< char > > nullstream
Contains definitions of custom data types in ROL.
Objective_SerialSimOpt(const Ptr< Obj > &obj, const V &ui) z0_ zero()