[SCIP] rounding error?

James Cussens james.cussens at york.ac.uk
Sun Nov 13 12:03:42 CET 2016


Hi Jakob,

I got to the bottom of the problem, I think.

The issue is in checking the linear constraint that implements my objective
limit. I get this behaviour:

STARTS
[src/scip/cons_linear.c:6811] debug: checking linear constraint <foo>
  [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]
.....
 +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;
[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)

optimal solution is:

objective value:                         97290.443308
t_I#0#13                                            1 (obj:575.319346)
t_I#2                                               1 (obj:1558.283114)
ENDS

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.

This happens with the default feastol (1e-06)
Setting it to a smaller value:
   SCIP_CALL( SCIPsetRealParam(subscip, "numerics/feastol", 1e-08) );
makes the problem go away.

You were right, of course, that SCIP recognises my constraint as a lower
bound:

....
 +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;
[src/scip/cons_linear.c:9887] debug: constraint <foo> is parallel to
objective function and provides a lower bound <97290.5>

Thanks for your help,

James




On 12 November 2016 at 22:18, Jakob Witzig <witzig at zib.de> wrote:

> Hi James,
>
> 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).
>
>
> Oh sorry, sure in that case the objective limit makes no sense.
>
> Perhaps I should call
>  SCIP_CALL( SCIPupdateLocalLowerbound(subscip, lowerbound) );
> after working out what "lowerbound" should be. (Have to deal with offset
> and scale.) What do you think?
>
>
> 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.
>
> Cheers,
> Jakob
>
> --
> Jakob Witzig
>
> Zuse Institute Berlin (ZIB)
>
> Division Mathematical Optimization and Scientific Information
> Research Group Mathematical Optimization Methods
>
> Takustrasse 7
> 14195 Berlin
>
> Tel. : +49 (0)30 84185-416
> Fax  : +49 (0)30 84185-269
> email: witzig at zib.de
>
>


-- 
James Cussens
Dept of Computer Science &
York Centre for Complex Systems Analysis
Room 326, The Hub, Deramore Lane            Tel    +44 (0)1904 325371
University of York                                        Fax  +44 (0)1904
500159
York YO10 5GE, UK                               http://www.cs.york.ac.uk/~jc
http://www.york.ac.uk/docs/disclaimer/email.htm
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.zib.de/pipermail/scip/attachments/20161113/133a7b14/attachment.html>


More information about the Scip mailing list