ROL
ROL_ValidParameters.hpp
Go to the documentation of this file.
1// @HEADER
2// ************************************************************************
3//
4// Rapid Optimization Library (ROL) Package
5// Copyright (2014) Sandia Corporation
6//
7// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8// license for use of this work by or on behalf of the U.S. Government.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions are
12// met:
13//
14// 1. Redistributions of source code must retain the above copyright
15// notice, this list of conditions and the following disclaimer.
16//
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// 3. Neither the name of the Corporation nor the names of the
22// contributors may be used to endorse or promote products derived from
23// this software without specific prior written permission.
24//
25// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36//
37// Questions? Contact lead developers:
38// Drew Kouri (dpkouri@sandia.gov) and
39// Denis Ridzal (dridzal@sandia.gov)
40//
41// ************************************************************************
42// @HEADER
43
44
45#ifndef ROL_VALID_PARAMETERS_H
46#define ROL_VALID_PARAMETERS_H
47
48#include "ROL_Types.hpp"
49#include "ROL_ParameterList.hpp"
50
51namespace ROL {
52
53/* ROL Parameters */
54
55inline ROL::Ptr<const ROL::ParameterList> getValidROLParameters() {
56
57 typedef ROL::ParameterList PL;
58
59 ROL::Ptr<PL> rol = ROL::makePtr<PL>("ROL");
60
61 /* ===== GENERAL INPUT PARAMETERS ============================ */
62 PL &general = rol->sublist("General");
63 general.set("Recompute Objective Function", false);
64 general.set("Scale for Epsilon Active Sets", 1.0 );
65
66 /* ----- INEXACT OBJECTIVE AND DERIVATIVES ----------------- */
67 general.set("Inexact Objective Function", false);
68 general.set("Inexact Gradient", false);
69 general.set("Inexact Hessian-Times-A-Vector", false);
70 general.set("Scale for Epsilon Active Sets", 1.0 );
71 general.set("Print Verbosity", 0 );
72
73 /* ----- BOUND CONSTRAINED CRITICALITY MEASURE --------------*/
74 general.set("Projected Gradient Criticality Measure", false);
75
76 /* ===== SECANT INPUTS ============================================================== */
77 PL &secant = general.sublist("Secant");
78 secant.set("Type", "Limited-Memory BFGS" );
79 secant.set("Use as Preconditioner", false );
80 secant.set("Use as Hessian", false );
81 secant.set("Maximum Storage", 10 );
82 secant.set("Barzilai-Borwein", 1 );
83 secant.set("User Defined Secant Name", "Unspecified User Defined Secant Method");
84
85 /* ===== KRYLOV INPUTS ========================================================== */
86 PL &krylov = general.sublist("Krylov");
87 krylov.set("Type", "Conjugate Gradients" );
88 krylov.set("Absolute Tolerance", 1.e-4 );
89 krylov.set("Relative Tolerance", 1.e-2 );
90 krylov.set("Iteration Limit", 100 );
91 krylov.set("User Defined Krylov Name", "Unspecified User Defined Krylov Method");
92
93 /* ===== STEP SUBLIST ============================================== */
94 PL &step = rol->sublist("Step");
95
96 // Used by OptimizationSolver to select a step
97 step.set("Type","Trust Region");
98
99 PL &linesearch = step.sublist("Line Search");
100 linesearch.set("Function Evaluation Limit", 20 );
101 linesearch.set("Sufficient Decrease Tolerance", 1e-4 );
102 linesearch.set("Use Previous Step Length as Initial Guess", false);
103 linesearch.set("Initial Step Size", 1.0 );
104 linesearch.set("User Defined Initial Step Size", false);
105 linesearch.set("Accept Linesearch Minimizer", false);
106 linesearch.set("Accept Last Alpha", false);
107
108 /* ===== DESCENT ALGORITHM SPECIFICATION =============== */
109 PL &descent = linesearch.sublist("Descent Method");
110 descent.set("Type", "Quasi-Newton Method");
111 descent.set("Nonlinear CG Type", "Oren-Luenberger ");
112
113 /* ===== CURVATURE CONDITION SPECIFICATION ============================= */
114 PL &curvature = linesearch.sublist("Curvature Condition");
115 curvature.set("Type", "Strong Wolfe Conditions");
116 curvature.set("General Parameter", 0.9 );
117 curvature.set("Generalized Wolfe Parameter", 0.6 );
118
119 /* ===== LINE-SEARCH ALGORITHM SPECIFICATION ======================================== */
120 PL &lsmethod = linesearch.sublist("Line-Search Method");
121 lsmethod.set("Type", "Cubic Interpolation");
122 lsmethod.set("Backtracking Rate", 0.5 );
123 lsmethod.set("Bracketing Tolerance", 1.e-8 );
124 lsmethod.set("User Defined Line-Search Name", "Unspecified User Defined Line-Search");
125
126 /* ===== BISECTION METHOD =============== */
127 PL &bisection = lsmethod.sublist("Bisection");
128 bisection.set("Tolerance", 1.e-10);
129 bisection.set("Iteration Limit", 1000 );
130
131 /* ===== BRENT'S METHOD ============ */
132 PL &brents = lsmethod.sublist("Brent's");
133 brents.set("Tolerance", 1.e-10);
134 brents.set("Iteration Limit", 1000 );
135 brents.set("Run Test Upon Initialization", true );
136
137 /* ===== GOLDEN SECTION =================== */
138 PL &golden = lsmethod.sublist("Golden Section");
139 golden.set("Tolerance", 1.e-10);
140 golden.set("Iteration Limit", 1000 );
141
142 /* ===== PATH-BASED TARGET LEVEL ======================= */
143 PL &pathtarg = lsmethod.sublist("Path-Based Target Level");
144 pathtarg.set("Target Relaxation Parameter", 1.0);
145 pathtarg.set("Upper Bound on Path Length", 1.0);
146
147 /* ===== TRUST REGION ================================================== */
148 PL &trustregion = step.sublist("Trust Region");
149 trustregion.set("Subproblem Solver", "Truncated CG" );
150 trustregion.set("Subproblem Model", "Kelley-Sachs" );
151 trustregion.set("Initial Radius", 10.0 );
152 trustregion.set("Maximum Radius", 5.e3 );
153 trustregion.set("Step Acceptance Threshold", 0.05 );
154 trustregion.set("Radius Shrinking Threshold", 0.05 );
155 trustregion.set("Radius Growing Threshold", 0.9 );
156 trustregion.set("Radius Shrinking Rate (Negative rho)", 0.0625 );
157 trustregion.set("Radius Shrinking Rate (Positive rho)", 0.25 );
158 trustregion.set("Radius Growing Rate", 2.5 );
159 trustregion.set("Sufficient Decrease Parameter", 1.e-2 );
160 trustregion.set("Safeguard Size", 1.e8 );
161
162 /* ===== POST-SMOOTHING SPECIFICATION ============= */
163 PL &smoothing = trustregion.sublist("Post-Smoothing");
164 smoothing.set("Function Evaluation Limit", 20 );
165 smoothing.set("Initial Step Size", 1.0 );
166 smoothing.set("Tolerance", 0.9999);
167 smoothing.set("Rate", 0.01 );
168
169 /* ===== COLEMAN-LI MODEL INPUTS ============ */
170 PL &coleman = trustregion.sublist("Coleman-Li");
171 coleman.set("Maximum Step Back", 0.9999);
172 coleman.set("Maximum Step Scale", 1.0 );
173 coleman.set("Single Reflection", true );
174
175 /* ===== CONTROLS FOR INEXACTNESS ======== */
176 PL &inexact = trustregion.sublist("Inexact");
177
178 /* ===== INEXACT OBJECTIVE VALUE UPDATE ============= */
179 PL &value = inexact.sublist("Value");
180 value.set("Tolerance Scaling", 1.e-1);
181 value.set("Exponent", 0.9 );
182 value.set("Forcing Sequence Initial Value", 1.0 );
183 value.set("Forcing Sequence Update Frequency", 10 );
184 value.set("Forcing Sequence Reduction Factor", 0.1 );
185
186 /* ===== INEXACT GRADIENT UPDATE ============ */
187 PL &gradient = inexact.sublist("Gradient");
188 gradient.set("Tolerance Scaling", 1.e-1);
189 gradient.set("Relative Tolerance", 2.0 );
190
191 /* ===== PRIMAL DUAL ACTIVE SET ==================== */
192 PL &activeset = step.sublist("Primal Dual Active Set");
193 activeset.set("Dual Scaling", 1.0 );
194 activeset.set("Iteration Limit", 10 );
195 activeset.set("Relative Step Tolerance", 1.e-8);
196 activeset.set("Relative Gradient Tolerance", 1.e-6);
197
198 /* ===== COMPOSITE STEP ==================== */
199 PL &composite = step.sublist("Composite Step");
200 composite.set("Output Level", 0);
201
202 /* ===== OPTIMALITY SYSTEM SOLVER ======================== */
203 PL &ossolver = composite.sublist("Optimality System Solver");
204 ossolver.set("Nominal Relative Tolerance", 1e-8);
205 ossolver.set("Fix Tolerance", true);
206
207 /* ===== TANGENTIAL SUBPROBLEM SOLVER ========================= */
208 PL &tansolver = composite.sublist("Tangential Subproblem Solver");
209 tansolver.set("Iteration Limit", 20 );
210 tansolver.set("Relative Tolerance", 1e-2);
211
212 /* ===== AUGMENTED LAGRANGIAN ======================= */
213 PL &auglag = step.sublist("Augmented Lagrangian");
214
215 auglag.set("Use Scaled Augmented Lagrangian", false);
216 auglag.set("Level of Hessian Approximation", 0);
217
218 /* ----- PENALTY PARAMETER UPDATE ----------------------------------- */
219 auglag.set("Initial Penalty Parameter", 1.e1 );
220 auglag.set("Penalty Parameter Growth Factor", 100.0 );
221 auglag.set("Penalty Parameter Reciprocal Lower Bound", 0.1 );
222 auglag.set("Maximum Penalty Parameter", 1.e8 );
223
224 /* ----- OPTIMALITY TOLERANCE UPDATE ------------------------------ */
225 auglag.set("Initial Optimality Tolerance", 1.0 );
226 auglag.set("Optimality Tolerance Update Exponent", 0.1 );
227 auglag.set("Optimality Tolerance Decrease Exponent", 0.9 );
228
229 /* ----- FEASIBILITY TOLERANCE UPDATE ----------------------------- */
230 auglag.set("Initial Feasibility Tolerance", 1.0 );
231 auglag.set("Feasibility Tolerance Update Exponent", 0.1 );
232 auglag.set("Feasibility Tolerance Decrease Exponent", 0.9 );
233
234 /* ===== SUBPROBLEM SOLVER ======================================== */
235 auglag.set("Print Intermediate Optimization History", false );
236 auglag.set("Subproblem Step Type", "Trust Region");
237 auglag.set("Subproblem Iteration Limit", 1000 );
238
239 /* ===== MOREAU-YOSIDA PENALTY =================== */
240 PL &moreau = step.sublist("Moreau-Yosida Penalty");
241 moreau.set("Initial Penalty Parameter", 1e2);
242 moreau.set("Penalty Parameter Growth Factor", 1.0);
243
244 /* ===== SUBPROBLEM SOLVER =============== */
245 PL &mysub = moreau.sublist("Subproblem");
246 mysub.set("Optimality Tolerance", 1.e-12);
247 mysub.set("Feasibility Tolerance", 1.e-12);
248 mysub.set("Print History", false );
249 mysub.set("Iteration Limit", 200 );
250
251 /* ===== BUNDLE METHOD =================================== */
252 PL &bundle = step.sublist("Bundle");
253
254 /* ----- TRUST-REGION RADIUS UPDATE -------------------- */
255 bundle.set("Initial Trust-Region Parameter", 1.e1 );
256 bundle.set("Maximum Trust-Region Parameter", 1.e8 );
257 bundle.set("Tolerance for Trust-Region Parameter", 1.e-4 );
258
259 /* ----- EPSILON SOLUTION STOPPING CONDITION ----------- */
260 bundle.set("Epsilon Solution Tolerance", 1.e-12);
261
262 /* ----- SERIOUS STEP PARAMETERS ----------------------- */
263 bundle.set("Upper Threshold for Serious Step", 1.e-1 );
264 bundle.set("Lower Threshold for Serious Step", 2.e-1 );
265 bundle.set("Upper Threshold for Null Step", 9.e-1 );
266
267 /* ----- BUNDLE INFORMATION ---------------------------- */
268 bundle.set("Distance Measure Coefficient", 1.e-6 );
269 bundle.set("Maximum Bundle Size", 50 );
270 bundle.set("Removal Size for Bundle Update", 2 );
271
272 /* ----- CUTTING PLANE SUBPROBLEM SOLVER --------------- */
273 bundle.set("Cutting Plane Tolerance", 1.e-8 );
274 bundle.set("Cutting Plane Iteration Limit", 1000 );
275
276 /* ===== STATUS TEST PARAMETERS ============ */
277 PL &status = rol->sublist("Status Test");
278 status.set("Gradient Tolerance", 1.e-10);
279 status.set("Constraint Tolerance", 1.e-10);
280 status.set("Step Tolerance", 1.e-14);
281 status.set("Iteration Limit", 1000 );
282
283
284 return rol;
285}
286
287
288/* SOL Parameters */
289
290inline ROL::Ptr<const ROL::ParameterList> getValidSOLParameters() {
291
292 typedef ROL::ParameterList PL;
293
294 ROL::Ptr<PL> sol = ROL::makePtr<PL>("SOL");
295
296 sol->set("Type", "Risk Neutral");
297 sol->set("Store Sampled Value and Gradient", true);
298
299 /* ===== RISK MEASURE ============== */
300 PL &risk = sol->sublist("Risk Measure");
301 risk.set("Name","CVaR");
302
303 /* ===== BPOE ================= */
304 PL &bpoe = risk.sublist("bPOE");
305 bpoe.set("Moment Order", 2.0);
306 bpoe.set("Threshold", 1.0);
307
308 /* ===== EXPONENTIAL UTILITY =============== */
309 PL &expo = risk.sublist("Exponential Utility");
310 expo.set("Rate", 2.0);
311
312 /* ===== KL DIVERGENCE ================ */
313 PL &kldiv = risk.sublist("KL Divergence");
314 kldiv.set("Threshold",1.e-2);
315
316 /* ===== CHI-SQUARED DIVERGENCE ===== */
317 PL &fdiv = risk.sublist("F-Divergence");
318 fdiv.set("Threshold",1.e-2);
319
320 /* ===== CVAR SUBLIST =============== */
321 PL &cvar = risk.sublist("CVaR");
322 cvar.set("Confidence Level", 0.8);
323 cvar.set("Convex Combination Parameter", 0.8);
324 cvar.set("Smoothing Parameter", 1.e-2);
325
326 PL &cvar_dist = cvar.sublist("Distribution");
327
328 cvar_dist.set("Name", "Parabolic");
329
330 PL &cvar_para = cvar_dist.sublist("Parbolic");
331 cvar_para.set("Lower Bound",-0.5);
332 cvar_para.set("Upper Bound", 0.5);
333
334 /* ===== HMCR SUBLIST =============== */
335 PL &hmcr = risk.sublist("HMCR");
336 hmcr.set("Confidence Level", 0.8 );
337 hmcr.set("Convex Combination Parameter", 0.8 );
338 hmcr.set("Order", 2 );
339 hmcr.set("Smoothing Parameter", 1.e-2);
340
341 PL &hmcr_dist = hmcr.sublist("Distribution");
342
343 hmcr_dist.set("Name", "Dirac");
344
345 PL &hmcr_dirac = hmcr_dist.sublist("Dirac");
346 hmcr_dirac.set("Location",0.0);
347
348
349
350 return sol;
351}
352
353
354} // namespace ROL
355
356#endif // ROL_VALID_PARAMETERS_H
357
358
359
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()