Skip to main content

This provides the SOLNP optimizaiton Algorithm.

Project description

codecov Documentation Status Python Versions

See full documentation on http://solnp.readthedocs.io.

pysolnp - Nonlinear optimization with the augmented Lagrange method

Description

SOLNP solves the general nonlinear optimization problem on the form:

    minimize f(x)
      subject to
       g(x) = e_x
   l_h <= h(x) <= u_h
   l_x <   x   < u_X

where f(x), g(x) and h(x) are smooth functions.

Compatibility

Precompiled Wheels are available for CPython:

  • Windows: Python 3.6+
  • Linux: Python 3.6+
  • Mac OS: Python 3.6+

For other systems, or to have BLAS and LAPACK support, please build the wheels manually. Note: For best results, building it from source is recommended, as BLAS and LAPACK will make a difference.

Installation

Simply install the package through PyPi with: pip install pysolnp

When compiling from source code you will need CMake.
See the README for the C++ code for details.

Usage

Below is the Box example, for the complete example see /python_examples/example_box.py.

import pysolnp

def f_objective_function(x):
    return -1 * x[0] * x[1] * x[2]

def g_equality_constraint_function(x):
    return [4 * x[0] * x[1] + 2 * x[1] * x[2] + 2 * x[2] * x[0]]

x_starting_point = [1.1, 1.1, 9.0]
x_l = [1.0, 1.0, 1.0]
x_u = [10.0, 10.0, 10.0]
e_x = [100]

result = pysolnp.solve(
    obj_func=f_objective_function,
    par_start_value=x_starting_point,
    par_lower_limit=x_l,
    par_upper_limit=x_u,
    eq_func=g_equality_constraint_function,
    eq_values=e_x)

result.solve_value
result.optimum
result.callbacks
result.converged

Output:

>>> result.solve_value
-48.11252206814995
>>> result.optimum
[2.8867750707815447, 2.8867750713194273, 5.773407748939196]
>>> result.callbacks
118
>>> result.converged
True

Parameters

The basic signature is:

solve(obj_func: function, par_start_value: List, par_lower_limit: object = None, par_upper_limit: object = None, eq_func: object = None, eq_values: object = None, ineq_func: object = None, ineq_lower_bounds: object = None, ineq_upper_bounds: object = None, rho: float = 1.0, max_major_iter: int = 10, max_minor_iter: int = 10, delta: float = 1e-05, tolerance: float = 0.0001, debug: bool = False) -> pysolnp.Result

Inputs:

Parameter Type Default value* Description
obj_func Callable[List, float] - The objective function f(x) to minimize.
par_start_value List - The starting parameter x_0.
par_lower_limit List None The parameter lower limit x_l.
par_upper_limit List None The parameter upper limit x_u.
eq_func Callable[List, float] None The equality constraint function h(x).
eq_values List None The equality constraint values e_x.
ineq_func Callable[List, float] None The inequality constraint function g(x).
ineq_lower_bounds List None The inequality constraint lower limit g_l.
ineq_upper_bounds List None The inequality constraint upper limit g_l.
rho float 1.0 Penalty weighting scalar for infeasability in the augmented objective function.**
max_major_iter int 400 Maximum number of outer iterations.
max_minor_iter int 800 Maximum number of inner iterations.
delta float 1e-07 Step-size for forward differentiation.
tolerance float 1e-08 Relative tolerance on optimality.
debug bool False If set to true some debug output will be printed.

*Defaults for configuration parameters are based on the defaults for Rsolnp.
**Higher values means the solution will bring the solution into the feasible region with higher weight. Very high values might lead to numerical ill conditioning or slow down convergence.

Output: The function returns the pysolnp.Result with the below properties.

Property Type Description
solve_value float The value of the objective function at optimum f(x*).
optimum List[float] A list of parameters for the optimum x*.
callbacks int Number of callbacks done to find this optimum.
converged boolean Indicates if the algorithm converged or not.
hessian_matrix List[List[float]] The final Hessian Matrix used by pysolnp.

Use-cases and Applications

Authors

License

This project is licensed under the Boost License - see the license file for details.

Acknowledgments

  • Yinyu Ye - Publisher and mastermind behind the original SOLNP algorithm, Original Sources
  • Alexios Ghalanos and Stefan Theussl - The people behind RSOLNP, Github repository
  • Davis King - The mastermind behind Dlib, check out his blog! Blog

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

pysolnp-2022.3.13.tar.gz (11.7 MB view hashes)

Uploaded Source

Built Distributions

pysolnp-2022.3.13-cp310-cp310-win_amd64.whl (487.9 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

pysolnp-2022.3.13-cp310-cp310-win32.whl (465.4 kB view hashes)

Uploaded CPython 3.10 Windows x86

pysolnp-2022.3.13-cp310-cp310-musllinux_1_1_x86_64.whl (761.0 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

pysolnp-2022.3.13-cp310-cp310-musllinux_1_1_i686.whl (806.3 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

pysolnp-2022.3.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (920.0 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

pysolnp-2022.3.13-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (995.5 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

pysolnp-2022.3.13-cp310-cp310-macosx_10_9_x86_64.whl (1.1 MB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

pysolnp-2022.3.13-cp39-cp39-win_amd64.whl (484.2 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

pysolnp-2022.3.13-cp39-cp39-win32.whl (461.6 kB view hashes)

Uploaded CPython 3.9 Windows x86

pysolnp-2022.3.13-cp39-cp39-musllinux_1_1_x86_64.whl (757.2 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

pysolnp-2022.3.13-cp39-cp39-musllinux_1_1_i686.whl (802.4 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

pysolnp-2022.3.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (916.2 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

pysolnp-2022.3.13-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (991.6 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

pysolnp-2022.3.13-cp39-cp39-macosx_10_9_x86_64.whl (1.1 MB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

pysolnp-2022.3.13-cp38-cp38-win_amd64.whl (480.3 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

pysolnp-2022.3.13-cp38-cp38-win32.whl (457.9 kB view hashes)

Uploaded CPython 3.8 Windows x86

pysolnp-2022.3.13-cp38-cp38-musllinux_1_1_x86_64.whl (753.0 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

pysolnp-2022.3.13-cp38-cp38-musllinux_1_1_i686.whl (798.5 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

pysolnp-2022.3.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (912.3 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

pysolnp-2022.3.13-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (987.5 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

pysolnp-2022.3.13-cp38-cp38-macosx_10_9_x86_64.whl (1.1 MB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

pysolnp-2022.3.13-cp37-cp37m-win_amd64.whl (476.8 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

pysolnp-2022.3.13-cp37-cp37m-win32.whl (455.4 kB view hashes)

Uploaded CPython 3.7m Windows x86

pysolnp-2022.3.13-cp37-cp37m-musllinux_1_1_x86_64.whl (750.4 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

pysolnp-2022.3.13-cp37-cp37m-musllinux_1_1_i686.whl (796.9 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

pysolnp-2022.3.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (915.0 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

pysolnp-2022.3.13-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (987.7 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686

pysolnp-2022.3.13-cp37-cp37m-macosx_10_9_x86_64.whl (1.1 MB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

pysolnp-2022.3.13-cp36-cp36m-win_amd64.whl (473.1 kB view hashes)

Uploaded CPython 3.6m Windows x86-64

pysolnp-2022.3.13-cp36-cp36m-win32.whl (451.6 kB view hashes)

Uploaded CPython 3.6m Windows x86

pysolnp-2022.3.13-cp36-cp36m-musllinux_1_1_x86_64.whl (746.3 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ x86-64

pysolnp-2022.3.13-cp36-cp36m-musllinux_1_1_i686.whl (792.7 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ i686

pysolnp-2022.3.13-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (910.9 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64

pysolnp-2022.3.13-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl (983.6 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ i686

pysolnp-2022.3.13-cp36-cp36m-macosx_10_9_x86_64.whl (1.1 MB view hashes)

Uploaded CPython 3.6m macOS 10.9+ x86-64

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