Contraint on minimum interval between 1 in 0-1 matrix

suppose there is a 0-1 matrix in 1*N like [0 0 1 1 0], i want to contrain minimum interval between 1. for example,the minimum distance between 1 is 2: [1 0 0 1] is great but [1 0 1] is not needed. how do i express this contraint in cvx

You can limit the number of 1s of every three adjacent elements to at most 1 , by limiting their sum to be smaller than 1. You might use a for-loop to do that or vectorize it to make it run faster.

thanks. and if this matrix isn’t a 0-1 matrix, i want to use 1 to represent not 0, and use 0 to represent 0. for example, i want to transfer [0.1 3 0 0.2 0 ] to [1 1 0 1 0] and then process it using methods you provide, how can i do?

i provide a code for matrix to vectorize

for i=1:ele_num
for ii=1:ele_num
if i<3
E(i,ii)=0;
else
if ii==i||ii==i-1||ii==i-2
E(i,ii)=1;
else
E(i,ii)=0;
end
end
end
end

E is like
1 1 1 …
0 1 1 1 …
0 0 1 1 1…

The transfer you mentioned is not convex. But maybe your question is related to l0-norm. For the second question, searching "vectorize " using the search box of this forum might help.

Presuming all the elements to be transferred are nonnegative, as I think is the case, I think you can use 1-y in place of y in the solution https://or.stackexchange.com/questions/4735/how-to-apply-big-m-to-model-the-logic-constraint-if-then-else/4773#4773 . If this is not quite right, you can make the needed adjustments.

You can declare
y(ele_num) binary

then enter the double-sided inequality constraint from the linked solution (replacing y with 1-y), and that will be a vectrorized double-sided constraint, with no for loops required.

1 Like