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
16namespace ROL {
17
18/* ROL Parameters */
19
20inline 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
255inline 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
Contains definitions of custom data types in ROL.
ROL::Objective_SerialSimOpt Objective_SimOpt value(const V &u, const V &z, Real &tol) override
ROL::Ptr< const ROL::ParameterList > getValidSOLParameters()
ROL::Ptr< const ROL::ParameterList > getValidROLParameters()