How to constrain second order cone program so vector elements are either x or zero?

105 Views Asked by At

I have a $n$-length vector $v_i$ and I have the constraint $||v_i||_2 \leq \mu_i \forall i$ in my second order cone program (where $||.||_2$ is the L-2 norm). I want to add a constraint (either an equality or inequality constraint) that says any of the elements of each $v_i$ can be zero but the non-zero elements must otherwise be equal and in $\mathbb{R}_{>0}$. $v_i$ is an unknown optimisation variable. However, I haven't found a way of doing this - any ideas? (And whether such a constraint would result in a convex program?).

1

There are 1 best solutions below

2
On BEST ANSWER

This can be formulated as a Mixed-Integer Second Order Cone Problem (MISOCP), presuming the rest of your problem is compliant with SOCP, and will have a convex continuous relaxation.

Introduce binary variables $b_i$. Declare x to be a continuous scalar variable. Each $u_i$ will be a continuous variable (element), and will appear in the model the same as it would without your additional constraint.

Your additional constraint can be handled by considering $u_i$ as the product $x*b_i$, even though this product is not explicitly used in the model. Instead, this is accomplished by linearizing this product of continuous and binary variables by adding additional (Big M) linear constraints as follows:

$0 \le x \le \text{min}(\mu_i)$

$0 \le u_i \le \text{min}(\mu_i) b_i$

$0 \le x - u_i \le \text{min}(\mu_i) (1 - b_i)$

I determined the Big M values based on it having to be true that $0 \le u_i \le \text{min}(\mu_i)$