<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;
      charset=windows-1252">
  </head>
  <body>
    <p>Dear Nils,</p>
    <p><br>
    </p>
    <p>Since you use SCIP as a library one thing apart from the
      parameters that you can try is to formulate your prolem in
      different ways. E.g. use the specialized constaint types like
      SOS1, or use a different formulation which relies on more general
      constraints. Sometimes performance can be better with more general
      linear constraints because it gives SCIP freedom to exploit
      different structures which are sometimes more important than the
      ones enforced by modelling a certain way.</p>
    <p><br>
    </p>
    <p>Apart from that some tips for tuning SCIP parameters in general:</p>
    <p><br>
    </p>
    <p>- Have a look at the statistics after soving ("display
      statistics" on the SCIP shell). You can see which plugins take
      what amount of the solving time. Then you can play with disabling
      plugins that take a lot of time and/or do not seem to be
      successful on your type of problem.</p>
    <p><br>
    </p>
    <p>- SCIP provides emphasis settings "fast", "default",
      "aggressive", and "off" for the categories "presolving",
      "heuristics", and "separating". E.g. you can set presolving to
      aggressive on the SCIP shell with the command set "set presolving
      emphasis aggressive". With those emphasis setting you can quickly
      explore if some of the implemented techniques work especially well
      on your type of problems. It is good to not only look at the
      solving time in this case but also use the statistics because the
      emphasis setting might enable one technique that is helpful and
      another that takes too long.</p>
    <p><br>
    </p>
    <p>- Depending on your type of problem separation can be very good
      or taking too much time. You can see a trend with the emphasis
      settings. If separation is important for your type of problem
      these are some parameters that can have a big impact.<br>
    </p>
    <p><br>
    </p>
    <p>Limits for separators and amount of cuts can be too low/high for
      some problems. Especially it is worthwhile to look at the limits
      in the separators that seem to perform well in the statistics.
      Important ones for MIPs are often gomory, zerohalf, strongcg,
      aggregation. The separator "aggregation" is the one that actually
      finds the cuts listed under the separators cmir and flowcover.
      Limits should be adjusted in the former and not the latter
      separators, they are only for statistic purposes. They can be
      disabled though (e.g. separating/flowcover/freq = -1), then the
      aggregation separator will only separate the enabled type of cuts
      (cmir or lifted flowcover cuts).<br>
    </p>
    <p>separating/maxcuts(root)</p>
    <p>separating/maxrounds(root)</p>
    <p>separating/<separator>/maxrounds(root)</p>
    <p>separating/<separator>/maxsepacuts(root)</p>
    <p><br>
    </p>
    <p>This rarely works much better for certain types of problems</p>
    <p>separating/efficacynorm = 'd'</p>
    <p><br>
    </p>
    <p>For some problems a value of 1.0 can be much faster, for others
      too many cuts are discarded and a much lower value of 0.1 or 0.5
      can be better.</p>
    <p>separating/minortho(root) <br>
    </p>
    <p><br>
    </p>
    <p>A higher value can sometimes help if too many cuts are found</p>
    <p>separating/minefficacy(root)</p>
    <p><br>
    </p>
    <p>the cut selection score is a linear combination using weights
      that can be tuned by these parameters:</p>
    <p>separating/efficacyfac</p>
    <p>separating/dircutoffdistfac</p>
    <p>separating/intsupportfac</p>
    <p>separating/objparalfac</p>
    <p><br>
    </p>
    <p>There are certainly more settings that can have a considerable
      impact on performance.</p>
    <p>To find them it is important to know what is the bottleneck for a
      problem at hand.</p>
    <p>Sometimes it is the LP solving, sometimes solutions are not found
      fast enough, and sometimes too much or not enough time is spent
      with certain techniques.</p>
    <p>I hope this gives you a start to find out what settings work good
      for your problem type.<br>
    </p>
    <p><br>
    </p>
    <p>Best<br>
      Leona<br>
    </p>
    <p><br>
    </p>
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 3/16/20 6:58 PM, Speetzen, Nils
      wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:e542cf3f50674b72a638af245077a41a@rwth-aachen.de">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      <style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
      <div id="divtagdefaultwrapper" dir="ltr" style="font-size:12pt;
        color:rgb(0,0,0);
font-family:Calibri,Helvetica,sans-serif,"EmojiFont","Apple
        Color Emoji","Segoe UI
        Emoji",NotoColorEmoji,"Segoe UI
        Symbol","Android Emoji",EmojiSymbols">
        <p>Dear SCIP team,</p>
        <p><br>
        </p>
        <p>I am currently using SCIP as a branch-and-cut solver for an
          integer linear problem. Since the nature of the problem I want
          to solve using SCIP always stays the same, I want to optimize
          the configuration parameters to achieve better runtimes and
          wondered whether You can give me some hints towards which
          settings are usually the most impactful, since I found the
          number of parameters to be very large. I am guessing that most
          likely some of the "branching/" parameters such as
          "branching/firstsbchild" are useful in my case, but I am not
          sure.</p>
        <p><br>
        </p>
        <p>My problem consists of only binary decision variables and
          very systematic constraints. First, equally sized subsets of
          the variables have the constraint, that only one of them can
          be true, which I implemented as an SOS1 constraint. Secondly,
          every binary variable either enables or disables a matrix, all
          of the matrices of the enables variables are then summed up
          and have to be less than a constraint matrix at every entry.
          The constraint matrix roughly allows for each SOS1 group to
          activate one matrix such that the sum stays below it (e.g. 621
          of 624 SOS1 constraints have an active members in my solutions
          so far). The objective is to maximize the sum of the entries
          in the summed up matrix.</p>
        <p>The problem scales with the number of binary variables and
          the size of the matrices, all of which are of the same size.</p>
        <p><br>
        </p>
        <p>I hope it is possible for you to take a look at my problem
          and maybe propose some settings.<br>
        </p>
        <p>Kind regards,</p>
        <p><br>
        </p>
        <p>Nils Speetzen</p>
        <p><br>
        </p>
        <p>p.s.: I am using SCIP as a library for C++, the runtime for a
          reference problem is currently about 20 seconds long.<br>
        </p>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
Scip mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Scip@zib.de">Scip@zib.de</a>
<a class="moz-txt-link-freetext" href="https://listserv.zib.de/mailman/listinfo/scip">https://listserv.zib.de/mailman/listinfo/scip</a>
</pre>
    </blockquote>
  </body>
</html>