<div dir="ltr">Hi all,<div><br></div><div>I just wanted to report back. I&#39;ve been hunting for the actual main function used by the CLI, and as best I can tell it&#39;s in CoinSolve.cpp. It doesn&#39;t appear that there&#39;s anything extra going on between CbcMain0 and CbcMain1. Accordingly, it&#39;s unclear to me why a call to `cbc` from the command line returns a solution consistently faster than using the API by a factor of ~2-3 for smallish problems. To be clear, I do the following:</div>

<div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">OsiCbcSolverInterface iface;<br>ConstructModel(iface);</blockquote>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">int argc = 3;<br>const char *argv[] = {&quot;exchange&quot;,&quot;-solve&quot;,&quot;-quit&quot;}; </blockquote>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">CbcMain0(*iface-&gt;getModelPtr());<br>CbcMain1(argc, argv, *iface-&gt;getModelPtr(), callBack);</blockquote>

<div><br></div><div>I&#39;m going to leave this for now (unless someone has a clear idea as to what the difference may be). Using CbcMain0/1 provides me a substantial speed up (3 orders of magnitude) over naively calling branchAndBound, as one might expect. </div>

<div><br></div><div>I would still be very interested in any documentation regarding the heuristics, cuts, branching strategies, etc. used in CbcMain1 (again, 8k+ lines of code is burdensome to investigate). I would also be very interested if anyone has any open source drivers that do something like CbcMain1 (i.e., apply &#39;generally good&#39; heuristics, cuts, etc.) but maintains the unsolved model in order to provide user-specified, additional options.</div>

<div><br></div><div>Again, I apologize if this is old hat for the community; I&#39;d also like to specifically thank John and Rolf for assisting.</div><div><br></div><div>Cheers, </div><div><br></div></div><div class="gmail_extra">

<br><br><div class="gmail_quote">On Sun, Jul 27, 2014 at 10:02 AM, Matthew Gidden <span dir="ltr">&lt;<a href="mailto:gidden@wisc.edu" target="_blank">gidden@wisc.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div dir="ltr">Hi John,<div><br></div><div><br></div><div class="gmail_extra"><br><br><div class="gmail_quote"><div class="">On Sat, Jul 26, 2014 at 1:45 PM, John Forrest <span dir="ltr">&lt;<a href="mailto:john.forrest@fastercoin.com" target="_blank">john.forrest@fastercoin.com</a>&gt;</span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    <div>Matthew,<br>
      <br>
      Look at driver4.cpp in Cbc/examples.  </div></div></blockquote></div><div>I&#39;m playing around with this right now. Just using CbcMain0 and CbcMain1 get&#39;s within an order of magnitude of the CLI execution. I&#39;ll keep at it. Thanks for the input! </div>

<div><div class="h5">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000"><div>You could easily turn some
      of that into your SolveModelLikeCli (with optional string of
      parameters).<span><font color="#888888"><br>
      <br>
      John Forrest</font></span><div><div><br>
      <br>
      On 26/07/14 00:06, Matthew Gidden wrote:<br>
    </div></div></div>
    <blockquote type="cite"><div><div>
      
      <div dir="ltr">Hi all,
        <div><br>
        </div>
        <div>I&#39;ve discovered that the cbc CLI does a pretty good job at
          solving my class of problems.  In short, I&#39;m curious if
          there&#39;s a way to get that rich functionality at the API level.
          Ideally, I&#39;d like to do something like the following:</div>
        <div><br>
        </div>
        <blockquote class="gmail_quote">model = ConstructModel();<br>
          SolveModelLikeCLI(model);  </blockquote>
        <div><br>
        </div>
        <div>It looks like the implementation is one long function
          (cbcMain1 is 8k+ lines) and would be incredibly difficult to
          cherry-pick implementation from it. I&#39;ve scoured the API docs
          and haven&#39;t found anything that looks promising.
          Alternatively, is there a listing of all the heuristics, cuts,
          branching strategies, etc., used by the default CLI?<br>
          <div><br>
          </div>
          <div>Sorry if this is an obvious question; I was hoping to
            leverage the features already implemented before
            reimplementing something myself.</div>
          <div><br>
          </div>
          -- <br>
          <div dir="ltr">Matthew Gidden<br>
            Ph.D. Candidate, Nuclear Engineering
            <div>
              The University of Wisconsin -- Madison<br>
              Ph. <a href="tel:225.892.3192" value="+12258923192" target="_blank">225.892.3192</a><br>
            </div>
          </div>
        </div>
      </div>
      <br>
      <fieldset></fieldset>
      <br>
      </div></div><div><pre>_______________________________________________
Cbc mailing list
<a href="mailto:Cbc@list.coin-or.org" target="_blank">Cbc@list.coin-or.org</a>
<a href="http://list.coin-or.org/mailman/listinfo/cbc" target="_blank">http://list.coin-or.org/mailman/listinfo/cbc</a>
</pre>
    </div></blockquote>
    <br>
  </div>

<br>_______________________________________________<br>
Cbc mailing list<br>
<a href="mailto:Cbc@list.coin-or.org" target="_blank">Cbc@list.coin-or.org</a><br>
<a href="http://list.coin-or.org/mailman/listinfo/cbc" target="_blank">http://list.coin-or.org/mailman/listinfo/cbc</a><br>
<br></blockquote></div></div></div><div><div class="h5"><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Matthew Gidden<br>Ph.D. Candidate, Nuclear Engineering<div>The University of Wisconsin -- Madison<br>Ph. <a href="tel:225.892.3192" value="+12258923192" target="_blank">225.892.3192</a><br>

</div></div>
</div></div></div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Matthew Gidden<br>Ph.D. Candidate, Nuclear Engineering<div>The University of Wisconsin -- Madison<br>Ph. 225.892.3192<br></div></div>
</div>