How to explain this? (Mosek\Gurobi\SDPT3)

(1)For the same model (in CVX) and same data, the cvx feeds solvers with much different constraints, is it abnormal?

Calling Gurobi 5.62: 2051 variables, 2016 equality constraints

Calling Mosek 2051 variables, 35 equality constraints
For improved efficiency, Mosek is solving the dual problem.

Calling SDPT3 4.0: 2051 variables, 35 equality constraints
For improved efficiency, SDPT3 is solving the dual problem.

(2)The solution is almost the same, except some items within 10E-10, but the time consumption: 4.20 secs, 0.34 secs, 2.63 secs accordingly.

(3)Is that means Mosek is a better choice? Or how to explain the results?

PS: I don’t have enough karma, so I upload my files to my gdrive.

Here is the code(cvx_lassso)\ data(temp.mat)\ results(temp_***.mat)\log(temp_***.log)

Yes, MOSEK is definitely the fastest in this case. SDPT3 is, to be honest, the slowest solver of the bunch, typically.

However, notice the statement, “For improved efficiency, is solving the dual problem…” In short, CVX actually has two problems to choose from when it solves your model: a primal form and a dual form. CVX usually tries to pick the most efficient of the two, the most compact of the two. That is what is happening with MOSEK and SDPT3.

However, Gurobi uses a different algorithm than MOSEK and SDPT3. One of the consequences of that algorithm is that the dual problem isn’t quite as accurate as the primal problem. Because of that, I choose not to pass the dual problem to Gurobi—I favor accuracy over speed. Gurobi is always improving their algorithm, though, and over time, I may indeed enable this “dualization” capability for Gurobi. When that happens, I expect MOSEK and Gurobi to be much more comparable in speed.