I have a linear constraint in the form below
\zeta_u\ge\sqrt{\sum_{c=1}^C(1-x_{u,c})y_{u,c}+z},\hspace{2mm}\forall u=1,\cdots,U
Here, \zeta_u (continuous) and x_{u,c} (binary) are optimization variables.
z is a constant.
How to write it in CVX format? Can we use norm or any other operator?
Is this valid in CVX?
variable X(U,C) binary
variable S(U,C) binary
variable Zeta(U)
for c=1:C
for u=1:U
S(u,c)==1-X(u,c);
end
end
for u=1:U
Zeta(u)>=norm[z;S(u,:).*Y(u,:)];
end
Your original formulation, which you have now edited out, will not be accepted by CVX, because it is
affine expression >= concave expression
.
Presuming y_{n,c} are constants, which seems to be the case, and are nonegative, you ought to be able to adapt my answer at https://or.stackexchange.com/questions/1052/linearize-or-approximate-a-square-root-constraint/1053#1053 to express the right-hand side using norm
. I believe you will need to introduce a new binary variable constrained to equal one minus the existing variable, and use that in the norm
.
The constraint is not linear, but formulated per my answer, is a convex SOCP constraint.
Sorry, my mistake, yes, it is a conic constraint. Also, y_{u,c} are constants (>0)
Would you please have a look at my edit. Is this valid now. Or I should use the square root of y_{u,c}.
For example,
T(u,c)=sqrt(Y(u,c))
for u=1:U
Zeta(u)>=norm[z;S(u,:).*T(u,:)];
end
You need square root on z
.
You can more simply and efficiently use
S == 1-X
instead of the double for loop.