  We overview the ensmallen numerical optimization library, which provides a
flexible C++ framework for mathematical optimization of user-supplied objective
functions. Many types of objective functions are supported, including general,
differentiable, separable, constrained, and categorical. A diverse set of
pre-built optimizers is provided, including Quasi-Newton optimizers and many
variants of Stochastic Gradient Descent. The underlying framework facilitates
the implementation of new optimizers. Optimization of an objective function
typically requires supplying only one or two C++ functions. Custom behavior can
be easily specified via callback functions. Empirical comparisons show that
ensmallen outperforms other frameworks while providing more functionality. The
library is available at https://ensmallen.org and is distributed under the
permissive BSD license.
