State of DCP (Disciplined Convex Programming)

There are a few things I’d aim for if I was starting from scratch.

The first two are essentially “Convex.jl but written with 12 years experience in how to write good Julia packages”:

  1. First-class support for Base.Array and broadcasting. Currently Convex keeps everything as AbstractExpr objects that remember their size. Except in rare cases, these objects do not support Julia broadcasting. So you write exp(Variable(2))::Convex.AbstractExpr instead of x = Variable(2)::Vector{Convex.Variable} and exp.(x)::Vector{Convex.AbstractExpr}
  2. Great debugging information to explain how Convex transformed the problem from the user to the conic solver. JuMP has JuMP.print_active_bridges(model), so this would be a layer above that that showed how the nonlinear expressions were lowered to conic constraints.

The stretch goal that Chris and the CVX folks are aiming at is really:

  1. Can you provide a rule system for the user to lower nonlinear expressions to known DCP forms. One example is sqrt(sum_squares(x)) <= 1 is not DCP, even though norm(x) <= 1 is. I want to be able to say something like sqrt(sum_squares(_x)) => norm(_x). I don’t know what the right approach to this is.
5 Likes