Hi I have a very peculiar problem, namely, when I use gurobi with CVX to solve a rather complicated mixed integer problem the cvx_optval does not match the value that I get when I use the resulting variables to compute it. I’ve added the code here. The problem is that when the cvx_optval does not match the result of
L*sum(pmu+nmu)+L*sum(plambda+nlambda)+L*sum(sum(pzeta+uzeta))+L*sum(pg+ng)+norm(Ls+transpose(transpose(Mi)*cost)-mmean*ones(M,1),1)
when it is placed after cvx_end. can anyone tell me why?
cvx_setup
cvx_solver gurobi
cvx_save_prefs
cvx_begin
cvx_precision best
variable al(N, M) binary
variable k(N,M) integer
variable t(N);
variable g(N)
variable pg(N)
variable ng(N)
variable ug(N)
variable bg(N) binary
variable lambda(N);
variable nlambda(N);
variable plambda(N);
variable ulambda(N);
variable blambda(N) binary;
variable zet(N,M);
variable nzeta(N,M);
variable pzeta(N,M);
variable uzeta(N,M);
variable bzeta(N,M) binary;
variable mmu(N);
variable nmu(N);
variable pmu(N);
variable umu(N);
variable bmu(N) binary;
expression cost(N,M);
expression mmean(1);
minimize (norm(Ls+transpose(transpose(Mi)*cost)- mmean*ones(M,1),1)+L*sum(pmu+nmu)+L*sum(plambda+nlambda)+L*sum(sum(pzeta+uzeta))+L*sum(pg+ng))
%constraints of the main optimization problem!.
cost=(RU.*k);
mmmean=0;
for j=1:M
mmean=mmean+Ls(j)+Mi'*cost(:,j);
end
mmean=mmean/M;
for i=1:N
k(i,:)*R(i,:)'>=T(i);
% %constraints for CS.
ug(i)==1/2*(g(i)+ k(i,:)*R(i,:)'-T(i));
(pg(i)-ng(i))==1/2*(g(i)- k(i,:)*R(i,:)'+T(i));
ug(i)-(pg(i)+ng(i))==0
for j=1:M
lambda(i)*RU(i,j)-g(i)*R(i,j)+zet(i,j)==0
uzeta(i,j)==1/2*(zet(i,j)-k(i,j)+al(i,j)*large)
(pzeta(i,j)-nzeta(i,j))==1/2*(zet(i,j)+k(i,j)-al(i,j)*large);
uzeta(i,j)-(pzeta(i,j)+nzeta(i,j))==0
end
%
% %constraints for second equation:
k(i,:)*RU(i,:)'-T(i)<=t(i)
ulambda(i)==1/2*(lambda(i)-k(i,:)*RU(i,:)'+T(i)+t(i));
(plambda(i)-nlambda(i))==1/2*(lambda(i)+k(i,:)*RU(i,:)'-T(i)-t(i));
ulambda(i)-(plambda(i)+nlambda(i))==0;
%constraints for the third equation:
k(i,:)*RL(i,:)'-T(i)>=-t(i)
umu(i)==1/2*(mmu(i)+k(i,:)*RL(i,:)'-T(i)+t(i))
(pmu(i)-nmu(i))==1/2*(mmu(i)-k(i,:)*RL(i,:)'+T(i)-t(i))
umu(i)-(pmu(i)+nmu(i))==0
end
%constraints on individual variables.
k>=0;
k<=al*large;
k>=al
pg>=0;
ng>=0;
ug>=0;
g>=0;
pg<=bg*large;
ng<=(one-bg)*large;
zet>=0;
nzeta>=0;
pzeta>=0;
nzeta>=0;
pzeta<=bzeta*large;
nzeta<=(ones(N,M)-bzeta)*large
t>=0;
plambda>=0;
ulambda>=0;
nlambda>=0;
lambda>=0;
plambda<=blambda*large;
nlambda<=(one-blambda)*large;
mmu>=0;
pmu>=0;
nmu>=0
umu>=0;
pmu<=bmu*large;
nmu<=(one-bmu)*large;
cvx_end
cvx_optval