Yalmip works CVX does not

Uncategorized
Dec 14, 2012
H

When solving SDP problem, they uses same SeDuMi solver.
However, while Yalmip works fine, CVX prints indefeasible error.

Below is the optimization part of CVX and YALMIP

  1. Yalmip

yalmip('clear');

nX=sdpvar(n,k);     
nD=sdpvar(k,k);     
nL=sdpvar(k,k);     
Z=sdpvar(k,k);  
gamma=sdpvar(1,1);  

F=lmi(' J*(-nD)*J > 0 ');

for i=1:k-1,
    for j=i+1:k,
        F=F+lmi(' 2*(nX(:,i)-nX(:,j))''*(X(:,i)-X(:,j))  == nD(i,j)+D(i,j) ');    
        F=F+lmi(' nD(i,j) > Rho1' );
        F=F+lmi(' nD(i,j) < 50' );  
    end
end

 for i=1:k,
     for j=1:n,
         F=F+lmi(' nX(j,i)-X(j,i) < Lim ')+lmi(' nX(j,i)-X(j,i) > -Lim ');   
     end
     F=F+lmi(' nD(i,i) == 0 ');
 end

for i=1:k-1,    
    for j=i+1:k,
        F=F+lmi(' Z(i,j) == L(i,j) - p*exp(q*D(i,j))*q*(nD(i,j)-D(i,j)) ');
        F=F+lmi(' nL(i,j) == Z(i,j) ');
    end
    F=F+lmi(' Z(i,i) == 0 ');
    F=F+lmi(' nL(i,i) == -sum(Z(i,:)) ');
end
F=F+lmi(' Z(k,k) == 0 ');
F=F+lmi(' nL(k,k) == -sum(Z(k,:)) ');

F=F+lmi(' Q*nL*Q'' > gamma*eye(k-1) ');

OPTIONS = sdpsettings('verbose', 1);
Sol=solvesdp(F,-gamma,OPTIONS);

  1. CVX

    cvx_begin sdp
    variable nX(n, k);
    variable nD(k, k);
    variable nL(k, k);
    variable Z(k, k);
    variable Gamma(1, 1);
    
    minimize (-Gamma)
    subject to
        J*(-nD)*J > 0
        for i=1:k-1
            for j=i+1:k
                2*( nX(:,i)-nX(:,j) )'*(X(:,i)-X(:,j))  == nD(i,j)+D(i,j);
                nD(i,j) > Rho1
                nD(i,j) < 50
            end
        end
        for i=1:k,
         for j=1:n,
             nX(j,i)-X(j,i) < Lim
             nX(j,i)-X(j,i) > -Lim
         end
         nD(i,i) == 0 
        end
        for i=1:k-1,    
            for j=i+1:k,
                Z(i,j) == L(i,j) - p*exp(q*D(i,j))*q*(nD(i,j)-D(i,j))
                nL(i,j) == Z(i,j) 
            end
            Z(i,i) == 0 
            nL(i,i) == -sum(Z(i,:)) 
        end
        Z(k,k) == 0 
        nL(k,k) == -sum(Z(k,:)) 
        Q*nL*Q' > Gamma*eye(k-1)
cvx_end
M

Have you tried both SDPT3 and SeDuMi; and if so, does it give the same answer?

Also, make sure you declare your variables such as nD, nL, and Z to be symmetric if that is what you intend for them to be.

You’re welcome to submit a bug report for this at http://support.cvxr.com, but if you do, please make sure to include not just the model but the data used as well. If I cannot reproduce the exact version of the model you are solving, I can’t solve it.