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
- 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);
- 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