Skip to content

Commit 3f39148

Browse files
committed
Updated Iis.md: now consider enhancements of IIS facility
1 parent f01056f commit 3f39148

File tree

1 file changed

+68
-19
lines changed

1 file changed

+68
-19
lines changed

highs/lp_data/Iis.md

Lines changed: 68 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,39 @@ then `Highs::getIisInterface()` returns.
1414

1515
The "full" IIS calculation operates in two phases: after a set of
1616
mutually infeasible rows has been identified, this is reduced to an
17-
IIS. The set of mutually infeasible rows can be found in two ways.
17+
IIS.
1818

19-
Firstly, if it is known that the model is infeasible, then the simplex
19+
## Finding a set of mutually infeasible rows
20+
21+
The set of mutually infeasible rows can be found in two ways. For
22+
a well-documented example of an IIS and its calculation, see unit test
23+
`lp-get-iis-galenet` in `check/TestIis.cpp`.
24+
25+
### Using a dual ray
26+
27+
If it is known that the model is infeasible, then the simplex
2028
solver may have identified a dual ray. If there is a dual ray then its
2129
nonzeros correspond to a set of mutually infeasible constraints. If
2230
there is no dual ray - as might happen if the model's infeasibility
2331
has been identified in presolve - then the incumbent model is solved
2432
with `Highs::options_.presolve` = "off". Unfortunately the "ray route"
2533
is not robust, so currently switched off.
2634

27-
Secondly - and the only route at the moment - an elasticity filter
28-
calculation is done to identify an infeasible subset of rows. This is
29-
calculation performed in `HighsIis::elasticityFilter`. This method is
30-
more general than is necessary for finding the set of mutually
31-
infeasible rows for an IIS calculation, and can be called directly
32-
using `Highs::feasibilityRelaxation`.
35+
### Using the elasticity filter
36+
37+
Currently, the only route to finding a set of mutually infeasible rows
38+
is to perform an elasticity filter calculation. This is done in
39+
`HighsIis::elasticityFilter`. This method is more general than is
40+
necessary for finding the set of mutually infeasible rows for an IIS
41+
calculation, and can be called directly using
42+
`Highs::feasibilityRelaxation`.
3343

3444
The essence of the `HighsIis::elasticityFilter` is that it allows
3545
lower bounds, upper bounds and RHS values to be violated. There are
3646
penalties for doing so that can be global for each of these three
3747
cases, or local to each column lower bound, upper bound and row
38-
bound. The "elasticity LP" is constructed by adding elastic variables
39-
to transform the constraints from
48+
bound. The "elasticity LP" is constructed by adding non-negative
49+
elastic variables to transform the constraints from
4050
$$
4151
L <= Ax <= U;\qquad l <= x <= u
4252
$$
@@ -45,16 +55,55 @@ $$
4555
L <= Ax + e_L - e_U <= U;\qquad l <= x + e_l - e_u <= u,
4656
$$
4757
where the elastic variables are not used if the corresponding bound is
48-
infinite or the local/global penalty is negative. The original bounds
49-
on the variables $x$ are removed, and the objective is the linear
50-
function of the elastic variables given by the local/global
51-
penalties. Note that the model modifications required to achieve this
52-
formulation, are made by calls to methods in the `Highs` class so that
53-
the value of any initial basis is maintained.
58+
infinite or the local/global penalty is negative. If a bound on $x$
59+
can be violated, then it is removed from $x$. This is because the
60+
violation is modelled using a row $l <= x + e_l - e_u <= u$ containing
61+
at least one of $e_l$ and $e_u$, depending on whether both bounds can
62+
be violated. The objective of the elasticity LP is the linear function
63+
of the elastic variables given by the local/global penalties. Note
64+
that the model modifications required to achieve this formulation, are
65+
made by calls to methods in the `Highs` class so that the value of any
66+
initial basis is maintained.
5467

55-
For the purposes of IIS calculation, each elastic variable has a
68+
For the purposes of IIS calculation, since an infeasible subset of
69+
rows is required, only row bounds are allowed to be violated, and the
70+
penalty in each case is unity. Hence `HighsIis::elasticityFilter` uses
71+
`global_lower_penalty=-1`, `global_upper_penalty=-1` and
72+
`global_rhs_penalty=1`. Each finite row bound has a corresponding
73+
elastic variable.
5674

57-
If the original constraints cannot be satisfied, then some
75+
When the elasticity LP is solved, if all elastic variables have an
76+
optimal value of zero, then the original LP is feasible. Clearly the
77+
algorithm to find an infeasible subset of rows then
78+
terminates. Otherwise, the aim of the algorithm is to identify a set
79+
of elastic variables that, if fixed to zero, makes the elasticity LP
80+
infeasible. The algorithm proceeds as follows. After solving the
81+
elasticity LP, each elastic variable whose optimal value is positive
82+
is fixed at zero, and the elasticity LP is re-solved. This process
83+
continues until the elasticity LP is infeasible. Thus, the elastic
84+
variables that have been fixed at zero correspond to an infeasible
85+
subset of rows. Note that the algorithm must continue until the
86+
elasticity LP is infeasible as, for example, the initial set of
87+
elastic variables that have positive values may not correspond to an
88+
infeasible subset of rows. It is possible that these constraints can
89+
be satisfied, but only at the cost of a greater total violation of
90+
some other constraint(s) that were satisfied.
5891

59-
After the elasticity LP has been solved, each elasticity variable whose optimal value is positive is fixed at zero is
92+
## Reducing to an IIS
6093

94+
Given an infeasible subset of rows, the method `HighsIis::getData`
95+
forms the LP corresponding to the subset of rows and the columns with
96+
nonzeros in those rows, and the row bounds corresponding to the fixed
97+
elastic variables. This LP is then passed to `HighsIis::compute`,
98+
which eliminates rows and columns from the LP until this is no longer
99+
possible, so the subset of rows and the columns is
100+
irreducible. Depending on whether the user desires a minimum number of
101+
rows or columns in the final IIS, it is possible to prioritise the
102+
removal of rows or columns according to the value of
103+
`Highs::options_.iis_strategy`. With the aim of finding a minimum
104+
number of rows in the final IIS, removal technique considers each
105+
finite row bound in turn. If it is relaxed and the the LP is still
106+
infeasible, then the bound can be removed. If this leads to both
107+
bounds on a row being infinite, then the row itself can be removed. A
108+
similar pass through the columns is performed before or after the row
109+
pass, depending on whether removal of columns or rows has priority.

0 commit comments

Comments
 (0)