This is supposed to be a fairly difficult MIQP. However, when I run it I get quickly: INFEASIBLE:
Tried aggregator 2 times. MIQP Presolve eliminated 1 rows and 1 columns. MIQP Presolve modified 248 coefficients. Aggregator did 52 substitutions. Reduced MIQP has 125 rows, 548 columns, and 3696 nonzeros. Reduced MIQP has 496 binaries, 0 generals, 0 SOSs, and 0 indicators. Reduced MIQP objective Q matrix has 52 nonzeros. Presolve time = 0.00 sec. Probing time = 0.00 sec. Clique table members: 654. MIP emphasis: balance optimality and feasibility. MIP search method: dynamic search. Parallel mode: none, using 1 thread. Tried aggregator 1 time. No QP presolve or aggregator reductions. Presolve time = 0.00 sec. Parallel mode: none, using 1 thread for barrier Number of nonzeros in lower triangle of A*A' = 2360 Using Approximate Minimum Degree ordering Total time for automatic ordering = 0.00 sec. Summary statistics for Cholesky factor: Rows in Factor = 125 Integer space required = 241 Total non-zeros in factor = 3007 Total FP ops to factor = 90075 Itn Primal Obj Dual Obj Prim Inf Upper Inf Dual Inf 0 1.4172319e+007 -1.4172911e+007 2.45e+003 5.04e+002 2.77e+007 1 1.2037355e+007 1.0009350e+007 1.78e+002 3.66e+001 2.01e+006 2 1.1903244e+007 1.1658232e+007 2.15e+001 4.42e+000 2.43e+005 3 1.1888608e+007 1.1839300e+007 4.33e+000 8.90e-001 4.89e+004 4 1.1885153e+007 1.1882071e+007 2.71e-001 5.56e-002 3.05e+003 5 1.1884924e+007 1.1884909e+007 1.33e-003 2.73e-004 1.50e+001 Barrier time = 0.05 sec. Total time on 1 threads = 0.05 sec. Root relaxation solution time = 0.05 sec. Nodes Cuts/ Node Left Objective IInf Best Integer Best Bound ItCnt Gap 0 0 infeasible 5 Root node processing (before b&c): Real time = 0.05 Sequential b&c: Real time = 0.00 ------- Total (root+branch&cut) = 0.05 sec. MIQP status(119): integer infeasible or unbounded
Problem is integer infeasible.
**** SOLVER STATUS 1 Normal Completion **** MODEL STATUS 10 Integer Infeasible **** OBJECTIVE VALUE NA |
OK, but that sounds not really correct. I found a good integer solution with a linearized objective (same constraints). So lets fix the integer variables and see what happens:
* solve MIP
solve gms1 minimizing z using mip;
* fix integer variables
x.fx(i,t) = x.l(i,t);
* and feed it into MIQP solver
solve gms2 minimizing z using miqcp;
Now I see:
Tried aggregator 1 time. MIQP Presolve eliminated 178 rows and 601 columns. All rows and columns eliminated. Presolve time = 0.00 sec. MIQP status(101): integer optimal solution Fixing integer variables, and solving final QP.. Tried aggregator 1 time. QP Presolve eliminated 178 rows and 601 columns. All rows and columns eliminated. Presolve time = 0.00 sec. Total time on 1 threads = 0.00 sec. QP status(1): optimal Proven optimal solution. MIP Solution: 14817439.000000 (0 iterations, 0 nodes) Final Solve: 14817439.000000 (0 iterations)
|
Hmm, so not integer infeasible after all. Some more experiments yielded:
- Using MIPSTART with the MIP solution allowed the MIQP solver to proceed
- Scaling the objective cause the MIQP to proceed also. The scaling looks like:
objective2.. z =e= sum(t,sqr(reserves(t)))/1e6;
Don’t always trust the messages from the solvers…
Your comment about scaling makes me wonder whether the model has numerical challenges. Do you get similar behavior from other solvers?
ReplyDeleteOther solvers including Gurobi seem fine. The model is not that big, and except for the somewhat large objective values of order 1e7 I don't see much that scares me.
ReplyDeleteIn SAT we do fuzz-testing. A. Biere and R. Brummayer did this first, and it's a great way to find bugs. dl.acm.org/citation.cfm?id=2164081 I wonder if these solvers were tested with such tools? They are not easy to write (for proper testing -- i.e. generating meaningful and hard, but not too hard problems), but I have found that it's well worth the effort.
ReplyDelete