<div dir="ltr">Thanks.  The hints in ClpSolver.hpp make sense now.  <div>Despite its name, idiot seems to be doing a pretty good job, at least on the small number of examples I have tried.</div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Thu, Mar 13, 2014 at 5:53 AM, 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 text="#000000" bgcolor="#FFFFFF">
    <div>David,<div class=""><br>
      <br>
      On 13/03/14 03:59, David Einstein wrote:<br>
    </div></div><div class="">
    <blockquote type="cite">
      
      <div dir="ltr">Thanks.  I was doing the moral equivalent of button
        mashing, having only the faintest memory of how Dantzig-Wolfe
        worked, and no idea of its applicability. (also apologies for
        posting this to Cbc instead of Clp)
        <div>
          <br>
        </div>
        <div>Running</div>
        <div><br>
        </div>
        <div><span>clp KCMO.mps.bz2 -idiot 500 -primals</span><br>
        </div>
        <div><span><br>
          </span></div>
        <div><span>takes 44 minutes on my machine, about three times as
            fast as the default (dual) computation.</span></div>
        <div><span><br>
          </span></div>
        <div><span>If I want to do this with an instance of ClpSimplex,
            the cpp dump says</span></div>
        <div><span><br>
          </span></div>
        <div>
          <p>  clpModel-&gt;setPerturbation(50);</p>
        </div>
      </div>
    </blockquote></div>
         You may need to set perturbation on    <br><div class="">
    <blockquote type="cite">
      <div dir="ltr"><br>
        <div>The options and extra info are mysterious.</div>
      </div>
    </blockquote></div>
        ClpSolve.hpp gives hints - so setting options[1] says use idiot
    with the associated extraInfo of 500<div class=""><br>
    <blockquote type="cite">
      <div dir="ltr">
        <div><br>
        </div>
        <div>Would the following accomplish about the same thing?</div>
        <div><br>
        </div>
        <div>  ClpSolve clpSolve;</div>
        <div>  clpSolve.setPresolveType(ClpSolve::presolveOn, 5);</div>
        <div>  clpSolve.setSolveType(ClpSolve::usePrimalorSprint);</div>
        <div>  clpSolve.setSpecialOption(1,2,500);</div>
        <div>  clpModel-&gt;initialSolve(clpSolve);</div>
        <div><br>
        </div>
      </div>
    </blockquote></div>
    Should be OK<div class=""><br>
    <blockquote type="cite">
      <div dir="ltr">
        <div>That I can almost understand. I think.</div>
        <div><br>
        </div>
        <div>Why is starting out with the barrier method entitled
          &#39;idiot&#39;?  I assume that &#39;idiot 500&#39; does 500 interior point
          steps before passing to the primal simplex.</div>
        <div><br>
        </div>
        <div>Thank you again.</div>
      </div>
      <div class="gmail_extra"><br>
        <br>
      </div>
    </blockquote></div>
    &quot;idiot&quot; is not the barrier method but a cheap imitation - so bad
    that I called it the Idiot algorithm and gave a bad talk on it years
    ago - any bad heuristic followed by an algorithm is an algorithm. 
    The simplified basic idea is that you minimize mu*objective + sum of
    squared primal infeasibilities.  This is done on a very local basis
    i.e. column by column where you just solve a quadratic to get new
    value.  Periodically you reduce mu.  For many problems you finish
    with a small sum of infeasibilities and an objective a bit higher
    than the optimal one.  You then finish with primal.<span class="HOEnZb"><font color="#888888"><br>
    <br>
    John<br>
    <br>
  </font></span></div>

</blockquote></div><br></div>