jump-dev / Pajarito.jl

A solver for mixed-integer convex optimization
Mozilla Public License 2.0
131 stars 22 forks source link

RSOC transformation #315

Closed mlubin closed 7 years ago

mlubin commented 7 years ago

We should probably use the norm-preserving transformation described at: http://docs.mosek.com/modeling-cookbook/cqo.html#rotated-quadratic-cones

Our transformation as implemented makes it harder to compare violations in the SOC and RSOC space.

chriscoey commented 7 years ago

(y,z,x) in RSOC <=> (y+z,-y+z,sqrt2*x) in SOC, y >= 0, z >= 0 becomes (y,z,x) in RSOC <=> (1/sqrt2*(y+z),1/sqrt2*w,x) in SOC, y >= 0, z >= 0, w >= -y+z, w >= -z+y

chriscoey commented 7 years ago

actually, I vote this: (y,z,x) in RSOC <=> (1/sqrt2*(y+z),1/2*(-y+z),1/2*(y-z),x) in SOC, y >= 0, z >= 0

no need for extra variables. don't lose the symmetry information. get extra cuts for free.

mlubin commented 7 years ago

How do these all relate? It'd be nice to see a plot in the y >= x^2 space.

The transformation you just proposed is potentially problematic for the conic solvers because it would take a problem with a strict interior and turn it into a problem without one where the cone implicitly lies in some subspace. The reformulation with the extra variable doesn't have this issue.

chriscoey commented 7 years ago

many problems of interest will have cones in subspaces, right?

mlubin commented 7 years ago

Yes, but I'd say it's a good idea to avoid transformations that can take a potentially well posed problem and turn it into one that is less easy for the conic solvers to handle, given that we know that the conic solvers are the least reliable part of the algorithm.

chriscoey commented 7 years ago

but for SOCs, conic solvers are very reliable

mlubin commented 7 years ago

I'd rather have an extra variable than an extra SOC dimension.

get extra cuts for free.

What extra cuts do you get for free? Can you give a concrete example?

chriscoey commented 7 years ago

you get the cut if you had chosen -y+z and the cut if you had chosen z-y.

and OK, then I'll code the extra variable

chriscoey commented 7 years ago

closed by #316