alpar@1
|
1 |
%* glpk08.tex *%
|
alpar@1
|
2 |
|
alpar@1
|
3 |
\chapter{MPS Format}
|
alpar@1
|
4 |
\label{champs}
|
alpar@1
|
5 |
|
alpar@1
|
6 |
\section{Fixed MPS Format}
|
alpar@1
|
7 |
\label{secmps}
|
alpar@1
|
8 |
|
alpar@1
|
9 |
The MPS format\footnote{The MPS format was developed in 1960's by IBM
|
alpar@1
|
10 |
as input format for their mathematical programming system MPS/360.
|
alpar@1
|
11 |
Today the MPS format is a most widely used format understood by most
|
alpar@1
|
12 |
mathematical programming packages. This appendix describes only the
|
alpar@1
|
13 |
features of the MPS format, which are implemented in the GLPK package.}
|
alpar@1
|
14 |
is intended for coding LP/MIP problem data. This format assumes the
|
alpar@1
|
15 |
formulation of LP/MIP problem (1.1)---(1.3) (see Section \ref{seclp},
|
alpar@1
|
16 |
page \pageref{seclp}).
|
alpar@1
|
17 |
|
alpar@1
|
18 |
{\it MPS file} is a text file, which contains two types of
|
alpar@1
|
19 |
cards\footnote{In 1960's MPS file was a deck of 80-column punched cards,
|
alpar@1
|
20 |
so the author decided to keep the word ``card'', which may be understood
|
alpar@1
|
21 |
as ``line of text file''.}: indicator cards and data cards.
|
alpar@1
|
22 |
|
alpar@1
|
23 |
Indicator cards determine a kind of succeeding data. Each indicator card
|
alpar@1
|
24 |
has one word in uppercase letters beginning in column 1.
|
alpar@1
|
25 |
|
alpar@1
|
26 |
Data cards contain problem data. Each data card is divided into six
|
alpar@1
|
27 |
fixed fields:
|
alpar@1
|
28 |
|
alpar@1
|
29 |
\begin{center}
|
alpar@1
|
30 |
\begin{tabular}{lcccccc}
|
alpar@1
|
31 |
& Field 1 & Field 2 & Field 3 & Field 4 & Field 5 & Feld 6 \\
|
alpar@1
|
32 |
\hline
|
alpar@1
|
33 |
Columns & 2---3 & 5---12 & 15---22 & 25---36 & 40---47 & 50---61 \\
|
alpar@1
|
34 |
Contents & Code & Name & Name & Number & Name & Number \\
|
alpar@1
|
35 |
\end{tabular}
|
alpar@1
|
36 |
\end{center}
|
alpar@1
|
37 |
|
alpar@1
|
38 |
On a particular data card some fields may be optional.
|
alpar@1
|
39 |
|
alpar@1
|
40 |
Names are used to identify rows, columns, and some vectors (see below).
|
alpar@1
|
41 |
|
alpar@1
|
42 |
Aligning the indicator code in the field 1 to the left margin is
|
alpar@1
|
43 |
optional.
|
alpar@1
|
44 |
|
alpar@1
|
45 |
All names specified in the fields 2, 3, and 5 should contain from 1 up
|
alpar@1
|
46 |
to 8 arbitrary characters (except control characters). If a name is
|
alpar@1
|
47 |
placed in the field 3 or 5, its first character should not be the dollar
|
alpar@1
|
48 |
sign `\verb|$|'. If a name contains spaces, the spaces are ignored.
|
alpar@1
|
49 |
|
alpar@1
|
50 |
All numerical values in the fields 4 and 6 should be coded in the form
|
alpar@1
|
51 |
$sxx$\verb|E|$syy$, where $s$ is the plus `\verb|+|' or the minus
|
alpar@1
|
52 |
`\verb|-|' sign, $xx$ is a real number with optional decimal point,
|
alpar@1
|
53 |
$yy$ is an integer decimal exponent. Any number should contain up to 12
|
alpar@1
|
54 |
characters. If the sign $s$ is omitted, the plus sign is assumed. The
|
alpar@1
|
55 |
exponent part is optional. If a number contains spaces, the spaces are
|
alpar@1
|
56 |
ignored.
|
alpar@1
|
57 |
|
alpar@1
|
58 |
If a card has the asterisk `\verb|*|' in the column 1, this card is
|
alpar@1
|
59 |
considered as a comment and ignored. Besides, if the first character in
|
alpar@1
|
60 |
the field 3 or 5 is the dollar sign `\verb|$|', all characters from the
|
alpar@1
|
61 |
dollar sign to the end of card are considered as a comment and ignored.
|
alpar@1
|
62 |
|
alpar@1
|
63 |
MPS file should contain cards in the following order:
|
alpar@1
|
64 |
|
alpar@1
|
65 |
$\bullet$ NAME indicator card;
|
alpar@1
|
66 |
|
alpar@1
|
67 |
$\bullet$ ROWS indicator card;
|
alpar@1
|
68 |
|
alpar@1
|
69 |
$\bullet$ data cards specifying rows (constraints);
|
alpar@1
|
70 |
|
alpar@1
|
71 |
$\bullet$ COLUMNS indicator card;
|
alpar@1
|
72 |
|
alpar@1
|
73 |
$\bullet$ data cards specifying columns (structural variables) and
|
alpar@1
|
74 |
constraint coefficients;
|
alpar@1
|
75 |
|
alpar@1
|
76 |
$\bullet$ RHS indicator card;
|
alpar@1
|
77 |
|
alpar@1
|
78 |
$\bullet$ data cards specifying right-hand sides of constraints;
|
alpar@1
|
79 |
|
alpar@1
|
80 |
$\bullet$ RANGES indicator card;
|
alpar@1
|
81 |
|
alpar@1
|
82 |
$\bullet$ data cards specifying ranges for double-bounded constraints;
|
alpar@1
|
83 |
|
alpar@1
|
84 |
$\bullet$ BOUNDS indicator card;
|
alpar@1
|
85 |
|
alpar@1
|
86 |
$\bullet$ data cards specifying types and bounds of structural
|
alpar@1
|
87 |
variables;
|
alpar@1
|
88 |
|
alpar@1
|
89 |
$\bullet$ ENDATA indicator card.
|
alpar@1
|
90 |
|
alpar@1
|
91 |
{\it Section} is a group of cards consisting of an indicator card and
|
alpar@1
|
92 |
data cards succeeding this indicator card. For example, the ROWS section
|
alpar@1
|
93 |
consists of the ROWS indicator card and data cards specifying rows.
|
alpar@1
|
94 |
|
alpar@1
|
95 |
The sections RHS, RANGES, and BOUNDS are optional and may be omitted.
|
alpar@1
|
96 |
|
alpar@1
|
97 |
\section{Free MPS Format}
|
alpar@1
|
98 |
|
alpar@1
|
99 |
{\it Free MPS format} is an improved version of the standard (fixed)
|
alpar@1
|
100 |
MPS format described above.\footnote{This format was developed in the
|
alpar@1
|
101 |
beginning of 1990's by IBM as an alternative to the standard fixed MPS
|
alpar@1
|
102 |
format for Optimization Subroutine Library (OSL).} Note that all
|
alpar@1
|
103 |
changes in free MPS format concern only the coding of data while the
|
alpar@1
|
104 |
structure of data is the same for both fixed and free versions of the
|
alpar@1
|
105 |
MPS format.
|
alpar@1
|
106 |
|
alpar@1
|
107 |
In free MPS format indicator and data records\footnote{{\it Record} in
|
alpar@1
|
108 |
free MPS format has the same meaning as {\it card} in fixed MPS format.}
|
alpar@1
|
109 |
may have arbitrary length not limited to 80 characters. Fields of data
|
alpar@1
|
110 |
records have no predefined positions, i.e. the fields may begin in any
|
alpar@1
|
111 |
position, except position 1, which must be blank, and must be separated
|
alpar@1
|
112 |
from each other by one or more blanks. However, the fields must appear
|
alpar@1
|
113 |
in the same order as in fixed MPS format.
|
alpar@1
|
114 |
|
alpar@1
|
115 |
Symbolic names in fields 2, 3, and 5 may be longer than 8
|
alpar@1
|
116 |
characters\footnote{GLPK allows symbolic names having up to 255
|
alpar@1
|
117 |
characters.}
|
alpar@1
|
118 |
and must not contain embedded blanks.
|
alpar@1
|
119 |
|
alpar@1
|
120 |
Numeric values in fields 4 and 6 are limited to 12 characters and must
|
alpar@1
|
121 |
not contain embedded blanks.
|
alpar@1
|
122 |
|
alpar@1
|
123 |
Only six fields on each data record are used. Any other fields are
|
alpar@1
|
124 |
ignored.
|
alpar@1
|
125 |
|
alpar@1
|
126 |
If the first character of any field (not necessarily fields 3 and 5)
|
alpar@1
|
127 |
is the dollar sign (\$), all characters from the dollar sign to the end
|
alpar@1
|
128 |
of record are considered as a comment and ignored.
|
alpar@1
|
129 |
|
alpar@1
|
130 |
\section{NAME indicator card}
|
alpar@1
|
131 |
|
alpar@1
|
132 |
The NAME indicator card should be the first card in the MPS file (except
|
alpar@1
|
133 |
optional comment cards, which may precede the NAME card). This card
|
alpar@1
|
134 |
should contain the word \verb|NAME| in the columns 1---4 and the problem
|
alpar@1
|
135 |
name in the field 3. The problem name is optional and may be omitted.
|
alpar@1
|
136 |
|
alpar@1
|
137 |
\section{ROWS section}
|
alpar@1
|
138 |
\label{secrows}
|
alpar@1
|
139 |
|
alpar@1
|
140 |
The ROWS section should start with the indicator card, which contains
|
alpar@1
|
141 |
the word \verb|ROWS| in the columns 1---4.
|
alpar@1
|
142 |
|
alpar@1
|
143 |
Each data card in the ROWS section specifies one row (constraint) of the
|
alpar@1
|
144 |
problem. All these data cards have the following format.
|
alpar@1
|
145 |
|
alpar@1
|
146 |
`\verb|N|' in the field 1 means that the row is free (unbounded):
|
alpar@1
|
147 |
$$-\infty < x_i = a_{i1}x_{m+1} + a_{i2}x_{m+2} + \dots + a_{in}x_{m+n}
|
alpar@1
|
148 |
< +\infty;$$
|
alpar@1
|
149 |
|
alpar@1
|
150 |
`\verb|L|' in the field 1 means that the row is of ``less than or equal
|
alpar@1
|
151 |
to'' type:
|
alpar@1
|
152 |
$$-\infty < x_i = a_{i1}x_{m+1} + a_{i2}x_{m+2} + \dots + a_{in}x_{m+n}
|
alpar@1
|
153 |
\leq b_i;$$
|
alpar@1
|
154 |
|
alpar@1
|
155 |
`\verb|G|' in the field 1 means that the row is of ``greater than or
|
alpar@1
|
156 |
equal to'' type:
|
alpar@1
|
157 |
$$b_i \leq x_i = a_{i1}x_{m+1} + a_{i2}x_{m+2} + \dots + a_{in}x_{m+n}
|
alpar@1
|
158 |
< +\infty;$$
|
alpar@1
|
159 |
|
alpar@1
|
160 |
`\verb|E|' in the field 1 means that the row is of ``equal to'' type:
|
alpar@1
|
161 |
$$x_i = a_{i1}x_{m+1} + a_{i2}x_{m+2} + \dots + a_{in}x_{m+n} \leq
|
alpar@1
|
162 |
b_i,$$
|
alpar@1
|
163 |
where $b_i$ is a right-hand side. Note that each constraint has a
|
alpar@1
|
164 |
corresponding implictly defined auxiliary variable ($x_i$ above), whose
|
alpar@1
|
165 |
value is a value of the corresponding linear form, therefore row bounds
|
alpar@1
|
166 |
can be considered as bounds of such auxiliary variable.
|
alpar@1
|
167 |
|
alpar@1
|
168 |
The filed 2 specifies a row name (which is considered as the name of
|
alpar@1
|
169 |
the corresponding auxiliary variable).
|
alpar@1
|
170 |
|
alpar@1
|
171 |
The fields 3, 4, 5, and 6 are not used and should be empty.
|
alpar@1
|
172 |
|
alpar@1
|
173 |
Numerical values of all non-zero right-hand sides $b_i$ should be
|
alpar@1
|
174 |
specified in the RHS section (see below). All double-bounded (ranged)
|
alpar@1
|
175 |
constraints should be specified in the RANGES section (see below).
|
alpar@1
|
176 |
|
alpar@1
|
177 |
\section{COLUMNS section}
|
alpar@1
|
178 |
|
alpar@1
|
179 |
The COLUMNS section should start with the indicator card, which contains
|
alpar@1
|
180 |
the word \verb|COLUMNS| in the columns 1---7.
|
alpar@1
|
181 |
|
alpar@1
|
182 |
Each data card in the COLUMNS section specifies one or two constraint
|
alpar@1
|
183 |
coefficients $a_{ij}$ and also introduces names of columns, i.e. names
|
alpar@1
|
184 |
of structural variables. All these data cards have the following format.
|
alpar@1
|
185 |
|
alpar@1
|
186 |
The field 1 is not used and should be empty.
|
alpar@1
|
187 |
|
alpar@1
|
188 |
The field 2 specifies a column name. If this field is empty, the column
|
alpar@1
|
189 |
name from the immediately preceeding data card is assumed.
|
alpar@1
|
190 |
|
alpar@1
|
191 |
The field 3 specifies a row name defined in the ROWS section.
|
alpar@1
|
192 |
|
alpar@1
|
193 |
The field 4 specifies a numerical value of the constraint coefficient
|
alpar@1
|
194 |
$a_{ij}$, which is placed in the corresponding row and column.
|
alpar@1
|
195 |
|
alpar@1
|
196 |
The fields 5 and 6 are optional. If they are used, they should contain
|
alpar@1
|
197 |
a second pair ``row name---constraint coefficient'' for the same column.
|
alpar@1
|
198 |
|
alpar@1
|
199 |
Elements of the constraint matrix (i.e. constraint coefficients) should
|
alpar@1
|
200 |
be enumerated in the column wise manner: all elements for the current
|
alpar@1
|
201 |
column should be specified before elements for the next column. However,
|
alpar@1
|
202 |
the order of rows in the COLUMNS section may differ from the order of
|
alpar@1
|
203 |
rows in the ROWS section.
|
alpar@1
|
204 |
|
alpar@1
|
205 |
Constraint coefficients not specified in the COLUMNS section are
|
alpar@1
|
206 |
considered as zeros. Therefore zero coefficients may be omitted,
|
alpar@1
|
207 |
although it is allowed to explicitly specify them.
|
alpar@1
|
208 |
|
alpar@1
|
209 |
\section{RHS section}
|
alpar@1
|
210 |
|
alpar@1
|
211 |
The RHS section should start with the indicator card, which contains the
|
alpar@1
|
212 |
word \verb|RHS| in the columns 1---3.
|
alpar@1
|
213 |
|
alpar@1
|
214 |
Each data card in the RHS section specifies one or two right-hand sides
|
alpar@1
|
215 |
$b_i$ (see Section \ref{secrows}, page \pageref{secrows}). All these
|
alpar@1
|
216 |
data cards have the following format.
|
alpar@1
|
217 |
|
alpar@1
|
218 |
The field 1 is not used and should be empty.
|
alpar@1
|
219 |
|
alpar@1
|
220 |
The field 2 specifies a name of the right-hand side (RHS)
|
alpar@1
|
221 |
vector\footnote{This feature allows the user to specify several RHS
|
alpar@1
|
222 |
vectors in the same MPS file. However, before solving the problem a
|
alpar@1
|
223 |
particular RHS vector should be chosen.}. If this field is empty, the
|
alpar@1
|
224 |
RHS vector name from the immediately preceeding data card is assumed.
|
alpar@1
|
225 |
|
alpar@1
|
226 |
The field 3 specifies a row name defined in the ROWS section.
|
alpar@1
|
227 |
|
alpar@1
|
228 |
The field 4 specifies a right-hand side $b_i$ for the row, whose name is
|
alpar@1
|
229 |
specified in the field 3. Depending on the row type $b_i$ is a lower
|
alpar@1
|
230 |
bound (for the row of \verb|G| type), an upper bound (for the row of
|
alpar@1
|
231 |
\verb|L| type), or a fixed value (for the row of \verb|E|
|
alpar@1
|
232 |
type).\footnote{If the row is of {\tt N} type, $b_i$ is considered as
|
alpar@1
|
233 |
a constant term of the corresponding linear form. Should note, however,
|
alpar@1
|
234 |
this convention is non-standard.}
|
alpar@1
|
235 |
|
alpar@1
|
236 |
The fields 5 and 6 are optional. If they are used, they should contain
|
alpar@1
|
237 |
a second pair ``row name---right-hand side'' for the same RHS vector.
|
alpar@1
|
238 |
|
alpar@1
|
239 |
All right-hand sides for the current RHS vector should be specified
|
alpar@1
|
240 |
before right-hand sides for the next RHS vector. However, the order of
|
alpar@1
|
241 |
rows in the RHS section may differ from the order of rows in the ROWS
|
alpar@1
|
242 |
section.
|
alpar@1
|
243 |
|
alpar@1
|
244 |
Right-hand sides not specified in the RHS section are considered as
|
alpar@1
|
245 |
zeros. Therefore zero right-hand sides may be omitted, although it is
|
alpar@1
|
246 |
allowed to explicitly specify them.
|
alpar@1
|
247 |
|
alpar@1
|
248 |
\section{RANGES section}
|
alpar@1
|
249 |
|
alpar@1
|
250 |
The RANGES section should start with the indicator card, which contains
|
alpar@1
|
251 |
the word \verb|RANGES| in the columns 1---6.
|
alpar@1
|
252 |
|
alpar@1
|
253 |
Each data card in the RANGES section specifies one or two ranges for
|
alpar@1
|
254 |
double-side constraints, i.e. for constraints that are of the types
|
alpar@1
|
255 |
\verb|L| and \verb|G| at the same time:
|
alpar@1
|
256 |
$$l_i \leq x_i = a_{i1}x_{m+1} + a_{i2}x_{m+2} + \dots + a_{in}x_{m+n}
|
alpar@1
|
257 |
\leq u_i,$$
|
alpar@1
|
258 |
where $l_i$ is a lower bound, $u_i$ is an upper bound. All these data
|
alpar@1
|
259 |
cards have the following format.
|
alpar@1
|
260 |
|
alpar@1
|
261 |
The field 1 is not used and should be empty.
|
alpar@1
|
262 |
|
alpar@1
|
263 |
The field 2 specifies a name of the range vector\footnote{This feature
|
alpar@1
|
264 |
allows the user to specify several range vectors in the same MPS file.
|
alpar@1
|
265 |
However, before solving the problem a particular range vector should be
|
alpar@1
|
266 |
chosen.}. If this field is empty, the range vector name from the
|
alpar@1
|
267 |
immediately preceeding data card is assumed.
|
alpar@1
|
268 |
|
alpar@1
|
269 |
The field 3 specifies a row name defined in the ROWS section.
|
alpar@1
|
270 |
|
alpar@1
|
271 |
The field 4 specifies a range value $r_i$ (see the table below) for the
|
alpar@1
|
272 |
row, whose name is specified in the field 3.
|
alpar@1
|
273 |
|
alpar@1
|
274 |
The fields 5 and 6 are optional. If they are used, they should contain
|
alpar@1
|
275 |
a second pair ``row name---range value'' for the same range vector.
|
alpar@1
|
276 |
|
alpar@1
|
277 |
All range values for the current range vector should be specified before
|
alpar@1
|
278 |
range values for the next range vector. However, the order of rows in
|
alpar@1
|
279 |
the RANGES section may differ from the order of rows in the ROWS
|
alpar@1
|
280 |
section.
|
alpar@1
|
281 |
|
alpar@1
|
282 |
For each double-side constraint specified in the RANGES section its
|
alpar@1
|
283 |
lower and upper bounds are determined as follows:
|
alpar@1
|
284 |
|
alpar@1
|
285 |
\begin{center}
|
alpar@1
|
286 |
\begin{tabular}{cccc}
|
alpar@1
|
287 |
Row type & Sign of $r_i$ & Lower bound & Upper bound \\
|
alpar@1
|
288 |
\hline
|
alpar@1
|
289 |
{\tt G} & $+$ or $-$ & $b_i$ & $b_i + |r_i|$ \\
|
alpar@1
|
290 |
{\tt L} & $+$ or $-$ & $b_i - |r_i|$ & $b_i$ \\
|
alpar@1
|
291 |
{\tt E} & $+$ & $b_i$ & $b_i + |r_i|$ \\
|
alpar@1
|
292 |
{\tt E} & $-$ & $b_i - |r_i|$ & $b_i$ \\
|
alpar@1
|
293 |
\end{tabular}
|
alpar@1
|
294 |
\end{center}
|
alpar@1
|
295 |
|
alpar@1
|
296 |
\noindent
|
alpar@1
|
297 |
where $b_i$ is a right-hand side specified in the RHS section (if $b_i$
|
alpar@1
|
298 |
is not specified, it is considered as zero), $r_i$ is a range value
|
alpar@1
|
299 |
specified in the RANGES section.
|
alpar@1
|
300 |
|
alpar@1
|
301 |
\section{BOUNDS section}
|
alpar@1
|
302 |
\label{secbounds}
|
alpar@1
|
303 |
|
alpar@1
|
304 |
The BOUNDS section should start with the indicator card, which contains
|
alpar@1
|
305 |
the word \verb|BOUNDS| in the columns 1---6.
|
alpar@1
|
306 |
|
alpar@1
|
307 |
Each data card in the BOUNDS section specifies one (lower or upper)
|
alpar@1
|
308 |
bound for one structural variable (column). All these data cards have
|
alpar@1
|
309 |
the following format.
|
alpar@1
|
310 |
|
alpar@1
|
311 |
The indicator in the field 1 specifies the bound type:
|
alpar@1
|
312 |
|
alpar@1
|
313 |
\begin{tabular}{@{}ll}
|
alpar@1
|
314 |
\verb|LO| & lower bound; \\
|
alpar@1
|
315 |
\verb|UP| & upper bound; \\
|
alpar@1
|
316 |
\verb|FX| & fixed variable (lower and upper bounds are equal); \\
|
alpar@1
|
317 |
\verb|FR| & free variable (no bounds); \\
|
alpar@1
|
318 |
\verb|MI| & no lower bound (lower bound is ``minus infinity''); \\
|
alpar@1
|
319 |
\verb|PL| & no upper bound (upper bound is ``plus infinity''); \\
|
alpar@1
|
320 |
\end{tabular}
|
alpar@1
|
321 |
|
alpar@1
|
322 |
The field 2 specifies a name of the bound vector\footnote{This feature
|
alpar@1
|
323 |
allows the user to specify several bound vectors in the same MPS file.
|
alpar@1
|
324 |
However, before solving the problem a particular bound vector should be
|
alpar@1
|
325 |
chosen.}. If this field is empty, the bound vector name from the
|
alpar@1
|
326 |
immediately preceeding data card is assumed.
|
alpar@1
|
327 |
|
alpar@1
|
328 |
The field 3 specifies a column name defined in the COLUMNS section.
|
alpar@1
|
329 |
|
alpar@1
|
330 |
The field 4 specifies a bound value. If the bound type in the field 1
|
alpar@1
|
331 |
differs from \verb|LO|, \verb|UP|, and \verb|FX|, the value in the field
|
alpar@1
|
332 |
4 is ignored and may be omitted.
|
alpar@1
|
333 |
|
alpar@1
|
334 |
The fields 5 and 6 are not used and should be empty.
|
alpar@1
|
335 |
|
alpar@1
|
336 |
All bound values for the current bound vector should be specified before
|
alpar@1
|
337 |
bound values for the next bound vector. However, the order of columns in
|
alpar@1
|
338 |
the BOUNDS section may differ from the order of columns in the COLUMNS
|
alpar@1
|
339 |
section. Specification of a lower bound should precede specification of
|
alpar@1
|
340 |
an upper bound for the same column (if both the lower and upper bounds
|
alpar@1
|
341 |
are explicitly specified).
|
alpar@1
|
342 |
|
alpar@1
|
343 |
By default, all columns (structural variables) are non-negative, i.e.
|
alpar@1
|
344 |
have zero lower bound and no upper bound. Lower ($l_j$) and upper
|
alpar@1
|
345 |
($u_j$) bounds of some column (structural variable $x_j$) are set in the
|
alpar@1
|
346 |
following way, where $s_j$ is a corresponding bound value explicitly
|
alpar@1
|
347 |
specified in the BOUNDS section:
|
alpar@1
|
348 |
|
alpar@1
|
349 |
\begin{tabular}{@{}ll}
|
alpar@1
|
350 |
\verb|LO| & sets $l_j$ to $s_j$; \\
|
alpar@1
|
351 |
\verb|UP| & sets $u_j$ to $s_j$; \\
|
alpar@1
|
352 |
\verb|FX| & sets both $l_j$ and $u_j$ to $s_j$; \\
|
alpar@1
|
353 |
\verb|FR| & sets $l_j$ to $-\infty$ and $u_j$ to $+\infty$; \\
|
alpar@1
|
354 |
\verb|MI| & sets $l_j$ to $-\infty$; \\
|
alpar@1
|
355 |
\verb|PL| & sets $u_j$ to $+\infty$. \\
|
alpar@1
|
356 |
\end{tabular}
|
alpar@1
|
357 |
|
alpar@1
|
358 |
\section{ENDATA indicator card}
|
alpar@1
|
359 |
|
alpar@1
|
360 |
The ENDATA indicator card should be the last card of MPS file (except
|
alpar@1
|
361 |
optional comment cards, which may follow the ENDATA card). This card
|
alpar@1
|
362 |
should contain the word \verb|ENDATA| in the columns 1---6.
|
alpar@1
|
363 |
|
alpar@1
|
364 |
\section{Specifying objective function}
|
alpar@1
|
365 |
|
alpar@1
|
366 |
It is impossible to explicitly specify the objective function and
|
alpar@1
|
367 |
optimization direction in the MPS file. However, the following implicit
|
alpar@1
|
368 |
rule is used by default: the first row of \verb|N| type is considered
|
alpar@1
|
369 |
as a row of the objective function (i.e. the objective function is the
|
alpar@1
|
370 |
corresponding auxiliary variable), which should be {\it minimized}.
|
alpar@1
|
371 |
|
alpar@1
|
372 |
GLPK also allows specifying a constant term of the objective function
|
alpar@1
|
373 |
as a right-hand side of the corresponding row in the RHS section.
|
alpar@1
|
374 |
|
alpar@1
|
375 |
\section{Example of MPS file}
|
alpar@1
|
376 |
\label{secmpsex}
|
alpar@1
|
377 |
|
alpar@1
|
378 |
In order to illustrate what the MPS format is, consider the following
|
alpar@1
|
379 |
example of LP problem:
|
alpar@1
|
380 |
|
alpar@1
|
381 |
\medskip
|
alpar@1
|
382 |
\noindent minimize
|
alpar@1
|
383 |
$$
|
alpar@1
|
384 |
value = .03\ bin_1 + .08\ bin_2 + .17\ bin_3 + .12\ bin_4 + .15\ bin_5
|
alpar@1
|
385 |
+ .21\ al + .38\ si
|
alpar@1
|
386 |
$$
|
alpar@1
|
387 |
|
alpar@1
|
388 |
\noindent subject to linear constraints
|
alpar@1
|
389 |
$$
|
alpar@1
|
390 |
\begin{array}{@{}l@{\:}l@{}}
|
alpar@1
|
391 |
yield &= \ \ \ \ \;bin_1 + \ \ \ \ \;bin_2 + \ \ \ \ \;bin_3 +
|
alpar@1
|
392 |
\ \ \ \ \;bin_4 + \ \ \ \ \;bin_5 + \ \ \ \ \;al +
|
alpar@1
|
393 |
\ \ \ \ \;si \\
|
alpar@1
|
394 |
FE &= .15\ bin_1 + .04\ bin_2 + .02\ bin_3 + .04\ bin_4 + .02\ bin_5
|
alpar@1
|
395 |
+ .01\ al + .03\ si \\
|
alpar@1
|
396 |
CU &= .03\ bin_1 + .05\ bin_2 + .08\ bin_3 + .02\ bin_4 + .06\ bin_5
|
alpar@1
|
397 |
+ .01\ al \\
|
alpar@1
|
398 |
MN &= .02\ bin_1 + .04\ bin_2 + .01\ bin_3 + .02\ bin_4 + .02\ bin_5
|
alpar@1
|
399 |
\\
|
alpar@1
|
400 |
MG &= .02\ bin_1 + .03\ bin_2
|
alpar@1
|
401 |
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ + .01\ bin_5 \\
|
alpar@1
|
402 |
AL &= .70\ bin_1 + .75\ bin_2 + .80\ bin_3 + .75\ bin_4 + .80\ bin_5
|
alpar@1
|
403 |
+ .97\ al \\
|
alpar@1
|
404 |
SI &= .02\ bin_1 + .06\ bin_2 + .08\ bin_3 + .12\ bin_4 + .02\ bin_5
|
alpar@1
|
405 |
+ .01\ al + .97\ si \\
|
alpar@1
|
406 |
\end{array}
|
alpar@1
|
407 |
$$
|
alpar@1
|
408 |
and bounds of (auxiliary and structural) variables
|
alpar@1
|
409 |
$$
|
alpar@1
|
410 |
\begin{array}{r@{\ }l@{\ }l@{\ }l@{\ }rcr@{\ }l@{\ }l@{\ }l@{\ }r}
|
alpar@1
|
411 |
&&yield&=&2000&&0&\leq&bin_1&\leq&200\\
|
alpar@1
|
412 |
-\infty&<&FE&\leq&60&&0&\leq&bin_2&\leq&2500\\
|
alpar@1
|
413 |
-\infty&<&CU&\leq&100&&400&\leq&bin_3&\leq&800\\
|
alpar@1
|
414 |
-\infty&<&MN&\leq&40&&100&\leq&bin_4&\leq&700\\
|
alpar@1
|
415 |
-\infty&<&MG&\leq&30&&0&\leq&bin_5&\leq&1500\\
|
alpar@1
|
416 |
1500&\leq&AL&<&+\infty&&0&\leq&al&<&+\infty\\
|
alpar@1
|
417 |
250&\leq&SI&\leq&300&&0&\leq&si&<&+\infty\\
|
alpar@1
|
418 |
\end{array}
|
alpar@1
|
419 |
$$
|
alpar@1
|
420 |
|
alpar@1
|
421 |
A complete MPS file which specifies data for this example is shown
|
alpar@1
|
422 |
below (the first two comment lines show card positions).
|
alpar@1
|
423 |
|
alpar@1
|
424 |
\begin{verbatim}
|
alpar@1
|
425 |
*000000001111111111222222222233333333334444444444555555555566
|
alpar@1
|
426 |
*234567890123456789012345678901234567890123456789012345678901
|
alpar@1
|
427 |
NAME PLAN
|
alpar@1
|
428 |
ROWS
|
alpar@1
|
429 |
N VALUE
|
alpar@1
|
430 |
E YIELD
|
alpar@1
|
431 |
L FE
|
alpar@1
|
432 |
L CU
|
alpar@1
|
433 |
L MN
|
alpar@1
|
434 |
L MG
|
alpar@1
|
435 |
G AL
|
alpar@1
|
436 |
L SI
|
alpar@1
|
437 |
COLUMNS
|
alpar@1
|
438 |
BIN1 VALUE .03000 YIELD 1.00000
|
alpar@1
|
439 |
FE .15000 CU .03000
|
alpar@1
|
440 |
MN .02000 MG .02000
|
alpar@1
|
441 |
AL .70000 SI .02000
|
alpar@1
|
442 |
BIN2 VALUE .08000 YIELD 1.00000
|
alpar@1
|
443 |
FE .04000 CU .05000
|
alpar@1
|
444 |
MN .04000 MG .03000
|
alpar@1
|
445 |
AL .75000 SI .06000
|
alpar@1
|
446 |
BIN3 VALUE .17000 YIELD 1.00000
|
alpar@1
|
447 |
FE .02000 CU .08000
|
alpar@1
|
448 |
MN .01000 AL .80000
|
alpar@1
|
449 |
SI .08000
|
alpar@1
|
450 |
BIN4 VALUE .12000 YIELD 1.00000
|
alpar@1
|
451 |
FE .04000 CU .02000
|
alpar@1
|
452 |
MN .02000 AL .75000
|
alpar@1
|
453 |
SI .12000
|
alpar@1
|
454 |
BIN5 VALUE .15000 YIELD 1.00000
|
alpar@1
|
455 |
FE .02000 CU .06000
|
alpar@1
|
456 |
MN .02000 MG .01000
|
alpar@1
|
457 |
AL .80000 SI .02000
|
alpar@1
|
458 |
ALUM VALUE .21000 YIELD 1.00000
|
alpar@1
|
459 |
FE .01000 CU .01000
|
alpar@1
|
460 |
AL .97000 SI .01000
|
alpar@1
|
461 |
SILICON VALUE .38000 YIELD 1.00000
|
alpar@1
|
462 |
FE .03000 SI .97000
|
alpar@1
|
463 |
RHS
|
alpar@1
|
464 |
RHS1 YIELD 2000.00000 FE 60.00000
|
alpar@1
|
465 |
CU 100.00000 MN 40.00000
|
alpar@1
|
466 |
SI 300.00000
|
alpar@1
|
467 |
MG 30.00000 AL 1500.00000
|
alpar@1
|
468 |
RANGES
|
alpar@1
|
469 |
RNG1 SI 50.00000
|
alpar@1
|
470 |
BOUNDS
|
alpar@1
|
471 |
UP BND1 BIN1 200.00000
|
alpar@1
|
472 |
UP BIN2 2500.00000
|
alpar@1
|
473 |
LO BIN3 400.00000
|
alpar@1
|
474 |
UP BIN3 800.00000
|
alpar@1
|
475 |
LO BIN4 100.00000
|
alpar@1
|
476 |
UP BIN4 700.00000
|
alpar@1
|
477 |
UP BIN5 1500.00000
|
alpar@1
|
478 |
ENDATA
|
alpar@1
|
479 |
\end{verbatim}
|
alpar@1
|
480 |
|
alpar@1
|
481 |
\section{MIP features}
|
alpar@1
|
482 |
|
alpar@1
|
483 |
The MPS format provides two ways for introducing integer variables into
|
alpar@1
|
484 |
the problem.
|
alpar@1
|
485 |
|
alpar@1
|
486 |
The first way is most general and based on using special marker cards
|
alpar@1
|
487 |
INTORG and INTEND. These marker cards are placed in the COLUMNS section.
|
alpar@1
|
488 |
The INTORG card indicates the start of a group of integer variables
|
alpar@1
|
489 |
(columns), and the card INTEND indicates the end of the group. The MPS
|
alpar@1
|
490 |
file may contain arbitrary number of the marker cards.
|
alpar@1
|
491 |
|
alpar@1
|
492 |
The marker cards have the same format as the data cards (see Section
|
alpar@1
|
493 |
\ref{secmps}, page \pageref{secmps}).
|
alpar@1
|
494 |
|
alpar@1
|
495 |
The fields 1, 2, and 6 are not used and should be empty.
|
alpar@1
|
496 |
|
alpar@1
|
497 |
The field 2 should contain a marker name. This name may be arbitrary.
|
alpar@1
|
498 |
|
alpar@1
|
499 |
The field 3 should contain the word \verb|'MARKER'| (including
|
alpar@1
|
500 |
apostrophes).
|
alpar@1
|
501 |
|
alpar@1
|
502 |
The field 5 should contain either the word \verb|'INTORG'| (including
|
alpar@1
|
503 |
apostrophes) for the marker card, which begins a group of integer
|
alpar@1
|
504 |
columns, or the word \verb|'INTEND'| (including apostrophes) for the
|
alpar@1
|
505 |
marker card, which ends the group.
|
alpar@1
|
506 |
|
alpar@1
|
507 |
The second way is less general but more convenient in some cases. It
|
alpar@1
|
508 |
allows the user declaring integer columns using three additional types
|
alpar@1
|
509 |
of bounds, which are specified in the field 1 of data cards in the
|
alpar@1
|
510 |
BOUNDS section (see Section \ref{secbounds}, page \pageref{secbounds}):
|
alpar@1
|
511 |
|
alpar@1
|
512 |
\begin{tabular}{@{}lp{112.3mm}@{}}
|
alpar@1
|
513 |
\verb|LI| & lower integer. This bound type specifies that the
|
alpar@1
|
514 |
corresponding column (structural variable), whose name is specified in
|
alpar@1
|
515 |
field 3, is of integer kind. In this case an lower bound of the
|
alpar@1
|
516 |
column should be specified in field 4 (like in the case of \verb|LO|
|
alpar@1
|
517 |
bound type). \\
|
alpar@1
|
518 |
\verb|UI| & upper integer. This bound type specifies that the
|
alpar@1
|
519 |
corresponding column (structural variable), whose name is specified in
|
alpar@1
|
520 |
field 3, is of integer kind. In this case an upper bound of the
|
alpar@1
|
521 |
column should be specified in field 4 (like in the case of \verb|UP|
|
alpar@1
|
522 |
bound type). \\
|
alpar@1
|
523 |
\end{tabular}
|
alpar@1
|
524 |
|
alpar@1
|
525 |
\pagebreak
|
alpar@1
|
526 |
|
alpar@1
|
527 |
\begin{tabular}{@{}lp{112.3mm}@{}}
|
alpar@1
|
528 |
\verb|BV| & binary variable. This bound type specifies that the
|
alpar@1
|
529 |
corresponding column (structural variable), whose name is specified in
|
alpar@1
|
530 |
the field 3, is of integer kind, its lower bound is zero, and its upper
|
alpar@1
|
531 |
bound is one (thus, such variable being of integer kind can have only
|
alpar@1
|
532 |
two values zero and one). In this case a numeric value specified in the
|
alpar@1
|
533 |
field 4 is ignored and may be omitted.\\
|
alpar@1
|
534 |
\end{tabular}
|
alpar@1
|
535 |
|
alpar@1
|
536 |
Consider the following example of MIP problem:
|
alpar@1
|
537 |
|
alpar@1
|
538 |
\medskip
|
alpar@1
|
539 |
|
alpar@1
|
540 |
\noindent
|
alpar@1
|
541 |
\hspace{1in} minimize
|
alpar@1
|
542 |
$$Z = 3 x_1 + 7 x_2 - x_3 + x4$$
|
alpar@1
|
543 |
\hspace{1in} subject to linear constraints
|
alpar@1
|
544 |
$$
|
alpar@1
|
545 |
\begin{array}{c}
|
alpar@1
|
546 |
\nonumber r_1 = 2 x_1 - \ \ x_2 + \ \ x_3 - \ \;x_4 \\
|
alpar@1
|
547 |
\nonumber r_2 = \ \;x_1 - \ \;x_2 - 6 x_3 + 4 x_4 \\
|
alpar@1
|
548 |
\nonumber r_3 = 5 x_1 + 3 x_2 \ \ \ \ \ \ \ \ \ + \ \ x_4 \\
|
alpar@1
|
549 |
\end{array}
|
alpar@1
|
550 |
$$
|
alpar@1
|
551 |
\hspace{1in} and bound of variables
|
alpar@1
|
552 |
$$
|
alpar@1
|
553 |
\begin{array}{cccl}
|
alpar@1
|
554 |
\nonumber 1 \leq r_1 < +\infty && 0 \leq x_1 \leq 4 &{\rm(continuous)}\\
|
alpar@1
|
555 |
\nonumber 8 \leq r_2 < +\infty && 2 \leq x_2 \leq 5 &{\rm(integer)} \\
|
alpar@1
|
556 |
\nonumber 5 \leq r_3 < +\infty && 0 \leq x_3 \leq 1 &{\rm(integer)} \\
|
alpar@1
|
557 |
\nonumber && 3 \leq x_4 \leq 8 &{\rm(continuous)}\\
|
alpar@1
|
558 |
\end{array}
|
alpar@1
|
559 |
$$
|
alpar@1
|
560 |
|
alpar@1
|
561 |
The corresponding MPS file may look like the following:
|
alpar@1
|
562 |
|
alpar@1
|
563 |
\begin{verbatim}
|
alpar@1
|
564 |
NAME SAMP1
|
alpar@1
|
565 |
ROWS
|
alpar@1
|
566 |
N Z
|
alpar@1
|
567 |
G R1
|
alpar@1
|
568 |
G R2
|
alpar@1
|
569 |
G R3
|
alpar@1
|
570 |
COLUMNS
|
alpar@1
|
571 |
X1 R1 2.0 R2 1.0
|
alpar@1
|
572 |
X1 R3 5.0 Z 3.0
|
alpar@1
|
573 |
MARK0001 'MARKER' 'INTORG'
|
alpar@1
|
574 |
X2 R1 -1.0 R2 -1.0
|
alpar@1
|
575 |
X2 R3 3.0 Z 7.0
|
alpar@1
|
576 |
X3 R1 1.0 R2 -6.0
|
alpar@1
|
577 |
X3 Z -1.0
|
alpar@1
|
578 |
MARK0002 'MARKER' 'INTEND'
|
alpar@1
|
579 |
X4 R1 -1.0 R2 4.0
|
alpar@1
|
580 |
X4 R3 1.0 Z 1.0
|
alpar@1
|
581 |
RHS
|
alpar@1
|
582 |
RHS1 R1 1.0
|
alpar@1
|
583 |
RHS1 R2 8.0
|
alpar@1
|
584 |
RHS1 R3 5.0
|
alpar@1
|
585 |
BOUNDS
|
alpar@1
|
586 |
UP BND1 X1 4.0
|
alpar@1
|
587 |
LO BND1 X2 2.0
|
alpar@1
|
588 |
UP BND1 X2 5.0
|
alpar@1
|
589 |
UP BND1 X3 1.0
|
alpar@1
|
590 |
LO BND1 X4 3.0
|
alpar@1
|
591 |
UP BND1 X4 8.0
|
alpar@1
|
592 |
ENDATA
|
alpar@1
|
593 |
\end{verbatim}
|
alpar@1
|
594 |
|
alpar@1
|
595 |
The same example may be coded without INTORG/INTEND markers using the
|
alpar@1
|
596 |
bound type UI for the variable $x_2$ and the bound type BV for the
|
alpar@1
|
597 |
variable $x_3$:
|
alpar@1
|
598 |
|
alpar@1
|
599 |
\begin{verbatim}
|
alpar@1
|
600 |
NAME SAMP2
|
alpar@1
|
601 |
ROWS
|
alpar@1
|
602 |
N Z
|
alpar@1
|
603 |
G R1
|
alpar@1
|
604 |
G R2
|
alpar@1
|
605 |
G R3
|
alpar@1
|
606 |
COLUMNS
|
alpar@1
|
607 |
X1 R1 2.0 R2 1.0
|
alpar@1
|
608 |
X1 R3 5.0 Z 3.0
|
alpar@1
|
609 |
X2 R1 -1.0 R2 -1.0
|
alpar@1
|
610 |
X2 R3 3.0 Z 7.0
|
alpar@1
|
611 |
X3 R1 1.0 R2 -6.0
|
alpar@1
|
612 |
X3 Z -1.0
|
alpar@1
|
613 |
X4 R1 -1.0 R2 4.0
|
alpar@1
|
614 |
X4 R3 1.0 Z 1.0
|
alpar@1
|
615 |
RHS
|
alpar@1
|
616 |
RHS1 R1 1.0
|
alpar@1
|
617 |
RHS1 R2 8.0
|
alpar@1
|
618 |
RHS1 R3 5.0
|
alpar@1
|
619 |
BOUNDS
|
alpar@1
|
620 |
UP BND1 X1 4.0
|
alpar@1
|
621 |
LO BND1 X2 2.0
|
alpar@1
|
622 |
UI BND1 X2 5.0
|
alpar@1
|
623 |
BV BND1 X3
|
alpar@1
|
624 |
LO BND1 X4 3.0
|
alpar@1
|
625 |
UP BND1 X4 8.0
|
alpar@1
|
626 |
ENDATA
|
alpar@1
|
627 |
\end{verbatim}
|
alpar@1
|
628 |
|
alpar@1
|
629 |
%\section{Specifying predefined basis}
|
alpar@1
|
630 |
%\label{secbas}
|
alpar@1
|
631 |
%
|
alpar@1
|
632 |
%The MPS format can also be used to specify some predefined basis for an
|
alpar@1
|
633 |
%LP problem, i.e. to specify which rows and columns are basic and which
|
alpar@1
|
634 |
%are non-basic.
|
alpar@1
|
635 |
%
|
alpar@1
|
636 |
%The order of a basis file in the MPS format is:
|
alpar@1
|
637 |
%
|
alpar@1
|
638 |
%$\bullet$ NAME indicator card;
|
alpar@1
|
639 |
%
|
alpar@1
|
640 |
%$\bullet$ data cards (can appear in arbitrary order);
|
alpar@1
|
641 |
%
|
alpar@1
|
642 |
%$\bullet$ ENDATA indicator card.
|
alpar@1
|
643 |
%
|
alpar@1
|
644 |
%Each data card specifies either a pair "basic column---non-basic row"
|
alpar@1
|
645 |
%or a non-basic column. All the data cards have the following format.
|
alpar@1
|
646 |
%
|
alpar@1
|
647 |
%`\verb|XL|' in the field 1 means that a column, whose name is given in
|
alpar@1
|
648 |
%the field 2, is basic, and a row, whose name is given in the field 3,
|
alpar@1
|
649 |
%is non-basic and placed on its lower bound.
|
alpar@1
|
650 |
%
|
alpar@1
|
651 |
%`\verb|XU|' in the field 1 means that a column, whose name is given in
|
alpar@1
|
652 |
%the field 2, is basic, and a row, whose name is given in the field 3,
|
alpar@1
|
653 |
%is non-basic and placed on its upper bound.
|
alpar@1
|
654 |
%
|
alpar@1
|
655 |
%`\verb|LL|' in the field 1 means that a column, whose name is given in
|
alpar@1
|
656 |
%the field 3, is non-basic and placed on its lower bound.
|
alpar@1
|
657 |
%
|
alpar@1
|
658 |
%`\verb|UL|' in the field 1 means that a column, whose name is given in
|
alpar@1
|
659 |
%the field 3, is non-basic and placed on its upper bound.
|
alpar@1
|
660 |
%
|
alpar@1
|
661 |
%The field 2 contains a column name.
|
alpar@1
|
662 |
%
|
alpar@1
|
663 |
%If the indicator given in the field 1 is `\verb|XL|' or `\verb|XU|',
|
alpar@1
|
664 |
%the field 3 contains a row name. Otherwise, if the indicator is
|
alpar@1
|
665 |
%`\verb|LL|' or `\verb|UL|', the field 3 is not used and should be
|
alpar@1
|
666 |
%empty.
|
alpar@1
|
667 |
%
|
alpar@1
|
668 |
%The field 4, 5, and 6 are not used and should be empty.
|
alpar@1
|
669 |
%
|
alpar@1
|
670 |
%A basis file in the MPS format acts like a patch: it doesn't specify
|
alpar@1
|
671 |
%a basis completely, instead that it is just shows in what a given basis
|
alpar@1
|
672 |
%differs from the "standard" basis, where all rows (auxiliary variables)
|
alpar@1
|
673 |
%are assumed to be basic and all columns (structural variables) are
|
alpar@1
|
674 |
%assumed to be non-basic.
|
alpar@1
|
675 |
%
|
alpar@1
|
676 |
%As an example here is a basis file that specifies an optimal basis
|
alpar@1
|
677 |
%for the example LP problem given in Section \ref{secmpsex},
|
alpar@1
|
678 |
%Page \pageref{secmpsex}:
|
alpar@1
|
679 |
%
|
alpar@1
|
680 |
%\pagebreak
|
alpar@1
|
681 |
%
|
alpar@1
|
682 |
%\begin{verbatim}
|
alpar@1
|
683 |
%*000000001111111111222222222233333333334444444444555555555566
|
alpar@1
|
684 |
%*234567890123456789012345678901234567890123456789012345678901
|
alpar@1
|
685 |
%NAME PLAN
|
alpar@1
|
686 |
% XL BIN2 YIELD
|
alpar@1
|
687 |
% XL BIN3 FE
|
alpar@1
|
688 |
% XL BIN4 MN
|
alpar@1
|
689 |
% XL ALUM AL
|
alpar@1
|
690 |
% XL SILICON SI
|
alpar@1
|
691 |
% LL BIN1
|
alpar@1
|
692 |
% LL BIN5
|
alpar@1
|
693 |
%ENDATA
|
alpar@1
|
694 |
%\end{verbatim}
|
alpar@1
|
695 |
|
alpar@1
|
696 |
%* eof *%
|