Skip to main content

A transparent Python interface to the SLSQP optimization algorithm, with advanced features and visualization capabilities.

Project description

PySLSQP

GitHub Actions Test Badge Coverage Status Pypi version Forks Issues License

The SLSQP algorithm is designed to solve nonlinear programming (NLP) problems. PySLSQP is a Python package that wrraps the original SLSQP algorithm implemented in Fortran by Dieter Kraft. While the Fortran code is sourced from scipy.optimize.minimize, PySLSQP extends its functionality by offering new features for further analysis of optimization problems, thereby significantly improving the utility of the original algorithm. The prebuilt packages for various system architectures are available on PyPI for download, thus avoiding the need for the user to compile the Fortran sources.

Some of the additional features provided by PySLSQP include:

  • Data Saving: PySLSQP allows you to save optimization data during the optimization process. This can be useful for analyzing the progress of the optimization, for post-processing purposes, or for warm/hot restart of the optimization.

  • Warm/Hot Starting: PySLSQP supports warm/hot starting, enabling users to initialize the optimization algorithm with a previously saved solution. This can be particularly useful when you want to restart an optimization from a previous solution or continue an optimization that was terminated for various reasons.

  • Live Visualization: PySLSQP provides the capability to visualize the optimization progress in real-time, enabling users to monitor the convergence via the optimality and feasibility measures. This also helps the users understand how the objective function, constraints, and design variables are changing during the optimization.

  • Scaling: PySLSQP allows you to independently scale the objective function, constraints, and design variables, separate from their original definitions. Scaling can help improve the convergence behavior of the optimization algorithm and make it more robust.

  • More Internal Optimization Variables: PySLSQP provides access to additional internal optimization variables such as optimality, feasibility, Lagrange multipliers, etc. which can be useful for advanced analysis of the optimization problem. In scipy.optimize.minimize, the original callback function returns only the optimization variables, and only for the major iterations.

These additional features make PySLSQP a powerful tool for solving constrained optimization problems in Python. In addition, PySLSQP also supports the estimation of gradients using first-order finite differencing, as in the Scipy version.

Installation

To install the latest release of PySLSQP on PyPI, run on the terminal or command line

pip install pyslsqp

To install the latest commit from the main branch, run

pip install git+https://github.com/anugrahjo/PySLSQP.git@main

To upgrade PySLSQP from an older version to the latest released version on PyPI, run

pip install --upgrade pyslsqp

To uninstall PySLSQP, run

pip uninstall pyslsqp

Testing

To test if the package works correctly and as intended, install pytest using

pip install pytest

and run the following line on the terminal from the project root directory:

pytest -m "not visualize"

Usage

Most features of the PySLSQP package can be accessed through the optimize function. However, there are some additional utility functions that are available for post-processing. Here is a small optimization example that minimizes x^2 + y^2.

import numpy as np
from pyslsqp import optimize

# `v` represents the vector of optimization variables
def objective(v):
    # the objective function
    return v[0]**2 + v[1]**2

x0 = np.array([1., 1.])
# optimize returns a dictionary that contains the results from optimization
results = optimize(x0, obj=objective)
print(results)

Note that we did not provide the gradient for the objective function above. In the absence of user-provided gradients, optimize estimates the gradients using first-order finite differencing. However, it is always more efficient for the user to provide the exact gradients. Note also that we did not have any constraints or variable bounds in this problem. Examples with user-defined gradients, constraints, and bounds can be found in the documentation.

Documentation

For API reference and more details on installation and usage, visit the documentation.

Citation

If you use PySLSQP in your work, please use the following reference for citation:

@Misc{pyslsqp,
author = "Anugrah Jo Joshy",
title = "PySLSQP",
howpublished = "\url{https://github.com/anugrahjo/PySLSQP}",
year = "2024",
}

Bugs, feature requests, questions

Please use the GitHub issue tracker for reporting bugs, requesting new features, or any other questions.

Contributing

We always welcome contributions to PySLSQP. Please refer the CONTRIBUTING.md file for guidelines on how to contribute.

License

This project is licensed under the terms of the BSD 3-Clause "New" or "Revised" License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyslsqp-0.1.0.dev1.tar.gz (1.5 MB view details)

Uploaded Source

Built Distribution

pyslsqp-0.1.0.dev1-cp39-cp39-macosx_10_14_x86_64.whl (71.3 kB view details)

Uploaded CPython 3.9 macOS 10.14+ x86-64

File details

Details for the file pyslsqp-0.1.0.dev1.tar.gz.

File metadata

  • Download URL: pyslsqp-0.1.0.dev1.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.13

File hashes

Hashes for pyslsqp-0.1.0.dev1.tar.gz
Algorithm Hash digest
SHA256 40dd8c4ebb59b53977cea2f66462b539f29ce1443df5cf4321ea00a630cf6de4
MD5 7287b4a3571a02cea3a882010ddcb74e
BLAKE2b-256 e144122f4c0311e8d923a95314008c4e77f78b08a2a5978912673dc26a6f946d

See more details on using hashes here.

File details

Details for the file pyslsqp-0.1.0.dev1-cp39-cp39-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for pyslsqp-0.1.0.dev1-cp39-cp39-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 cf24344a3e188fec67cec52ec3641f6b1905c9e8eb667bd7282aacfa099d90bc
MD5 76d134fe8cc352d28a223a2c441c05d4
BLAKE2b-256 d9d9a4b797306e9483de7bfb431f19bd6890de70227a523c82a4019f257c234d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page