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”:
- First-class support for
Base.Array
and broadcasting. Currently Convex keeps everything asAbstractExpr
objects that remember their size. Except in rare cases, these objects do not support Julia broadcasting. So you writeexp(Variable(2))::Convex.AbstractExpr
instead ofx = Variable(2)::Vector{Convex.Variable}
andexp.(x)::Vector{Convex.AbstractExpr}
- 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:
- 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 thoughnorm(x) <= 1
is. I want to be able to say something likesqrt(sum_squares(_x)) => norm(_x)
. I don’t know what the right approach to this is.