|
29 | 29 | yield a specific row or column of ``B^{-1}A``. In all cases, |
30 | 30 | HiGHS can return the number and indices of the nonzeros in the result. |
31 | 31 |
|
| 32 | +## [Irreducible infeasibility system (IIS) detection](@id highs-iis) |
| 33 | + |
| 34 | +An Irreducible infeasibility system (IIS) consists of a set of |
| 35 | +variables and a set of constraints in a model, together with |
| 36 | +variable/constraint bound information, that cannot be satisfied (so is |
| 37 | +infeasible). It is irreducible in that if any constraint or variable |
| 38 | +bound is removed, then the system can be satisfied (so is feasible). |
| 39 | + |
| 40 | +HiGHS has an IIS facility that is under development. Currently it can |
| 41 | +only be used for LPs. The full IIS calculation is expensive, since it |
| 42 | +requires the solution of multiple LPs. Although there is a prototype |
| 43 | +implementation, it is not as robust or efficient as it will |
| 44 | +be. Otherwise, there is a simple, cheap test that looks for |
| 45 | +infeasibility due to incompatible variable oe constraint bounds, or |
| 46 | +constraint bounds that cannot be satisfied given the range of values |
| 47 | +on the constraint activity implied by bounds on variables. |
| 48 | + |
| 49 | +The choice of IIS strategy is defined by the [iis_strategy](@id option-iis-strategy) option, which can take the value |
| 50 | + |
| 51 | +- `kIisStrategyLight` = 0: The cheap test |
| 52 | +- `kIisStrategyFromLpRowPriority` = 1: The full IIS calculation, aiming to have a minimal number of rows in the IIS |
| 53 | +- `kIisStrategyFromLpColPriority` = 2: The full IIS calculation, aiming to have a minimal number of columns in the IIS |
| 54 | + |
| 55 | +### IIS-related methods in the `Highs` class |
| 56 | + |
| 57 | +- `const HighsLp& getIisLp()`: Return a const reference to the internal IIS LP instance |
| 58 | +- `HighsStatus getIis(HighsIis& iis)`: Try to find an IIS for the incumbent model. Gets the internal [HighsIis](@ref) instance, returning `HighsStatus::kError` if the calculation failed. Note that if the incumbent model is found to be feasible, this is a "success", and `HighsStatus::kOk` is returned. |
| 59 | +- ` HighsStatus writeIisModel(const std::string& filename = "")`: Write out the internal IIS LP instance to a file. |
| 60 | + |
| 61 | + |
| 62 | + |
0 commit comments