public class MPSReader extends Object implements Serializable
An MPS file defines a linear or quadratic programming problem. Linear programming problems read using this class are assumed to be of the form:
subject to
where c is the objective coefficient vector, A is the coefficient matrix, and the vectors , , , and are the lower and upper bounds on the constraints and the variables, respectively.
The following table helps map this notation into the use of MPSReader
.
C  Objective 
A  Constraint matrix 
Lower Range  
Upper Range  
Lower Bound  
Upper Bound 
If the MPS file specifies an equality constraint or bound, the corresponding lower and upper values will be exactly equal.
The problem formulation assumes that the constraints and bounds are twosided. If a particular constraint or bound has no lower limit, then the corresponding entry in the structure is set to negative machine infinity. If the upper limit is missing, then the corresponding entry in the structure is set to positive machine infinity.
MPS File Format
There is some variability in the MPS format. This section describes the MPS format accepted by this reader.
An MPS file consists of a number of sections. Each section begins with a name in column 1. With the exception of the NAME section, the rest of this line is ignored. Lines with a '*' or '$' in column 1 are considered comment lines and are ignored.
The body of each section consists of lines divided into fields, as follows:
Field Number  Columns  Content 
1  23  Indicator 
2  512  Name 
3  1522  Name 
4  2536  Value 
5  4047  Name 
6  5061  Value 
The format limits MPS names to 8 characters and values to 12 characters. The names in fields 2, 3 and 5 are case sensitive. Leading and trailing blanks are ignored, but internal spaces are significant.
The sections in an MPS file are as follows:
NAME
ROWS
COLUMNS
RHS
RANGES (optional)
BOUNDS (optional)
QUADRATIC (optional)
ENDATA
Sections must occur in the above order.
MPS keywords, section names and indicator values, are case insensitive. Row, column and set names are case sensitive.
NAME Section
The NAME section contains the single line. A problem name can occur anywhere on the line after NAME and before columns 62. The problem name is truncated to 8 characters.
ROWS Section
The ROWS section defines the name and type for each row. Field 1 contains the row type and field 2 contains the row name. Row type values are not case sensitive. Row names are case sensitive. The following row types are allowed:
Row Type  Meaning 
E  Equality constraint 
L  Less than or equal constraint 
G  Greater than or equal constraint 
N  Objective of a free row 
COLUMNS Section
The COLUMNS section defines the nonzero entries in the objective and the constraint matrix. The row names here must have been defined in the ROWS section.
Field  Contents 
2  Column name 
3  Row name 
4  Value for the entry whose row and column are given by fields 2 and 3 
5  Row name 
6  Value for the entry whose row and column are given by fields 2 and 5 
Note: Fields 5 and 6 are optional.
The COLUMNS section can also contain markers. These are indicated by the name 'MARKER' (with the quotes) in field 3 and the marker type in field 4 or 5.
Marker type 'INTORG' (with the quotes) begins an integer group. The marker type 'INTEND' (with the quotes) ends this group. The variables corresponding to the columns defined within this group are required to be integer.
RHS Section
The RHS section defines the righthand side of the constraints. An MPS file can contain more than one RHS set, distinguished by the RHS set name. The row names here must be defined in the ROWS section.
Field  Contents 
2  RHS name 
3  Row name 
4  Value for the entry whose row and column are given by fields 2 and 3 
5  Row name 
6  Value for the entry whose row and column are given by fields 2 and 5 
Note: Fields 5 and 6 are optional.
RANGES Section
The optional RANGES section defines twosided constraints. An MPS file can contain more than one range set, distinguished by the range set name. The row names here must have been defined in the ROWS section.
Field  Contents 
2  Range set name 
3  Row name 
4  Value for the entry whose row and column are given by fields 2 and 3 
5  Row name 
6  Value for the entry whose row and column are given by fields 2 and 5 
Note: Fields 5 and 6 are optional.
Ranges change onesided constraints, defined in the RHS section, into twosided constraints. The twosided constraint for row i depends on the range value, , defined in this section. The righthand side value, , is defined in the RHS section. The twosided constraints for row i are given in the following table:
Row Type  Lower Constraint  Upper Constraint 
G  
L  
E 
BOUNDS Section
The optional BOUNDS section defines bounds on the variables. By default, the bounds are . The bounds can also be used to indicate that a variable must be an integer.
More than one bound can be set for a single variable. For example, to set use a LO bound with value 2 to set and an UP bound with value 6 to add the condition .
An MPS file can contain more than one bounds set, distinguished by the bound set name.
Field  Contents 
1  Bounds type 
2  Bounds set name 
3  Column name 
4  Value for the entry whose set and column are given by fields 2 and 3 
5  Column name 
6  Value for the entry whose set and column are given by fields 2 and 5 
Note: Fields 5 and 6 are optional.
The bound types are as follows. Here are the bound values defined in this section, the are the variables, and I is the set of integers.
Bound Type  Definintion  Formula 
LO  Lower bound  
UP  Upper bound  
FX  Fixed Variable  
FR  Free variable  
MI  Lower bound is minus infinity  
PL  Upper bound is positive infinity  
BV  Binary variable (variable must be 0 or 1)  
UI  Upper bound and integer  and 
LI  Lower bound and integer  and 
SC  Semicontinuous  0 or 
The bound type names are not case sensitive.
If the bound type is UP or UI and then the lower bound is set to .
ENDATA Section
The ENDATA section ends the MPS file.
Modifier and Type  Class and Description 

static class 
MPSReader.Element
An element in the sparse contraint matrix.

static class 
MPSReader.InvalidMPSFileException
The MPS file is invalid.

class 
MPSReader.Row
A row either in the constraint matrix or a free row.

Modifier and Type  Field and Description 

static int 
BINARY_VARIABLE
Variable must be either 0 or 1.

static int 
CONTINUOUS_VARIABLE
Variable is a real number.

static int 
INTEGER_VARIABLE
Variable must be an integer.

Constructor and Description 

MPSReader() 
Modifier and Type  Method and Description 

double 
getLowerBound(int iVariable)
Returns the lower bound for a variable.

double 
getLowerRange(int iRow)
Returns the lower range value for a constraint equation.

String 
getName()
Returns the name of the MPS problem.

String 
getNameBounds()
Returns the name of the BOUNDS set.

String 
getNameColumn(int iColumn)
Returns the name of a constraint column.

String 
getNameObjective()
Returns the name of the free row containing the objective.

String 
getNameRanges()
Returns the name of the RANGES set.

String 
getNameRHS()
Returns the name of the RHS section.

String 
getNameRow(int iRow)
Returns the name of a contraint row.

int 
getNumberOfBinaryConstraints()
Returns the number of binary constraints.

int 
getNumberOfColumns()
Returns the number of columns in the constraint matrix.

int 
getNumberOfIntegerConstraints()
Returns the number of integer constraints.

int 
getNumberOfNonZeros()
Returns the number of nonzeros in the constraint matrix.

int 
getNumberOfRows()
Returns the number of rows in the constraint matrix.

MPSReader.Row 
getObjective()
Returns the objective as a Row.

double[] 
getObjectiveCoefficients()
Returns the coefficents of the objective row.

MPSReader.Row 
getRow(int iRow)
Returns a row of the constraint matrix or a free row.

double[] 
getRowCoefficients(int iRow)
Returns the coefficents of a row.

int 
getTypeVariable(int iVariable)
Returns the type of a variable.

double 
getUpperBound(int iVariable)
Returns the upper bound for a variable.

double 
getUpperRange(int iRow)
Returns the upper range value for a constraint equation.

protected String 
processCommand(String command,
String line)
Process a section of the MPS file.

void 
read(Reader reader)
Reads and parses the MPS file.

void 
setNameBounds(String nameBounds)
Sets the name of the BOUNDS set to be used.

void 
setNameObjective(String nameObjective)
Sets the name of the free row containing the objective.

void 
setNameRanges(String nameRanges)
Sets the name of the RANGES set to be used.

void 
setNameRHS(String nameRHS)
Sets the name of the RHS set to be used.

public static final int BINARY_VARIABLE
public static final int CONTINUOUS_VARIABLE
public static final int INTEGER_VARIABLE
public double getLowerBound(int iVariable)
iVariable
 is the number of the variable.public double getLowerRange(int iRow)
iRow
 is the row number of the equation.public String getName()
public String getNameBounds()
public String getNameColumn(int iColumn) throws MPSReader.InvalidMPSFileException
iColumn
 is the number of the column.MPSReader.InvalidMPSFileException
public String getNameObjective()
public String getNameRanges()
public String getNameRHS()
public String getNameRow(int iRow)
public int getNumberOfBinaryConstraints()
public int getNumberOfColumns()
public int getNumberOfIntegerConstraints()
public int getNumberOfNonZeros()
public int getNumberOfRows()
public MPSReader.Row getObjective()
public double[] getObjectiveCoefficients()
public MPSReader.Row getRow(int iRow)
iRow
 is the number of the row.public double[] getRowCoefficients(int iRow)
iRow
 is the number of the row.public int getTypeVariable(int iVariable)
iVariable
 is the number of the variable.public double getUpperBound(int iVariable)
iVariable
 is the number of the variable.public double getUpperRange(int iRow)
iRow
 is the row number of the equation.protected String processCommand(String command, String line) throws IOException, MPSReader.InvalidMPSFileException
IOException
MPSReader.InvalidMPSFileException
public void read(Reader reader) throws IOException, MPSReader.InvalidMPSFileException
public void setNameBounds(String nameBounds)
public void setNameObjective(String nameObjective)
public void setNameRanges(String nameRanges)
public void setNameRHS(String nameRHS)
Copyright © 19702015 Rogue Wave Software
Built October 13 2015.