How to express the non-convex constraint xy>10 in CVX form, with 0<x<100, 0<y<100?
This is a rotated second order cone,
{sqrt(10),x,y} == rotated_lorentz(1)
And add the constraints:
x <= 100
y <= 100
Note that CVX will treat <
as <=
If you really need these strictly less than 100, change the RHS to 1-1e-6…
The rotated_lorentz constraint automatically constrains x
and y
to be >= 0
http://cvxr.com/cvx/doc/funcref.html#sets
This is one of the rare times on this forum in which someone claims something is non-convex, but it actually is convex. Usually, it’s the other way around.
Thanks a lot, Mark. I still have a question. If the case is x*y>z, with x,y,z being variables, how can I express this constraint in CVX?
You can’t.
Rotated second order cone can handle
norm(z)^2 <= x*y
or
norm(z) <= sqrt(x*y)
So you would need a variable q
which would represent sqrt(z)
, and you’d have to be “content” (i.e., able) to use q
and never z
in your program.