Optimizers Supported
The table below contains a list of different optimzers that DESC is interfaced to. New optimizers can be added easily, see Adding new optimizers.
Name : Name of the optimizer method. Pass this string to
desc.optimize.Optimizerto use the method.Scalar : Whether the method assumes a scalar residual, or a vector of residuals for least squares.
Equality constraints : Whether the method handles equality constraints.
Inequality constraints : Whether the method handles inequality constraints.
Stochastic : Whether the method can handle noisy objectives.
Hessian : Whether the method requires calculation of the full hessian matrix.
GPU : Whether the method supports running on GPU
Description : Short description of the optimizer method.
In addition to the listed optimizers, DESC also includes proximal- prefix to them (i.e. proximal-lsq-exact), which allows for proximal optimization. This is useful for optimization problems where ForceBalance is in the constraints. Any optimizer with proximal- prefix solves the equilibrium for each optimization step to preserve the MHD force balance. Iterations of these optimizers will take longer than the original optimizers, but they will be more robust to large perturbations in the initial guess. For example, after an optimization with lsq-auglag optimizer, the final result will not be good force balance, hence we suggest solving equilibrium again (see Advanced QS Optimization) The proximal optimizers are not listed in the table below, but they can be used by passing proximal-OptimizerName, or this conversion will happen automatically if the ForceBalance constraint is used.
Name |
Scalar |
Equality Constraints |
Inequality Constraints |
Stochastic |
Hessian |
GPU |
Description |
|---|---|---|---|---|---|---|---|
|
True |
True |
True |
False |
True |
True |
Augmented Lagrangian trust region method for minimizing scalar valued multivariate function. See https://desc-docs.readthedocs.io/en/stable/_api/optimize/desc.optimize.fmin_auglag.html |
|
True |
True |
True |
False |
False |
True |
Augmented Lagrangian trust region method for minimizing scalar valued multivariate function. Uses BFGS to approximate Hessian. See https://desc-docs.readthedocs.io/en/stable/_api/optimize/desc.optimize.fmin_auglag.html |
|
False |
True |
True |
False |
False |
True |
Least squares augmented Lagrangian for constrained optimizationSee https://desc-docs.readthedocs.io/en/stable/_api/optimize/desc.optimize.lsq_auglag.html |
|
False |
False |
False |
False |
False |
True |
Trust region least squares, similar to the trf method in scipySee https://desc-docs.readthedocs.io/en/stable/_api/optimize/desc.optimize.lsqtr.html |
|
True |
False |
False |
False |
True |
True |
Trust region method for minimizing scalar valued multivariate function. See https://desc-docs.readthedocs.io/en/stable/_api/optimize/desc.optimize.fmintr.html |
|
True |
False |
False |
False |
False |
True |
Trust region method for minimizing scalar valued multivariate function. Uses BFGS to approximate the Hessian. See https://desc-docs.readthedocs.io/en/stable/_api/optimize/desc.optimize.fmintr.html |
|
True |
False |
False |
True |
False |
True |
Stochastic gradient descent with Nesterov momentum. See https://desc-docs.readthedocs.io/en/stable/_api/optimize/desc.optimize.sgd.html |
|
True |
False |
False |
True |
False |
True |
Wrapper for custom |
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
True |
False |
True |
|
|
True |
False |
False |
False |
False |
False |
BFGS quasi-newton method with line search. See https://docs.scipy.org/doc/scipy/reference/optimize.minimize-bfgs.html |
|
True |
False |
False |
False |
False |
False |
L-BFGS-B quasi-newton method with line search. See https://docs.scipy.org/doc/scipy/reference/optimize.minimize-bfgs.html |
|
True |
False |
False |
False |
False |
False |
Nonlinear conjugate gradient method. See https://docs.scipy.org/doc/scipy/reference/optimize.minimize-cg.html |
|
True |
False |
False |
False |
True |
False |
Newton conjugate gradient method. See https://docs.scipy.org/doc/scipy/reference/optimize.minimize-newtoncg.html |
|
True |
False |
False |
False |
True |
False |
Trust region method with dogleg step. Hessian must be positive definite. See https://docs.scipy.org/doc/scipy/reference/optimize.minimize-dogleg.html |
|
True |
False |
False |
False |
True |
False |
Trust region method using ‘exact’ method to solve subproblem. See https://docs.scipy.org/doc/scipy/reference/optimize.minimize-trustexact.html |
|
True |
False |
False |
False |
True |
False |
Trust region method using conjugate gradient to solve subproblem. See https://docs.scipy.org/doc/scipy/reference/optimize.minimize-trustncg.html |
|
True |
False |
False |
False |
True |
False |
Trust region method using Krylov iterations to solve subproblem. See https://docs.scipy.org/doc/scipy/reference/optimize.minimize-trustkrylov.html |
|
False |
False |
False |
False |
False |
False |
Trust region least squares method. See https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.least_squares.html |
|
False |
False |
False |
False |
False |
False |
Levenberg-Marquardt implicit trust region method. See https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.least_squares.html |
|
False |
False |
False |
False |
False |
False |
Dogleg method with box shaped trust region. See https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.least_squares.html |
|
True |
True |
True |
False |
True |
False |
Trust region interior point method. See https://docs.scipy.org/doc/scipy/reference/optimize.minimize-trustconstr.html |
|
True |
True |
True |
False |
False |
False |
Sequential least squares programming method. See https://docs.scipy.org/doc/scipy/reference/optimize.minimize-slsqp.html |