Skip to main content

A SciPy compatible super fast Python implementation for Particle Swarm Optimization.

Project description

A python implementation of Particle Swarm Optimization.

Introduction

PSOPy (pronounced “Soapy”) is a SciPy compatible super fast Python implementation for Particle Swarm Optimization. The codes are tested for standard optimization test functions (both constrained and unconstrained).

The library provides two implementations, one that mimics the interface to scipy.optimize.minimize and one that directly runs PSO. The SciPy compatible function is a wrapper over the direct implementation, and therefore may be slower in execution time, as the constraint and fitness functions are wrapped.

Installation

GitHub

To install this library from GitHub,

$ git clone https://github.com/jerrytheo/psopy.git
$ cd psopy
$ python setup.py install

In order to run the tests,

$ python setup.py test

PyPI

This library is available on the PyPI as psopy. If you have pip installed run,

$ pip install psopy

Examples

Unconstrained Optimization

Consider the problem of minimizing the Rosenbrock function, implemented as scipy.optimize.rosen using a swarm of 1000 particles.

>>> import numpy as np
>>> from psopy import minimize
>>> from scipy.optimize import rosen
>>> x0 = np.random.uniform(0, 2, (1000, 5))
>>> res = minimize(rosen, x0, options={'stable_iter': 50})
>>> res.x
array([1.00000003, 1.00000017, 1.00000034, 1.0000006 , 1.00000135])

Constrained Optimization

Next, we consider a minimization problem with several constraints. The intial positions for constrained optimization must adhere to the constraints imposed by the problem. This can be ensured using the provided function psopy.init_feasible. Note, there are several caveats regarding the use of this function. Consult its documentation for more information.

>>> # The objective function.
>>> fun = lambda x: (x[0] - 1)**2 + (x[1] - 2.5)**2
>>> # The constraints.
>>> cons = ({'type': 'ineq', 'fun': lambda x:  x[0] - 2 * x[1] + 2},
...         {'type': 'ineq', 'fun': lambda x: -x[0] - 2 * x[1] + 6},
...         {'type': 'ineq', 'fun': lambda x: -x[0] + 2 * x[1] + 2},
...         {'type': 'ineq', 'fun': lambda x: x[0]},
...         {'type': 'ineq', 'fun': lambda x: x[1]})
>>> from psopy import init_feasible
>>> x0 = init_feasible(cons, low=0., high=2., shape=(1000, 2))
>>> res = minimize(fun, x0, constrainsts=cons, options={
...     'g_rate': 1., 'l_rate': 1., 'max_velocity': 4., 'stable_iter': 50})
>>> res.x
array([ 1.39985398,  1.69992748])

Authors

License

Licensed under the BSD 3-Clause License.
Copyright 2018 Abhijit Theophilus, Snehanshu Saha, Suryoday Basak

References

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

psopy-0.2.4.tar.gz (14.2 kB view details)

Uploaded Source

Built Distribution

psopy-0.2.4-py3-none-any.whl (14.9 kB view details)

Uploaded Python 3

File details

Details for the file psopy-0.2.4.tar.gz.

File metadata

  • Download URL: psopy-0.2.4.tar.gz
  • Upload date:
  • Size: 14.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.2

File hashes

Hashes for psopy-0.2.4.tar.gz
Algorithm Hash digest
SHA256 988e5878f59e68c9482a5c65160418e5fdf5022b749cb7db195bc07c5ce1ac4f
MD5 7f9ebba986e469eee58020164af88f55
BLAKE2b-256 4da5729a934f706ae19c8913211047082ad284885d199f23e4ddcdf9e0c0e8f5

See more details on using hashes here.

File details

Details for the file psopy-0.2.4-py3-none-any.whl.

File metadata

  • Download URL: psopy-0.2.4-py3-none-any.whl
  • Upload date:
  • Size: 14.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.2

File hashes

Hashes for psopy-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 8de5cdc9077f130f90e4a4afdc970a54eda2d3b94efded186d8e139d71821526
MD5 ee03e7eafeebcbdd8dcb0ff8089df451
BLAKE2b-256 d910f12cbdd5d621d7cba33d673c4655151561173bf2d48f99228ff2a662668f

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