Conversation
…IisLp(); computing IIS LP after defining IIS
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## latest #2456 +/- ##
==========================================
+ Coverage 79.57% 79.59% +0.01%
==========================================
Files 346 346
Lines 85395 85838 +443
==========================================
+ Hits 67955 68321 +366
- Misses 17440 17517 +77 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
How would you see this being used from the C API? Can we tie the original rows and columns to the rows and columns in the IIS? JuMP wants to be able to call some sort of |
|
We should have strong reasons to not follow the Gurobi API: https://docs.gurobi.com/projects/optimizer/en/current/reference/c/solving.html#c.GRBcomputeIIS |
Thanks, I'll add this. I was working from the Xpress IIS API
I'll add this. I assume that The |
Do you mean one enum for each variable and each constraint, or do you want to know whether a specific variable/constraint lower/upper bound has this status? Corresponding to each variable/constraint in the IIS, there's a bound status to indicate whether just the lower, just the upper, or both bounds are finite in the IIS LP. @odow, there are a few more IIS issues that it would be good to discuss at the next HiGHS-JuMP meeting |
… to someone who knows what they are doing
| HighsInt Highs_getIis(void* highs, HighsInt* iis_num_col, HighsInt* iis_num_row, | ||
| HighsInt* col_index, HighsInt* row_index, | ||
| HighsInt* col_bound, HighsInt* row_bound, | ||
| HighsInt* col_status, HighsInt* row_status); |
There was a problem hiding this comment.
What is the difference between _bound and _status? The _bound is free/lower/upper/boxed and the _status is in conflict/not in conflcit/maybe in conflict?
If we're returning only a subset of the rows and columns, the status would never be "not in conflict", so are both vectors needed?
Perhaps to answer my own question: if the IIS is not minimal, then there might be a "maybe in conflict" entry. If all are "in conflict" then the IIS is minimal.
There was a problem hiding this comment.
What is the difference between
_boundand_status? The_boundis free/lower/upper/boxed and the_statusis in conflict/not in conflcit/maybe in conflict?
Yes
If we're returning only a subset of the rows and columns, the status would never be "not in conflict", so are both vectors needed?
These vectors aren't needed at the moment, but if the IIS calculation is interrupted by timeout, say, then (as you guessed) the IIS is not minimal, so there might be a "maybe in conflict" entry. If all are "in conflict" then the IIS is minimal.
Methods and docstrings have been added to the C API |
|
Hi, thanks for the work on this! Do you have any expectation when this will be available? We're interested in having the IIS available for use through the C API. |
I can't see a new release before mid-September, as we're doing a lot of urgent development work at the moment. However, the necessary methods are already in the C API - and tested with our other C API tests. |
|
Thanks for the update!
I was looking in the interfaces and have not seen the IIS methods exposed in the API, and saw them being added in this PR (2d0bb19). |
This is because the "interfaces" you quote are in the master branch, and #2456 has not even been merged into latest. |
|
|
||
| The irreducible infeasibility system (IIS) facility now detects infeasibility due to bounds on constraint activity values being incompatible with constraint bounds. A kIisStrategyLight mode for the iis_strategy option has been introduced so that only infeasibility due to incompatible variable/constraint bounds and constraint activity values is checked for. The LP corresponding to any known IIS is now formed and held as a data member of the HighsIis class. | ||
|
|
||
| Prompted by [#2463](https://github.com/ERGO-Code/HiGHS/issues/2463), the HiGHS solution and basis files now match data to any column and row names in the model, only assuming that the data are aligned with column and row indices if there are no names in the model. This requires a new version (v2) of the HiGHS basis file. Basis files from v1 are still read, but deprecated. Now, when writing out a model, basis or solution, column and row names are added to the model - previously they were created temporarily and inconsistentyly on the fly. If the model has existing names, then distinctive names are created to replace any blank names, but names with spaces or duplicate names yield an error status return. |
There was a problem hiding this comment.
Happened to notice a typo here: inconsistentyly
EDIT: sorry, did not see you already merged this
The irreducible infeasibility system (IIS) facility now detects infeasibility due to bounds on constraint activity values being incompatible with constraint bounds.
A
kIisStrategyLightmode for theiis_strategyoption has been introduced so that only infeasibility due to incompatible variable/constraint bounds and constraint activity values is checked for.The LP corresponding to any known IIS is now formed and held as a data member of the HighsIis class.
Highs::checkIishas been added for unit testing and beta testing. It takes the IIS LP, checks that it's infeasible and then relaxes each finite variable/constraint bound in turn, and solves the corresponding LP, checking that the model status isHighsModelStatus::kOptimalorHighsModelStatus::kUnbounded. Since the IIS LP is so small, the cost of the check is trivial compared with finding an IIS, so maybe the checking should be done a priori.