<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>