[Coin-lpsolver] OsiClp/ClpSimplex/clp performance disparity
Ojas Parekh
ojas at mathcs.emory.edu
Mon May 1 22:07:26 EDT 2006
Hi,
We've observed appreciable disparities in the performance of
OsiClpSolverInterface->initialSolve(), ClpSimplex->initialSolve(),
and the clp executable program. In particular here are some of our
observed running times on instances from well-known collections:
collection/file clp exec. ClpSimplex OsiClp
----------------------------- --------- ---------- ------
Linderoth-MIP/dano3_4.mps 57.78 151.99 145.44
Linderoth-MIP/neos-520729.mps 7.70 20.46 20.50
Linedroth-MIP/qap10.mps 4.00 3.90 51.51
COIN/Mps/Big/mkc7.mps 21.15 169.08 165.12
All numbers represent seconds on a 2.2Ghz dual core Opteron running a
SUSE x86_64 Linux distribution using a CVS build of COIN-OR no older
than a few weeks. We've also observed comparable ratios on Solaris
and PPC Mac OS X machines. We passed no parameters to the clp
executable other than the file name and used the following code for
the object oriented interfaces:
ClpSimplex model;
model.readMps(argv[1]);
model.initialSolve();
and
OsiClpSolverInterface si;
si.readMps(argv[1]);
si.initialSolve();
We have larger instances particular to our application (Sandia Labs'
PICO combinatorial optimization engine) that have exhibited similar
behavior: the clp executable performs an order of magnitude better.
We have tried experimenting with ClpSolve parameters and writing a
simple heuristic to mimic the clp executable but have been
unsuccessful in consistently obtaining comparable performance.
Before proceeding any further I thought it would be a good idea to
ask the following questions here:
(1) Does the clp executable do any extra preprocessing or
presolving? Do you think the gap is explained only by the way in
which the three interfaces each set their parameters? If so, which
parameters are especially critical for the problems above?
(2) I have explored the source code; however, I was wondering if
there was any documentation that speaks specifically to the
differences in (in philosophy of) the three interfaces.
(3) PICO currently exclusively relies on the OsiClp interface. I
understand that I can use the getModelPtr() method to call
ClpSimplex's version of initialSolve(). Is there callable access to
the code that the clp executable uses?
Thanks!
-Ojas
More information about the Clp
mailing list