Introduced relative KKT error data to HighsInfo, and using it to assess optimality claims from PDLP and IPM without crossover#2346
Conversation
…own to be required for Glpsol
…l objecive error when assessing LP solutions without a basis, but not considering off-bound meaningful duals as infeasible
… ipxSolutionToHighsSolutionNew
…mputing standard relative residual
…ls=true for simplex. Reduced logging output
…hey aren't used to determine optimality
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## latest #2346 +/- ##
==========================================
- Coverage 79.08% 79.01% -0.07%
==========================================
Files 346 346
Lines 84605 84969 +364
==========================================
+ Hits 66906 67138 +232
- Misses 17699 17831 +132 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
The documentation of
|
|
I've added @odow as a reviewer, mainly to flag up this significant change. |
|
If the Julia tests pass, I'm okay with it. We don't really have a good solver-independent way for users to check the quality of the returned solutions, but @joaquimg's tool that he is building should help. |
|
Great! |
PDLP and IPM without crossover terminate with optimality using relative measures of KKT conditions. Hence it's unreasonable to expect the absolute KKT conditions used to determine optimality in simplex and IPM with crossover - when a basis is available. However, using measures of the bounds (costs) of the LP in relative measures of primal (dual) KKT conditions can flatter the solution obtained (particularly in the case of PDLP).
Hence, this PR introduces relative KKT error data - available to the user via
HighsInfo- that are computed using the optimal solution, and ignore large costs and bounds that play no role in the optimal solution. The measures of the costs and bounds are computed for bounds that are active, and costs for which the corresponding dual is small.The fix in #1978 to remove residual errors (that, previously, were not being checked for) after IPM without crossover by transferring them to primal and dual activities, was a bad idea. If nothing else, it led to a lot of erroneous model status values of
HighsModelStatus::kUnknownwhen the problem had been solved satisfactorily using relative tolerances. This correction of residuals has now been removed. The relative residuals are assessed using the new measures. The large residuals that were reported, probably correspond to #2306