<div dir="ltr">Hi Jakob,<div><br></div><div>I got to the bottom of the problem, I think.</div><div><br></div><div>The issue is in checking the linear constraint that implements my objective limit. I get this behaviour:</div><div><br></div><div>STARTS</div><div><div>[src/scip/cons_linear.c:6811] debug: checking linear constraint <foo></div><div>  [linear] <foo>:  +265.475592<t_t_I#0#1#3#9>[B] +277.223428<t_t_I#0#1#9>[B] +385.712363<t_t_I#0#3#9>[B] +394.428421<t_t_I#0#1#13>[B] +396.611187<t_t_I#0#1>[B] +411.248043<t_t_I#0#9#10>[B] +418.090044<t_t_I#0#9>[B] +562.928238<t_t_I#0#12#13>[B] +575.319346<t_t_I#0#13>[B] +583.147435<t_t_I#0>[B] -186.536249<t_t_I#1#0>[B]</div></div><div>.....</div><div><div> +7755.844738<t_t_I#36#27#32>[B] +7767.597019<t_t_I#36#21#27>[B] +7769.766551<t_t_I#36#27>[B] +8160.498138<t_t_I#36#17#28>[B] +8232.30374<t_t_I#36#28>[B] +8344.946419<t_t_I#36>[B] >= 97290.4565854556;</div><div>[src/scip/cons_linear.c:6831] debug:   consdata activity=97290.443308 (lhs=97290.4565854556, rhs=1e+20, row=0x13c225a0, checklprows=1, rowinlp=1, sol=0x114ab158, hascurrentnodelp=1)</div><div><br></div><div>optimal solution is:</div><div><br></div><div>objective value:                         97290.443308</div><div>t_I#0#13                                            1 <span class="gmail-Apple-tab-span" style="white-space:pre">       </span>(obj:575.319346)</div><div>t_I#2                                               1 <span class="gmail-Apple-tab-span" style="white-space:pre">  </span>(obj:1558.283114)</div></div><div>ENDS</div><div><br></div><div>So the problem is that the linear constraint constraint handler CHECK callback is happy to accept a solution which has activity 97290.443308 for a constraint with lhs=97290.4565854556.</div><div><br></div><div>This happens with the default feastol (1e-06)</div><div>Setting it to a smaller value:</div><div><div>   SCIP_CALL( SCIPsetRealParam(subscip, "numerics/feastol", 1e-08) );</div></div><div>makes the problem go away.</div><div><br></div><div>You were right, of course, that SCIP recognises my constraint as a lower bound:</div><div><br></div><div>....</div><div><div> +193.28761<t_t_I#23#26#34#36>[B] -186.536249<t_t_I#1#0>[B] +184.014999<t_t_I#23#24#27#34>[B] +171.940167<t_t_I#23#25#26#34>[B] +126.535419<t_t_I#23#24#26#34>[B] -35.5888880000002<t_t_I#1#9>[B] >= 97290.4565854556;</div><div>[src/scip/cons_linear.c:9887] debug: constraint <foo> is parallel to objective function and provides a lower bound <97290.5></div></div><div><br></div><div>Thanks for your help,</div><div><br></div><div>James</div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 12 November 2016 at 22:18, Jakob Witzig <span dir="ltr"><<a href="mailto:witzig@zib.de" target="_blank">witzig@zib.de</a>></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">
    <p>Hi James,<br>
    </p>
    <blockquote type="cite">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">But I want solutions to be feasible
            only if they are *worse* (or equal) to objlimit, so I can't
            see how I can use SCIPsetObjlimit(scip, objlimit). <br>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    Oh sorry, sure in that case the objective limit makes no sense.<br>
    <br>
    <blockquote type="cite">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <div>Perhaps I should call</div>
            <div> SCIP_CALL( SCIPupdateLocalLowerbound(<wbr>subscip,
              lowerbound) );<br>
            </div>
            <div>after working out what "lowerbound" should be. (Have to
              deal with offset and scale.) What do you think?</div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    This is not necessary because the linear constraint handler will
    call this method anyway if it detects a constraint that is parallel
    to the objective function and provides a lower bound, cf.
    checkParallelObjective() in cons_linear.c.<br>
    <br>
    Cheers,<br>
    Jakob<br>
    <br>
    <pre class="m_-3066382557795592700moz-signature" cols="72">-- 
Jakob Witzig

Zuse Institute Berlin (ZIB)

Division Mathematical Optimization and Scientific Information
Research Group Mathematical Optimization Methods

Takustrasse 7
14195 Berlin

Tel. : <a href="tel:%2B49%20%280%2930%2084185-416" value="+493084185416" target="_blank">+49 (0)30 84185-416</a>
Fax  : <a href="tel:%2B49%20%280%2930%2084185-269" value="+493084185269" target="_blank">+49 (0)30 84185-269</a>
email: <a class="m_-3066382557795592700moz-txt-link-abbreviated" href="mailto:witzig@zib.de" target="_blank">witzig@zib.de</a></pre>
  </div>

</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">James Cussens<br>Dept of Computer Science &<br>York Centre for Complex Systems Analysis<br>Room 326, The Hub, Deramore Lane            Tel    +44 (0)1904 325371<br>University of York                                        Fax  +44 (0)1904 500159<br>York YO10 5GE, UK                               <a href="http://www.cs.york.ac.uk/~jc" target="_blank">http://www.cs.york.ac.uk/~jc</a><br><a href="http://www.york.ac.uk/docs/disclaimer/email.htm" target="_blank">http://www.york.ac.uk/docs/disclaimer/email.htm</a></div>
</div>