QPgen
What it does
QPgen is a MATLAB toolbox that generates C code that solve convex parametric problems of the form:
minimize | \(\tfrac{1}{2}x^THx+g^Tx+h(Cx)\) |
subject to | \(Ax=b\),
|
where:
\(x\in\mathbf{R}^n\) is the variable to be decided
\(H\in\mathbf{R}^{n\times n}\) is a positive semi definite real data matrix
\(C\in\mathbf{R}^{p\times n}\) and \(A\in\mathbf{R}^{m\times n}\) are fixed data matrices
\(h : \mathbf{R}^p\to\mathbf{R}\cup\{\infty\}\) is a sum of piecewise linear functions which models, e.g.,
The generated C code takes \(g\in\mathbf{R}^n\) and/or \(b\in\mathbf{R}^m\) as inputs and solves the corresponding problem instance.
How it does it
The generated C code uses one of the following three algorithms to solve the optimization problem instances:
The alternating direction method of multipliers (ADMM)
Fast dual proximal gradient method (FGMdual)
Fast primal proximal gradient method (FGMprimal)
Features of the generated C code:
It usually has very good performance (up to 10 000 times faster than standard software, see examples)
It can be made library free
It can be made division free for fixed-point implementations
Keys points that enable good performance:
Optimal preconditioning and parameter selection
Efficient handling of soft constraints (without introducing additional variables)
Solver tailoring to specific parametric program by code generation
Offline matrix factorization
Limited online data checks
|