Skip to main content

A parallel version of the L-BFGS-B optimizer of scipy.optimize.minimize().

Project description

optimparallel - A parallel version of scipy.optimize.minimize(method='L-BFGS-B')

DOI PyPI Build Status License: GPL v3

Using optimparallel.minimize_parallel() can significantly reduce the optimization time. For an objective function with an execution time of more than 0.1 seconds and p parameters the optimization speed increases by up to factor 1+p when no analytic gradient is specified and 1+p processor cores with sufficient memory are available.

A similar extension of the L-BFGS-B optimizer exists in the R package optimParallel:

Installation

To install the package run:

$ pip install optimparallel

Usage

Replace scipy.optimize.minimize(method='L-BFGS-B') by optimparallel.minimize_parallel() to execute the minimization in parallel:

from optimparallel import minimize_parallel
from scipy.optimize import minimize
import numpy as np
import time

# objective function
def f(x, sleep_secs=0.5):
    print('fn')
    time.sleep(sleep_secs)
    return sum((x - 14)**2)

# start value
x0 = np.array([10, 20])

# minimize with parallel evaluation of 'fun' and
# its approximate gradient.
o1 = minimize_parallel(fun=f, x0=x0, args=0.5)
print(o1)

# test against scipy.optimize.minimize()
o2 = minimize(fun=f, x0=x0, args=0.5, method='L-BFGS-B')
print(all(np.isclose(o1.x, o2.x, atol=1e-10)),
      np.isclose(o1.fun, o2.fun, atol=1e-10),
      all(np.isclose(o1.jac, o2.jac, atol=1e-10)))

The evaluated x values, fun(x), and jac(x) can be returned:

o1 = minimize_parallel(fun=f, x0=x0, args=0.5, parallel={'loginfo': True})
print(o1.loginfo)

More examples are given in example.py and the Jupyter Notebook example_extended.ipynb.

Note for Windows users: It may be necessary to run minimize_parallel() in the main scope. See example_windows_os.py.

Citation

When using this package please cite:

Author

Contributor

Contributions

Contributions via pull requests are welcome.

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

optimparallel-0.1.3.tar.gz (39.1 kB view details)

Uploaded Source

Built Distribution

optimparallel-0.1.3-py3-none-any.whl (20.0 kB view details)

Uploaded Python 3

File details

Details for the file optimparallel-0.1.3.tar.gz.

File metadata

  • Download URL: optimparallel-0.1.3.tar.gz
  • Upload date:
  • Size: 39.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for optimparallel-0.1.3.tar.gz
Algorithm Hash digest
SHA256 f7247e841103f15d39d089ef267e31c4015d64a1115364c8d2bbc6a2b1500c4e
MD5 0e18108c69cb9c17e357ee464f800307
BLAKE2b-256 82f548d9744d1474c52abd63eda35dc2ac46cff849046b90428c0a1170668cd2

See more details on using hashes here.

File details

Details for the file optimparallel-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for optimparallel-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 149ae449158c31516c82f4d50a128c7aac9c9e40d60d074fbc5fc29da03a5e88
MD5 d90db2d0d406b7b4da9ad7eb4984e051
BLAKE2b-256 38deb37b5d92ea66c824ddf2b27abfd3fc10251ccc3dc653a6ec52ba78e70b3f

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