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.optimze.Optimizer to 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.

List of Optimizers

Name

Scalar

Equality Constraints

Inequality Constraints

Stochastic

Hessian

GPU

Description

fmin-auglag

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

fmin-auglag-bfgs

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

lsq-auglag

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

lsq-exact

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

fmintr

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

fmintr-bfgs

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

sgd

True

False

False

True

False

True

Stochastic gradient descent with Nesterov momentumSee https://desc-docs.readthedocs.io/en/stable/_api/optimize/desc.optimize.sgd.html

scipy-bfgs

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

scipy-CG

True

False

False

False

False

False

Nonlinear conjugate gradient method. See https://docs.scipy.org/doc/scipy/reference/optimize.minimize-cg.html

scipy-Newton-CG

True

False

False

False

True

False

Newton conjugate gradient method. See https://docs.scipy.org/doc/scipy/reference/optimize.minimize-newtoncg.html

scipy-dogleg

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

scipy-trust-exact

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

scipy-trust-ncg

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

scipy-trust-krylov

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

scipy-trf

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

scipy-lm

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

scipy-dogbox

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

scipy-trust-constr

True

True

True

False

True

False

Trust region interior point method. See https://docs.scipy.org/doc/scipy/reference/optimize.minimize-trustconstr.html

scipy-SLSQP

True

True

True

False

False

False

Sequential least squares programming method. See https://docs.scipy.org/doc/scipy/reference/optimize.minimize-slsqp.html