[Clp] Hot start fails to find optimal solution

Aleksandr M. Kazachkov akazachk at cmu.edu
Mon Jul 3 15:56:04 EDT 2017


Hi everyone,

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.

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.

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.

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.

I would appreciate any advice. Thank you!
Alex

P.S. Here is some test code, where solver is an instance of
OsiClpSolverInterface.

  // Initial solve

  solver.initialSolve();


  // Down branch on 877

  solver.enableFactorization(); // 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.

  solver.markHotStart();


  solver.setColUpper(877,0);

  solver.solveFromHotStart();

  if (solver.isProvenOptimal()) {

    printf("Optimal. Objective: %e.\n", solver.getObjValue());

  } else if (solver.isIterationLimitReached()) {

    printf("Iteration limit reached.\n");

  } else {

    printf("Something else happened.\n");

  }


  solver.unmarkHotStart();

  solver.disableFactorization();



  solver.resolve();

  if (solver.isProvenOptimal()) {

    printf("Resolve optimal. Objective: %e.\n", solver.getObjValue());

  } else if (solver.isIterationLimitReached()) {

    printf("Iteration limit reached.\n");

  } else {

    printf("Something else happened.\n");

  }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/clp/attachments/20170703/bec86e1e/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: arki001_cleaned.mps.gz
Type: application/gzip
Size: 126059 bytes
Desc: not available
URL: <http://list.coin-or.org/pipermail/clp/attachments/20170703/bec86e1e/attachment-0001.gz>


More information about the Clp mailing list