Treatment of constraint infeasibilities

SNOPT makes explicit allowance for infeasible constraints.  Infeasible linear constraints are detected first by solving a problem of the form

where e is a vector of ones.  This is equivalent to minimizing the sum of the general linear constraint violations subject to the simple bounds.  (In the linear programming literature, the approach is often called elastic programming.)

If the linear constraints are infeasible (v  0 or w  0), SNOPT terminates without computing the nonlinear functions.

If the linear constraints are feasible, all subsequent iterates satisfy the linear constraints.  (Such a strategy allows linear constraints to be used to define a region in which the functions can be safely evaluated.) SNOPT proceeds to solve NP as given, using search directions obtained from a sequence of quadratic programming subproblems (See Constraints and slack variables).

If a QP subproblem proves to be infeasible or unbounded (or if the dual variables p  for the nonlinear constraints become large), SNOPT enters "elastic'' mode and solves the problem

where g is a nonnegative parameter (the elastic weight ), and f(x) + g eT(v + w) is called a composite objective.  If g is sufficiently large, this is equivalent to minimizing the sum of the nonlinear constraint violations subject to the linear constraints and bounds.  A similar l1 formulation of NP is fundamental to the Sl1QP algorithm of Fletcher [4].  See also Conn [1].