doc/glpk08.tex
author Alpar Juttner <alpar@cs.elte.hu>
Mon, 06 Dec 2010 13:09:21 +0100
changeset 1 c445c931472f
permissions -rw-r--r--
Import glpk-4.45

- Generated files and doc/notes are removed
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 *%