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.

See Error using Mosek Solver with binary constraints and Mixed Integer SDPs which are not Mixed Integer SOCPs .

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)

Copyright © 1998-2014 MOSEK ApS, Denmark. WWW: http://mosek.com

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.

Optimizer - threads : 2

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.