This file is indexed.

/usr/include/trilinos/ROL_ValidParameters.hpp is in libtrilinos-rol-dev 12.12.1-5.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
// @HEADER
// ************************************************************************
//
//               Rapid Optimization Library (ROL) Package
//                 Copyright (2014) Sandia Corporation
//
// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
// license for use of this work by or on behalf of the U.S. Government.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// 1. Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// 3. Neither the name of the Corporation nor the names of the
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Questions? Contact lead developers:
//              Drew Kouri   (dpkouri@sandia.gov) and
//              Denis Ridzal (dridzal@sandia.gov)
//
// ************************************************************************
// @HEADER


#ifndef ROL_VALID_PARAMETERS_H
#define ROL_VALID_PARAMETERS_H

#include "ROL_Types.hpp"
#include "Teuchos_ParameterList.hpp"

namespace ROL {

/* ROL Parameters */

inline Teuchos::RCP<const Teuchos::ParameterList> getValidROLParameters() {
  
  typedef Teuchos::ParameterList PL;

  Teuchos::RCP<PL> rol = Teuchos::rcp( new PL("ROL") );

  /* ===== GENERAL INPUT PARAMETERS ============================ */ 
  PL &general = rol->sublist("General");
    general.set("Recompute Objective Function",             false);
    general.set("Scale for Epsilon Active Sets",            1.0  );
    
    /* ----- INEXACT OBJECTIVE AND DERIVATIVES ----------------- */
    general.set("Inexact Objective Function",               false);
    general.set("Inexact Gradient",                         false);
    general.set("Inexact Hessian-Times-A-Vector",           false);
    general.set("Scale for Epsilon Active Sets",            1.0  );
    general.set("Print Verbosity",                          0    );
    
    /* ----- BOUND CONSTRAINED CRITICALITY MEASURE --------------*/
    general.set("Projected Gradient Criticality Measure",   false);
 
    /* ===== SECANT INPUTS ============================================================== */  
    PL &secant = general.sublist("Secant");
      secant.set("Type",                          "Limited-Memory BFGS"                   );
      secant.set("Use as Preconditioner",         false                                   );
      secant.set("Use as Hessian",                false                                   );
      secant.set("Maximum Storage",               10                                      );
      secant.set("Barzilai-Borwein",              1                                       );
      secant.set("User Defined Secant Name",      "Unspecified User Defined Secant Method");
    
    /* ===== KRYLOV INPUTS ========================================================== */
    PL &krylov = general.sublist("Krylov");
      krylov.set("Type",                      "Conjugate Gradients"                   );
      krylov.set("Absolute Tolerance",        1.e-4                                   );
      krylov.set("Relative Tolerance",        1.e-2                                   );
      krylov.set("Iteration Limit",           100                                     );
      krylov.set("User Defined Krylov Name",  "Unspecified User Defined Krylov Method");

  /* ===== STEP SUBLIST ============================================== */    
  PL &step = rol->sublist("Step");

    // Used by OptimizationSolver to select a step 
    step.set("Type","Trust Region");

    PL &linesearch = step.sublist("Line Search");
      linesearch.set("Function Evaluation Limit",                 20   );
      linesearch.set("Sufficient Decrease Tolerance",             1e-4 );
      linesearch.set("Use Previous Step Length as Initial Guess", false);
      linesearch.set("Initial Step Size",                         1.0  );
      linesearch.set("User Defined Initial Step Size",            false);
      linesearch.set("Accept Linesearch Minimizer",               false);
      linesearch.set("Accept Last Alpha",                         false);

      /* ===== DESCENT ALGORITHM SPECIFICATION =============== */
      PL &descent = linesearch.sublist("Descent Method");
        descent.set("Type",               "Quasi-Newton Method");
        descent.set("Nonlinear CG Type",  "Oren-Luenberger    ");

      /* ===== CURVATURE CONDITION SPECIFICATION ============================= */
      PL &curvature = linesearch.sublist("Curvature Condition");
        curvature.set("Type",                         "Strong Wolfe Conditions");
        curvature.set("General Parameter",            0.9                      );
        curvature.set("Generalized Wolfe Parameter",  0.6                      );
   
      /* ===== LINE-SEARCH ALGORITHM SPECIFICATION ======================================== */
      PL &lsmethod = linesearch.sublist("Line-Search Method");
        lsmethod.set("Type",                 "Cubic Interpolation");
        lsmethod.set("Backtracking Rate",    0.5                  );    
        lsmethod.set("Bracketing Tolerance", 1.e-8                );
        lsmethod.set("User Defined Line-Search Name", "Unspecified User Defined Line-Search");

        /* ===== BISECTION METHOD =============== */
        PL &bisection = lsmethod.sublist("Bisection");
        bisection.set("Tolerance",        1.e-10);
        bisection.set("Iteration Limit",  1000  );

        /* ===== BRENT'S METHOD ============ */
        PL &brents = lsmethod.sublist("Brent's");
        brents.set("Tolerance",                    1.e-10);
        brents.set("Iteration Limit",              1000  );
        brents.set("Run Test Upon Initialization", true  );

        /* ===== GOLDEN SECTION =================== */
        PL &golden = lsmethod.sublist("Golden Section");
        golden.set("Tolerance",        1.e-10);
        golden.set("Iteration Limit",  1000  );

        /* ===== PATH-BASED TARGET LEVEL ======================= */
        PL &pathtarg = lsmethod.sublist("Path-Based Target Level");
          pathtarg.set("Target Relaxation Parameter", 1.0);
          pathtarg.set("Upper Bound on Path Length",  1.0);

    /* ===== TRUST REGION ================================================== */
    PL &trustregion = step.sublist("Trust Region");
      trustregion.set("Subproblem Solver",                    "Truncation CG");
      trustregion.set("Subproblem Model",                     "Kelley-Sachs" );
      trustregion.set("Initial Radius",                       10.0           );
      trustregion.set("Maximum Radius",                       5.e3           );
      trustregion.set("Step Acceptance Threshold",            0.05           );
      trustregion.set("Radius Shrinking Threshold",           0.05           );
      trustregion.set("Radius Growing Threshold",             0.9            );
      trustregion.set("Radius Shrinking Rate (Negative rho)", 0.0625         ); 
      trustregion.set("Radius Shrinking Rate (Positive rho)", 0.25           );
      trustregion.set("Radius Growing Rate",                  2.5            );
      trustregion.set("Sufficient Decrease Parameter",        1.e-2          );
      trustregion.set("Safeguard Size",                       1.e8           );

      /* ===== POST-SMOOTHING SPECIFICATION ============= */ 
      PL &smoothing = trustregion.sublist("Post-Smoothing");
        smoothing.set("Function Evaluation Limit", 20    );
        smoothing.set("Initial Step Size",         1.0   );
        smoothing.set("Tolerance",                 0.9999);
        smoothing.set("Rate",                      0.01  );     
 
      /* ===== COLEMAN-LI MODEL INPUTS ============ */
      PL &coleman = trustregion.sublist("Coleman-Li");
        coleman.set("Maximum Step Back",  0.9999);
        coleman.set("Maximum Step Scale", 1.0   );
        coleman.set("Single Reflection",  true  );
 
      /* ===== CONTROLS FOR INEXACTNESS ======== */
      PL &inexact = trustregion.sublist("Inexact");
   
        /* ===== INEXACT OBJECTIVE VALUE UPDATE ============= */
        PL &value = inexact.sublist("Value");
          value.set("Tolerance Scaling",                 1.e-1);
          value.set("Exponent",                          0.9  );
          value.set("Forcing Sequence Initial Value",    1.0  );
          value.set("Forcing Sequence Update Frequency", 10   );
          value.set("Forcing Sequence Reduction Factor", 0.1  );

        /* ===== INEXACT GRADIENT UPDATE ============ */
        PL &gradient = inexact.sublist("Gradient");      
         gradient.set("Tolerance Scaling",       1.e-1);
         gradient.set("Relative Tolerance",      2.0  );

    /* ===== PRIMAL DUAL ACTIVE SET ==================== */
    PL &activeset = step.sublist("Primal Dual Active Set");
      activeset.set("Dual Scaling",                1.0  );
      activeset.set("Iteration Limit",             10   );
      activeset.set("Relative Step Tolerance",     1.e-8); 
      activeset.set("Relative Gradient Tolerance", 1.e-6);

    /* ===== COMPOSITE STEP ==================== */
    PL &composite = step.sublist("Composite Step");
      composite.set("Output Level",  0);

      /* ===== OPTIMALITY SYSTEM SOLVER ======================== */
      PL &ossolver = composite.sublist("Optimality System Solver");
        ossolver.set("Nominal Relative Tolerance",  1e-8);
        ossolver.set("Fix Tolerance",               true);

      /* ===== TANGENTIAL SUBPROBLEM SOLVER ========================= */
      PL &tansolver = composite.sublist("Tangential Subproblem Solver");
        tansolver.set("Iteration Limit",    20  );
        tansolver.set("Relative Tolerance", 1e-2);

    /* ===== AUGMENTED LAGRANGIAN ======================= */
    PL &auglag = step.sublist("Augmented Lagrangian");

      auglag.set("Use Scaled Augmented Lagrangian",  false);
      auglag.set("Level of Hessian Approximation",       0);

      /* ----- PENALTY PARAMETER UPDATE ----------------------------------- */
      auglag.set("Initial Penalty Parameter",                 1.e1          );
      auglag.set("Penalty Parameter Growth Factor",           100.0         );
      auglag.set("Penalty Parameter Reciprocal Lower Bound",  0.1           );
      auglag.set("Maximum Penalty Parameter",                 1.e8          );

      /* ----- OPTIMALITY TOLERANCE UPDATE ------------------------------ */
      auglag.set("Initial Optimality Tolerance",            1.0           );
      auglag.set("Optimality Tolerance Update Exponent",    0.1           );
      auglag.set("Optimality Tolerance Decrease Exponent",  0.9           );

      /* ----- FEASIBILITY TOLERANCE UPDATE ----------------------------- */
      auglag.set("Initial Feasibility Tolerance",           1.0           );
      auglag.set("Feasibility Tolerance Update Exponent",   0.1           );
      auglag.set("Feasibility Tolerance Decrease Exponent", 0.9           );

      /* ===== SUBPROBLEM SOLVER ======================================== */
      auglag.set("Print Intermediate Optimization History", false         );
      auglag.set("Subproblem Step Type",                    "Trust Region");
      auglag.set("Subproblem Iteration Limit",              1000          );

    /* ===== MOREAU-YOSIDA PENALTY =================== */
    PL &moreau = step.sublist("Moreau-Yosida Penalty");
      moreau.set("Initial Penalty Parameter",       1e2);
      moreau.set("Penalty Parameter Growth Factor", 1.0);

      /* ===== SUBPROBLEM SOLVER =============== */
      PL &mysub = moreau.sublist("Subproblem");
        mysub.set("Optimality Tolerance",  1.e-12);
        mysub.set("Feasibility Tolerance", 1.e-12);
        mysub.set("Print History",         false );
        mysub.set("Iteration Limit",       200   );        

    /* ===== BUNDLE METHOD =================================== */
    PL &bundle = step.sublist("Bundle");

      /* ----- TRUST-REGION RADIUS UPDATE -------------------- */
      bundle.set("Initial Trust-Region Parameter",       1.e1  );
      bundle.set("Maximum Trust-Region Parameter",       1.e8  );
      bundle.set("Tolerance for Trust-Region Parameter", 1.e-4 );

      /* ----- EPSILON SOLUTION STOPPING CONDITION ----------- */      
      bundle.set("Epsilon Solution Tolerance",           1.e-12);

      /* ----- SERIOUS STEP PARAMETERS ----------------------- */
      bundle.set("Upper Threshold for Serious Step",     1.e-1 );
      bundle.set("Lower Threshold for Serious Step",     2.e-1 );
      bundle.set("Upper Threshold for Null Step",        9.e-1 );

      /* ----- BUNDLE INFORMATION ---------------------------- */
      bundle.set("Distance Measure Coefficient",         1.e-6 );
      bundle.set("Maximum Bundle Size",                  50    );
      bundle.set("Removal Size for Bundle Update",       2     );

      /* ----- CUTTING PLANE SUBPROBLEM SOLVER --------------- */
      bundle.set("Cutting Plane Tolerance",              1.e-8 );
      bundle.set("Cutting Plane Iteration Limit",        1000  );

  /* ===== STATUS TEST PARAMETERS ============ */
  PL &status = rol->sublist("Status Test");     
    status.set("Gradient Tolerance",     1.e-10);
    status.set("Constraint Tolerance",   1.e-10);
    status.set("Step Tolerance",         1.e-14);
    status.set("Iteration Limit",        1000  );
 

  return rol;
}


/* SOL Parameters */

inline Teuchos::RCP<const Teuchos::ParameterList> getValidSOLParameters() {
  
  typedef Teuchos::ParameterList PL;

  Teuchos::RCP<PL> sol = Teuchos::rcp( new PL("SOL") );

  sol->set("Stochastic Optimization Type",  "Risk Neutral");
  sol->set("Store Sampled Value and Gradient", true);

  /* ===== BPOE ================= */
  PL &bpoe = sol->sublist("BPOE");
    bpoe.set("Moment Order",   2.0);
    bpoe.set("Threshold",      1.0);
    
  /* ===== RISK MEASURE ============== */
  PL &risk = sol->sublist("Risk Measure");
    risk.set("Name","CVaR");

    /* ===== EXPONENTIAL UTILITY =============== */
    PL &expo = risk.sublist("Exponential Utility");
      expo.set("Rate", 2.0);

    /* ===== KL DIVERGENCE ================ */
    PL &kldiv = risk.sublist("KL Divergence");
      kldiv.set("Threshold",1.e-2);
  
    /* ===== CHI-SQUARED DIVERGENCE ===== */
    PL &fdiv = risk.sublist("F-Divergence");
      fdiv.set("Threshold",1.e-2);

    /* ===== CVAR SUBLIST =============== */
    PL &cvar = risk.sublist("CVaR");
      cvar.set("Confidence Level",               0.8);
      cvar.set("Convex Combination Parameter",   0.8);
      cvar.set("Smoothing Parameter",          1.e-2);

      PL &cvar_dist = cvar.sublist("Distribution");
  
        cvar_dist.set("Name",  "Parabolic");

        PL &cvar_para = cvar_dist.sublist("Parbolic");
          cvar_para.set("Lower Bound",-0.5);
          cvar_para.set("Upper Bound", 0.5);
    
    /* ===== HMCR SUBLIST =============== */
    PL &hmcr = risk.sublist("HMCR");
      hmcr.set("Confidence Level",              0.8  );
      hmcr.set("Convex Combination Parameter",  0.8  );
      hmcr.set("Order",                         2    );
      hmcr.set("Smoothing Parameter",           1.e-2);

      PL &hmcr_dist = hmcr.sublist("Distribution");

        hmcr_dist.set("Name", "Dirac");

        PL &hmcr_dirac = hmcr_dist.sublist("Dirac");
          hmcr_dirac.set("Location",0.0);



  return sol;
}


} // namespace ROL

#endif // ROL_VALID_PARAMETERS_H