Algorithms

Overview of algorithms

A summary of all the algorithms available in Nonconvex through different packages is shown in the table below. Scroll right to see more columns and see a description of the columns below the table.

Algorithm nameIs meta-algorithm?Algorithm packageOrderFinite boundsInfinite boundsInequality constraintsEquality constraintsSemidefinite constraintsInteger variables
Method of moving asymptotes (MMA)NonconvexMMA.jl (pure Julia) or NLopt.jl1
Primal dual interior point methodIpopt.jl1 or 2
DIviding RECTangles algorithm (DIRECT)NLopt.jl0
Controlled random search (CRS)NLopt.jl0
Multi-Level Single-Linkage (MLSL)LimitedNLopt.jlDepends on sub-solver
StoGoNLopt.jl1
AGSNLopt.jl0
Improved Stochastic Ranking Evolution Strategy (ISRES)NLopt.jl0
ESCHNLopt.jl0
COBYLANLopt.jl0
BOBYQANLopt.jl0
NEWUOANLopt.jl0
Principal AXIS (PRAXIS)NLopt.jl0
Nelder MeadNLopt.jl0
SubplexNLopt.jl0
CCSAQNLopt.jl1
SLSQPNLopt.jl1
TNewtonNLopt.jl1
Shifted limited-memory variable-metricNLopt.jl1
Augmented Lagrangian in NLoptLimitedNLopt.jlDepends on sub-solver
Augmented Lagrangian in PercivalPercival.jl1 or 2
Multiple trajectory searchNonconvexSearch.jl0
Branch and bound for mixed integer nonlinear programmingJuniper.jl1 or 2
Sequential polyhedral outer-approximations for mixed integer nonlinear programmingPavito.jl1 or 2
Evolutionary centers algorithm (ECA)Metaheuristics.jl0
Differential evolution (DE)Metaheuristics.jl0
Particle swarm optimization (PSO)Metaheuristics.jl0
Artificial bee colony (ABC)Metaheuristics.jl0
Gravitational search algorithm (GSA)Metaheuristics.jl0
Simulated annealing (SA)Metaheuristics.jl0
Whale optimization algorithm (WOA)Metaheuristics.jl0
Machine-coded compact genetic algorithm (MCCGA)Metaheuristics.jl0
Genetic algorithm (GA)Metaheuristics.jl0
Nonlinear optimization with the MADS algorithm (NOMAD)NOMAD.jl0Limited
Topology optimization of binary structures (TOBS)NonconvexTOBS.jl1BinaryBinary
HyperbandHyperopt.jlDepends on sub-solverDepends on sub-solverDepends on sub-solverDepends on sub-solverDepends on sub-solver
Random searchHyperopt.jlDepends on sub-solverDepends on sub-solverDepends on sub-solverDepends on sub-solverDepends on sub-solver
Latin hypercube searchHyperopt.jlDepends on sub-solverDepends on sub-solverDepends on sub-solverDepends on sub-solverDepends on sub-solver
Surrogate assisted optimizationNonconvexBayesian.jlDepends on sub-solverDepends on sub-solverDepends on sub-solverDepends on sub-solverDepends on sub-solverDepends on sub-solverDepends on sub-solver
Log barrier method for nonlinear semidefinite constraint handlingNonconvexSemidefinite.jlDepends on sub-solverDepends on sub-solverDepends on sub-solverDepends on sub-solverDepends on sub-solverDepends on sub-solver

The following is an explanation of all the columns in the table:

  • Algorithm name. This is the name of the algorithm and/or its acronym. Some algorithms have multiple variants implemented in their respective packages. When that's the case, the whole family of algorithms is mentioned only once.
  • Is meta-algorithm? Some algorithms are meta-algorithms that call a sub-algorithm to do the optimization after transforming the problem. In this case, a lot of the properties of the meta-algorithm are inherited from the sub-algorithm. So if the sub-algorithm requires gradients or Hessians of functions in the model, the meta-algorithm will also require gradients and Hessians of functions in the model. Fields where the property of the meta-algorithm is inherited from the sub-solver are indicated using the "Depends on sub-solver" entry. Some algorithms in NLopt have a "Limited" meta-algorithm status because they can only be used to wrap algorithms from NLopt.
  • Algorithm package. This is the Julia package that either implements the algorithm or calls it from another programming language. Nonconvex wraps all these packages using a consistent API while allowing each algorithm to be customized where possible and have its own set of options.
  • Order. This is the order of the algorithm. Zero-order algorithms only require the evaluation of the objective and constraint functions, they don't require any gradients or Hessians of objective and constraint functions. First-order algorithms require both the value and gradients of objective and/or constraint functions. Second-order algorithms require the value, gradients and Hessians of objective and/or constraint functions.
  • Finite bounds. This is true if the algorithm supports finite lower and upper bound constraints on the decision variables. One special case is the TOBS algorithm which only supports binary decision variables so an entry of "Binary" is used instead of true/false.
  • Infinite bounds. This is true if the algorithm supports unbounded decision variables either from below, above or both.
  • Inequality constraints. This is true if the algorithm supports nonlinear inequality constraints.
  • Equality constraints. This is true if the algorithm supports nonlinear equality constraints. Algorithms that only support linear equality constraints are given an entry of "Limited".
  • Semidefinite constraints. This is true if the algorithm supports nonlinear semidefinite constraints.
  • Integer variables. This is true if the algorithm supports integer/discrete/binary decision variables, not just continuous. One special case is the TOBS algorithm which only supports binary decision variables so an entry of "Binary" is used instead of true/false.

Wrapper packages

The JuliaNonconvex organization hosts a number of packages which wrap other optimization packages in Julia or implement their algorithms. The correct wrapper package is loaded using the Nonconvex.@load macro with the algorithm or package name. The following is a summary of all the wrapper packages in the JuliaNonconvex organization. To view the documentation of each package, click on the blue docs badge in the last column.

PackageDescriptionTestsCoverageDocs
NonconvexMMA.jlMethod of moving asymptotes implementation in pure JuliaBuild StatusCoverage
NonconvexIpopt.jlIpopt.jl wrapperBuild StatusCoverage
NonconvexNLopt.jlNLopt.jl wrapperBuild StatusCoverage
NonconvexPercival.jlPercival.jl wrapper (an augmented Lagrangian algorithm implementation)Build StatusCoverage
NonconvexJuniper.jlJuniper.jl wrapperBuild StatusCoverage
NonconvexPavito.jlPavito.jl wrapperBuild StatusCoverage
NonconvexSemidefinite.jlNonlinear semi-definite programming algorithmBuild StatusCoverage
NonconvexMultistart.jlMulti-start optimization algorithmsBuild StatusCoverage
NonconvexBayesian.jlConstrained Bayesian optimization implementationBuild StatusCoverage
NonconvexSearch.jlMulti-trajectory and local search methodsBuild StatusCoverage
NonconvexTOBS.jlBinary optimization algorithm called "topology optimization of binary structures" (TOBS) which was originally developed in the context of optimal distribution of material in mechanical components.Build StatusCoverage
NonconvexMetaheuristics.jlMetaheuristic gradient-free optimization algorithms as implemented in Metaheuristics.jl.Build StatusCoverage
NonconvexNOMAD.jlNOMAD algorithm as wrapped in the NOMAD.jl.Build StatusCoverage