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.