Skip to main content Link Menu Expand (external link) Document Search Copy Copied

PIQP is a Proximal Interior Point Quadratic Programming solver, which can solve dense and sparse quadratic programs of the form

\[\begin{aligned} \min_{x} \quad & \frac{1}{2} x^\top P x + c^\top x \\ \text {s.t.}\quad & Ax=b, \\ & Gx \leq h, \\ & x_{lb} \leq x \leq x_{ub}, \end{aligned}\]

with primal decision variables \(x \in \mathbb{R}^n\), matrices \(P\in \mathbb{S}_+^n\), \(A \in \mathbb{R}^{p \times n}\), \(G \in \mathbb{R}^{m \times n}\), and vectors \(c \in \mathbb{R}^n\), \(b \in \mathbb{R}^p\), \(h \in \mathbb{R}^m\), \(x_{lb} \in \mathbb{R}^n\), and \(x_{ub} \in \mathbb{R}^n\). Combining an infeasible interior point method with the proximal method of multipliers, the algorithm can handle ill-conditioned convex QP problems without the need for linear independence of the constraints.

For more detailed technical results see our pre-print:

PIQP: A Proximal Interior-Point Quadratic Programming Solver
R. Schwan, Y. Jiang, D. Kuhn, C.N. Jones
ArXiv, 2023

Features

  • PIQP is written in header only C++ 14 leveraging the Eigen library for vectorized linear algebra.
  • Dense and sparse problem formulations are supported. For small dense problems, vectorized instructions and cache locality can be exploited more efficiently.
  • Interface to Python with many more to follow.
  • Allocation free problem updates and re-solves.
  • Open source under the BSD 2-Clause License.

Interfaces

PIQP support a wide range of interfaces including

  • C/C++ (with Eigen support)
  • Python
  • Matlab/Octave
  • R
  • Julia (soon)
  • Rust (soon)

Credits

PIQP is developed by the following people:

  • Roland Schwan (main developer)
  • Yuning Jiang (methods and maths)
  • Daniel Kuhn (methods and maths)
  • Colin N. Jones (methods and maths)

All contributors are affiliated with the Laboratoire d’Automatique and/or the Risk Analytics and Optimization Chair at EPFL, Switzerland.

This work was supported by the Swiss National Science Foundation under the NCCR Automation (grant agreement 51NF40_180545).

PIQP is an adapted implementation of work by Spyridon Pougkakiotis and Jacek Gondzio, and is built on the following open-source libraries:

  • Eigen: It’s the work horse under the hood, responsible for producing optimized numerical linear algebra code.
  • ProxSuite: The code structure (folder/namespace structure, etc.), some utility functions/helper macros, and the instruction set optimized python bindings are based on ProxSuite.
  • SuiteSparse - LDL (modified version): Used for solving linear systems in the sparse solver.
  • pybind11: Used for generating the python bindings.
  • cpu_features: Used for run-time instruction set detection in the interface bindings.
  • OSQP: The C and Matlab interface is inspired by OSQP.
  • Clarabel: Parts of the iterative refinement scheme are inspired by Clarabel’s implementation.

License

PIQP is licensed under the BSD 2-Clause License.