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 
51 namespace ROL {
52 
53 /* ROL Parameters */
54 
55 inline 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", "Truncation 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 
290 inline 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("Stochastic Component 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 
ROL::Ptr< const ROL::ParameterList > getValidROLParameters()
Contains definitions of custom data types in ROL.
ROL::Objective_SimOpt value
ROL::Ptr< const ROL::ParameterList > getValidSOLParameters()