Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## latest #2862 +/- ##
==========================================
- Coverage 80.35% 80.35% -0.01%
==========================================
Files 348 348
Lines 86491 86522 +31
==========================================
+ Hits 69503 69527 +24
- Misses 16988 16995 +7 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
highs/ipm/hipo/ipm/Solver.cpp
Outdated
| options_.time_limit = highs_options.time_limit; | ||
|
|
||
| options_.max_iter = | ||
| highs_options.ipm_iteration_limit - highs_info.ipm_iteration_count; |
There was a problem hiding this comment.
IPM iteration limit is limit for a particular solve, not total "all time" iterations of IPM, so subtracting highs_info.ipm_iteration_count shouldn't be done. Hence HighsInfo& highs_info isn't needed in this method
highs/ipm/hipo/ipm/Solver.cpp
Outdated
| } | ||
|
|
||
| // Reordering heuristic | ||
| if (highs_options.hipo_ordering != kHipoMetisString && |
There was a problem hiding this comment.
Checking the validity of string options is done by Highs::setOptionValue, since this must not return HighsStatus::kOk if the option value is not valid.
I'll leave you to add the necessary calls and methods to lp_data/HighsOptions.h/cpp, along the lines of what's in the version of checkOptionValue for strings.
For sanity you can then leave an assert in Solver::setOptions, but it can return void, hence you don't have to handle an error return below the call.
jajhall
left a comment
There was a problem hiding this comment.
Generally fine - and the "wrapper" idea was inherited from IPX so that the internal IPX code didn't have to be modified, so moving stuff into HiPO from the wrapper is fine.
See comments on validating option values externally.
|
I changed all the options in HiPO from enum to string, so that they can be passed directly from the highs options. I added functions to check the validity of hipo_parallel_type, hipo_system, hipo_ordering. The asserts are present when the options are actually used, in FactorHiGHSSolver.cpp. |
HiPO now checks if the kktCheck passes before returning a solution, if crossover is not run.
If HiPO finds a primal-dual feasible solution, but kktCheck disagrees, more iterations are performed until either a solution is found that satisfies the check, or the solver stagnates, or IPX is called. The check is not performed on the solution returned by IPX.
If crossover is requested, no check is performed, because a tighter tolerance is required by the solver already.
Option parsing has been moved inside of hipo::Solver rather than in the wrapper. Final residuals are no longer printed in the summary.