slsqp
slsqp copied to clipboard
Modern Fortran Edition of the SLSQP Optimizer
Modern Fortran Edition of the SLSQP Optimizer
Status
Description
This is an updated version of the SLSQP nonlinear constrained optimization code. It can be used to solve nonlinear programming problems that seek to minimize a scalar performance index subject to nonlinear equality and inequality constraints as well as bounds on the variables.
Updates to the original code include:
- It has been translated into free-form source.
- It is now thread safe. The original version was not thread safe due to the use of saved variables in one of the subroutines.
- It no longer uses obsolescent and non-standard Fortran features. It should now be 100% standard compliant (Fortran 2008).
- It now has an easy-to-use object-oriented interface. The
slsqp_class
is used for all interactions with the solver. Methods includeinitialize()
,optimize()
, anddestroy()
. - It includes updated versions of some of the third-party routines used in the original code (BLAS, LINPACK, and NNLS).
- Some new features were added to support printing error messages and reporting iterations to the user.
- The user can now specify the max and min
alpha
to use during the line search. - The user can supply a routine to compute the gradients of the objective function and constriants, or allow the code to estimate them using finite differences (backward, forward, or central).
- The documentation strings in the code have been converted to FORD format, allowing for nicely formatted documentation to be auto-generated.
- A couple of bug fixes noted elsewhere have been applied.
License
- The original sourcecode and the modifications are released under a permissive BSD-style license.
Building SLSQP
Fortran Package Manager
The library can be built with the Fortran Package Manager using the provided fpm.toml
file like so:
fpm build --release
To use SLSQP within your fpm project, add the following to your fpm.toml
file:
[dependencies]
slsqp = { git="https://github.com/jacobwilliams/slsqp.git" }
Development
- Development continues on GitHub.
Documentation
The latest API documentation can be found here. This was generated from the source code using FORD.
References
- Original sourcecode at NETLIB
- D. Kraft, "A software package for sequential quadratic programming", Technical Report DFVLR-FB 88-28, Institut für Dynamik der Flugsysteme, Oberpfaffenhofen, July 1988.
- D. Kraft, "Algorithm 733: TOMP--Fortran modules for optimal control calculations," ACM Transactions on Mathematical Software, Vol. 20, No. 3, p. 262-281 (1994).