Implementing a smooth exact penalty function for equality-constrained nonlinear optimization

R. Estrin, M. P. Friedlander, D. Orban, M. A. Saunders
SIAM J. Scientific Computing, 42(3), A1809–A1835, 2020

PDF Journal


We develop a general equality-constrained nonlinear optimization algorithm based on a smooth penalty function proposed by Fletcher in 1970. Although it was historically considered to be computationally prohibitive in practice, we demonstrate that the computational kernels required are no more expensive than other widely accepted methods for nonlinear optimization. The main kernel required to evaluate the penalty function and its derivatives is solving a structured linear system. We show how to solve this system efficiently by storing a single factorization at each iteration when the matrices are available explicitly. We further show how to adapt the penalty function to the class of factorization-free algorithms by solving the linear system iteratively. The penalty function therefore has promise when the linear system can be solved efficiently, e.g., for PDE-constrained optimization problems where efficient preconditioners exist. We discuss extensions including handling simple constraints explicitly, regularizing the penalty function, and inexact evaluation of the penalty function and its gradients. We demonstrate the merits of the approach and its various features on some nonlinear programs from a standard test set, and some PDE-constrained optimization problems.

Companion paper

This is the first paper of a two-part series that develops a smooth penalty function for constrained optimization. The second paper develops the method for nonlinear inequality constraints.

Supplementary materials

Implementation details can be found here.


  author  =  {R. Estrin and M. P. Friedlander and D. Orban and M. A. Saunders},
  title   =  {Implementing a smooth exact penalty function for equality-constrained nonlinear optimization},
  journal =  {SIAM J. Sci. Comput.},
  volume  =  {42},
  number  =  {3},
  pages   =  {A1809–A1835},
  year    =  {2020},
  DOI     =  {10.1137/19M1238265}