# Optimization algorithms

The numerical optimization algorithm handles the balancing between the minimization of the objective and the non-violation of the constraints.

The module `OpenPisco.Optim.Algorithms()`

collects the optimization algorithms provided by OpenPisco.

## Null space optimization algorithm

The class `OpenPisco.Optim.Algorithms.OptimAlgoNullSpace`

proposes an implementation of a gradient-flow algorithm designed to decrease both the value of the objective function and the violation of the constraints.
See 1 for the theoretical background.

## Unconstrained optimization algorithms

Popular penalization methods such as the Augmented Lagrangian reformulate a constrained optimization problem into a sequence of unconstrained optimization problems by incorporating the constraints as penalizations of the objective function.

The class `OpenPisco.Optim.Algorithms.OptimAlgoUnconstrained`

proposes an implementation of an unconstrained algorithm combining a gradient descent routine with a linear line search.

- 1
Feppon, G. Allaire, C. Dapogny, Null space gradient flows for constrained optimization with applications to shape optimization, COCV, 26, (2020).