I occasionally see this slightly strange thing happen with cplex where it jumps from a MIP gap of, say 5%, to then reporting the status as optimal. This happens when it starts solution polishing after hitting the PolishAfterTime condition.

From inspection of the solutions, I do not believe they are actually optimal and I suspect something could be going wrong in solution polishing, but I'm unsure what. Has anyone seen anything similar or have an idea what could be happening? I have attached an example image of cplex logs. Also, it's worth noting that it never gets past the root node and cplex reports nodes=0. cplex logs

  • 1
    $\begingroup$ If you shared the .lp, we could try solving it with other solvers and test whether the returned solution by CPLEX is optimal or not $\endgroup$
    – Kuifje
    Jun 5, 2023 at 11:47
  • $\begingroup$ Just give it more time (solution polishing happens near running out of time). That should give you confirmation whether there are better solutions. $\endgroup$ Jun 5, 2023 at 14:38
  • $\begingroup$ What are your absolute and relative gap settings, and how far is the reported objective value from the actual optimum? $\endgroup$
    – prubin
    Jun 5, 2023 at 15:13
  • $\begingroup$ There was still plenty of time as I configured it to run solution polishing after 20% of the time (with PolishAfterTime). The relative MIP gap is set to 0.00% and the absolute gap setting is at cplex's default (1e-06). I am not easily able to tell how far it is from the actual optimum though, but I believe I could determine this by either re-running it (the issues does not always replicate) or using a different solver as per Kuifje's suggestion. $\endgroup$
    – James
    Jun 5, 2023 at 16:01
  • 1
    $\begingroup$ I meant: give Cplex more time before the polishing kicks in. That way you can get a normal optimal solution. Also, note that Cplex does not always print the more interesting parts of the node log where exciting things are happening. $\endgroup$ Jun 5, 2023 at 17:10

1 Answer 1


First of all, I think you have to display the final MIP gap in your terminal, maybe that actually MIP gap is zero.

If not, in my opinion, you have to check several experiments. Using MIP solver solve the problem until obtaining the optimal solution which is different with your "SolutionPolish" solution then that might be the case "SolutionPolish" cannot find more integer solution, or you have to check your setting for "SolutionPolish" would not make the algorithm terminate early. For example, integral tolerance, MIP gap or RunTime for "SolutionPolish".

The reason for "SolutionPolish" cannot find more integer solution is that the concept of algorithm is actually a evaluation algorithm.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.