QOCO

This website documents the Quadratic Objective Conic Optimizer (QOCO) and the code generator QOCOGEN, developed by the Autonomous Controls Laboratory at the University of Washington. The code for both is available on GitHub.

Standard Form

QOCO (pronounced co-co) is an software package to solve second-order cone programs with quadratic objectives of the following form

\[\begin{split}\begin{split} \underset{x}{\text{minimize}} \quad & \frac{1}{2}x^\top P x + c^\top x \\ \text{subject to} \quad & Gx \preceq_\mathcal{C} h \\ \quad & Ax = b \end{split}\end{split}\]

with optimization variable \(x \in \mathbb{R}^n\) and problem data \(P = P^\top \succeq 0\), \(c \in \mathbb{R}^n\), \(G \in \mathbb{R}^{m \times n}\), \(h \in \mathbb{R}^m\), \(A \in \mathbb{R}^{p \times n}\), \(b \in \mathbb{R}^p\), and \(\preceq_\mathcal{C}\) is an inequality with respect to cone \(\mathcal{C}\), i.e. \(h - Gx \in \mathcal{C}\). Cone \(\mathcal{C}\) is the Cartesian product of the non-negative orthant and second-order cones, which can be expressed as

\[\mathcal{C} = \mathbb{R}^l_+ \times \mathcal{Q}^{q_1}_1 \times \ldots \times \mathcal{Q}^{q_N}_N\]

where \(l\) is the dimension of the non-negative orthant, and \(\mathcal{Q}^{q_i}_i\) is the \(i^{th}\) second-order cone with dimension \(q_i\) defined by

\[\mathcal{Q}^{q_i}_i = \{(t,x) \in \mathbb{R} \times \mathbb{R}^{q_i - 1} \; : \; \|x\|_2 \leq t \}\]

Features

  • Robust: Given that QOCO implements a primal-dual interior point method, it is very robust to ill-conditioning in problem data.

  • Fast: Faster than most commercial and open-source second-order cone solvers (benchmarks coming soon!).

  • Easy to use: Can be called from C, C++, Python and with parsers such as CVXPY making it easy to use.

  • Free and open source: Distributed under the BSD 3-Clause license

  • Embeddable: Written in C, so it can be easily run on any embedded system.

  • Library-free: Does not require any external libraries.

  • Tuning-free: Does not require any hyperparameter tuning to achieve good performance.

  • Code Generation: QOCOGEN is a code-generator which generates extremely fast, library-free custom solvers for second-order cone programs.

Credits

The main developer of QOCO is Govind Chari, who is advised by Behçet Açikmeşe. Both are affiliated with the Autonomous Controls Laboratory at the University of Washington.

QOCO is an adapted implementation of Lieven Vandenberghe’s coneqp solver with various numerical enhancements for stable computation of search directions and is built on the following open-source libraries:

  • qdldl: Responsible for solving the KKT system to compute search directions.

  • OSQP: The C and python interfaces were inspired by OSQP.

  • pybind11: Used to generate QOCO’s python wrapper.

Thank you to Srinidhi Chari for designing the QOCO logo.

Citing

If you find QOCO useful please Cite the related paper and star the repository on GitHub