๐Ÿ‘ท 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

  • Add a corresponding entry (in the Added section of the upcoming version) to the changelog
  • Add the solver name to the IMPLEMENTED_SOLVERS list in solver_settings.py
  • Add the solver to environment.yaml (update the version of qpsolvers if applicable)
  • Add the solver to the Solvers table in the readme
  • Set any other relevant solver settings in the define_solver_settings function in test_set.py
  • Set the solver's absolute tolerance in the set_eps_abs function in solver_settings.py
  • Set the solver's relative tolerance (if applicable) in the set_eps_rel function in solver_settings.py
  • Set the solver's time limit (if applicable) in the set_time_limit function in solver_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_qpbenchmark to indicate the topic X and 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
  • Add a main Python file named after the test set, say foo_bar.py
  • Implement a FooBar class in this file deriving from qpbenchmark.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.