<div dir="ltr">Hi everyone,<div><br></div><div>I am working with the LP relaxation of the attached problem, which is some variant on the MIPLIB v3 instance arki001 (after a few modifications), and I have run into a possible issue with hot start, which I am using to check strong branching candidates.<br></div><div><br></div><div>After changing the upper bound on variable 877 from 1 to 0, and calling "solveFromHotStart", the solver status is not optimal (isIterationLimitReached returns true). However, it seems to me that neither the iteration limit nor time limit is reached (looking at the source code, I see those are not the only two reasons for that status). If instead I solve the subproblem with resolve, an optimal solution is found.</div><div><br></div><div>Is this a bug? Or is it a case of numerical issues with the instance? If it is the latter, is the following workaround the right approach? I unmarkHotStart, call resolve to get the optimal solution to the subproblem, change the bounds back to their original values, resolve, markHotStart again, and then continue.</div><div><br></div>My setup: Clp version 1.16 on a Fedora machine. The compilation options are: enable_debug=yes, enable_gnu_packages=yes, with blas and lapack.<div><br></div><div>I would appreciate any advice. Thank you!</div><div>Alex</div><div><br></div><div>P.S. Here is some test code, where solver is an instance of OsiClpSolverInterface.</div><div><br></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(83,48,225)"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">  </span><span style="font-variant-ligatures:no-common-ligatures">// Initial solve</span></p>
<p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">  solver.initialSolve();</span></p><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures"><br></span></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(83,48,225)"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">  </span><span style="font-variant-ligatures:no-common-ligatures">// Down branch on 877</span></p>
<p style="margin:0px;line-height:normal"><span style="font-family:Menlo;font-size:11px;font-variant-ligatures:no-common-ligatures">  solver.enableFactorization();</span><span style="font-family:Menlo;font-size:11px;font-variant-ligatures:no-common-ligatures"> </span><font color="#5330e1" face="Menlo"><span style="font-size:11px">// Is this recommended? I may have run into an issue some time ago without factorization when doing hot starting... but I cannot recall for sure. It should not affect this example.</span></font></p>
<p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">  solver.markHotStart();</span></p>
<p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px"><span style="font-variant-ligatures:no-common-ligatures"></span><br></p>
<p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">  solver.setColUpper(</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">877</span><span style="font-variant-ligatures:no-common-ligatures">,</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">0</span><span style="font-variant-ligatures:no-common-ligatures">);</span></p>
<p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">  solver.solveFromHotStart();</span></p>
<p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">  </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(206,121,36)">if</span><span style="font-variant-ligatures:no-common-ligatures"> (solver.isProvenOptimal()) {</span></p><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">    printf(</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">"Optimal. Objective: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(213,59,211)">%e</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">.</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(213,59,211)">\n</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">"</span><span style="font-variant-ligatures:no-common-ligatures">, solver.getObjValue());</span></p><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">  } </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(206,121,36)">else</span><span style="font-variant-ligatures:no-common-ligatures"> </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(206,121,36)">if</span><span style="font-variant-ligatures:no-common-ligatures"> (solver.isIterationLimitReached()) {</span></p><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(195,55,32)"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">    printf(</span><span style="font-variant-ligatures:no-common-ligatures">"Iteration limit reached.</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(213,59,211)">\n</span><span style="font-variant-ligatures:no-common-ligatures">"</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">);</span></p><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">  } </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(206,121,36)">else</span><span style="font-variant-ligatures:no-common-ligatures"> {</span></p><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(195,55,32)"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">    printf(</span><span style="font-variant-ligatures:no-common-ligatures">"Something else happened.</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(213,59,211)">\n</span><span style="font-variant-ligatures:no-common-ligatures">"</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">);</span></p><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo">





</p><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">  }</span></p><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures"><br></span></p>
<p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">  solver.unmarkHotStart();</span></p>
<p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">  solver.disableFactorization();</span></p><div><span style="font-variant-ligatures:no-common-ligatures"><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">  </span></p><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">  solver.resolve();</span></p>
<p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">  </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(206,121,36)">if</span><span style="font-variant-ligatures:no-common-ligatures"> (solver.isProvenOptimal()) {</span></p>
<p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">    printf(</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">"Resolve optimal. Objective: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(213,59,211)">%e</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">.</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(213,59,211)">\n</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">"</span><span style="font-variant-ligatures:no-common-ligatures">, solver.getObjValue());</span></p>
<p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">  } </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(206,121,36)">else</span><span style="font-variant-ligatures:no-common-ligatures"> </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(206,121,36)">if</span><span style="font-variant-ligatures:no-common-ligatures"> (solver.isIterationLimitReached()) {</span></p>
<p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(195,55,32)"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">    printf(</span><span style="font-variant-ligatures:no-common-ligatures">"Iteration limit reached.</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(213,59,211)">\n</span><span style="font-variant-ligatures:no-common-ligatures">"</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">);</span></p>
<p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">  } </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(206,121,36)">else</span><span style="font-variant-ligatures:no-common-ligatures"> {</span></p>
<p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(195,55,32)"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">    printf(</span><span style="font-variant-ligatures:no-common-ligatures">"Something else happened.</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(213,59,211)">\n</span><span style="font-variant-ligatures:no-common-ligatures">"</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">);</span></p>
<p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">  }</span></p></span></div></div></div>