[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