ROL
ROL_DeviationMeasureInfo.hpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // Rapid Optimization Library (ROL) Package
4 //
5 // Copyright 2014 NTESS and the ROL contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef ROL_DEVIATIONMEASUREINFO_HPP
11 #define ROL_DEVIATIONMEASUREINFO_HPP
12 
13 #include "ROL_ParameterList.hpp"
14 #include "ROL_Types.hpp"
15 
16 namespace ROL {
17 
18 template<class Real>
19 inline void DeviationMeasureInfo(ROL::ParameterList &parlist, std::string &name,
20  int &nStatistic, std::vector<Real> &lower,
21  std::vector<Real> &upper, bool &isBoundActivated,
22  const bool printToStream = false,
23  std::ostream &outStream = std::cout) {
24  name = parlist.sublist("SOL").sublist("Deviation Measure").get<std::string>("Name");
25  lower.clear(); upper.clear();
26  nStatistic = 0; isBoundActivated = false;
27  if ( name == "CVaR" ||
28  name == "Moreau-Yosida CVaR" ||
29  name == "Generalized Moreau-Yosida CVaR" ||
30  name == "Variance" ||
31  name == "Entropic" ||
32  name == "Log Quantile" ||
33  name == "Smoothed Upper Range" ||
34  name == "Truncated Mean" ) {
35  nStatistic = 1;
36  lower.resize(nStatistic,ROL_NINF<Real>());
37  upper.resize(nStatistic,ROL_INF<Real>());
38  }
39  else {
40  ROL_TEST_FOR_EXCEPTION(true,std::invalid_argument,
41  ">>> (ROL::DeviationMeasureInfo): Invalid deviation measure " << name << "!");
42  }
43 
44  // Print Information
45  if ( printToStream ) {
46  ROL::nullstream oldFormatState;
47  oldFormatState.copyfmt(outStream);
48 
49  outStream << std::endl;
50  outStream << std::scientific << std::setprecision(6);
51  outStream << std::setfill('-') << std::setw(80) << "-" << std::endl;
52  outStream << " DEVIATION MEASURE INFORMATION" << std::endl;
53  outStream << std::setfill('-') << std::setw(80) << "-" << std::endl;
54  outStream << " NAME" << std::endl;
55  outStream << " " << name << std::endl;
56  outStream << " NUMBER OF STATISTICS" << std::endl;
57  outStream << " " << nStatistic << std::endl;
58  outStream << " ARE BOUNDS ACTIVATED" << std::endl;
59  outStream << " " << (isBoundActivated ? "TRUE" : "FALSE") << std::endl;
60  if ( isBoundActivated ) {
61  outStream << " STATISTIC LOWER BOUNDS" << std::endl;
62  for (int i = 0; i < nStatistic-1; ++i) {
63  outStream << " " << lower[i] << std::endl;
64  }
65  outStream << " " << lower[nStatistic-1] << std::endl;
66  outStream << " STATISTIC UPPER BOUNDS" << std::endl;
67  for (int i = 0; i < nStatistic-1; ++i) {
68  outStream << " " << upper[i] << std::endl;
69  }
70  outStream << " " << upper[nStatistic-1] << std::endl;
71  }
72  outStream << std::setfill('-') << std::setw(80) << "-" << std::endl;
73  outStream << std::endl;
74 
75  outStream.copyfmt(oldFormatState);
76  }
77 }
78 
79 }
80 #endif
Contains definitions of custom data types in ROL.
basic_nullstream< char, std::char_traits< char >> nullstream
Definition: ROL_Stream.hpp:36
void DeviationMeasureInfo(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)