#24 closed defect (migrated)
Clp QP simple simplex failure
Reported by: | nowozin | Owned by: | somebody |
---|---|---|---|
Priority: | major | Milestone: | |
Component: | component1 | Version: | |
Keywords: | Cc: |
Description
Using Clp trunk from 2008/09/15, I setup a QP problem as follows:
ClpSimplex* simplex = new ClpSimplex(); CoinPackedMatrix* matrix = new CoinPackedMatrix(false, 0, 0); // ... matrix->setDimensions(0, number_columns); // ... simplex->loadProblem(*matrix, varLB, varUB, objective, rowLB, rowUB); // Setup the quadratic part of a simple "x'Ix + f'x" objective // ... simplex->loadQuadraticObjective(number_columns, start, column, w_q); // Add some rows (~2000) of the form for (...) { // ... simplex->addRow(dim + 1, col_index, col_el, lb, COIN_DBL_MAX); } // Solve simplex->primal();
Clp produces the following output which seems to give the correct objective 2310:
Clp0024I Matrix will be packed to eliminate 307230 small elements Clp0006I 0 Obj 0 Primal inf 2310 (2310) Dual inf 2310 (2310) Clp0029I End of values pass after 0 iterations Clp0006I 0 Obj 0 Primal inf 2310 (2310) Dual inf 2310 (2310) Clp0006I 200 Obj 0 Primal inf 2110 (2110) Dual inf 2110 (2110) Clp0006I 400 Obj 0 Primal inf 1910 (1910) Dual inf 1910 (1910) Clp0006I 600 Obj 0 Primal inf 1710 (1710) Dual inf 1710 (1710) Clp0006I 800 Obj 0 Primal inf 1510 (1510) Dual inf 1510 (1510) Clp0006I 1000 Obj 0 Primal inf 1310 (1310) Dual inf 1310 (1310) Clp0006I 1200 Obj 0 Primal inf 1110 (1110) Dual inf 1110 (1110) Clp0006I 1400 Obj 0 Primal inf 910 (910) Dual inf 910 (910) Clp0006I 1600 Obj 0 Primal inf 710 (710) Dual inf 710 (710) Clp0006I 1800 Obj 0 Primal inf 510 (510) Dual inf 510 (510) Clp0006I 2000 Obj 0 Primal inf 310 (310) Dual inf 310 (310) Clp0006I 2200 Obj 0 Primal inf 110 (110) Dual inf 110 (110) Clp0006I 2310 Obj 0 Clp0000I Optimal - objective value 0 Clp0006I 0 Obj 2310 Clp0000I Optimal - objective value 2310
However, I check, as I do for LP's, the following
if (simplex->isProvenOptimal() == false) { // error ... }
which is triggered and dumps:
Quadratic Program Solver failed. Problem: 2443 variables, 2310 rows. Written problem to file "QP-CRASH.qps" for analysis. problem sense: 1 STATUS: numerical difficulties: no STATUS: primal infeasible: YES STATUS: dual infeasible: no STATUS: iteration limit reached: no
If I ignore the isProvenOptimal() check and try to obtain the objective using
const double* primal = simplex->primalColumnSolution();
then it is all-zero, which is not a feasible point.
I checked the dumped QPS file and solved the problem using BPMPD which solves it with objective 2310 (see attached output logfile).
Am I using the interface incorrectly or is this a bug in Clp? Also, if I want to disable any kind of presolve, is there a way to do this using the ClpSimplex? and ClpModel? interfaces? (In initialSolve I can pass a ClpSolve? object, but how to do this just by calling primal()?)
Thanks.
Attachments (2)
Change History (3)
Changed 11 years ago by nowozin
comment:2 Changed 8 months ago by stefan
- Resolution set to migrated
- Status changed from new to closed
This ticket has been migrated to GitHub and will be resolved there: https://github.com/coin-or/Clp/issues/24
QPS model written