๐ท Contributing
November 26, 2025 ยท View on GitHub
This project's goal is to facilitate the comparison of quadratic programming solvers for the community of solver users. All contributions are welcome, for example here are some ways to help:
- Add a solver to the benchmark
- Submit a new problem, e.g. one that reflects an application you are working on.
- Create a new test set, distribute it in its own repository, and open a PR to reference it here
Add a solver to the benchmark
- Add a corresponding entry (in the Added section of the upcoming version) to the changelog
- Add the solver name to the
IMPLEMENTED_SOLVERSlist insolver_settings.py - Add the solver to
environment.yaml(update the version ofqpsolversif applicable) - Add the solver to the Solvers table in the readme
- Set any other relevant solver settings in the
define_solver_settingsfunction intest_set.py - Set the solver's absolute tolerance in the
set_eps_absfunction insolver_settings.py - Set the solver's relative tolerance (if applicable) in the
set_eps_relfunction insolver_settings.py - Set the solver's time limit (if applicable) in the
set_time_limitfunction insolver_settings.py
Creating a new test set
The benchmark is organized into test sets. A test set is a Git repository that contains QP problems and results from running the benchmark (all solvers, all settings) on them. To create a new test set:
- Create a new repository for your test set
- You can name your repository
X_qpbenchmarkto indicate the topicXand that it is a qpbenchmark test set (examples:mpc_qpbenchmark,ik_qpbenchmark, ...) - Store your QP problem files in a
data/sub-directory - Create a
results/sub-directory to store the solver performance database and test-set report
- You can name your repository
- Add a main Python file named after the test set, say
foo_bar.py - Implement a
FooBarclass in this file deriving fromqpbenchmark.TestCase- The class name should match the file name in PascalCase)
Check out how this is done in e.g. the Maros-Meszaros test set.