ensmallen provides a set of abstractions for writing an objective function to optimize. It also provides a set of standard and optimizers that can be used for mathematical optimization tasks. These include full-batch gradient descent techniques, small-batch techniques, gradient-free optimizers, and constrained optimization.