Hi,<div><br></div><div>I have a question with regard to when it is legal to the make cuts globally valid. From the Cgl sources, it seems like the only way that cuts discovered at the interior nodes be made globally valid is to add 16 in the CglTreeInfo.options, in the call to generateCuts():</div>

<div><br></div><div><div>void CglGomory::generateCuts(const OsiSolverInterface &amp; si, OsiCuts &amp; cs,</div><div>           const CglTreeInfo info)</div></div><div>{</div><div>....</div><div><div><div>if ((!info.inTree&amp;&amp;((info.options&amp;4)==4||((info.options&amp;8)&amp;&amp;!info.pass)))</div>

<div><span class="Apple-tab-span" style="white-space:pre">        </span>      ||(info.options&amp;16)!=0) {</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>    int numberRowCutsAfter = cs.sizeRowCuts();</div>

<div><span class="Apple-tab-span" style="white-space:pre">        </span>    for (int i=numberRowCutsBefore;i&lt;numberRowCutsAfter;i++) {</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>      int length = cs.rowCutPtr(i)-&gt;row().getNumElements();</div>

<div><span class="Apple-tab-span" style="white-space:pre">        </span>      if (length&lt;=limit_)</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>        cs.rowCutPtr(i)-&gt;setGloballyValid();</div><div>

<span class="Apple-tab-span" style="white-space:pre">        </span>    }</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>  }</div></div></div><div>...</div><div>}</div><div><br></div><div>where CglTreeInfo.options has the following semantics:</div>

<div><br></div><div><div>int options</div><div> <span class="Apple-tab-span" style="white-space:pre">        </span>... 4 - set global cut flag if at root node 8 - set global cut flag if at root node and first pass 16 - set global cut flag and make cuts globally valid ...</div>

</div><div><br></div><div><br></div><div>My question is:   When is it valid to add in 16 to CglTreeInfo.options as far as Cbc is concerned ?   From the source code, it seems like none of calls to generateCuts() within Cbc set the options flag to 16 at all (and consequently no cuts generated at the interior nodes are globally valid at all)  After reading (parts) of the paper &#39;Gomory Cuts Revisited&#39; (<a href="http://page.math.tu-berlin.de/~luebbeck/teaching/computMIP0708/paper/balas-et-al_gomory-cuts-revisited.pdf">http://page.math.tu-berlin.de/~luebbeck/teaching/computMIP0708/paper/balas-et-al_gomory-cuts-revisited.pdf</a>), it seems like for 0-1 programs, it is possible to &quot;lift&quot; cuts generated at interior (non-root) nodes and make them globally valid. Is this currently supported in the CglGomory::generateCuts() implementation ?  (if so, if I just set CglTreeInfo.options |= 16; in calls to generateCuts, would that all that would be necessary to generate global Gomory cuts for 0-1 programs? )</div>

<div><br></div><div>Thanks for your time.</div><div><br></div><div>regards,</div><div>Prakash</div>