ROL
ROL_ValidParameters.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_VALID_PARAMETERS_H
11 #define ROL_VALID_PARAMETERS_H
12 
13 #include "ROL_Types.hpp"
14 #include "ROL_ParameterList.hpp"
15 
16 namespace ROL {
17 
18 /* ROL Parameters */
19 
20 inline ROL::Ptr<const ROL::ParameterList> getValidROLParameters() {
21 
22  typedef ROL::ParameterList PL;
23 
24  ROL::Ptr<PL> rol = ROL::makePtr<PL>("ROL");
25 
26  /* ===== GENERAL INPUT PARAMETERS ============================ */
27  PL &general = rol->sublist("General");
28  general.set("Recompute Objective Function", false);
29  general.set("Scale for Epsilon Active Sets", 1.0 );
30 
31  /* ----- INEXACT OBJECTIVE AND DERIVATIVES ----------------- */
32  general.set("Inexact Objective Function", false);
33  general.set("Inexact Gradient", false);
34  general.set("Inexact Hessian-Times-A-Vector", false);
35  general.set("Scale for Epsilon Active Sets", 1.0 );
36  general.set("Print Verbosity", 0 );
37 
38  /* ----- BOUND CONSTRAINED CRITICALITY MEASURE --------------*/
39  general.set("Projected Gradient Criticality Measure", false);
40 
41  /* ===== SECANT INPUTS ============================================================== */
42  PL &secant = general.sublist("Secant");
43  secant.set("Type", "Limited-Memory BFGS" );
44  secant.set("Use as Preconditioner", false );
45  secant.set("Use as Hessian", false );
46  secant.set("Maximum Storage", 10 );
47  secant.set("Barzilai-Borwein", 1 );
48  secant.set("User Defined Secant Name", "Unspecified User Defined Secant Method");
49 
50  /* ===== KRYLOV INPUTS ========================================================== */
51  PL &krylov = general.sublist("Krylov");
52  krylov.set("Type", "Conjugate Gradients" );
53  krylov.set("Absolute Tolerance", 1.e-4 );
54  krylov.set("Relative Tolerance", 1.e-2 );
55  krylov.set("Iteration Limit", 100 );
56  krylov.set("User Defined Krylov Name", "Unspecified User Defined Krylov Method");
57 
58  /* ===== STEP SUBLIST ============================================== */
59  PL &step = rol->sublist("Step");
60 
61  // Used by OptimizationSolver to select a step
62  step.set("Type","Trust Region");
63 
64  PL &linesearch = step.sublist("Line Search");
65  linesearch.set("Function Evaluation Limit", 20 );
66  linesearch.set("Sufficient Decrease Tolerance", 1e-4 );
67  linesearch.set("Use Previous Step Length as Initial Guess", false);
68  linesearch.set("Initial Step Size", 1.0 );
69  linesearch.set("User Defined Initial Step Size", false);
70  linesearch.set("Accept Linesearch Minimizer", false);
71  linesearch.set("Accept Last Alpha", false);
72 
73  /* ===== DESCENT ALGORITHM SPECIFICATION =============== */
74  PL &descent = linesearch.sublist("Descent Method");
75  descent.set("Type", "Quasi-Newton Method");
76  descent.set("Nonlinear CG Type", "Oren-Luenberger ");
77 
78  /* ===== CURVATURE CONDITION SPECIFICATION ============================= */
79  PL &curvature = linesearch.sublist("Curvature Condition");
80  curvature.set("Type", "Strong Wolfe Conditions");
81  curvature.set("General Parameter", 0.9 );
82  curvature.set("Generalized Wolfe Parameter", 0.6 );
83 
84  /* ===== LINE-SEARCH ALGORITHM SPECIFICATION ======================================== */
85  PL &lsmethod = linesearch.sublist("Line-Search Method");
86  lsmethod.set("Type", "Cubic Interpolation");
87  lsmethod.set("Backtracking Rate", 0.5 );
88  lsmethod.set("Bracketing Tolerance", 1.e-8 );
89  lsmethod.set("User Defined Line-Search Name", "Unspecified User Defined Line-Search");
90 
91  /* ===== BISECTION METHOD =============== */
92  PL &bisection = lsmethod.sublist("Bisection");
93  bisection.set("Tolerance", 1.e-10);
94  bisection.set("Iteration Limit", 1000 );
95 
96  /* ===== BRENT'S METHOD ============ */
97  PL &brents = lsmethod.sublist("Brent's");
98  brents.set("Tolerance", 1.e-10);
99  brents.set("Iteration Limit", 1000 );
100  brents.set("Run Test Upon Initialization", true );
101 
102  /* ===== GOLDEN SECTION =================== */
103  PL &golden = lsmethod.sublist("Golden Section");
104  golden.set("Tolerance", 1.e-10);
105  golden.set("Iteration Limit", 1000 );
106 
107  /* ===== PATH-BASED TARGET LEVEL ======================= */
108  PL &pathtarg = lsmethod.sublist("Path-Based Target Level");
109  pathtarg.set("Target Relaxation Parameter", 1.0);
110  pathtarg.set("Upper Bound on Path Length", 1.0);
111 
112  /* ===== TRUST REGION ================================================== */
113  PL &trustregion = step.sublist("Trust Region");
114  trustregion.set("Subproblem Solver", "Truncated CG" );
115  trustregion.set("Subproblem Model", "Kelley-Sachs" );
116  trustregion.set("Initial Radius", 10.0 );
117  trustregion.set("Maximum Radius", 5.e3 );
118  trustregion.set("Step Acceptance Threshold", 0.05 );
119  trustregion.set("Radius Shrinking Threshold", 0.05 );
120  trustregion.set("Radius Growing Threshold", 0.9 );
121  trustregion.set("Radius Shrinking Rate (Negative rho)", 0.0625 );
122  trustregion.set("Radius Shrinking Rate (Positive rho)", 0.25 );
123  trustregion.set("Radius Growing Rate", 2.5 );
124  trustregion.set("Sufficient Decrease Parameter", 1.e-2 );
125  trustregion.set("Safeguard Size", 1.e8 );
126 
127  /* ===== POST-SMOOTHING SPECIFICATION ============= */
128  PL &smoothing = trustregion.sublist("Post-Smoothing");
129  smoothing.set("Function Evaluation Limit", 20 );
130  smoothing.set("Initial Step Size", 1.0 );
131  smoothing.set("Tolerance", 0.9999);
132  smoothing.set("Rate", 0.01 );
133 
134  /* ===== COLEMAN-LI MODEL INPUTS ============ */
135  PL &coleman = trustregion.sublist("Coleman-Li");
136  coleman.set("Maximum Step Back", 0.9999);
137  coleman.set("Maximum Step Scale", 1.0 );
138  coleman.set("Single Reflection", true );
139 
140  /* ===== CONTROLS FOR INEXACTNESS ======== */
141  PL &inexact = trustregion.sublist("Inexact");
142 
143  /* ===== INEXACT OBJECTIVE VALUE UPDATE ============= */
144  PL &value = inexact.sublist("Value");
145  value.set("Tolerance Scaling", 1.e-1);
146  value.set("Exponent", 0.9 );
147  value.set("Forcing Sequence Initial Value", 1.0 );
148  value.set("Forcing Sequence Update Frequency", 10 );
149  value.set("Forcing Sequence Reduction Factor", 0.1 );
150 
151  /* ===== INEXACT GRADIENT UPDATE ============ */
152  PL &gradient = inexact.sublist("Gradient");
153  gradient.set("Tolerance Scaling", 1.e-1);
154  gradient.set("Relative Tolerance", 2.0 );
155 
156  /* ===== PRIMAL DUAL ACTIVE SET ==================== */
157  PL &activeset = step.sublist("Primal Dual Active Set");
158  activeset.set("Dual Scaling", 1.0 );
159  activeset.set("Iteration Limit", 10 );
160  activeset.set("Relative Step Tolerance", 1.e-8);
161  activeset.set("Relative Gradient Tolerance", 1.e-6);
162 
163  /* ===== COMPOSITE STEP ==================== */
164  PL &composite = step.sublist("Composite Step");
165  composite.set("Output Level", 0);
166 
167  /* ===== OPTIMALITY SYSTEM SOLVER ======================== */
168  PL &ossolver = composite.sublist("Optimality System Solver");
169  ossolver.set("Nominal Relative Tolerance", 1e-8);
170  ossolver.set("Fix Tolerance", true);
171 
172  /* ===== TANGENTIAL SUBPROBLEM SOLVER ========================= */
173  PL &tansolver = composite.sublist("Tangential Subproblem Solver");
174  tansolver.set("Iteration Limit", 20 );
175  tansolver.set("Relative Tolerance", 1e-2);
176 
177  /* ===== AUGMENTED LAGRANGIAN ======================= */
178  PL &auglag = step.sublist("Augmented Lagrangian");
179 
180  auglag.set("Use Scaled Augmented Lagrangian", false);
181  auglag.set("Level of Hessian Approximation", 0);
182 
183  /* ----- PENALTY PARAMETER UPDATE ----------------------------------- */
184  auglag.set("Initial Penalty Parameter", 1.e1 );
185  auglag.set("Penalty Parameter Growth Factor", 100.0 );
186  auglag.set("Penalty Parameter Reciprocal Lower Bound", 0.1 );
187  auglag.set("Maximum Penalty Parameter", 1.e8 );
188 
189  /* ----- OPTIMALITY TOLERANCE UPDATE ------------------------------ */
190  auglag.set("Initial Optimality Tolerance", 1.0 );
191  auglag.set("Optimality Tolerance Update Exponent", 0.1 );
192  auglag.set("Optimality Tolerance Decrease Exponent", 0.9 );
193 
194  /* ----- FEASIBILITY TOLERANCE UPDATE ----------------------------- */
195  auglag.set("Initial Feasibility Tolerance", 1.0 );
196  auglag.set("Feasibility Tolerance Update Exponent", 0.1 );
197  auglag.set("Feasibility Tolerance Decrease Exponent", 0.9 );
198 
199  /* ===== SUBPROBLEM SOLVER ======================================== */
200  auglag.set("Print Intermediate Optimization History", false );
201  auglag.set("Subproblem Step Type", "Trust Region");
202  auglag.set("Subproblem Iteration Limit", 1000 );
203 
204  /* ===== MOREAU-YOSIDA PENALTY =================== */
205  PL &moreau = step.sublist("Moreau-Yosida Penalty");
206  moreau.set("Initial Penalty Parameter", 1e2);
207  moreau.set("Penalty Parameter Growth Factor", 1.0);
208 
209  /* ===== SUBPROBLEM SOLVER =============== */
210  PL &mysub = moreau.sublist("Subproblem");
211  mysub.set("Optimality Tolerance", 1.e-12);
212  mysub.set("Feasibility Tolerance", 1.e-12);
213  mysub.set("Print History", false );
214  mysub.set("Iteration Limit", 200 );
215 
216  /* ===== BUNDLE METHOD =================================== */
217  PL &bundle = step.sublist("Bundle");
218 
219  /* ----- TRUST-REGION RADIUS UPDATE -------------------- */
220  bundle.set("Initial Trust-Region Parameter", 1.e1 );
221  bundle.set("Maximum Trust-Region Parameter", 1.e8 );
222  bundle.set("Tolerance for Trust-Region Parameter", 1.e-4 );
223 
224  /* ----- EPSILON SOLUTION STOPPING CONDITION ----------- */
225  bundle.set("Epsilon Solution Tolerance", 1.e-12);
226 
227  /* ----- SERIOUS STEP PARAMETERS ----------------------- */
228  bundle.set("Upper Threshold for Serious Step", 1.e-1 );
229  bundle.set("Lower Threshold for Serious Step", 2.e-1 );
230  bundle.set("Upper Threshold for Null Step", 9.e-1 );
231 
232  /* ----- BUNDLE INFORMATION ---------------------------- */
233  bundle.set("Distance Measure Coefficient", 1.e-6 );
234  bundle.set("Maximum Bundle Size", 50 );
235  bundle.set("Removal Size for Bundle Update", 2 );
236 
237  /* ----- CUTTING PLANE SUBPROBLEM SOLVER --------------- */
238  bundle.set("Cutting Plane Tolerance", 1.e-8 );
239  bundle.set("Cutting Plane Iteration Limit", 1000 );
240 
241  /* ===== STATUS TEST PARAMETERS ============ */
242  PL &status = rol->sublist("Status Test");
243  status.set("Gradient Tolerance", 1.e-10);
244  status.set("Constraint Tolerance", 1.e-10);
245  status.set("Step Tolerance", 1.e-14);
246  status.set("Iteration Limit", 1000 );
247 
248 
249  return rol;
250 }
251 
252 
253 /* SOL Parameters */
254 
255 inline ROL::Ptr<const ROL::ParameterList> getValidSOLParameters() {
256 
257  typedef ROL::ParameterList PL;
258 
259  ROL::Ptr<PL> sol = ROL::makePtr<PL>("SOL");
260 
261  sol->set("Type", "Risk Neutral");
262  sol->set("Store Sampled Value and Gradient", true);
263 
264  /* ===== RISK MEASURE ============== */
265  PL &risk = sol->sublist("Risk Measure");
266  risk.set("Name","CVaR");
267 
268  /* ===== BPOE ================= */
269  PL &bpoe = risk.sublist("bPOE");
270  bpoe.set("Moment Order", 2.0);
271  bpoe.set("Threshold", 1.0);
272 
273  /* ===== EXPONENTIAL UTILITY =============== */
274  PL &expo = risk.sublist("Exponential Utility");
275  expo.set("Rate", 2.0);
276 
277  /* ===== KL DIVERGENCE ================ */
278  PL &kldiv = risk.sublist("KL Divergence");
279  kldiv.set("Threshold",1.e-2);
280 
281  /* ===== CHI-SQUARED DIVERGENCE ===== */
282  PL &fdiv = risk.sublist("F-Divergence");
283  fdiv.set("Threshold",1.e-2);
284 
285  /* ===== CVAR SUBLIST =============== */
286  PL &cvar = risk.sublist("CVaR");
287  cvar.set("Confidence Level", 0.8);
288  cvar.set("Convex Combination Parameter", 0.8);
289  cvar.set("Smoothing Parameter", 1.e-2);
290 
291  PL &cvar_dist = cvar.sublist("Distribution");
292 
293  cvar_dist.set("Name", "Parabolic");
294 
295  PL &cvar_para = cvar_dist.sublist("Parbolic");
296  cvar_para.set("Lower Bound",-0.5);
297  cvar_para.set("Upper Bound", 0.5);
298 
299  /* ===== HMCR SUBLIST =============== */
300  PL &hmcr = risk.sublist("HMCR");
301  hmcr.set("Confidence Level", 0.8 );
302  hmcr.set("Convex Combination Parameter", 0.8 );
303  hmcr.set("Order", 2 );
304  hmcr.set("Smoothing Parameter", 1.e-2);
305 
306  PL &hmcr_dist = hmcr.sublist("Distribution");
307 
308  hmcr_dist.set("Name", "Dirac");
309 
310  PL &hmcr_dirac = hmcr_dist.sublist("Dirac");
311  hmcr_dirac.set("Location",0.0);
312 
313 
314 
315  return sol;
316 }
317 
318 
319 } // namespace ROL
320 
321 #endif // ROL_VALID_PARAMETERS_H
322 
323 
324 
ROL::Ptr< const ROL::ParameterList > getValidROLParameters()
Contains definitions of custom data types in ROL.
ROL::Objective_SimOpt value
ROL::Ptr< const ROL::ParameterList > getValidSOLParameters()