SDP dualization inefficient MOSEK?

Hi, I've noticed that solving one specific SDP problem with PICOS is quite slow as compared to YALMIP and CVXPY. Looking at the number of variables and constraints that are passed to the solver, I understand that CVXPY (and YALMIP) dualize the problem. I used the "dualize" option for PICOS but it does not make the program solving any faster.

The primal of my program is formulated as follows

min -lambda s.t. F0 + \sum_i x_i F_i - lambda * Id >> 0

the dual (which I did by hand)

max -<Z,F0> s.t. Z >> 0, <Z,F_i>=0, <Z, Id> = 1 where <A,B>=TrAB

The optimal value is around 0.17 for the objective function, and -0.17 for the variable lambda.

In my matrix I have many entries (i,j) equal to constants. This is encoded in the F0. And I also have many entries equal between themselves which is encoded in the Fi's (Fi take the form of symmetric matrices with value 1 at positions (i,j) where x_i is located and 0 everywhere else). The way I formulated the dual is quite inefficient as it defines a big dual matriz Z, which is why I assume is slower. My guess is that the built-in dualization that YALMIP and CVXPY use is more efficient than the manual dual I wrote.

I haven't dug in too deep, but it's possible that this issue is related to this issue or this issue from CVXPY, where someone complains about CVXPY adding n(n+1)/2 auxiliary scalar variables which affects performance. Is it possible that this problem exists in PICOS as well?

In "SDP_comparison.zip" you can find the primal and duals as expressed above implemented in CVXPY, PICOS and YALMIP and you can see that YALMIP and CVXPY solve the primal (which I presume they dualize) in 0.2s or so, and the other options in 20s.

SDP_comparison.zip

Thank you for your time.

Bests

Cristian

Edited by ECB