I have a piece of code in which there is a binary matrix (A) as CVX variable. In some cases, program returns a non-binary value in binary matrix.
How is it possible?
> function BLP_Function_940825(n, p, Relax_Enable)
> D = ones(n,n);
> JT = ones(n,n);
> C = 3*ones(p,3);
> miu = 1;
> Topology_Generator;
> [flowStart, flowEnd,C(:,3)] = ReadFlows(p,n);
> CT=C(:,3)';
> PT=2*CT;
> cvx_begin
> cvx_solver MOSEK
> variable A(n,n,p) binary;
> subject to
> for i=1:n
> for j=1:n
> if ~B(i,j)
> for f=1:p
> A(i,j,f)==0
> end
> end
> end
> end
> for f = 1:p
> sum(sum(A(:,:,f).*D))<=C(f,1) %(3)
> sum(sum(A(:,:,f).*JT))<=C(f,2) %(5)
> end
> temp = permute(A, [1 3 2]);
> for i = 1:n
> for j = 1:n
> temp(i,:,j)*C(:,3)<=miu*B(i,j) %(7)
> end
> end
> for f = 1:p
> sum(A(:, flowStart(f),f)) == 0%8
> sum(A(flowEnd(f),:,f)) == 0%9
> sum(A(flowStart(f),:,f)) == 1%10
> sum(A(:,flowEnd(f),f)) == 1%11
> end
> for f = 1:p
> for i = 1:n
> if i~=flowStart(f) && i~=flowEnd(f)
> sum(A(i,:,f)) == sum(A(:,i,f))
> end
> sum(A(i,:,f))<=1
> end
> end
> Obj = 0;
> for i = 1:n
> for j = 1:n
> tmp=0;
> if B(i,j)~=0
> for f = 1:p
> tmp = tmp+A(i,j,f)*max(PT(f),CT(f));
> end
> Obj = max(tmp/B(i,j), Obj);
> end
> end
> end
> minimize(Obj)
> cvx_end
> Display_Result
> end