Skip to main content

Benchmark toolkit for optimization

Project description

Test Status Python 3.6+ codecov

BenchOpt is a benchmarking suite for optimization algorithms. It is built for simplicity, transparency, and reproducibility.

Benchopt is implemented in Python, and can run algorithms written in many programming languages (example). So far, Benchopt has been tested with Python, R, Julia and C/C++ (compiled binaries with a command line interface). Programs available via conda should be compatible.

BenchOpt is run through a command line interface as described in the API Documentation. Replicating an optimization benchmark should be as simple as doing:

conda create -n benchopt python
conda activate benchopt
pip install benchopt
git clone https://github.com/benchopt/benchmark_logreg_l2
cd benchmark_logreg_l2
benchopt install -e . -s lightning -s sklearn
benchopt run -e . --config ./example_config.yml

Running this command will give you a benchmark plot on l2-regularized logistic regression:

https://benchopt.github.io/_images/sphx_glr_plot_run_benchmark_001.png

See the Available optimization problems below.

Learn how to create a new benchmark using the benchmark template.

Install

The command line tool to run the benchmarks can be installed through pip. In order to allow benchopt to automatically install solvers dependencies, the install needs to be done in a conda environment.

conda create -n benchopt python
conda activate benchopt

To get the latest release, use:

pip install benchopt

To get the latest development version, use:

pip install -U -i https://test.pypi.org/simple/ benchopt

Then, existing benchmarks can be retrieved from git or created locally. For instance, the benchmark for Lasso can be retrieved with:

git clone https://github.com/benchopt/benchmark_lasso

Command line interface

The preferred way to run the benchmarks is through the command line interface. To run the Lasso benchmark on all datasets and with all solvers, run:

benchopt run --env ./benchmark_lasso

To get more details about the different options, run:

benchopt run -h

or read the CLI documentation.

Benchopt also provides a Python API described in the API documentation.

Available optimization problems

Problem

Results

Build Status

Ordinary Least Squares (OLS)

Results

Build Status OLS

Non-Negative Least Squares (NNLS)

Results

Build Status NNLS

LASSO: L1-Regularized Least Squares

Results

Build Status Lasso

LASSO Path

Results

Build Status Lasso Path

Elastic Net

Build Status ElasticNet

MCP

Results

Build Status MCP

L2-Regularized Logistic Regression

Results

Build Status LogRegL2

L1-Regularized Logistic Regression

Results

Build Status LogRegL1

L2-regularized Huber regression

Build Status HuberL2

L1-Regularized Quantile Regression

Results

Build Status QuantileRegL1

Linear SVM for Binary Classification

Build Status LinearSVM

Linear ICA

Build Status LinearICA

Approximate Joint Diagonalization (AJD)

Build Status JointDiag

1D Total Variation Denoising

Build Status TV1D

2D Total Variation Denoising

Build Status TV2D

ResNet Classification

Results

Build Status ResNetClassif

Citing Benchopt

If you use Benchopt in a scientific publication, please cite the following paper

@article{benchopt,
   author = {Moreau, Thomas and Massias, Mathurin and Gramfort, Alexandre and Ablin, Pierre
             and Bannier, Pierre-Antoine and Charlier, Benjamin and Dagréou, Mathieu and Dupré la Tour, Tom
             and Durif, Ghislain and F. Dantas, Cassio and Klopfenstein, Quentin
             and Larsson, Johan and Lai, En and Lefort, Tanguy and Malézieux, Benoit
             and Moufad, Badr and T. Nguyen, Binh and Rakotomamonjy, Alain and Ramzi, Zaccharie
             and Salmon, Joseph and Vaiter, Samuel},
   title  = {Benchopt: Reproducible, efficient and collaborative optimization benchmarks},
   year   = {2022},
   url    = {https://arxiv.org/abs/2206.13424}
}

BSD 3-Clause License

Copyright (c) 2019–2022 The Benchopt developers. All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

  3. Neither the name of the Benchopt Developers nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

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

benchopt-1.3.1.tar.gz (363.8 kB view hashes)

Uploaded source

Built Distribution

benchopt-1.3.1-py3-none-any.whl (149.5 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page