Custom Convex Solvers

Why you should not use off the shelf convex solvers if you care about performance


Off the shelf solvers such as ECOS, SCS, Mosek, or Gurobi are good for prototyping and modest performance, but if you care about solving one problem class extremely quickly then these solvers will not give you maximum performance. In this post we will investigate a particular problem class (robust portfolio optimization) and solver (PIPG) to show how we can beat all off the shelf SOCP solvers by tuning our solver to our problem class.

Robust Portfolio Optimization

Formulate problem

Talk about classical case then extend to chance constraints

page 216


PIPG natively handles quadratic objectives. Most SOCP solvers need to put the quadratic objective in the constraints which results in a larger KKT system to solve.

We will use PIPG which I have an upcoming blog post about (cite xPIPG) You take a step in your gradient direction augmented with the constraint gradient direction, then you do projection and dual update PIPG uses projections to exactly satisfy set D constraints at every iteration

Parse problem into PIPG canonical form

Three constraints: SOC on all of x, non-negative orthant constraints on all elements of x, and equality constraint on x Try putting SOC into D and no shorting into K and vice versa.