The OPTLP Procedure

Example 5.7 Finding an Irreducible Infeasible Set

This example demonstrates the use of the IIS= option to locate an irreducible infeasible set. Suppose you want to solve a linear program that has the following simple formulation:

StartLayout 1st Row 1st Column min 2nd Column Blank 3rd Column x 1 4th Column plus 5th Column x 2 6th Column plus 7th Column x 3 8th Column Blank 9th Column Blank 10th Column left-parenthesis cost right-parenthesis 2nd Row 1st Column subject to 2nd Column Blank 3rd Column x 1 4th Column plus 5th Column x 2 6th Column Blank 7th Column Blank 8th Column greater-than-or-equal-to 9th Column 10 10th Column left-parenthesis con 1 right-parenthesis 3rd Row 1st Column Blank 2nd Column Blank 3rd Column x 1 4th Column Blank 5th Column Blank 6th Column plus 7th Column x 3 8th Column less-than-or-equal-to 9th Column 4 10th Column left-parenthesis con 2 right-parenthesis 4th Row 1st Column Blank 2nd Column 4 less-than-or-equal-to 3rd Column Blank 4th Column Blank 5th Column x 2 6th Column plus 7th Column x 3 8th Column less-than-or-equal-to 9th Column 5 10th Column left-parenthesis con 3 right-parenthesis 5th Row 1st Column Blank 2nd Column Blank 3rd Column Blank 4th Column Blank 5th Column Blank 6th Column x 1 comma 7th Column x 2 8th Column greater-than-or-equal-to 9th Column 0 10th Column Blank 6th Row 1st Column Blank 2nd Column Blank 3rd Column Blank 4th Column Blank 5th Column 0 6th Column less-than-or-equal-to 7th Column x 3 8th Column less-than-or-equal-to 9th Column 3 10th Column Blank EndLayout

The corresponding MPS-format data table is as follows:


/* infeasible */
data mylib.exiis;
   input _id_ field1 $ field2 $ field3 $ field4 field5 $ field6;
datalines;
1  NAME     .        .        .        .        .
2  ROWS     .        .        .        .        .
3  N       cost      .        .        .        .
4  G       con1      .        .        .        .
5  L       con2      .        .        .        .
6  G       con3      .        .        .        .
7  COLUMNS  .        .        .        .        .
8  .        x1       cost     1        con1     1
9  .        x1       con2     1        .        .
10 .        x2       cost     1        con1     1
11 .        x2       con3     1        .        .
12 .        x3       cost     1        con2     1
13 .        x3       con3     1        .        .
14 RHS      .        .        .        .        .
15 .        rhs      con1     10       con2     4
16 .        rhs      con3     4        .        .
17 RANGES   .        .        .        .        .
18 .        r1       con3     1        .        .
19 BOUNDS   .        .        .        .        .
20 UP       b1       x3       3        .        .
21 ENDATA   .        .        .        .        .
;

It is easy to verify that the following three constraints (or rows) and one variable (or column) bound form an IIS for this problem.

StartLayout 1st Row 1st Column x 1 2nd Column plus 3rd Column x 2 4th Column Blank 5th Column Blank 6th Column greater-than-or-equal-to 7th Column 10 8th Column left-parenthesis con 1 right-parenthesis 2nd Row 1st Column x 1 2nd Column Blank 3rd Column Blank 4th Column plus 5th Column x 3 6th Column less-than-or-equal-to 7th Column 4 8th Column left-parenthesis con 2 right-parenthesis 3rd Row 1st Column Blank 2nd Column Blank 3rd Column x 2 4th Column plus 5th Column x 3 6th Column less-than-or-equal-to 7th Column 5 8th Column left-parenthesis con 3 right-parenthesis 4th Row 1st Column Blank 2nd Column Blank 3rd Column Blank 4th Column Blank 5th Column x 3 6th Column greater-than-or-equal-to 7th Column 0 8th Column Blank EndLayout

You can use the IIS=TRUE option to detect this IIS by using the following statements:

proc optlp data=mylib.exiis
   iis=true
   primalout=mylib.iis_vars
   dualout=mylib.iis_cons
   logfreq=1;
run;

The OPTLP procedure outputs the detected IIS to the data sets specified by the PRIMALOUT= and DUALOUT= options, then stops. The notes shown in Output 5.7.1 are printed to the log.

Output 5.7.1: The IIS= Option: Log

NOTE: The problem has 3 variables (0 free, 0 fixed).                            
NOTE: The problem has 3 constraints (1 LE, 0 EQ, 1 GE, 1 range).                
NOTE: The problem has 6 constraint coefficients.                                
NOTE: The LP solver is called.                                                  
NOTE: The IIS= option is enabled.                                               
                           Objective                Entering      Leaving       
      Phase Iteration        Value         Time     Variable      Variable      
       P 1          1    6.000000E+00         0       con3 (S)       con3 (S)   
       P 1          2    5.000000E+00         0         x1           con2 (S)   
       P 1          3    1.000000E+00         0                                 
NOTE: Applying the IIS sensitivity filter.                                      
NOTE: The sensitivity filter removed 1 constraints and 3 variable bounds.       
NOTE: Applying the IIS deletion filter.                                         
NOTE: Processing constraints.                                                   
      Processed     Removed      Time                                           
              0           0         0                                           
              1           0         0                                           
              2           0         0                                           
              3           0         0                                           
NOTE: Processing variable bounds.                                               
      Processed     Removed      Time                                           
              0           0         0                                           
              1           0         0                                           
              2           0         0                                           
              3           0         0                                           
NOTE: The deletion filter removed 0 constraints and 0 variable bounds.          
NOTE: The IIS= option found this problem to be infeasible.                      
NOTE: The IIS= option found an irreducible infeasible set with 1 variables and  
      3 constraints.                                                            
NOTE: The IIS solve time is 0.02 seconds.                                       
NOTE: The Cloud Analytic Services server processed the request in 0.543993      
      seconds.                                                                  
NOTE: The data set MYLIB.IIS_VARS has 3 observations and 10 variables.          
NOTE: The data set MYLIB.IIS_CONS has 3 observations and 10 variables.          


The data sets iis_cons and iis_vars are shown in Output 5.7.2.

Output 5.7.2: Identify Rows and Columns in the IIS

Constraints in the IIS

ObsObjective
Function ID
RHS IDConstraint
Name
Constraint
Type
Constraint
RHS
Constraint
Lower
Bound
Constraint
Upper
Bound
Dual SolutionConstraint
Status
Constraint
Activity
1costrhscon1G10...I_L.
2costrhscon2L4...I_U.
3costrhscon3R.45.I_U.

Variables in the IIS

ObsObjective
Function ID
RHS IDVariable
Name
Variable
Type
Objective
Coefficient
Lower
Bound
Upper BoundVariable
Value
Variable
Status
Reduced
Cost
1costrhsx1N101.7977E308. .
2costrhsx2N101.7977E308. .
3costrhsx3D103.I_L.


The constraint x 2 plus x 3 less-than-or-equal-to 5, which is an element of the IIS, is created by the RANGES section. The original constraint is con3, a "greater-than-or-equal-to" constraint with an RHS value of 4. If you choose to remove the constraint x 2 plus x 3 less-than-or-equal-to 5, you can accomplish this by removing con3 from the RANGES section in the MPS-format data table exiis. Since con3 is the only observation in the section, the identifier observation can also be removed. The modified LP problem is specified in the following SAS statements:

 /* dropping con3, feasible */
data mylib.exiisf;
   input _id_ field1 $ field2 $ field3 $ field4 field5 $ field6;
datalines;
1  NAME     .        .        .        .        .
2  ROWS     .        .        .        .        .
3  N        cost     .        .        .        .
4  G        con1     .        .        .        .
5  L        con2     .        .        .        .
6  G        con3     .        .        .        .
7  COLUMNS  .        .        .        .        .
8  .        x1       cost     1        con1     1
9  .        x1       con2     1        .        .
10 .        x2       cost     1        con1     1
11 .        x2       con3     1        .        .
12 .        x3       cost     1        con2     1
13 .        x3       con3     1        .        .
14 RHS      .        .        .        .        .
15 .        rhs      con1     10       con2     4
16 .        rhs      con3     4        .        .
17 BOUNDS   .        .        .        .        .
18 UP       b1       x3       3        .        .
19 ENDATA   .        .        .        .        .
;

Since one element of the IIS has been removed, the modified LP problem should no longer contain the infeasible set. Due to the size of this problem, there should be no additional irreducible infeasible sets. You can confirm this by submitting the following SAS statements:

proc optlp data=mylib.exiisf
   iis=true;
run;

The notes shown in Output 5.7.3 are printed to the log.

Output 5.7.3: The IIS= Option: Log

NOTE: The problem has 3 variables (0 free, 0 fixed).                            
NOTE: The problem has 3 constraints (1 LE, 0 EQ, 2 GE, 0 range).                
NOTE: The problem has 6 constraint coefficients.                                
NOTE: The LP solver is called.                                                  
NOTE: The IIS= option is enabled.                                               
                           Objective                                            
      Phase Iteration        Value         Time                                 
       P 1          1    1.400000E+01         0                                 
       P 1          2    0.000000E+00         0                                 
NOTE: The IIS= option found this problem to be feasible.                        
NOTE: The IIS solve time is 0.00 seconds.                                       
NOTE: The Cloud Analytic Services server processed the request in 0.210414      
      seconds.                                                                  
NOTE: The data set WORK.EXSS has 8 observations and 4 variables.                


The solution summary is displayed in Output 5.7.4.

Output 5.7.4: Infeasibility Removed

Solution Summary

ObsName1Label1cValue1nValue1
1solverSolverLP.
2algorithmAlgorithmIIS.
3objectiveNameObjective Functioncost.
4solStatusSolution StatusFeasible.
5   .
6iterationsIterations22.000000
7presolveTimePresolve Time0.000
8solutionTimeSolution Time0.000.000378


Last updated: June 22, 2026