Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/altaris/noisy-moo

A wrapper-based framework for pymoo problem modification.
https://github.com/altaris/noisy-moo

multi-objective-optimization optimization optimization-algorithms pymoo python

Last synced: about 1 month ago
JSON representation

A wrapper-based framework for pymoo problem modification.

Awesome Lists containing this project

README

        

noisy-moo
=========

![Python 3](https://img.shields.io/badge/python-3-blue?logo=python)
[![MIT License](https://img.shields.io/badge/license-MIT-yellow)](https://choosealicense.com/licenses/mit/)
[![Code style](https://img.shields.io/badge/style-black-black)](https://pypi.org/project/black)
[![Maintainability](https://api.codeclimate.com/v1/badges/aedd8e97a23534a85bc5/maintainability)](https://codeclimate.com/github/altaris/noisy-moo/maintainability)
[![Documentation](https://badgen.net/badge/documentation/here/blue)](https://altaris.github.io/noisy-moo/nmoo.html)

The C O W

A wrapper-based framework for [pymoo](https://pymoo.org/) problem modification
and algorithm benchmarking. Initially developed to test
*KNN-averaging*[^quatic21].

# Installation

Simply run
```sh
pip install nmoo
```

# Getting started

## In a notebook

See
[example.ipynb](https://github.com/altaris/noisy-moo/blob/main/example.ipynb)
for a quick example.
[![Launch Google Colab
notebook](https://img.shields.io/badge/launch-colab-blue?logo=googlecolab)](https://colab.research.google.com/github/altaris/noisy-moo/blob/main/example.ipynb)

## For larger benchmarks

For larger benchmarks, you may want to use nmoo's CLI. First, create a module,
say [`example.py`](https://github.com/altaris/noisy-moo/blob/main/example.py),
containing your benchmark factory (a function that returns your
[benchrmark](https://altaris.github.io/noisy-moo/nmoo/benchmark.html#Benchmark)),
say `make_benchmark()`. Then, run it using
```sh
python -m nmoo run --verbose 10 example:make_benchmark
```
Refer to
```sh
python -m nmoo --help
```
for more information.

# Main submodules and classes

* `nmoo.benchmark.Benchmark`: A `Benchmark` object represents... a benchmark
πŸ€”. At construction, you can specify problems and algorithms to run, how many
times to run them, what performance indicators to compute, etc. Refer to
`nmoo.benchmark.Benchmark.__init__` for more details.
* `nmoo.wrapped_problem.WrappedProblem`: The main idea of `nmoo` is to wrap
problems in layers. Each layer should redefine `pymoo.Problem._evaluate` to
intercept calls to the wrapped problem. It is then possible to apply/remove
noise, keep a call history, log, etc.
* `nmoo.denoisers`: Sublasses of `nmoo.wrapped_problem.WrappedProblem` that
implement denoising algorithms. In a simple scenario, a synthetic problem
would be wrapped in a noise layer, and further wrapped in a denoising layer
to test the performance of the latter.
* `nmoo.noises`: Sublasses of `nmoo.wrapped_problem.WrappedProblem` that apply
noise.

# Contributing

## Dependencies

* `python3.8` or newer;
* `requirements.txt` for runtime dependencies;
* `requirements.dev.txt` for development dependencies (optional);
* `make` (optional).

Simply run
```sh
virtualenv venv -p python3.8
. ./venv/bin/activate
pip install -r requirements.txt
pip install -r requirements.dev.txt
```

## Documentation

Simply run
```sh
make docs
```
This will generate the HTML doc of the project, and the index file should be at
`docs/index.html`. To have it directly in your browser, run
```sh
make docs-browser
```

## Code quality

Don't forget to run
```sh
make
```
to format the code following [black](https://pypi.org/project/black/),
typecheck it using [mypy](http://mypy-lang.org/), and check it against coding
standards using [pylint](https://pylint.org/).

[^quatic21]: Klikovits, S., Arcaini, P. (2021). KNN-Averaging for Noisy
Multi-objective Optimisation. In: Paiva, A.C.R., Cavalli, A.R., Ventura
Martins, P., PΓ©rez-Castillo, R. (eds) Quality of Information and
Communications Technology. QUATIC 2021. Communications in Computer and
Information Science, vol 1439. Springer, Cham.
https://doi.org/10.1007/978-3-030-85347-1_36