PLS help for the following constraint


#1

The integer variable k, need to be constrainted to changed less than 5 times during 24 hours. The constraint sum(sub~=0)<=5 is not following CVX style, please help.

cvx begin

variable k(24) integer

max/min objective

subject to
	-6<=k<=6

	initial=0;
	sub(1)=k(1)-initial;
	for i=2:24
    	    sub(i)=k(i)-k(i-1);
	end
	sum(sub~=0)<=5
cvx end

(Michael C. Grant) #2

The largest possible difference between two adjacent values of k is 12. We can use that to specify the problem as follows:

variable k(24) integer
variable b(24) binary
-6 <= k <= 6;
-12 * b <= k - [ initial;k(1:end-1) ] <= 12 * b;
sum( b ) <= 5;

The b variable is 1 when there is a change, and 0 when there is not. When b(i) is 0, it forces k(i)-k(i-1) to be zero. When b(i) is 1, it allows the same quantity to float between -12 and 12.


#3

many many thanks to mcg, it works.

Can I add a new sign function like sign in matlab to the atom library for the solving? In the function creation in CVX, is if …then… allowed? Thanks.

kk=abs(sign(k-[initial;k(1:end-1)]));
sum(kk)<=5;

(Michael C. Grant) #4

No to both questions. You have to do these kinds of things by hand. In particular you have to supply the minimum and maximum values of k to even be able to do this.