> Continuous Optimization > Solving LPs: Simplex Optimizers > Diagnosing LP Infeasibility > Finding a Set of Irreducibly Inconsistent Constraints

If ILOG CPLEX reports that your problem is infeasible, then you can invoke the ILOG CPLEX infeasibility finder to help you analyze the source of the infeasibility. This diagnostic tool computes a set of infeasible constraints and column bounds that would be feasible if one of them (a constraint or variable) were removed. Such a set is known as an irreducibly inconsistent set (IIS).

To work, the infeasibility finder must have a problem that satisfies two conditions:

The parameter IISInd controls the method used for determining the IIS. Its default setting 0 (zero) invokes an algorithm that requires minimal computation time but may generate a large set of inconsistent constraints. Its alternative value of 1 (one) may take longer but generates a minimal set of irreducibly inconsistent constraints. Use the Concert Technology method cplex.writeIIS or the Callable Library routines CPXdisplayiis or CPXiiswrite to output the results for review.

Correcting Multiple Infeasibilities

The infeasibility finder will find only one irreducibly inconsistent set (IIS), though a given problem may contain many independent IISs. Consequently, even after you detect and correct one such IIS in your problem, it may still remain infeasible. In such a case, you need to run the infeasibility finder more than once to detect those multiple causes of infeasibility in your problem.

Infeasibility Finder in the Interactive Optimizer

To invoke the infeasibility finder and to display part of its findings in the Interactive Optimizer, use the command display iis. By default, ILOG CPLEX records all its findings in a log file. To send these findings to your screen as well, use the command set output logonly y cplex.log.

After that command, invoke the infeasibility finder with the command display iis. ILOG CPLEX will respond like this:

Starting Infeasibility Finder Algorithm...
Performing row sensitivity filter
Performing column sensitivity filter

Number of rows in the iis: 3
Number of columns in the iis: 3
Names of rows in the iis:
NODE5    (fixed)
D7       (lower bound)
D8       (lower bound)
Names of columns in the iis:
T25      (upper bound)
T35      (upper bound)
T47      (upper bound)
Iis Computation Time =    0.01 sec.

As you can see, ILOG CPLEX states how many rows and columns comprise the IIS. It also displays the row and column names, and it identifies the bound causing the infeasibility. In this example, all the columns in the IIS are limited by their upper bound. If you remove any of the upper bounds on those columns, then the IIS becomes feasible. The bound information about rows is really needed only for ranged rows. In the case of ranged rows, the bound indicates whether the row lies at the lower or upper end of the range of right-hand side values. For other kinds of rows, there is only one possible right-hand side value at which the row can lie. Greater-than constraints must lie at their lower bound. Less-than constraints must lie at their upper bound. Equality constraints are fixed.

Example: Writing an IIS-Type File

After you have invoked the infeasibility finder with the display iis command, if you want additional information to determine the cause of infeasibility, use the write command and the file type iis to generate a ILOG CPLEX LP format file containing each individual constraint and bound in the IIS. You can then use the xecute command to call an ordinary text editor during your ILOG CPLEX session to examine the contents of that IIS file. It will look something like this example:

CPLEX> write infeas.iis

Starting Infeasibility Finder Algorithm...
Performing row sensitivity filter
Performing column sensitivity filter
Irreducibly inconsistent set written to file 'infeas.iis'.

CPLEX> xecute edit infeas.iis

Minimize
subject to
\Rows in the iis:
 NODE5: T25 + T35 - T57 - T58  = 0
 D7:    T47 + T57 >= 20
 D8:    T58 >= 30
\Columns in the iis:
Bounds
 T25 <= 10
 T35 <= 10
 T47 <= 2
\Non-iis columns intersecting iis rows:
 T57 Free
 T58 Free

In this example, you see that the bounds on T25 and T35 combine with the row NODE5 to imply that T57 + T58 <= 20. However, row D7 and the bound on T47 together imply that T57 >= 18. Since row D8 requires that T58 >= 30, you see that T57 + T58 >= 48, so the constraints and bounds are infeasible. Notice that every constraint and bound contributes to this infeasibility, according to the definition of an IIS. There are, in consequence, many different ways to modify such a problem to make it feasible. The "right" change will depend on your knowledge of the problem.

When ILOG CPLEX records the constraints and bounds of an IIS, it also lists as free all columns that intersect one or more rows in the IIS but do not have bounds in the IIS. This portion of the file makes sure that when you read the file into ILOG CPLEX, the resulting problem satisfies the definition of an IIS. After you read in such a file, you can perform additional problem analysis within your ILOG CPLEX session.

Example: Interpreting a Cumulative Constraint

In the example presented thus far, there were sufficiently few row and column bounds in the IIS to see the cause of infeasibility at a glance. In contrast, other IIS files may contain so many rows and columns that it becomes difficult to see the cause of infeasibility. When an IIS contains many equality constraints and only a few bounds, for example, this phenomenon commonly occurs. In such a situation, the equality constraints transfer the infeasibility from one part of the model to another until eventually no more transfers can occur. Consequently, such an IIS file will also contain a cumulative constraint consisting of the sum of all the equality rows. This cumulative constraint can direct you toward the cause of infeasibility, as the following sample IIS illustrates:

Minimize
subject to
\Rows in the iis:
 2:   - x24 + x97 + x98 - x99 - x104  = -7758
 3:   - x97 + x99 + x100 - x114 - x115  = 0
 4:   - x98 + x104  = 0
 10:  - x105 + x107 + x108 - x109  = -151
 11:  - x108 + x109 + x110 - x111  = -642
 12:  - x101 - x102 - x110 + x111 + x112 + x113 - x117  = -2517
 13:  - x112 + x117 + x118 - x119  = -186
 14:  - x118 + x119 + x120 + x121 - x122 - x123  = -271
 15:  - x120 + x122  = -130
 16:  - x121 + x123 + x124 - x125  = -716
 17:  - x124 + x125 + x126 - x127  = -2627
 18:  - x126 + x127 + x128 - x129  = -1077
 19:  - x128 + x129 + x130 - x131  = -593
 249: - x100 + x101 + x103  = 0
 251: - x113 + x114 + x116  = 0
\Sum of equality rows in iis:
\  - x24 - x102 + x103 - x105 + x107 - x115 + x116 + x130 - x131 = -16668
\Columns in the iis:
Bounds
 x24 <= 14434
 x102 = 0
 x103 = 0
 x105 = 0
 x107 = 0
 x115 = 0
 x116 = 0
 x130 = 0
 x131 = 0
\Non-iis columns intersecting iis rows:
 x97 Free
 x98 Free
 x99 Free
.
.
.
End

Since there are 15 rows in this IIS file, the cause of infeasibility is not immediately obvious. However, if you look at the sum of the bounds on the columns, you see that

-x24 -x102 + x103 -x105 +x107 -x115 +x116 + x130 -x131 >= -14434

so it is impossible to satisfy the sum of equality rows. Therefore, to correct the infeasibility, you must alter one or more of the bounds, or you must increase one or more of the right-hand side values.

Example: Setting a Time Limit on the Infeasibility Finder

The ILOG CPLEX infeasibility finder will stop when its total runtime exceeds the limit set by the command set timelimit. The infeasibility finder works by removing constraints and bounds that cannot be involved in the IIS, so it can provide partial information about an IIS when it reaches its time limit. The collection of constraints and bounds it offers then do not strictly satisfy the definition of an IIS. However, the collection does contain a true IIS within it, and frequently it provides enough information for you to diagnose the cause of infeasibility in your problem. When it reaches the time limit, ILOG CPLEX output indicates that it has found only a partial IIS. The following example illustrates this idea. It sets a time limit and then invokes the feasibility finder.

CPLEX> set timelimit 2
CPLEX> display iis

Starting Infeasibility Finder Algorithm...
Performing row sensitivity filter
Infeasibility Finder Algorithm exceeded time limit.
Partial infeasibility output available.

Number of rows in the (partial) iis: 101
Number of columns in the (partial) iis: 99

Tactics for Interpreting IIS Output

The size of the IIS reported by ILOG CPLEX depends on many factors in the model. If an IIS contains hundreds of rows and columns, you may find it hard to determine the cause of the infeasibility. Fortunately, there are tactics to help you interpret IIS output: