# MOSEK SDP integer programming

I used the mosek in cvx to solve a semidefinite program problem, which consists of the binary variables, but it alway appears the mistake such the following:
Error using cvx_throw (line 22)
MOSEK does not support integer constraints in semidefinite programs.
Does the MOSEK support the integer programming? The version of the solver is 7.1.

Thank you for your reply, but it is confusing for me to understand this interpretation. Does the MOSEK is not support the SDP problem with binary variables in CVX (we do not relax this binary variables to the continuous) ?

I believe that if CVX sends your problem to MOSEK as an SOCP, binary and integer variables are supported, but if CVX sends your problem to MOSEK as an SDP, binary and integer variables are not supported.

I leave any further elaboration on the discussion in Mixed Integer SDPs which are not Mixed Integer SOCPs to @mcg and @Erling

Actually, except the binary constraints, I express others with the SDP formulation. Does the cvx still will transform the problem to the SOCP?

Mark is correct. There are no solvers available for CVX that can handle semidefinite constraints and binary variables simultaneously.

i can transform the problem to socp formulation with the binary constraint, does the cvx with moske solver work well?

@mcg@ Mark_L_Stone I used the mosek solver to solve the socp problem with the binary constraitn, and it can work well. However, the obtained solution is amazing, because the status is “solved”, but the optimal value is NaN, could you tell me the reason?

Perhaps if you show your CVX formulation and CVX and solver output (or at least the output), @mcg or @Erling can assess the situation.

Thank you for your suggest @Mark_L_Stone. The following is my** cvx code**

cvx_begin
cvx_solver Mosek

%%% define variables %%%
variable w(antenna_num,group_num) complex;
variable delta(user_num,group_num) binary;

for i = 1:group_num
total_power(i) = norm(w(:,i))^2;
end

minimize (rou*sum(total_power)-sum(sum(delta)));
subject to

%% the first constraint %%%%%%%%

for i = 1:user_num
interference = [];
for j =1:group_num
if j == 1
for m=2:group_num
interference = [interference,w(:,m)’*channel(:,i)];
end
elseif j==group_num
for m=1:group_num-1
interference = [interference,w(:,m)’*channel(:,i)];
end
else
for m=1:j-1
interference = [interference,w(:,m)’*channel(:,i)];
end
for m=j+1:group_num
interference = [interference,w(:,m)’*channel(:,i)];
end
end
real(w(:,j)‘channel(:,i)) + M(i)(1-delta(i,j)) >= sqrt(gamma(i))*norm([interference,sigma]);
imag(w(:,j)’*channel(:,i)) == 0;
end
end

%% second constraint %%%%%
sum(total_power) <= P;

%% thrid constraint %%%%%

for i =1:user_num
sum(delta(i,:))<=1;
end

cvx_end

## and the output is that Calling Mosek 7.1.0.41: 328 variables, 87 equality constraints For improved efficiency, Mosek is solving the dual problem.

MOSEK Version 7.1.0.12 (Build date: 2014-12-12 09:23:33)
Platform: Windows/32-X86

Computer
Platform : Windows/32-X86
Cores : 2

Problem
Name :
Objective sense : min
Type : CONIC (conic optimization problem)
Constraints : 87
Cones : 33
Scalar variables : 328
Matrix variables : 0
Integer variables : 27

Optimizer started.
Mixed integer optimizer started.
BRANCHES RELAXS ACT_NDS BEST_INT_OBJ BEST_RELAX_OBJ REL_GAP(%) TIME
0 1 0 NA 4.9999996011e+000 NA 0.1
0 1 1 5.0000000000e+000 4.9999996011e+000 7.98e-006 0.1
An optimal solution satisfying the relative gap tolerance of 1.00e-002(%) has been located.
The relative gap is 7.98e-006(%).

Objective of best integer solution : 5.000000000000e+000
Best objective bound : 4.999999601110e+000
Construct solution objective : Not employed
Construct solution # roundings : 0
User objective cut value : 0
Number of cuts generated : 0
Number of branches : 0
Number of relaxations solved : 1
Number of interior point iterations: 15
Number of simplex iterations : 0
Time spend presolving the root : 0.02
Time spend in the heuristic : 0.00
Time spend in the sub optimizers : 0.00
Time spend optimizing the root : 0.02
Mixed integer optimizer terminated. Time: 0.11

Optimizer terminated. Time: 0.20

Integer solution solution summary
Problem status : PRIMAL_FEASIBLE
Solution status : INTEGER_OPTIMAL
Primal. obj: 5.0000000000e+000 Viol. con: 0e+000 var: 0e+000 cones: 8e-017 itg: 0e+000
Optimizer summary
Optimizer - time: 0.20
Interior-point - iterations : 0 time: 0.00
Basis identification - time: 0.00
Primal - iterations : 0 time: 0.00
Dual - iterations : 0 time: 0.00
Clean primal - iterations : 0 time: 0.00
Clean dual - iterations : 0 time: 0.00
Clean primal-dual - iterations : 0 time: 0.00
Simplex - time: 0.00
Primal simplex - iterations : 0 time: 0.00
Dual simplex - iterations : 0 time: 0.00
Primal-dual simplex - iterations : 0 time: 0.00
Mixed integer - relaxations: 1 time: 0.11

Status: Solved
Optimal value (cvx_optval): NaN

Why the status is solved, but the optimal value is NaN? @mcg @Erling

That does indeed suggest a bug in the CVX MOSEK shim. I hate to disappoint you but I don’t know when I’m going to be able to work on a fix.