You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							738 lines
						
					
					
						
							26 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							738 lines
						
					
					
						
							26 KiB
						
					
					
				
								%* glpk08.tex *%
							 | 
						|
								
							 | 
						|
								\chapter{MPS Format}
							 | 
						|
								\label{champs}
							 | 
						|
								
							 | 
						|
								\section{Fixed MPS Format}
							 | 
						|
								\label{secmps}
							 | 
						|
								
							 | 
						|
								The MPS format\footnote{The MPS format was developed in 1960's by IBM
							 | 
						|
								as input format for their mathematical programming system MPS/360.
							 | 
						|
								Today the MPS format is a most widely used format understood by most
							 | 
						|
								mathematical programming packages. This appendix describes only the
							 | 
						|
								features of the MPS format, which are implemented in the GLPK package.}
							 | 
						|
								is intended for coding LP/MIP problem data. This format assumes the
							 | 
						|
								formulation of LP/MIP problem (1.1)---(1.3) (see Section \ref{seclp},
							 | 
						|
								page \pageref{seclp}).
							 | 
						|
								
							 | 
						|
								{\it MPS file} is a text file, which contains two types of
							 | 
						|
								cards\footnote{In 1960's MPS file was a deck of 80-column punched
							 | 
						|
								cards, so the author decided to keep the word ``card'', which may be
							 | 
						|
								understood as ``line of text file''.}: indicator cards and data cards.
							 | 
						|
								
							 | 
						|
								Indicator cards determine a kind of succeeding data. Each indicator
							 | 
						|
								card has one word in uppercase letters beginning in column 1.
							 | 
						|
								
							 | 
						|
								Data cards contain problem data. Each data card is divided into six
							 | 
						|
								fixed fields:
							 | 
						|
								
							 | 
						|
								\begin{center}
							 | 
						|
								\begin{tabular}{lcccccc}
							 | 
						|
								& Field 1 & Field 2 & Field 3 & Field 4 & Field 5 & Feld 6 \\
							 | 
						|
								\hline
							 | 
						|
								Columns & 2---3 & 5---12 & 15---22 & 25---36 & 40---47 & 50---61 \\
							 | 
						|
								Contents & Code & Name & Name & Number & Name & Number \\
							 | 
						|
								\end{tabular}
							 | 
						|
								\end{center}
							 | 
						|
								
							 | 
						|
								On a particular data card some fields may be optional.
							 | 
						|
								
							 | 
						|
								Names are used to identify rows, columns, and some vectors (see below).
							 | 
						|
								
							 | 
						|
								Aligning the indicator code in the field 1 to the left margin is
							 | 
						|
								optional.
							 | 
						|
								
							 | 
						|
								All names specified in the fields 2, 3, and 5 should contain from 1 up
							 | 
						|
								to 8 arbitrary characters (except control characters). If a name is
							 | 
						|
								placed in the field 3 or 5, its first character should not be the dollar
							 | 
						|
								sign `\verb|$|'. If a name contains spaces, the spaces are ignored.
							 | 
						|
								
							 | 
						|
								All numerical values in the fields 4 and 6 should be coded in the form
							 | 
						|
								$sxx$\verb|E|$syy$, where $s$ is the plus `\verb|+|' or the minus
							 | 
						|
								`\verb|-|' sign, $xx$ is a real number with optional decimal point,
							 | 
						|
								$yy$ is an integer decimal exponent. Any number should contain up to 12
							 | 
						|
								characters. If the sign $s$ is omitted, the plus sign is assumed. The
							 | 
						|
								exponent part is optional. If a number contains spaces, the spaces are
							 | 
						|
								ignored.
							 | 
						|
								
							 | 
						|
								\newpage
							 | 
						|
								
							 | 
						|
								If a card has the asterisk `\verb|*|' in the column 1, this card is
							 | 
						|
								considered as a comment and ignored. Besides, if the first character in
							 | 
						|
								the field 3 or 5 is the dollar sign `\verb|$|', all characters from the
							 | 
						|
								dollar sign to the end of card are considered as a comment and ignored.
							 | 
						|
								
							 | 
						|
								MPS file should contain cards in the following order:
							 | 
						|
								
							 | 
						|
								\vspace*{-8pt}
							 | 
						|
								
							 | 
						|
								\begin{itemize}
							 | 
						|
								\item NAME indicator card;
							 | 
						|
								
							 | 
						|
								\item ROWS indicator card;
							 | 
						|
								
							 | 
						|
								\item data cards specifying rows (constraints);
							 | 
						|
								
							 | 
						|
								\item COLUMNS indicator card;
							 | 
						|
								
							 | 
						|
								\item data cards specifying columns (structural variables) and
							 | 
						|
								constraint coefficients;
							 | 
						|
								
							 | 
						|
								\item RHS indicator card;
							 | 
						|
								
							 | 
						|
								\item data cards specifying right-hand sides of constraints;
							 | 
						|
								
							 | 
						|
								\item RANGES indicator card;
							 | 
						|
								
							 | 
						|
								\item data cards specifying ranges for double-bounded constraints;
							 | 
						|
								
							 | 
						|
								\item BOUNDS indicator card;
							 | 
						|
								
							 | 
						|
								\item data cards specifying types and bounds of structural
							 | 
						|
								variables;
							 | 
						|
								
							 | 
						|
								\item ENDATA indicator card.
							 | 
						|
								\end{itemize}
							 | 
						|
								
							 | 
						|
								\vspace*{-8pt}
							 | 
						|
								
							 | 
						|
								{\it Section} is a group of cards consisting of an indicator card and
							 | 
						|
								data cards succeeding this indicator card. For example, the ROWS section
							 | 
						|
								consists of the ROWS indicator card and data cards specifying rows.
							 | 
						|
								
							 | 
						|
								The sections RHS, RANGES, and BOUNDS are optional and may be omitted.
							 | 
						|
								
							 | 
						|
								\section{Free MPS Format}
							 | 
						|
								
							 | 
						|
								{\it Free MPS format} is an improved version of the standard (fixed)
							 | 
						|
								MPS format described above.\footnote{This format was developed in the
							 | 
						|
								beginning of 1990's by IBM as an alternative to the standard fixed MPS
							 | 
						|
								format for Optimization Subroutine Library (OSL).} Note that all
							 | 
						|
								changes in free MPS format concern only the coding of data while the
							 | 
						|
								structure of data is the same for both fixed and free versions of the
							 | 
						|
								MPS format.
							 | 
						|
								
							 | 
						|
								In free MPS format indicator and data records\footnote{{\it Record} in
							 | 
						|
								free MPS format has the same meaning as {\it card} in fixed MPS format.}
							 | 
						|
								may have arbitrary length not limited to 80 characters. Fields of data
							 | 
						|
								records have no predefined positions, i.e. the fields may begin in any
							 | 
						|
								position, except position 1, which must be blank, and must be separated
							 | 
						|
								from each other by one or more blanks. However, the fields must appear
							 | 
						|
								in the same order as in fixed MPS format.
							 | 
						|
								
							 | 
						|
								\newpage
							 | 
						|
								
							 | 
						|
								Symbolic names in fields 2, 3, and 5 may be longer than 8
							 | 
						|
								characters\footnote{GLPK allows symbolic names having up to 255
							 | 
						|
								characters.} and must not contain embedded blanks.
							 | 
						|
								
							 | 
						|
								Numeric values in fields 4 and 6 are limited to 12 characters and must
							 | 
						|
								not contain embedded blanks.
							 | 
						|
								
							 | 
						|
								Only six fields on each data record are used. Any other fields are
							 | 
						|
								ignored.
							 | 
						|
								
							 | 
						|
								If the first character of any field (not necessarily fields 3 and 5)
							 | 
						|
								is the dollar sign (\$), all characters from the dollar sign to the end
							 | 
						|
								of record are considered as a comment and ignored.
							 | 
						|
								
							 | 
						|
								\section{NAME indicator card}
							 | 
						|
								
							 | 
						|
								The NAME indicator card should be the first card in the MPS file
							 | 
						|
								(except optional comment cards, which may precede the NAME card). This
							 | 
						|
								card should contain the word \verb|NAME| in the columns 1---4 and the
							 | 
						|
								problem name in the field 3. The problem name is optional and may be
							 | 
						|
								omitted.
							 | 
						|
								
							 | 
						|
								\section{ROWS section}
							 | 
						|
								\label{secrows}
							 | 
						|
								
							 | 
						|
								The ROWS section should start with the indicator card, which contains
							 | 
						|
								the word \verb|ROWS| in the columns 1---4.
							 | 
						|
								
							 | 
						|
								Each data card in the ROWS section specifies one row (constraint) of
							 | 
						|
								the problem. All these data cards have the following format.
							 | 
						|
								
							 | 
						|
								`\verb|N|' in the field 1 means that the row is free (unbounded):
							 | 
						|
								$$-\infty < x_i = a_{i1}x_{m+1} + a_{i2}x_{m+2} + \dots + a_{in}x_{m+n}
							 | 
						|
								< +\infty;$$
							 | 
						|
								
							 | 
						|
								`\verb|L|' in the field 1 means that the row is of ``less than or equal
							 | 
						|
								to'' type:
							 | 
						|
								$$-\infty < x_i = a_{i1}x_{m+1} + a_{i2}x_{m+2} + \dots + a_{in}x_{m+n}
							 | 
						|
								\leq b_i;$$
							 | 
						|
								
							 | 
						|
								`\verb|G|' in the field 1 means that the row is of ``greater than or
							 | 
						|
								equal to'' type:
							 | 
						|
								$$b_i \leq x_i = a_{i1}x_{m+1} + a_{i2}x_{m+2} + \dots + a_{in}x_{m+n}
							 | 
						|
								< +\infty;$$
							 | 
						|
								
							 | 
						|
								`\verb|E|' in the field 1 means that the row is of ``equal to'' type:
							 | 
						|
								$$x_i = a_{i1}x_{m+1} + a_{i2}x_{m+2} + \dots + a_{in}x_{m+n} \leq
							 | 
						|
								b_i,$$
							 | 
						|
								where $b_i$ is a right-hand side. Note that each constraint has a
							 | 
						|
								corresponding implictly defined auxiliary variable ($x_i$ above), whose
							 | 
						|
								value is a value of the corresponding linear form, therefore row bounds
							 | 
						|
								can be considered as bounds of such auxiliary variable.
							 | 
						|
								
							 | 
						|
								The filed 2 specifies a row name (which is considered as the name of
							 | 
						|
								the corresponding auxiliary variable).
							 | 
						|
								
							 | 
						|
								\newpage
							 | 
						|
								
							 | 
						|
								The fields 3, 4, 5, and 6 are not used and should be empty.
							 | 
						|
								
							 | 
						|
								Numerical values of all non-zero right-hand sides $b_i$ should be
							 | 
						|
								specified in the RHS section (see below). All double-bounded (ranged)
							 | 
						|
								constraints should be specified in the RANGES section (see below).
							 | 
						|
								
							 | 
						|
								\section{COLUMNS section}
							 | 
						|
								
							 | 
						|
								The COLUMNS section should start with the indicator card, which
							 | 
						|
								contains the word \verb|COLUMNS| in the columns 1---7.
							 | 
						|
								
							 | 
						|
								Each data card in the COLUMNS section specifies one or two constraint
							 | 
						|
								coefficients $a_{ij}$ and also introduces names of columns, i.e. names
							 | 
						|
								of structural variables. All these data cards have the following
							 | 
						|
								format.
							 | 
						|
								
							 | 
						|
								The field 1 is not used and should be empty.
							 | 
						|
								
							 | 
						|
								The field 2 specifies a column name. If this field is empty, the column
							 | 
						|
								name from the immediately preceeding data card is assumed.
							 | 
						|
								
							 | 
						|
								The field 3 specifies a row name defined in the ROWS section.
							 | 
						|
								
							 | 
						|
								The field 4 specifies a numerical value of the constraint coefficient
							 | 
						|
								$a_{ij}$, which is placed in the corresponding row and column.
							 | 
						|
								
							 | 
						|
								The fields 5 and 6 are optional. If they are used, they should contain
							 | 
						|
								a second pair ``row name---constraint coefficient'' for the same column.
							 | 
						|
								
							 | 
						|
								Elements of the constraint matrix (i.e. constraint coefficients) should
							 | 
						|
								be enumerated in the column wise manner: all elements for the current
							 | 
						|
								column should be specified before elements for the next column. However,
							 | 
						|
								the order of rows in the COLUMNS section may differ from the order of
							 | 
						|
								rows in the ROWS section.
							 | 
						|
								
							 | 
						|
								Constraint coefficients not specified in the COLUMNS section are
							 | 
						|
								considered as zeros. Therefore zero coefficients may be omitted,
							 | 
						|
								although it is allowed to explicitly specify them.
							 | 
						|
								
							 | 
						|
								\section{RHS section}
							 | 
						|
								
							 | 
						|
								The RHS section should start with the indicator card, which contains the
							 | 
						|
								word \verb|RHS| in the columns 1---3.
							 | 
						|
								
							 | 
						|
								Each data card in the RHS section specifies one or two right-hand sides
							 | 
						|
								$b_i$ (see Section \ref{secrows}, page \pageref{secrows}). All these
							 | 
						|
								data cards have the following format.
							 | 
						|
								
							 | 
						|
								The field 1 is not used and should be empty.
							 | 
						|
								
							 | 
						|
								The field 2 specifies a name of the right-hand side (RHS)
							 | 
						|
								vector\footnote{This feature allows the user to specify several RHS
							 | 
						|
								vectors in the same MPS file. However, before solving the problem a
							 | 
						|
								particular RHS vector should be chosen.}. If this field is empty, the
							 | 
						|
								RHS vector name from the immediately preceeding data card is assumed.
							 | 
						|
								
							 | 
						|
								\newpage
							 | 
						|
								
							 | 
						|
								The field 3 specifies a row name defined in the ROWS section.
							 | 
						|
								
							 | 
						|
								The field 4 specifies a right-hand side $b_i$ for the row, whose name is
							 | 
						|
								specified in the field 3. Depending on the row type $b_i$ is a lower
							 | 
						|
								bound (for the row of \verb|G| type), an upper bound (for the row of
							 | 
						|
								\verb|L| type), or a fixed value (for the row of \verb|E|
							 | 
						|
								type).\footnote{If the row is of {\tt N} type, $b_i$ is considered as
							 | 
						|
								a constant term of the corresponding linear form. Should note, however,
							 | 
						|
								this convention is non-standard.}
							 | 
						|
								
							 | 
						|
								The fields 5 and 6 are optional. If they are used, they should contain
							 | 
						|
								a second pair ``row name---right-hand side'' for the same RHS vector.
							 | 
						|
								
							 | 
						|
								All right-hand sides for the current RHS vector should be specified
							 | 
						|
								before right-hand sides for the next RHS vector. However, the order of
							 | 
						|
								rows in the RHS section may differ from the order of rows in the ROWS
							 | 
						|
								section.
							 | 
						|
								
							 | 
						|
								Right-hand sides not specified in the RHS section are considered as
							 | 
						|
								zeros. Therefore zero right-hand sides may be omitted, although it is
							 | 
						|
								allowed to explicitly specify them.
							 | 
						|
								
							 | 
						|
								\section{RANGES section}
							 | 
						|
								
							 | 
						|
								The RANGES section should start with the indicator card, which contains
							 | 
						|
								the word \verb|RANGES| in the columns 1---6.
							 | 
						|
								
							 | 
						|
								Each data card in the RANGES section specifies one or two ranges for
							 | 
						|
								double-side constraints, i.e. for constraints that are of the types
							 | 
						|
								\verb|L| and \verb|G| at the same time:
							 | 
						|
								$$l_i \leq x_i = a_{i1}x_{m+1} + a_{i2}x_{m+2} + \dots + a_{in}x_{m+n}
							 | 
						|
								\leq u_i,$$
							 | 
						|
								where $l_i$ is a lower bound, $u_i$ is an upper bound. All these data
							 | 
						|
								cards have the following format.
							 | 
						|
								
							 | 
						|
								The field 1 is not used and should be empty.
							 | 
						|
								
							 | 
						|
								The field 2 specifies a name of the range vector\footnote{This feature
							 | 
						|
								allows the user to specify several range vectors in the same MPS file.
							 | 
						|
								However, before solving the problem a particular range vector should be
							 | 
						|
								chosen.}. If this field is empty, the range vector name from the
							 | 
						|
								immediately preceeding data card is assumed.
							 | 
						|
								
							 | 
						|
								The field 3 specifies a row name defined in the ROWS section.
							 | 
						|
								
							 | 
						|
								The field 4 specifies a range value $r_i$ (see the table below) for the
							 | 
						|
								row, whose name is specified in the field 3.
							 | 
						|
								
							 | 
						|
								The fields 5 and 6 are optional. If they are used, they should contain
							 | 
						|
								a second pair ``row name---range value'' for the same range vector.
							 | 
						|
								
							 | 
						|
								All range values for the current range vector should be specified before
							 | 
						|
								range values for the next range vector. However, the order of rows in
							 | 
						|
								the RANGES section may differ from the order of rows in the ROWS
							 | 
						|
								section.
							 | 
						|
								
							 | 
						|
								For each double-side constraint specified in the RANGES section its
							 | 
						|
								lower and upper bounds are determined as follows:
							 | 
						|
								
							 | 
						|
								\newpage
							 | 
						|
								
							 | 
						|
								\begin{center}
							 | 
						|
								\begin{tabular}{cccc}
							 | 
						|
								Row type & Sign of $r_i$ & Lower bound & Upper bound \\
							 | 
						|
								\hline
							 | 
						|
								{\tt G} & $+$ or $-$ & $b_i$ & $b_i + |r_i|$ \\
							 | 
						|
								{\tt L} & $+$ or $-$ & $b_i - |r_i|$ & $b_i$ \\
							 | 
						|
								{\tt E} & $+$ & $b_i$ & $b_i + |r_i|$ \\
							 | 
						|
								{\tt E} & $-$ & $b_i - |r_i|$ & $b_i$ \\
							 | 
						|
								\end{tabular}
							 | 
						|
								\end{center}
							 | 
						|
								
							 | 
						|
								\noindent
							 | 
						|
								where $b_i$ is a right-hand side specified in the RHS section (if $b_i$
							 | 
						|
								is not specified, it is considered as zero), $r_i$ is a range value
							 | 
						|
								specified in the RANGES section.
							 | 
						|
								
							 | 
						|
								\section{BOUNDS section}
							 | 
						|
								\label{secbounds}
							 | 
						|
								
							 | 
						|
								The BOUNDS section should start with the indicator card, which contains
							 | 
						|
								the word \verb|BOUNDS| in the columns 1---6.
							 | 
						|
								
							 | 
						|
								Each data card in the BOUNDS section specifies one (lower or upper)
							 | 
						|
								bound for one structural variable (column). All these data cards have
							 | 
						|
								the following format.
							 | 
						|
								
							 | 
						|
								The indicator in the field 1 specifies the bound type:
							 | 
						|
								
							 | 
						|
								\verb|LO| --- lower bound;
							 | 
						|
								
							 | 
						|
								\verb|UP| --- upper bound;
							 | 
						|
								
							 | 
						|
								\verb|FX| --- fixed variable (lower and upper bounds are equal);
							 | 
						|
								
							 | 
						|
								\verb|FR| --- free variable (no bounds);
							 | 
						|
								
							 | 
						|
								\verb|MI| --- no lower bound (lower bound is ``minus infinity'');
							 | 
						|
								
							 | 
						|
								\verb|PL| --- no upper bound (upper bound is ``plus infinity'').
							 | 
						|
								
							 | 
						|
								The field 2 specifies a name of the bound vector\footnote{This feature
							 | 
						|
								allows the user to specify several bound vectors in the same MPS file.
							 | 
						|
								However, before solving the problem a particular bound vector should be
							 | 
						|
								chosen.}. If this field is empty, the bound vector name from the
							 | 
						|
								immediately preceeding data card is assumed.
							 | 
						|
								
							 | 
						|
								The field 3 specifies a column name defined in the COLUMNS section.
							 | 
						|
								
							 | 
						|
								The field 4 specifies a bound value. If the bound type in the field 1
							 | 
						|
								differs from \verb|LO|, \verb|UP|, and \verb|FX|, the value in the field
							 | 
						|
								4 is ignored and may be omitted.
							 | 
						|
								
							 | 
						|
								The fields 5 and 6 are not used and should be empty.
							 | 
						|
								
							 | 
						|
								All bound values for the current bound vector should be specified before
							 | 
						|
								bound values for the next bound vector. However, the order of columns in
							 | 
						|
								the BOUNDS section may differ from the order of columns in the COLUMNS
							 | 
						|
								section. Specification of a lower bound should precede specification of
							 | 
						|
								an upper bound for the same column (if both the lower and upper bounds
							 | 
						|
								are explicitly specified).
							 | 
						|
								
							 | 
						|
								By default, all columns (structural variables) are non-negative, i.e.
							 | 
						|
								have zero lower bound and no upper bound. Lower ($l_j$) and upper
							 | 
						|
								($u_j$) bounds of some column (structural variable $x_j$) are set in the
							 | 
						|
								following way, where $s_j$ is a corresponding bound value explicitly
							 | 
						|
								specified in the BOUNDS section:
							 | 
						|
								
							 | 
						|
								\newpage
							 | 
						|
								
							 | 
						|
								\verb|LO| sets $l_j$ to $s_j$;
							 | 
						|
								
							 | 
						|
								\verb|UP| sets $u_j$ to $s_j$;
							 | 
						|
								
							 | 
						|
								\verb|FX| sets both $l_j$ and $u_j$ to $s_j$;
							 | 
						|
								
							 | 
						|
								\verb|FR| sets $l_j$ to $-\infty$ and $u_j$ to $+\infty$;
							 | 
						|
								
							 | 
						|
								\verb|MI| sets $l_j$ to $-\infty$;
							 | 
						|
								
							 | 
						|
								\verb|PL| sets $u_j$ to $+\infty$.
							 | 
						|
								
							 | 
						|
								\section{ENDATA indicator card}
							 | 
						|
								
							 | 
						|
								The ENDATA indicator card should be the last card of MPS file (except
							 | 
						|
								optional comment cards, which may follow the ENDATA card). This card
							 | 
						|
								should contain the word \verb|ENDATA| in the columns 1---6.
							 | 
						|
								
							 | 
						|
								\section{Specifying objective function}
							 | 
						|
								
							 | 
						|
								It is impossible to explicitly specify the objective function and
							 | 
						|
								optimization direction in the MPS file. However, the following implicit
							 | 
						|
								rule is used by default: the first row of \verb|N| type is considered
							 | 
						|
								as a row of the objective function (i.e. the objective function is the
							 | 
						|
								corresponding auxiliary variable), which should be {\it minimized}.
							 | 
						|
								
							 | 
						|
								GLPK also allows specifying a constant term of the objective function
							 | 
						|
								as a right-hand side of the corresponding row in the RHS section.
							 | 
						|
								
							 | 
						|
								\section{Example of MPS file}
							 | 
						|
								\label{secmpsex}
							 | 
						|
								
							 | 
						|
								To illustrate what the MPS format is, consider the following example of
							 | 
						|
								LP problem:
							 | 
						|
								
							 | 
						|
								\def\arraystretch{1.2}
							 | 
						|
								
							 | 
						|
								\noindent\hspace{.5in}minimize
							 | 
						|
								$$
							 | 
						|
								value = .03\ bin_1 + .08\ bin_2 + .17\ bin_3 + .12\ bin_4 + .15\ bin_5
							 | 
						|
								+ .21\ al + .38\ si
							 | 
						|
								$$
							 | 
						|
								\noindent\hspace{.5in}subject to linear constraints
							 | 
						|
								$$
							 | 
						|
								\begin{array}{@{}l@{\:}l@{}}
							 | 
						|
								yield &= \ \ \ \ \;bin_1 + \ \ \ \ \;bin_2 + \ \ \ \ \;bin_3 +
							 | 
						|
								         \ \ \ \ \;bin_4 + \ \ \ \ \;bin_5 + \ \ \ \ \;al +
							 | 
						|
								         \ \ \ \ \;si \\
							 | 
						|
								FE    &= .15\ bin_1 + .04\ bin_2 + .02\ bin_3 + .04\ bin_4 + .02\ bin_5
							 | 
						|
								         + .01\ al + .03\ si \\
							 | 
						|
								CU    &= .03\ bin_1 + .05\ bin_2 + .08\ bin_3 + .02\ bin_4 + .06\ bin_5
							 | 
						|
								         + .01\ al \\
							 | 
						|
								MN    &= .02\ bin_1 + .04\ bin_2 + .01\ bin_3 + .02\ bin_4 + .02\ bin_5
							 | 
						|
								         \\
							 | 
						|
								MG    &= .02\ bin_1 + .03\ bin_2
							 | 
						|
								\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ + .01\ bin_5 \\
							 | 
						|
								AL    &= .70\ bin_1 + .75\ bin_2 + .80\ bin_3 + .75\ bin_4 + .80\ bin_5
							 | 
						|
								         + .97\ al \\
							 | 
						|
								SI    &= .02\ bin_1 + .06\ bin_2 + .08\ bin_3 + .12\ bin_4 + .02\ bin_5
							 | 
						|
								         + .01\ al + .97\ si \\
							 | 
						|
								\end{array}
							 | 
						|
								$$
							 | 
						|
								
							 | 
						|
								\newpage
							 | 
						|
								
							 | 
						|
								\noindent\hspace{.5in}and bounds of (auxiliary and structural)
							 | 
						|
								variables
							 | 
						|
								$$
							 | 
						|
								\begin{array}{r@{\ }l@{\ }l@{\ }l@{\ }rcr@{\ }l@{\ }l@{\ }l@{\ }r}
							 | 
						|
								&&yield&=&2000&&0&\leq&bin_1&\leq&200\\
							 | 
						|
								-\infty&<&FE&\leq&60&&0&\leq&bin_2&\leq&2500\\
							 | 
						|
								-\infty&<&CU&\leq&100&&400&\leq&bin_3&\leq&800\\
							 | 
						|
								-\infty&<&MN&\leq&40&&100&\leq&bin_4&\leq&700\\
							 | 
						|
								-\infty&<&MG&\leq&30&&0&\leq&bin_5&\leq&1500\\
							 | 
						|
								1500&\leq&AL&<&+\infty&&0&\leq&al&<&+\infty\\
							 | 
						|
								250&\leq&SI&\leq&300&&0&\leq&si&<&+\infty\\
							 | 
						|
								\end{array}
							 | 
						|
								$$
							 | 
						|
								
							 | 
						|
								\def\arraystretch{1}
							 | 
						|
								
							 | 
						|
								A complete MPS file which specifies data for this example is shown
							 | 
						|
								below (the first two comment lines show card positions).
							 | 
						|
								
							 | 
						|
								\bigskip
							 | 
						|
								
							 | 
						|
								\begin{footnotesize}
							 | 
						|
								\begin{verbatim}
							 | 
						|
								*000000001111111111222222222233333333334444444444555555555566
							 | 
						|
								*234567890123456789012345678901234567890123456789012345678901
							 | 
						|
								NAME          PLAN
							 | 
						|
								ROWS
							 | 
						|
								 N  VALUE
							 | 
						|
								 E  YIELD
							 | 
						|
								 L  FE
							 | 
						|
								 L  CU
							 | 
						|
								 L  MN
							 | 
						|
								 L  MG
							 | 
						|
								 G  AL
							 | 
						|
								 L  SI
							 | 
						|
								COLUMNS
							 | 
						|
								    BIN1      VALUE           .03000   YIELD          1.00000
							 | 
						|
								              FE              .15000   CU              .03000
							 | 
						|
								              MN              .02000   MG              .02000
							 | 
						|
								              AL              .70000   SI              .02000
							 | 
						|
								    BIN2      VALUE           .08000   YIELD          1.00000
							 | 
						|
								              FE              .04000   CU              .05000
							 | 
						|
								              MN              .04000   MG              .03000
							 | 
						|
								              AL              .75000   SI              .06000
							 | 
						|
								    BIN3      VALUE           .17000   YIELD          1.00000
							 | 
						|
								              FE              .02000   CU              .08000
							 | 
						|
								              MN              .01000   AL              .80000
							 | 
						|
								              SI              .08000
							 | 
						|
								    BIN4      VALUE           .12000   YIELD          1.00000
							 | 
						|
								              FE              .04000   CU              .02000
							 | 
						|
								              MN              .02000   AL              .75000
							 | 
						|
								              SI              .12000
							 | 
						|
								    BIN5      VALUE           .15000   YIELD          1.00000
							 | 
						|
								              FE              .02000   CU              .06000
							 | 
						|
								              MN              .02000   MG              .01000
							 | 
						|
								              AL              .80000   SI              .02000
							 | 
						|
								    ALUM      VALUE           .21000   YIELD          1.00000
							 | 
						|
								              FE              .01000   CU              .01000
							 | 
						|
								              AL              .97000   SI              .01000
							 | 
						|
								    SILICON   VALUE           .38000   YIELD          1.00000
							 | 
						|
								              FE              .03000   SI              .97000
							 | 
						|
								RHS
							 | 
						|
								    RHS1      YIELD       2000.00000   FE            60.00000
							 | 
						|
								              CU           100.00000   MN            40.00000
							 | 
						|
								              SI           300.00000
							 | 
						|
								              MG            30.00000   AL          1500.00000
							 | 
						|
								RANGES
							 | 
						|
								    RNG1      SI            50.00000
							 | 
						|
								BOUNDS
							 | 
						|
								 UP BND1      BIN1         200.00000
							 | 
						|
								 UP           BIN2        2500.00000
							 | 
						|
								 LO           BIN3         400.00000
							 | 
						|
								 UP           BIN3         800.00000
							 | 
						|
								 LO           BIN4         100.00000
							 | 
						|
								 UP           BIN4         700.00000
							 | 
						|
								 UP           BIN5        1500.00000
							 | 
						|
								ENDATA
							 | 
						|
								\end{verbatim}
							 | 
						|
								\end{footnotesize}
							 | 
						|
								
							 | 
						|
								\vspace*{-6pt}
							 | 
						|
								
							 | 
						|
								\section{MIP features}
							 | 
						|
								
							 | 
						|
								\vspace*{-4pt}
							 | 
						|
								
							 | 
						|
								The MPS format provides two ways for introducing integer variables into
							 | 
						|
								the problem.
							 | 
						|
								
							 | 
						|
								The first way is most general and based on using special marker cards
							 | 
						|
								INTORG and INTEND. These marker cards are placed in the COLUMNS section.
							 | 
						|
								The INTORG card indicates the start of a group of integer variables
							 | 
						|
								(columns), and the card INTEND indicates the end of the group. The MPS
							 | 
						|
								file may contain arbitrary number of the marker cards.
							 | 
						|
								
							 | 
						|
								The marker cards have the same format as the data cards (see Section
							 | 
						|
								\ref{secmps}, page \pageref{secmps}).
							 | 
						|
								
							 | 
						|
								The fields 1, 2, and 6 are not used and should be empty.
							 | 
						|
								
							 | 
						|
								The field 2 should contain a marker name. This name may be arbitrary.
							 | 
						|
								
							 | 
						|
								The field 3 should contain the word \verb|'MARKER'| (including
							 | 
						|
								apostrophes).
							 | 
						|
								
							 | 
						|
								The field 5 should contain either the word \verb|'INTORG'| (including
							 | 
						|
								apostrophes) for the marker card, which begins a group of integer
							 | 
						|
								columns, or the word \verb|'INTEND'| (including apostrophes) for the
							 | 
						|
								marker card, which ends the group.
							 | 
						|
								
							 | 
						|
								The second way is less general but more convenient in some cases. It
							 | 
						|
								allows the user declaring integer columns using three additional types
							 | 
						|
								of bounds, which are specified in the field 1 of data cards in the
							 | 
						|
								BOUNDS section (see Section \ref{secbounds}, page \pageref{secbounds}):
							 | 
						|
								
							 | 
						|
								\verb|LI| --- lower integer. This bound type specifies that the
							 | 
						|
								corresponding column (structural variable), whose name is specified in
							 | 
						|
								field 3, is of integer kind. In this case an lower bound of the
							 | 
						|
								column should be specified in field 4 (like in the case of \verb|LO|
							 | 
						|
								bound type).
							 | 
						|
								
							 | 
						|
								\verb|UI| --- upper integer. This bound type specifies that the
							 | 
						|
								corresponding column (structural variable), whose name is specified in
							 | 
						|
								field 3, is of integer kind. In this case an upper bound of the
							 | 
						|
								column should be specified in field 4 (like in the case of \verb|UP|
							 | 
						|
								bound type).
							 | 
						|
								
							 | 
						|
								\verb|BV| --- binary variable. This bound type specifies that the
							 | 
						|
								corresponding column (structural variable), whose name is specified in
							 | 
						|
								the field 3, is of integer kind, its lower bound is zero, and its upper
							 | 
						|
								bound is one (thus, such variable being of integer kind can have only
							 | 
						|
								two values zero and one). In this case a numeric value specified in the
							 | 
						|
								field 4 is ignored and may be omitted.
							 | 
						|
								
							 | 
						|
								Consider the following example of MIP problem:
							 | 
						|
								
							 | 
						|
								\noindent
							 | 
						|
								\hspace{1in} minimize
							 | 
						|
								$$Z = 3 x_1 + 7 x_2 - x_3 + x4$$
							 | 
						|
								\hspace{1in} subject to linear constraints
							 | 
						|
								$$
							 | 
						|
								\begin{array}{c}
							 | 
						|
								\nonumber r_1 = 2   x_1 - \ \ x_2 + \ \ x_3 - \ \;x_4 \\
							 | 
						|
								\nonumber r_2 = \ \;x_1 - \ \;x_2 - 6   x_3 + 4   x_4 \\
							 | 
						|
								\nonumber r_3 = 5   x_1 +   3 x_2 \ \ \ \ \ \ \ \ \ + \ \ x_4 \\
							 | 
						|
								\end{array}
							 | 
						|
								$$
							 | 
						|
								\hspace{1in} and bound of variables
							 | 
						|
								$$
							 | 
						|
								\begin{array}{cccl}
							 | 
						|
								\nonumber 1 \leq r_1 < +\infty && 0 \leq x_1 \leq 4 &{\rm(continuous)}\\
							 | 
						|
								\nonumber 8 \leq r_2 < +\infty && 2 \leq x_2 \leq 5 &{\rm(integer)}   \\
							 | 
						|
								\nonumber 5 \leq r_3 < +\infty && 0 \leq x_3 \leq 1 &{\rm(integer)}   \\
							 | 
						|
								\nonumber                      && 3 \leq x_4 \leq 8 &{\rm(continuous)}\\
							 | 
						|
								\end{array}
							 | 
						|
								$$
							 | 
						|
								
							 | 
						|
								The corresponding MPS file may look like the following:
							 | 
						|
								
							 | 
						|
								\medskip
							 | 
						|
								
							 | 
						|
								\begin{footnotesize}
							 | 
						|
								\begin{verbatim}
							 | 
						|
								NAME          SAMP1
							 | 
						|
								ROWS
							 | 
						|
								 N  Z
							 | 
						|
								 G  R1
							 | 
						|
								 G  R2
							 | 
						|
								 G  R3
							 | 
						|
								COLUMNS
							 | 
						|
								    X1        R1                2.0    R2                 1.0
							 | 
						|
								    X1        R3                5.0    Z                  3.0
							 | 
						|
								    MARK0001  'MARKER'                 'INTORG'
							 | 
						|
								    X2        R1               -1.0    R2                -1.0
							 | 
						|
								    X2        R3                3.0    Z                  7.0
							 | 
						|
								    X3        R1                1.0    R2                -6.0
							 | 
						|
								    X3        Z                -1.0
							 | 
						|
								    MARK0002  'MARKER'                 'INTEND'
							 | 
						|
								    X4        R1               -1.0    R2                 4.0
							 | 
						|
								    X4        R3                1.0    Z                  1.0
							 | 
						|
								RHS
							 | 
						|
								    RHS1      R1                1.0
							 | 
						|
								    RHS1      R2                8.0
							 | 
						|
								    RHS1      R3                5.0
							 | 
						|
								BOUNDS
							 | 
						|
								 UP BND1      X1                4.0
							 | 
						|
								 LO BND1      X2                2.0
							 | 
						|
								 UP BND1      X2                5.0
							 | 
						|
								 UP BND1      X3                1.0
							 | 
						|
								 LO BND1      X4                3.0
							 | 
						|
								 UP BND1      X4                8.0
							 | 
						|
								ENDATA
							 | 
						|
								\end{verbatim}
							 | 
						|
								\end{footnotesize}
							 | 
						|
								
							 | 
						|
								\newpage
							 | 
						|
								
							 | 
						|
								The same example may be coded without INTORG/INTEND markers using the
							 | 
						|
								bound type UI for the variable $x_2$ and the bound type BV for the
							 | 
						|
								variable $x_3$:
							 | 
						|
								
							 | 
						|
								\medskip
							 | 
						|
								
							 | 
						|
								\begin{footnotesize}
							 | 
						|
								\begin{verbatim}
							 | 
						|
								NAME          SAMP2
							 | 
						|
								ROWS
							 | 
						|
								 N  Z
							 | 
						|
								 G  R1
							 | 
						|
								 G  R2
							 | 
						|
								 G  R3
							 | 
						|
								COLUMNS
							 | 
						|
								    X1        R1                2.0    R2                 1.0
							 | 
						|
								    X1        R3                5.0    Z                  3.0
							 | 
						|
								    X2        R1               -1.0    R2                -1.0
							 | 
						|
								    X2        R3                3.0    Z                  7.0
							 | 
						|
								    X3        R1                1.0    R2                -6.0
							 | 
						|
								    X3        Z                -1.0
							 | 
						|
								    X4        R1               -1.0    R2                 4.0
							 | 
						|
								    X4        R3                1.0    Z                  1.0
							 | 
						|
								RHS
							 | 
						|
								    RHS1      R1                1.0
							 | 
						|
								    RHS1      R2                8.0
							 | 
						|
								    RHS1      R3                5.0
							 | 
						|
								BOUNDS
							 | 
						|
								 UP BND1      X1                4.0
							 | 
						|
								 LO BND1      X2                2.0
							 | 
						|
								 UI BND1      X2                5.0
							 | 
						|
								 BV BND1      X3
							 | 
						|
								 LO BND1      X4                3.0
							 | 
						|
								 UP BND1      X4                8.0
							 | 
						|
								ENDATA
							 | 
						|
								\end{verbatim}
							 | 
						|
								\end{footnotesize}
							 | 
						|
								
							 | 
						|
								%\section{Specifying predefined basis}
							 | 
						|
								%\label{secbas}
							 | 
						|
								%
							 | 
						|
								%The MPS format can also be used to specify some predefined basis for an
							 | 
						|
								%LP problem, i.e. to specify which rows and columns are basic and which
							 | 
						|
								%are non-basic.
							 | 
						|
								%
							 | 
						|
								%The order of a basis file in the MPS format is:
							 | 
						|
								%
							 | 
						|
								%$\bullet$ NAME indicator card;
							 | 
						|
								%
							 | 
						|
								%$\bullet$ data cards (can appear in arbitrary order);
							 | 
						|
								%
							 | 
						|
								%$\bullet$ ENDATA indicator card.
							 | 
						|
								%
							 | 
						|
								%Each data card specifies either a pair "basic column---non-basic row"
							 | 
						|
								%or a non-basic column. All the data cards have the following format.
							 | 
						|
								%
							 | 
						|
								%`\verb|XL|' in the field 1 means that a column, whose name is given in
							 | 
						|
								%the field 2, is basic, and a row, whose name is given in the field 3,
							 | 
						|
								%is non-basic and placed on its lower bound.
							 | 
						|
								%
							 | 
						|
								%`\verb|XU|' in the field 1 means that a column, whose name is given in
							 | 
						|
								%the field 2, is basic, and a row, whose name is given in the field 3,
							 | 
						|
								%is non-basic and placed on its upper bound.
							 | 
						|
								%
							 | 
						|
								%`\verb|LL|' in the field 1 means that a column, whose name is given in
							 | 
						|
								%the field 3, is non-basic and placed on its lower bound.
							 | 
						|
								%
							 | 
						|
								%`\verb|UL|' in the field 1 means that a column, whose name is given in
							 | 
						|
								%the field 3, is non-basic and placed on its upper bound.
							 | 
						|
								%
							 | 
						|
								%The field 2 contains a column name.
							 | 
						|
								%
							 | 
						|
								%If the indicator given in the field 1 is `\verb|XL|' or `\verb|XU|',
							 | 
						|
								%the field 3 contains a row name. Otherwise, if the indicator is
							 | 
						|
								%`\verb|LL|' or `\verb|UL|', the field 3 is not used and should be
							 | 
						|
								%empty.
							 | 
						|
								%
							 | 
						|
								%The field 4, 5, and 6 are not used and should be empty.
							 | 
						|
								%
							 | 
						|
								%A basis file in the MPS format acts like a patch: it doesn't specify
							 | 
						|
								%a basis completely, instead that it is just shows in what a given basis
							 | 
						|
								%differs from the "standard" basis, where all rows (auxiliary variables)
							 | 
						|
								%are assumed to be basic and all columns (structural variables) are
							 | 
						|
								%assumed to be non-basic.
							 | 
						|
								%
							 | 
						|
								%As an example here is a basis file that specifies an optimal basis
							 | 
						|
								%for the example LP problem given in Section \ref{secmpsex},
							 | 
						|
								%Page \pageref{secmpsex}:
							 | 
						|
								%
							 | 
						|
								%\pagebreak
							 | 
						|
								%
							 | 
						|
								%\begin{verbatim}
							 | 
						|
								%*000000001111111111222222222233333333334444444444555555555566
							 | 
						|
								%*234567890123456789012345678901234567890123456789012345678901
							 | 
						|
								%NAME          PLAN
							 | 
						|
								% XL BIN2      YIELD
							 | 
						|
								% XL BIN3      FE
							 | 
						|
								% XL BIN4      MN
							 | 
						|
								% XL ALUM      AL
							 | 
						|
								% XL SILICON   SI
							 | 
						|
								% LL BIN1
							 | 
						|
								% LL BIN5
							 | 
						|
								%ENDATA
							 | 
						|
								%\end{verbatim}
							 | 
						|
								
							 | 
						|
								%* eof *%
							 |