Optimize

Executioner for optimization problems.

Overview

This is executioner performs optimization using the TAO optimization toolkit. The specific algorithm used is specified using the "tao_solver" parameter. The options and connection with TAO algorithms is shown in Table 1. Additional solver options can be given to the TAO solver using the "petsc_options", "petsc_options_iname", and "petsc_options_value" parameters or from command-line.

Table 1: List of available optimization algorithms

Algorithm"tao_solver"TAO Optiontao_type
Newton Trust RegiontaontrTAONTRntr
Bounded Newton Trust RegiontaobntrTAOBNTRbntr
Bounded Conjugate GradienttaobncgTAOBNCGbncg
Newton Line SearchtaonlsTAONLSnls
Bounded Newton Line SearchtaobnlsTAOBNLSbnls
Limited Memory Variable MetrictaolmvmTAOLMVMlmvm
Bounded Limited Memory Variable MetrictaoblmvmTAOBLMVMblmvm
Nelder-MeadtaonmTAONMnm
Bounded Quasi-Newton Line SearchtaobqnlsTAOBQNLSbqnls
Orthant-wise Limited MemorytaoowlqnTAOOWLQNtaoowlqn
Gradient Projection Conjugate GradienttaogpcgTAOGPCGgpcg
Bundle Method for Regularized Risk MinimizationtaobmrmTAOBMRMbmrm
Augmented Lagrangian Multiplier MethodtaoalmmTAOALMMalmm

This executioner relies on a OptimizationReporter to define the constraints, bounds, objective, and gradient of the form function. The objective is defined by the computeObjective member in the OptimizationReporter class. The gradient is defined by computeGradient and the bounds are defined by getUpperBounds and getLowerBounds. Whether it is necessary to define each of these members is based on whether the selected algorithm needs it, see Summary of Tao Solvers for more information. The Hessian is computed using a matrix-free method, where it evaluates the action of the Hessian on the form function parameters (the values that are being optimized). It does this by evaluating a homogeneous version of the objective function and subsequently computes the gradient. For constrained optimization the taoalmm algorithm needs to be used. When the taoalmm algorithm is selected the necessary methods for that algorithm are generated and only in an OptimizationReporter does the user need to provide the type and number of constraints.

To aid in the computation of the objective, gradient, and Hessian, this executioner includes additional execution flags that MOOSE objects (like MultiApps) can be evaluated on. Having execute_on = forward will execute the object(s) just before computeObjective is called and execute_on = adjoint will execute the object()s just before computeGradient is called. Having execute_on = homogeneous_forward will execute the object(s) during the matrix-free Hessian computation, before calling adjoint and computeGradient.

The form function's parameters are represented as a vector of values and is tied to reporter values within the OptimizationReporter.

Example Input Syntax

The following performs optimization using th Newton line search algorithm. The additional options set the optimization tolerance to , set the max iterations to 10, and set the linear solver type to conjugate gradient with no preconditioning.

[Executioner]
  type = Optimize
  tao_solver = taonls
  petsc_options_iname = '-tao_gttol -tao_max_it -tao_nls_pc_type -tao_nls_ksp_type'
  petsc_options_value = '1e-5 10 none cg'
  verbose = true
[]
(modules/optimization/test/tests/optimizationreporter/point_loads/main.i)

Input Parameters

  • tao_solverTao solver to use for optimization.

    C++ Type:MooseEnum

    Unit:(no unit assumed)

    Options:taontr, taobntr, taobncg, taonls, taobnls, taobqnktr, taontl, taobntl, taolmvm, taoblmvm, taonm, taobqnls, taoowlqn, taogpcg, taobmrm, taoalmm

    Controllable:No

    Description:Tao solver to use for optimization.

Required Parameters

  • output_optimization_iterationsFalseUse the time step as the current iteration for outputting optimization history.

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Use the time step as the current iteration for outputting optimization history.

  • solve_onFORWARD ADJOINT HOMOGENEOUS_FORWARDList of flags indicating when inner system solve should occur.

    Default:FORWARD ADJOINT HOMOGENEOUS_FORWARD

    C++ Type:ExecFlagEnum

    Unit:(no unit assumed)

    Options:FORWARD, ADJOINT, HOMOGENEOUS_FORWARD, NONE

    Controllable:No

    Description:List of flags indicating when inner system solve should occur.

  • time0System time

    Default:0

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:System time

  • verboseFalseSet to true to print additional information

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Set to true to print additional information

Optional Parameters

  • accept_on_max_fixed_point_iterationFalseTrue to treat reaching the maximum number of fixed point iterations as converged.

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:True to treat reaching the maximum number of fixed point iterations as converged.

  • auto_advanceFalseWhether to automatically advance sub-applications regardless of whether their solve converges, for transient executioners only.

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Whether to automatically advance sub-applications regardless of whether their solve converges, for transient executioners only.

  • custom_abs_tol1e-50The absolute nonlinear residual to shoot for during fixed point iterations. This check is performed based on postprocessor defined by the custom_pp residual.

    Default:1e-50

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The absolute nonlinear residual to shoot for during fixed point iterations. This check is performed based on postprocessor defined by the custom_pp residual.

  • custom_ppPostprocessor for custom fixed point convergence check.

    C++ Type:PostprocessorName

    Unit:(no unit assumed)

    Controllable:No

    Description:Postprocessor for custom fixed point convergence check.

  • custom_rel_tol1e-08The relative nonlinear residual drop to shoot for during fixed point iterations. This check is performed based on the postprocessor defined by custom_pp residual.

    Default:1e-08

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The relative nonlinear residual drop to shoot for during fixed point iterations. This check is performed based on the postprocessor defined by custom_pp residual.

  • direct_pp_valueFalseTrue to use direct postprocessor value (scaled by value on first iteration). False (default) to use difference in postprocessor value between fixed point iterations.

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:True to use direct postprocessor value (scaled by value on first iteration). False (default) to use difference in postprocessor value between fixed point iterations.

  • disable_fixed_point_residual_norm_checkFalseDisable the residual norm evaluation thus the three parameters fixed_point_rel_tol, fixed_point_abs_tol and fixed_point_force_norms.

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Disable the residual norm evaluation thus the three parameters fixed_point_rel_tol, fixed_point_abs_tol and fixed_point_force_norms.

  • fixed_point_abs_tol1e-50The absolute nonlinear residual to shoot for during fixed point iterations. This check is performed based on the main app's nonlinear residual.

    Default:1e-50

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The absolute nonlinear residual to shoot for during fixed point iterations. This check is performed based on the main app's nonlinear residual.

  • fixed_point_algorithmpicardThe fixed point algorithm to converge the sequence of problems.

    Default:picard

    C++ Type:MooseEnum

    Unit:(no unit assumed)

    Options:picard, secant, steffensen

    Controllable:No

    Description:The fixed point algorithm to converge the sequence of problems.

  • fixed_point_force_normsFalseForce the evaluation of both the TIMESTEP_BEGIN and TIMESTEP_END norms regardless of the existence of active MultiApps with those execute_on flags, default: false.

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Force the evaluation of both the TIMESTEP_BEGIN and TIMESTEP_END norms regardless of the existence of active MultiApps with those execute_on flags, default: false.

  • fixed_point_max_its1Specifies the maximum number of fixed point iterations.

    Default:1

    C++ Type:unsigned int

    Unit:(no unit assumed)

    Controllable:No

    Description:Specifies the maximum number of fixed point iterations.

  • fixed_point_min_its1Specifies the minimum number of fixed point iterations.

    Default:1

    C++ Type:unsigned int

    Unit:(no unit assumed)

    Controllable:No

    Description:Specifies the minimum number of fixed point iterations.

  • fixed_point_rel_tol1e-08The relative nonlinear residual drop to shoot for during fixed point iterations. This check is performed based on the main app's nonlinear residual.

    Default:1e-08

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The relative nonlinear residual drop to shoot for during fixed point iterations. This check is performed based on the main app's nonlinear residual.

  • relaxation_factor1Fraction of newly computed value to keep.Set between 0 and 2.

    Default:1

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Fraction of newly computed value to keep.Set between 0 and 2.

  • transformed_postprocessorsList of main app postprocessors to transform during fixed point iterations

    C++ Type:std::vector<PostprocessorName>

    Unit:(no unit assumed)

    Controllable:No

    Description:List of main app postprocessors to transform during fixed point iterations

  • transformed_variablesList of main app variables to transform during fixed point iterations

    C++ Type:std::vector<std::string>

    Unit:(no unit assumed)

    Controllable:No

    Description:List of main app variables to transform during fixed point iterations

Fixed Point Iterations Parameters

  • automatic_scalingFalseWhether to use automatic scaling for the variables.

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Whether to use automatic scaling for the variables.

  • compute_scaling_onceTrueWhether the scaling factors should only be computed once at the beginning of the simulation through an extra Jacobian evaluation. If this is set to false, then the scaling factors will be computed during an extra Jacobian evaluation at the beginning of every time step.

    Default:True

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Whether the scaling factors should only be computed once at the beginning of the simulation through an extra Jacobian evaluation. If this is set to false, then the scaling factors will be computed during an extra Jacobian evaluation at the beginning of every time step.

  • ignore_variables_for_autoscalingList of variables that do not participate in autoscaling.

    C++ Type:std::vector<std::string>

    Unit:(no unit assumed)

    Controllable:No

    Description:List of variables that do not participate in autoscaling.

  • off_diagonals_in_auto_scalingFalseWhether to consider off-diagonals when determining automatic scaling factors.

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Whether to consider off-diagonals when determining automatic scaling factors.

  • resid_vs_jac_scaling_param0A parameter that indicates the weighting of the residual vs the Jacobian in determining variable scaling parameters. A value of 1 indicates pure residual-based scaling. A value of 0 indicates pure Jacobian-based scaling

    Default:0

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:A parameter that indicates the weighting of the residual vs the Jacobian in determining variable scaling parameters. A value of 1 indicates pure residual-based scaling. A value of 0 indicates pure Jacobian-based scaling

  • scaling_group_variablesName of variables that are grouped together for determining scale factors. (Multiple groups can be provided, separated by semicolon)

    C++ Type:std::vector<std::vector<std::string>>

    Unit:(no unit assumed)

    Controllable:No

    Description:Name of variables that are grouped together for determining scale factors. (Multiple groups can be provided, separated by semicolon)

Solver Variable Scaling Parameters

  • contact_line_search_allowed_lambda_cuts2The number of times lambda is allowed to be cut in half in the contact line search. We recommend this number be roughly bounded by 0 <= allowed_lambda_cuts <= 3

    Default:2

    C++ Type:unsigned int

    Unit:(no unit assumed)

    Controllable:No

    Description:The number of times lambda is allowed to be cut in half in the contact line search. We recommend this number be roughly bounded by 0 <= allowed_lambda_cuts <= 3

  • contact_line_search_ltolThe linear relative tolerance to be used while the contact state is changing between non-linear iterations. We recommend that this tolerance be looser than the standard linear tolerance

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The linear relative tolerance to be used while the contact state is changing between non-linear iterations. We recommend that this tolerance be looser than the standard linear tolerance

  • line_searchdefaultSpecifies the line search type (Note: none = basic)

    Default:default

    C++ Type:MooseEnum

    Unit:(no unit assumed)

    Options:basic, bt, contact, cp, default, l2, none, project, shell

    Controllable:No

    Description:Specifies the line search type (Note: none = basic)

  • line_search_packagepetscThe solver package to use to conduct the line-search

    Default:petsc

    C++ Type:MooseEnum

    Unit:(no unit assumed)

    Options:petsc, moose

    Controllable:No

    Description:The solver package to use to conduct the line-search

Solver Line Search Parameters

  • control_tagsAdds user-defined labels for accessing object parameters via control logic.

    C++ Type:std::vector<std::string>

    Unit:(no unit assumed)

    Controllable:No

    Description:Adds user-defined labels for accessing object parameters via control logic.

  • enableTrueSet the enabled status of the MooseObject.

    Default:True

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Set the enabled status of the MooseObject.

  • outputsVector of output names where you would like to restrict the output of variables(s) associated with this object

    C++ Type:std::vector<OutputName>

    Unit:(no unit assumed)

    Controllable:No

    Description:Vector of output names where you would like to restrict the output of variables(s) associated with this object

  • skip_exception_checkFalseSpecifies whether or not to skip exception check

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Specifies whether or not to skip exception check

Advanced Parameters

  • l_abs_tol1e-50Linear Absolute Tolerance

    Default:1e-50

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Linear Absolute Tolerance

  • l_max_its10000Max Linear Iterations

    Default:10000

    C++ Type:unsigned int

    Unit:(no unit assumed)

    Controllable:No

    Description:Max Linear Iterations

  • l_tol1e-05Linear Relative Tolerance

    Default:1e-05

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Linear Relative Tolerance

  • reuse_preconditionerFalseIf true reuse the previously calculated preconditioner for the linearized system across multiple solves spanning nonlinear iterations and time steps. The preconditioner resets as controlled by reuse_preconditioner_max_linear_its

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:If true reuse the previously calculated preconditioner for the linearized system across multiple solves spanning nonlinear iterations and time steps. The preconditioner resets as controlled by reuse_preconditioner_max_linear_its

  • reuse_preconditioner_max_linear_its25Reuse the previously calculated preconditioner for the linear system until the number of linear iterations exceeds this number

    Default:25

    C++ Type:unsigned int

    Unit:(no unit assumed)

    Controllable:No

    Description:Reuse the previously calculated preconditioner for the linear system until the number of linear iterations exceeds this number

Linear Solver Parameters

  • max_xfem_update4294967295Maximum number of times to update XFEM crack topology in a step due to evolving cracks

    Default:4294967295

    C++ Type:unsigned int

    Unit:(no unit assumed)

    Controllable:No

    Description:Maximum number of times to update XFEM crack topology in a step due to evolving cracks

  • update_xfem_at_timestep_beginFalseShould XFEM update the mesh at the beginning of the timestep

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Should XFEM update the mesh at the beginning of the timestep

Xfem Fixed Point Iterations Parameters

  • mffd_typewpSpecifies the finite differencing type for Jacobian-free solve types. Note that the default is wp (for Walker and Pernice).

    Default:wp

    C++ Type:MooseEnum

    Unit:(no unit assumed)

    Options:wp, ds

    Controllable:No

    Description:Specifies the finite differencing type for Jacobian-free solve types. Note that the default is wp (for Walker and Pernice).

  • petsc_optionsSingleton PETSc options

    C++ Type:MultiMooseEnum

    Unit:(no unit assumed)

    Options:-dm_moose_print_embedding, -dm_view, -ksp_converged_reason, -ksp_gmres_modifiedgramschmidt, -ksp_monitor, -ksp_monitor_snes_lg-snes_ksp_ew, -ksp_snes_ew, -snes_converged_reason, -snes_ksp, -snes_ksp_ew, -snes_linesearch_monitor, -snes_mf, -snes_mf_operator, -snes_monitor, -snes_test_display, -snes_view

    Controllable:No

    Description:Singleton PETSc options

  • petsc_options_inameNames of PETSc name/value pairs

    C++ Type:MultiMooseEnum

    Unit:(no unit assumed)

    Options:-ksp_atol, -ksp_gmres_restart, -ksp_max_it, -ksp_pc_side, -ksp_rtol, -ksp_type, -mat_fd_coloring_err, -mat_fd_type, -mat_mffd_type, -pc_asm_overlap, -pc_factor_levels, -pc_factor_mat_ordering_type, -pc_hypre_boomeramg_grid_sweeps_all, -pc_hypre_boomeramg_max_iter, -pc_hypre_boomeramg_strong_threshold, -pc_hypre_type, -pc_type, -snes_atol, -snes_linesearch_type, -snes_ls, -snes_max_it, -snes_rtol, -snes_divergence_tolerance, -snes_type, -sub_ksp_type, -sub_pc_type

    Controllable:No

    Description:Names of PETSc name/value pairs

  • petsc_options_valueValues of PETSc name/value pairs (must correspond with "petsc_options_iname"

    C++ Type:std::vector<std::string>

    Unit:(no unit assumed)

    Controllable:No

    Description:Values of PETSc name/value pairs (must correspond with "petsc_options_iname"

Petsc Parameters

  • n_max_nonlinear_pingpong100The maximum number of times the nonlinear residual can ping pong before requesting halting the current evaluation and requesting timestep cut

    Default:100

    C++ Type:unsigned int

    Unit:(no unit assumed)

    Controllable:No

    Description:The maximum number of times the nonlinear residual can ping pong before requesting halting the current evaluation and requesting timestep cut

  • nl_abs_div_tol1e+50Nonlinear Absolute Divergence Tolerance. A negative value disables this check.

    Default:1e+50

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Nonlinear Absolute Divergence Tolerance. A negative value disables this check.

  • nl_abs_step_tol0Nonlinear Absolute step Tolerance

    Default:0

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Nonlinear Absolute step Tolerance

  • nl_abs_tol1e-50Nonlinear Absolute Tolerance

    Default:1e-50

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Nonlinear Absolute Tolerance

  • nl_div_tol1e+10Nonlinear Relative Divergence Tolerance. A negative value disables this check.

    Default:1e+10

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Nonlinear Relative Divergence Tolerance. A negative value disables this check.

  • nl_forced_its0The Number of Forced Nonlinear Iterations

    Default:0

    C++ Type:unsigned int

    Unit:(no unit assumed)

    Controllable:No

    Description:The Number of Forced Nonlinear Iterations

  • nl_max_funcs10000Max Nonlinear solver function evaluations

    Default:10000

    C++ Type:unsigned int

    Unit:(no unit assumed)

    Controllable:No

    Description:Max Nonlinear solver function evaluations

  • nl_max_its50Max Nonlinear Iterations

    Default:50

    C++ Type:unsigned int

    Unit:(no unit assumed)

    Controllable:No

    Description:Max Nonlinear Iterations

  • nl_rel_step_tol0Nonlinear Relative step Tolerance

    Default:0

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Nonlinear Relative step Tolerance

  • nl_rel_tol1e-08Nonlinear Relative Tolerance

    Default:1e-08

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Nonlinear Relative Tolerance

  • num_grids1The number of grids to use for a grid sequencing algorithm. This includes the final grid, so num_grids = 1 indicates just one solve in a time-step

    Default:1

    C++ Type:unsigned int

    Unit:(no unit assumed)

    Controllable:No

    Description:The number of grids to use for a grid sequencing algorithm. This includes the final grid, so num_grids = 1 indicates just one solve in a time-step

  • residual_and_jacobian_togetherFalseWhether to compute the residual and Jacobian together.

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Whether to compute the residual and Jacobian together.

  • snesmf_reuse_baseTrueSpecifies whether or not to reuse the base vector for matrix-free calculation

    Default:True

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Specifies whether or not to reuse the base vector for matrix-free calculation

  • solve_typePJFNK: Preconditioned Jacobian-Free Newton Krylov JFNK: Jacobian-Free Newton Krylov NEWTON: Full Newton Solve FD: Use finite differences to compute Jacobian LINEAR: Solving a linear problem

    C++ Type:MooseEnum

    Unit:(no unit assumed)

    Options:PJFNK, JFNK, NEWTON, FD, LINEAR

    Controllable:No

    Description:PJFNK: Preconditioned Jacobian-Free Newton Krylov JFNK: Jacobian-Free Newton Krylov NEWTON: Full Newton Solve FD: Use finite differences to compute Jacobian LINEAR: Solving a linear problem

  • splittingTop-level splitting defining a hierarchical decomposition into subsystems to help the solver.

    C++ Type:std::vector<std::string>

    Unit:(no unit assumed)

    Controllable:No

    Description:Top-level splitting defining a hierarchical decomposition into subsystems to help the solver.

  • use_pre_SMO_residualFalseCompute the pre-SMO residual norm and use it in the relative convergence check. The pre-SMO residual is computed at the begining of the time step before solution-modifying objects are executed. Solution-modifying objects include preset BCs, constraints, predictors, etc.

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Compute the pre-SMO residual norm and use it in the relative convergence check. The pre-SMO residual is computed at the begining of the time step before solution-modifying objects are executed. Solution-modifying objects include preset BCs, constraints, predictors, etc.

Nonlinear Solver Parameters

    Restart Parameters

    Input Files