OSQP can generate tailored C code that compiles into a fast and reliable solver for the given family of QP problems in which the problem data, but not its dimensions, change between problem instances.
The generated code is:
It does not perform any dynamic memory allocation.
It is not linked to any external library.
There are no division required in the ADMM algorithm
We make a distinction between two cases depending on which of the data are to be treated as parameters.
- Vectors as parameters
Vectors \(q\), \(l\) and \(u\) can change between problem instances. This corresponds to the compiler flag
EMBEDDED=1. \(\rho\) adaptation is not enabled. The generated code is division-free and has a very small footprint.
- Matrices as parameters
Both vectors \(q\), \(l\), \(u\) and values in matrices \(P\) and \(A\) can change between problem instances. This corresponds to the compiler flag
EMBEDDED=2. \(\rho\) adaptation is enabled but the frequency does not rely on any timing. We assume that the sparsity patterns of \(P\) and \(A\) are fixed.