chiark / gitweb /
Import nlopt_2.4.2+dfsg.orig.tar.gz
[nlopt.git] / slsqp / README
1 This code implements a sequential quadratic programming (SQP)
2 algorithm for nonlinearly constrained gradient-based optimization, and
3 was originally written by Dieter Kraft and described in:
4
5     Dieter Kraft, "A software package for sequential quadratic
6     programming", Technical Report DFVLR-FB 88-28, Institut für
7     Dynamik der Flugsysteme, Oberpfaffenhofen, July 1988.
8
9     Dieter Kraft, "Algorithm 733: TOMP–Fortran modules for optimal
10     control calculations," ACM Transactions on Mathematical Software,
11     vol. 20, no. 3, pp. 262-281 (1994).
12
13 (I believe that SLSQP stands for something like Sequential
14 Least-Squares Quadratic Programming, because the problem is treated as
15 a sequence of constrained least-squared problems, but such a
16 least-squares problem is equivalent to a QP.)
17
18 The actual Fortran file was obtained from the SciPy project, who are
19 responsible for obtaining permission to distribute it under a
20 free-software (3-clause BSD) license (see the permission email from
21 ACM at the top of slsqp.c, and also projects.scipy.org/scipy/ticket/1056).
22
23 The code was modified for inclusion in NLopt by S. G. Johnson in 2010,
24 with the following changes.  The code was converted to C and manually
25 cleaned up.  It was modified to be re-entrant, preserving the
26 reverse-communication interface but explicitly saving the state in a
27 data structure.  The reverse-communication interface was wrapped with
28 an NLopt-style inteface, with NLopt stopping conditions.  The inexact
29 line search was modified to evaluate the functions including gradients
30 for the first step, since this removes the need to evaluate the
31 function+gradient a second time for the same point in the common case
32 when the inexact line search concludes after a single step, since
33 NLopt's interface combines the function and gradient computations.
34 Since roundoff errors sometimes pushed SLSQP's parameters slightly
35 outside the bound constraints (not allowed by NLopt), we added checks
36 to force the parameters within the bounds.  Fixed a bug in LSEI (use
37 of uninitialized variables) for the case where the number of equality
38 constraints equals the dimension of the problem.  The LSQ subroutine
39 was modified to handle infinite lower/upper bounds (in which case
40 those constraints are omitted).
41
42 The exact line-search option is currently disabled; if we want to
43 re-enable this (although exact line-search is usually overkill in
44 these kinds of algorithms), we plan to do so using a recursive call to
45 NLopt.  (This will allow a user-specified line-search algorithm to be
46 used, and will allow the gradient to be exploited in the exact line
47 search, in contrast to the routine provided with SLSQP.)