<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" id="owaParaStyle"></style>
</head>
<body fpstyle="1" ocsi="0">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">Hi Lorenzo,
<div>It seems this is a non-convex MINLP problem. I'm not sure if such problems, except for quadratic ones, are "<u>guaranteed</u>" to be solved to global optimality by most solvers. I think it's more likely that you are hitting the node limit or iteration
 limit and it returns the best solution it found so far. Hence every time you solve it, you may end up with different solutions.</div>
<div><br>
</div>
<div>Regards,</div>
<div>Ahmed <br>
<div style="font-family: Times New Roman; color: #000000; font-size: 16px">
<hr tabindex="-1">
<div id="divRpF610613" style="direction: ltr;"><font face="Tahoma" size="2" color="#000000"><b>From:</b> Scip [scip-bounces@zib.de] on behalf of Lorenzo Gentile [lorenzo.gentile@moxoff.com]<br>
<b>Sent:</b> Wednesday, January 13, 2016 9:12 AM<br>
<b>To:</b> scip@zib.de<br>
<b>Subject:</b> [SCIP] Unexpected behavior<br>
</font><br>
</div>
<div></div>
<div>
<div dir="ltr">
<div>
<div>Hello,</div>
<div><br>
</div>
<div>I'm a new user on SCIP, and  interested in solving a non linear constrained optimization problem. I would like to understand why SCIP seems to return a wrong result if applied to a simplified optimization problem whose solution is known a priori.</div>
<div><br>
</div>
<div>Here is my first formulation:</div>
<div><br>
</div>
<div>var y real >= 0;</div>
<div>var x real >= 0 <= 10;</div>
<div>var s integer >= 0 <= 9;</div>
<div>var z binary;</div>
<div><br>
</div>
<div>subto c1: y <= (1-exp(-x))*(1-z)+(1-exp(-(x-s))+1-exp(-s))*z;</div>
<div>subto c2: s*z <= x;</div>
<div>subto c3: x <= 10*z + s*(1-z);</div>
<div><br>
</div>
<div>maximize obj: y;</div>
<div><br>
</div>
<div>In this case I obtain what I expect (y almost equal to 2): </div>
<div><br>
</div>
<div>objective value:                     1.98652410600183</div>
<div>z                                                   1 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>s                                                   5 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>y                                    1.98652410600183 <span class="" style="white-space:pre">
</span>(obj:1)</div>
<div>x                                                  10 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>@@c1_1_t_0                                         -5 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>@@c1_1_r_1                        0.00673794699908548 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>@@c1_1_t_2                                         -5 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>@@c1_1_r_3                        0.00673794699908546 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>@@c1_1_t_4                                        -10 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>@@c1_1_r_5                       4.43999297170849e-05 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>prodt_z_t_s_c2_1                                    5 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>prodt_z_t_s_c3_1                                    5 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>nlreform0                                          -5 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div><br>
</div>
<div>Now, If I enlarge the admissible region by writing 'var s integer >= 0 <= 10;' (and keeping everything else unchanged), I obtain a worse solution (y almost equal to 1):</div>
<div><br>
</div>
<div>objective value:                    0.999955600070283</div>
<div>s                                                  10 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>y                                   0.999955600070283 <span class="" style="white-space:pre">
</span>(obj:1)</div>
<div>x                                                  10 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>@@c1_1_r_1                                          1 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>@@c1_1_t_2                                        -10 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>@@c1_1_r_3                       4.53999297624415e-05 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>@@c1_1_t_4                                        -10 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>@@c1_1_r_5                       4.43999297170849e-05 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div><br>
</div>
<div>The solution found with the first formulation is still admissible, it is better (higher y value) but it is not returned by the second formulation.</div>
<div><br>
</div>
<div>Finally, if I write 'var s real >= 0 <= 10;'(and keeping everything else unchanged), SCIP returns again what I expect (y almost equal to 2):</div>
<div><br>
</div>
<div>objective value:                     1.98652491319583</div>
<div>z                                                   1 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>x                                                  10 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>s                                    5.00321312966099 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>y                                    1.98652491319583 <span class="" style="white-space:pre">
</span>(obj:1)</div>
<div>@@c1_1_t_0                          -4.99678687033901 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>@@c1_1_r_1                        0.00675919526185386 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>@@c1_1_t_2                          -5.00321312966099 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>@@c1_1_r_3                         0.0067158915423183 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>@@c1_1_t_4                                        -10 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>@@c1_1_r_5                       4.43999297170849e-05 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>prodt_z_t_@@c1_1_t_2_c2_1            5.00321312966099 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>prodt_z_t_@@c1_1_t_2_c3_1            5.00321312966099 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div>nlreform0                           -4.99678687033901 <span class="" style="white-space:pre">
</span>(obj:0)</div>
<div><br>
</div>
<div>Can you please explain me the reason of this unexpected behavior and, if possible, tell me which part of the code is called by these formulations.</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>