Metadata-Version: 2.1
Name: psopt
Version: 0.1.1
Summary: A particle swarm optimizer for general use
Home-page: https://github.com/artur-deluca/psopt
Author: Artur de Luca
Author-email: arturbackdeluca@gmail.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Scientific/Engineering
Description-Content-Type: text/markdown
Requires-Dist: dill
Requires-Dist: multiprocess
Requires-Dist: numpy
Requires-Dist: matplotlib
Provides-Extra: all
Requires-Dist: dill ; extra == 'all'
Requires-Dist: multiprocess ; extra == 'all'
Requires-Dist: numpy ; extra == 'all'
Requires-Dist: matplotlib ; extra == 'all'
Requires-Dist: pytest ; extra == 'all'
Requires-Dist: pytest-cov ; extra == 'all'
Requires-Dist: flake8 ; extra == 'all'
Requires-Dist: codecov ; extra == 'all'
Requires-Dist: sphinx ; extra == 'all'
Requires-Dist: sphinx-gallery ; extra == 'all'
Provides-Extra: dev
Requires-Dist: dill ; extra == 'dev'
Requires-Dist: multiprocess ; extra == 'dev'
Requires-Dist: numpy ; extra == 'dev'
Requires-Dist: matplotlib ; extra == 'dev'
Requires-Dist: pytest ; extra == 'dev'
Requires-Dist: pytest-cov ; extra == 'dev'
Requires-Dist: flake8 ; extra == 'dev'
Requires-Dist: codecov ; extra == 'dev'
Provides-Extra: doc
Requires-Dist: dill ; extra == 'doc'
Requires-Dist: multiprocess ; extra == 'doc'
Requires-Dist: numpy ; extra == 'doc'
Requires-Dist: matplotlib ; extra == 'doc'
Requires-Dist: sphinx ; extra == 'doc'
Requires-Dist: sphinx-gallery ; extra == 'doc'

<p><img width=400 src="/docs/images/psopt.svg"></p>

[![Build Status](https://travis-ci.com/artur-deluca/psopt.svg?branch=master)](https://travis-ci.com/artur-deluca/psopt)
[![Documentation Status](https://readthedocs.org/projects/psopt/badge/?version=latest)](https://psopt.readthedocs.io/en/latest/?badge=latest)
[![codecov](https://codecov.io/gh/artur-deluca/psopt/branch/master/graph/badge.svg)](https://codecov.io/gh/artur-deluca/psopt)
[![Maintainability](https://api.codeclimate.com/v1/badges/e969d457f95dca89cb31/maintainability)](https://codeclimate.com/github/artur-deluca/psopt/maintainability)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/71b0d894f71f4c7c9f14409d14b11856)](https://www.codacy.com/app/artur-deluca/psopt?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=artur-deluca/psopt&amp;utm_campaign=Badge_Grade)

A particle swarm optimizer for combinatorial optimization

## Project Information

`psopt` is released under the [MIT](https://choosealicense.com/licenses/mit/),
its documentation lives at [Read the Docs](https://psopt.readthedocs.io/en/latest/),
the code on [GitHub](https://github.com/artur-deluca/psopt),
and the latest release on [PyPI](https://pypi.org/project/psopt/).

If you'd like to contribute to `psopt` you're most welcome. We've created a [little guide](CONTRIBUTING.md) to get you started!

## How to use
```python
from psopt import Permutation

# define an objective function to optimize
def obj_func(x):
    return sum([a / (i + 1) for i, a in enumerate(x)])

# list of possible candidates
candidates = list(range(1, 11))

# instantiate the optimizer
opt = Permutation(obj_func, candidates, metrics="l2")

# minimize the obj function
result = opt.minimize(selection_size=5, verbose=1, threshold=5, population=20)

# visualize the progress
result.history.plot("l2")
result.history.plot("global_best")
```

<p align="center">
  <img width="400" height="300" src="/docs/images/l2.svg">
  <img width="400" height="300" src="/docs/images/global_best.svg">
</p>

## Installation

### Python version support

Officially Python 3.6 and above

### Installing from PyPI

PSOpt can be installed via pip from [PyPI](https://pypi.org/project/psopt)

```console
pip install psopt
```

### Installing from source

Clone the repository via:

```console
git clone https://github.com/artur-deluca/psopt/ --depth=1
```

Activate your virtual environment and run:

```console
python setup.py install
# or alternatively
pip install -e .
```

If you wish to install the development dependencies, run:

```console
python setup.py build
# or alternatively
pip install -e.[all]
```

### Running the test suite

To run the tests written for psopt, make sure you have `pytest` installed in your venv. 
Additionally, if you wish to run coverage analysis as well, make sure to have `pytest-cov` installed as well.

```console
# to simply execute the tests run:
pytest
# to run coverage as well run:
pytest --cov=psopt
# or alternatively:
make test
```



