Why presolve takes so long?


(Jo Ne) #1

I have the following problem:

cvx_begin

variable SegIntsU(Uteams,1) integer;
variable SegIntsV(Vteams,1) integer;
variable SegIntsW(Wteams,1) integer;

variable nonUvars(length(nonUpoints),1);
variable nonVvars(length(nonVpoints),1);
variable nonWvars(length(nonWpoints),1);

minimize(norm(G*(filterU*[SegIntsU;nonUvars]) - rhs(:,1),2)+norm(G*(filterV*[SegIntsV;nonVvars]) - rhs(:,2),2)+norm(G*(filterW*[SegIntsW;nonWvars])-rhs(:,3),2));

subject to

nonUvars(1,1) == 0;
nonWvars(1,1) == 0;
nonVvars(1,1) == 0;

cvx_end

The integer variables are very few, approximately 20. The actual program has very easy constraints and is simply the minimization of a quadratic energy. If I have understood correctly the first phase of solving is a pure CVX step and then finally the solver is called to actually solve the program. Once Gurobi is called, the solution comes up pretty fast. But the first step takes a bit long.
Question a: I suppose CVX is preparing for something more difficult/general, thus prepares a lot for actually a not so difficult problem. Is there a way to reduce this step manually somehow?
Question b: FilterU is an adjacency matrix. Is it better to put complicated formulas in the energy like this, or create equality constraints? Or more generally put: Should constraints be as spartan as possible or the energy as concrete as possible?

This is a somewhat long and complicated question. If anyone has anything to suggest, feel free to ask for more clarifications.

Thanks in advance