<br><font size=2 face="sans-serif">Ojas, Jan-Willem,</font>
<br>
<br><font size=2 face="sans-serif">When I looked closer it was not quite
what I thought. &nbsp;The difference in qap10 was what I thought (and there
clp and Clpsimplex were similar). &nbsp;For the others the major difference
seems to be because the problems are degenerate. &nbsp;Clp applies a perturbation
when it thinks that it is making too many zero moves and that is what is
happening with the initialSolve interface. &nbsp;However clp executable
has initial perturbation switched on and looks at the problem and applies
a perturbation up front. &nbsp;This leads to a significant reduction in
iterations.</font>
<br>
<br><font size=2 face="sans-serif">Try setting solver.getModelPtr()-&gt;setPerturbation(50)
(for OsiClp) before initial solve. &nbsp;You may wish to set it back to
its original value before branch and cut however.</font>
<br>
<br><font size=2 face="sans-serif">The reason qap10 is faster is because
the non Osi interface allows itself to use a very dubious crash which works
fantastically well on many problems. &nbsp;I am not sure about encouraging
people to use it directly from Osi land.</font>
<br>
<br><font size=2 face="sans-serif">If you want to see what a difference
some of these things make you can use the stand-alone executable to play
with. &nbsp;If you do &quot;clp qap10.mps -idiot 0 -dualsimplex&quot; you
should get slower run. &nbsp;You will see much bigger differences on larger
problems e.g. qap15 or nug20.</font>
<br>
<br><font size=2 face="sans-serif">John Forrest</font>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td width=40%><font size=1 face="sans-serif"><b>&quot;Jan-Willem Goossens&quot;
&lt;j.goossens@t75.nl&gt;</b> </font>
<br><font size=1 face="sans-serif">Sent by: coin-lpsolver-bounces@list.coin-or.org</font>
<p><font size=1 face="sans-serif">05/02/2006 09:23 AM</font>
<td width=59%>
<table width=100%>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">To</font></div>
<td><font size=1 face="sans-serif">coin-lpsolver@list.coin-or.org</font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">cc</font></div>
<td>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">Subject</font></div>
<td><font size=1 face="sans-serif">[Coin-lpsolver] OsiClp/ClpSimplex/clp
performance disparity</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br>
<br><tt><font size=2>Hi,<br>
<br>
Wouldnt it be a good idea to make the logic of &quot;being clever about<br>
algorithms and initial solutions&quot; identical across<br>
ClpSimplex::initialSolve and OsiClpSolverInterface::initialSolve (possible<br>
even also the clp executable)? Similarly, for ::resolve.<br>
<br>
Or is this not possible/desirable?<br>
<br>
Regards,<br>
<br>
Jan-Willem Goossens<br>
<br>
&gt; Ojas,<br>
&gt;<br>
&gt; I will have to run those problems to check but it is probable that
the<br>
&gt; clp executable is being clever about algorithms and initial solutions.<br>
&gt; You should be able to get same results with ClpSimplex::initialSolve
by<br>
&gt; setting parameters.<br>
&gt;<br>
&gt; Would it be useful if I worked on the interface and documentation
for<br>
&gt; part of my DIMACS presentation?<br>
&gt;<br>
&gt; John Forrest<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Ojas Parekh &lt;ojas@mathcs.emory.edu&gt;<br>
&gt; Sent by: coin-lpsolver-bounces@list.coin-or.org<br>
&gt;<br>
&gt; 05/01/2006 10:07 PM<br>
&gt;<br>
&gt; To<br>
&gt; coin-lpsolver@list.coin-or.org<br>
&gt; cc<br>
&gt; Sebastien Siva &lt;ssiva@emory.edu&gt;, Cynthia A Phillips<br>
&gt; &lt;caphill@sandia.gov&gt;<br>
&gt; Subject<br>
&gt; [Coin-lpsolver] OsiClp/ClpSimplex/clp performance disparity<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Hi,<br>
&gt;<br>
&gt; &nbsp; We've observed appreciable disparities in the performance of<br>
&gt; OsiClpSolverInterface-&gt;initialSolve(), ClpSimplex-&gt;initialSolve(),<br>
&gt; and the clp executable program. &nbsp;In particular here are some
of our<br>
&gt; observed running times on instances from well-known collections:<br>
&gt;<br>
&gt; collection/file &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; clp exec. &nbsp; &nbsp; ClpSimplex &nbsp; &nbsp; OsiClp<br>
&gt; ----------------------------- &nbsp; &nbsp; --------- &nbsp; &nbsp;
---------- &nbsp; &nbsp; ------<br>
&gt; Linderoth-MIP/dano3_4.mps &nbsp; &nbsp; &nbsp; &nbsp; 57.78 &nbsp;
&nbsp; &nbsp; &nbsp; 151.99 &nbsp; &nbsp; &nbsp; &nbsp; 145.44<br>
&gt; Linderoth-MIP/neos-520729.mps &nbsp; &nbsp; &nbsp;7.70 &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp;20.46 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;20.50<br>
&gt; Linedroth-MIP/qap10.mps &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;4.00
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3.90 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;51.51<br>
&gt; COIN/Mps/Big/mkc7.mps &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 21.15
&nbsp; &nbsp; &nbsp; &nbsp; 169.08 &nbsp; &nbsp; &nbsp; &nbsp; 165.12<br>
&gt;<br>
&gt; All numbers represent seconds on a 2.2Ghz dual core Opteron running
a<br>
&gt; SUSE x86_64 Linux distribution using a CVS build of COIN-OR no older<br>
&gt; than a few weeks. &nbsp;We've also observed comparable ratios on Solaris<br>
&gt; and PPC Mac OS X machines. &nbsp;We passed no parameters to the clp<br>
&gt; executable other than the file name and used the following code for<br>
&gt; the object oriented interfaces:<br>
&gt;<br>
&gt; ClpSimplex model;<br>
&gt; model.readMps(argv[1]);<br>
&gt; model.initialSolve();<br>
&gt;<br>
&gt; and<br>
&gt;<br>
&gt; OsiClpSolverInterface si;<br>
&gt; si.readMps(argv[1]);<br>
&gt; si.initialSolve();<br>
&gt;<br>
&gt; We have larger instances particular to our application (Sandia Labs'<br>
&gt; PICO combinatorial optimization engine) that have exhibited similar<br>
&gt; behavior: the clp executable performs an order of magnitude better.<br>
&gt; We have tried experimenting with ClpSolve parameters and writing a<br>
&gt; simple heuristic to mimic the clp executable but have been<br>
&gt; unsuccessful in consistently obtaining comparable performance.<br>
&gt; Before proceeding any further I thought it would be a good idea to<br>
&gt; ask the following questions here:<br>
&gt;<br>
&gt; (1) Does the clp executable do any extra preprocessing or<br>
&gt; presolving? &nbsp;Do you think the gap is explained only by the way
in<br>
&gt; which the three interfaces each set their parameters? &nbsp;If so,
which<br>
&gt; parameters are especially critical for the problems above?<br>
&gt;<br>
&gt; (2) I have explored the source code; however, I was wondering if<br>
&gt; there was any documentation that speaks specifically to the<br>
&gt; differences in (in philosophy of) the three interfaces.<br>
&gt;<br>
&gt; (3) PICO currently exclusively relies on the OsiClp interface. &nbsp;I<br>
&gt; understand that I can use the getModelPtr() method to call<br>
&gt; ClpSimplex's version of initialSolve(). &nbsp;Is there callable access
to<br>
&gt; the code that the clp executable uses?<br>
&gt;<br>
&gt; Thanks!<br>
&gt; -Ojas<br>
&gt; _______________________________________________<br>
&gt; Coin-lpsolver mailing list<br>
&gt; Coin-lpsolver@list.coin-or.org<br>
&gt; http://list.coin-or.org/mailman/listinfo/coin-lpsolver<br>
&gt;<br>
&gt;<br>
&gt;<br>
<br>
_______________________________________________<br>
Coin-lpsolver mailing list<br>
Coin-lpsolver@list.coin-or.org<br>
http://list.coin-or.org/mailman/listinfo/coin-lpsolver<br>
</font></tt>
<br>