ROL
ROL_TrustRegionTypes.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 
15 #ifndef ROL_TRUSTREGIONTYPES_HPP
16 #define ROL_TRUSTREGIONTYPES_HPP
17 
18 #include "ROL_Types.hpp"
19 
20 namespace ROL {
21 
37  };
38 
39  inline std::string ETrustRegionToString(ETrustRegion tr) {
40  std::string retString;
41  switch(tr) {
42  case TRUSTREGION_CAUCHYPOINT: retString = "Cauchy Point"; break;
43  case TRUSTREGION_TRUNCATEDCG: retString = "Truncated CG"; break;
44  case TRUSTREGION_DOGLEG: retString = "Dogleg"; break;
45  case TRUSTREGION_DOUBLEDOGLEG: retString = "Double Dogleg"; break;
46  case TRUSTREGION_LINMORE: retString = "Lin-More"; break;
47  case TRUSTREGION_LAST: retString = "Last Type (Dummy)"; break;
48  default: retString = "INVALID ETrustRegion";
49  }
50  return retString;
51  }
52 
59  return( (ls == TRUSTREGION_CAUCHYPOINT) ||
60  (ls == TRUSTREGION_TRUNCATEDCG) ||
61  (ls == TRUSTREGION_DOGLEG) ||
62  (ls == TRUSTREGION_DOUBLEDOGLEG) ||
63  (ls == TRUSTREGION_LINMORE)
64  );
65  }
66 
68  return type = static_cast<ETrustRegion>(type+1);
69  }
70 
71  inline ETrustRegion operator++(ETrustRegion &type, int) {
72  ETrustRegion oldval = type;
73  ++type;
74  return oldval;
75  }
76 
78  return type = static_cast<ETrustRegion>(type-1);
79  }
80 
81  inline ETrustRegion operator--(ETrustRegion &type, int) {
82  ETrustRegion oldval = type;
83  --type;
84  return oldval;
85  }
86 
87  inline ETrustRegion StringToETrustRegion(std::string s) {
88  s = removeStringFormat(s);
89  for ( ETrustRegion tr = TRUSTREGION_CAUCHYPOINT; tr < TRUSTREGION_LAST; tr++ ) {
90  if ( !s.compare(removeStringFormat(ETrustRegionToString(tr))) ) {
91  return tr;
92  }
93  }
95  }
96 
108  };
109 
111  std::string retString;
112  switch(tr) {
113  case TRUSTREGION_MODEL_COLEMANLI: retString = "Coleman-Li"; break;
114  case TRUSTREGION_MODEL_KELLEYSACHS: retString = "Kelley-Sachs"; break;
115  case TRUSTREGION_MODEL_LINMORE: retString = "Lin-More"; break;
116  case TRUSTREGION_MODEL_LAST: retString = "Last Type (Dummy)"; break;
117  default: retString = "INVALID ETrustRegionModel";
118  }
119  return retString;
120  }
121 
128  return( (ls == TRUSTREGION_MODEL_COLEMANLI) ||
131  );
132  }
133 
135  return type = static_cast<ETrustRegionModel>(type+1);
136  }
137 
139  ETrustRegionModel oldval = type;
140  ++type;
141  return oldval;
142  }
143 
145  return type = static_cast<ETrustRegionModel>(type-1);
146  }
147 
149  ETrustRegionModel oldval = type;
150  --type;
151  return oldval;
152  }
153 
155  s = removeStringFormat(s);
157  if ( !s.compare(removeStringFormat(ETrustRegionModelToString(tr))) ) {
158  return tr;
159  }
160  }
162  }
163 
164  inline bool isValidTrustRegionSubproblem(ETrustRegion etr, ETrustRegionModel etrm, bool isBnd) {
165  if (etrm != TRUSTREGION_MODEL_LINMORE || !isBnd) {
166  switch(etr) {
167  case TRUSTREGION_CAUCHYPOINT: return true;
168  case TRUSTREGION_DOGLEG: return true;
169  case TRUSTREGION_DOUBLEDOGLEG: return true;
170  case TRUSTREGION_TRUNCATEDCG: return true;
171  case TRUSTREGION_LINMORE: return false;
172  default: return false;
173  }
174  }
175  else {
176  switch(etr) {
177  case TRUSTREGION_CAUCHYPOINT: return false;
178  case TRUSTREGION_DOGLEG: return false;
179  case TRUSTREGION_DOUBLEDOGLEG: return false;
180  case TRUSTREGION_TRUNCATEDCG: return false;
181  case TRUSTREGION_LINMORE: return true;
182  default: return false;
183  }
184  }
185  }
186 
206  };
207 
208 
209  inline std::string ETrustRegionFlagToString(ETrustRegionFlag trf) {
210  std::string retString;
211  switch(trf) {
213  retString = "Both actual and predicted reductions are positive (success)";
214  break;
216  retString = "Actual reduction is positive and predicted reduction is negative (impossible)";
217  break;
219  retString = "Actual reduction is nonpositive and predicted reduction is positive";
220  break;
222  retString = "Actual reduction is nonpositive and predicted reduction is negative (impossible)";
223  break;
225  retString = "Sufficient decrease of the quadratic model not met (bound constraints only)";
226  break;
228  retString = "Actual and/or predicted reduction is a NaN";
229  break;
230  default:
231  retString = "INVALID ETrustRegionFlag";
232  }
233  return retString;
234  }
235 
236 
237 
238 
239 
240 }
241 
242 #endif
std::string ETrustRegionModelToString(ETrustRegionModel tr)
EPolyProjAlgo & operator++(EPolyProjAlgo &type)
Contains definitions of custom data types in ROL.
std::string removeStringFormat(std::string s)
Definition: ROL_Types.hpp:215
bool isValidTrustRegionSubproblem(ETrustRegion etr, ETrustRegionModel etrm, bool isBnd)
int isValidTrustRegion(ETrustRegion ls)
Verifies validity of a TrustRegion enum.
EPolyProjAlgo & operator--(EPolyProjAlgo &type)
ETrustRegionModel StringToETrustRegionModel(std::string s)
ETrustRegionModel
Enumeration of trust-region model types.
ETrustRegion StringToETrustRegion(std::string s)
ETrustRegion
Enumeration of trust-region solver types.
std::string ETrustRegionFlagToString(ETrustRegionFlag trf)
ETrustRegionFlag
Enumation of flags used by trust-region solvers.
std::string ETrustRegionToString(ETrustRegion tr)
int isValidTrustRegionModel(ETrustRegionModel ls)
Verifies validity of a TrustRegionModel enum.