The LP Procedure

Sparse Data Input Format

The sparse format to PROC LP is designed to enable you to specify only the nonzero coefficients in the description of linear programs, integer programs, and mixed-integer programs. The SAS data set that describes the sparse model must contain at least four SAS variables:

Each observation in the data set associates a type with a row or column, and defines a coefficient or numerical value in the model. The value of the type variable is a keyword that tells PROC LP how to interpret the observation. In addition to the keywords in the dense format, PROC LP also recognizes the keywords RHS, RHSSEN, and RANGE as values of the type variable. Table 5.4 shows the keywords that are recognized by PROC LP and in which variables can appear in the problem data set.

The values of the row and column variables are the names of the rows and columns in the model. The values of the coefficient variables define basic coefficients and lower and upper bounds, and identify model variables with types BASIC, FIXED, BINARY, and INTEGER. All character values in the sparse data input format are case insensitive.

The SAS data set can contain multiple pairs of rows and coefficient variables. In this way, more information about the model can be specified in each observation in the data set. See Example 5.2 for details.

Table 5.4: Variable Keywords Used in the Problem Data Set

TYPE (_TYPE_)

COL (_COL_)

MIN

 

MAX

 

EQ

 

LE

 

GE

 

SOSEQ

 

SOSLE

 

UNRSTRT

 

LOWERBD

 

UPPERBD

 

FIXED

 

INTEGER

 

BINARY

 

BASIC

 

PRICESEN

 

FREE

 

RHS

_RHS_

RHSSEN

_RHSSEN_

RANGE

_RANGE_

$*$xxxxxxx

 


Follow these rules for sparse data input:

  • The order of the observations is unimportant.

  • Each unique column name appearing in the COL variable defines a unique column in the model.

  • Each unique row name appearing in the ROW variable defines a unique row in the model.

  • The type of the row is identified when an observation in which the row name appears (in a ROW variable) has type MIN, MAX, LE, GE, EQ, SOSLE, SOSEQ, LOWERBD, UPPERBD, UNRSTRT, FIXED, BINARY, INTEGER, BASIC, FREE, or PRICESEN.

  • The type of each row must be identified at least once. If a row is given a type more than once, the multiple definitions must be identical.

  • When there are multiple rows named in an observation (that is, when there are multiple ROW variables), the TYPE variable applies to each row named in the observation.

  • The type of a column is identified when an observation in which the column name but no row name appears has the type LOWERBD, UPPERBD, UNRSTRT, FIXED, BINARY, INTEGER, BASIC, RHS, RHSSEN, or RANGE. A column type can also be identified in an observation in which both column and row names appear and the row name has one of the preceding types.

  • Each column is assumed to be a structural column in the model unless the column is identified as a right-hand-side vector, a right-hand-side change vector, or a range vector. A column can be identified as one of these types using either the keywords RHS, RHSSEN, or RANGE in the TYPE variable, the special column names _RHS_, _RHSSEN_, or _RANGE_, or the RHS, RHSSEN, or RANGE statements following the PROC LP statement.

  • A TYPE variable beginning with the character $*$ causes the observation to be interpreted as a comment.

When the column names appear in the Variable Summary in the PROC LP output, they are listed in alphabetical order. The row names appear in the order in which they appear in the problem data set.