doc/glpk03.tex
changeset 1 c445c931472f
equal deleted inserted replaced
-1:000000000000 0:d1c47d59ef42
       
     1 %* glpk03.tex *%
       
     2 
       
     3 \chapter{Utility API routines}
       
     4 
       
     5 \section{Problem data reading/writing routines}
       
     6 
       
     7 \subsection{glp\_read\_mps---read problem data in MPS format}
       
     8 
       
     9 \subsubsection*{Synopsis}
       
    10 
       
    11 \begin{verbatim}
       
    12 int glp_read_mps(glp_prob *lp, int fmt, const void *parm,
       
    13       const char *fname);
       
    14 \end{verbatim}
       
    15 
       
    16 \subsubsection*{Description}
       
    17 
       
    18 The routine \verb|glp_read_mps| reads problem data in MPS format from a
       
    19 text file. (The MPS format is described in Appendix \ref{champs}, page
       
    20 \pageref{champs}.)
       
    21 
       
    22 The parameter \verb|fmt| specifies the MPS format version as follows:
       
    23 
       
    24 \begin{tabular}{@{}ll}
       
    25 \verb|GLP_MPS_DECK| & fixed (ancient) MPS format; \\
       
    26 \verb|GLP_MPS_FILE| & free (modern) MPS format. \\
       
    27 \end{tabular}
       
    28 
       
    29 The parameter \verb|parm| is reserved for use in the future and must be
       
    30 specified as \verb|NULL|.
       
    31 
       
    32 The character string \verb|fname| specifies a name of the text file to
       
    33 be read in. (If the file name ends with suffix `\verb|.gz|', the file is
       
    34 assumed to be compressed, in which case the routine \verb|glp_read_mps|
       
    35 decompresses it ``on the fly''.)
       
    36 
       
    37 Note that before reading data the current content of the problem object
       
    38 is completely erased with the routine \verb|glp_erase_prob|.
       
    39 
       
    40 \subsubsection*{Returns}
       
    41 
       
    42 If the operation was successful, the routine \verb|glp_read_mps|
       
    43 returns zero. Otherwise, it prints an error message and returns
       
    44 non-zero.
       
    45 
       
    46 \subsection{glp\_write\_mps---write problem data in MPS format}
       
    47 
       
    48 \subsubsection*{Synopsis}
       
    49 
       
    50 \begin{verbatim}
       
    51 int glp_write_mps(glp_prob *lp, int fmt, const void *parm,
       
    52       const char *fname);
       
    53 \end{verbatim}
       
    54 
       
    55 \subsubsection*{Description}
       
    56 
       
    57 The routine \verb|glp_write_mps| writes problem data in MPS format to a
       
    58 text file. (The MPS format is described in Appendix \ref{champs}, page
       
    59 \pageref{champs}.)
       
    60 
       
    61 The parameter \verb|fmt| specifies the MPS format version as follows:
       
    62 
       
    63 \begin{tabular}{@{}ll}
       
    64 \verb|GLP_MPS_DECK| & fixed (ancient) MPS format; \\
       
    65 \verb|GLP_MPS_FILE| & free (modern) MPS format. \\
       
    66 \end{tabular}
       
    67 
       
    68 The parameter \verb|parm| is reserved for use in the future and must be
       
    69 specified as \verb|NULL|.
       
    70 
       
    71 The character string \verb|fname| specifies a name of the text file to
       
    72 be written out. (If the file name ends with suffix `\verb|.gz|', the
       
    73 file is assumed to be compressed, in which case the routine
       
    74 \verb|glp_write_mps| performs automatic compression on writing it.)
       
    75 
       
    76 \subsubsection*{Returns}
       
    77 
       
    78 If the operation was successful, the routine \verb|glp_write_mps|
       
    79 returns zero. Otherwise, it prints an error message and returns
       
    80 non-zero.
       
    81 
       
    82 \subsection{glp\_read\_lp---read problem data in CPLEX LP format}
       
    83 
       
    84 \subsubsection*{Synopsis}
       
    85 
       
    86 \begin{verbatim}
       
    87 int glp_read_lp(glp_prob *lp, const void *parm,
       
    88       const char *fname);
       
    89 \end{verbatim}
       
    90 
       
    91 \subsubsection*{Description}
       
    92 
       
    93 The routine \verb|glp_read_lp| reads problem data in CPLEX LP format
       
    94 from a text file. (The CPLEX LP format is described in Appendix
       
    95 \ref{chacplex}, page \pageref{chacplex}.)
       
    96 
       
    97 The parameter \verb|parm| is reserved for use in the future and must be
       
    98 specified as \verb|NULL|.
       
    99 
       
   100 The character string \verb|fname| specifies a name of the text file to
       
   101 be read in. (If the file name ends with suffix `\verb|.gz|', the file is
       
   102 assumed to be compressed, in which case the routine \verb|glp_read_lp|
       
   103 decompresses it ``on the fly''.)
       
   104 
       
   105 Note that before reading data the current content of the problem object
       
   106 is completely erased with the routine \verb|glp_erase_prob|.
       
   107 
       
   108 \subsubsection*{Returns}
       
   109 
       
   110 If the operation was successful, the routine \verb|glp_read_lp| returns
       
   111 zero. Otherwise, it prints an error message and returns non-zero.
       
   112 
       
   113 \subsection{glp\_write\_lp---write problem data in CPLEX LP format}
       
   114 
       
   115 \subsubsection*{Synopsis}
       
   116 
       
   117 \begin{verbatim}
       
   118 int glp_write_lp(glp_prob *lp, const void *parm,
       
   119       const char *fname);
       
   120 \end{verbatim}
       
   121 
       
   122 \subsubsection*{Description}
       
   123 
       
   124 The routine \verb|glp_write_lp| writes problem data in CPLEX LP format
       
   125 to a text file. (The CPLEX LP format is described in Appendix
       
   126 \ref{chacplex}, page \pageref{chacplex}.)
       
   127 
       
   128 The parameter \verb|parm| is reserved for use in the future and must be
       
   129 specified as \verb|NULL|.
       
   130 
       
   131 The character string \verb|fname| specifies a name of the text file to
       
   132 be written out. (If the file name ends with suffix `\verb|.gz|', the
       
   133 file is assumed to be compressed, in which case the routine
       
   134 \verb|glp_write_lp| performs automatic compression on writing it.)
       
   135 
       
   136 \subsubsection*{Returns}
       
   137 
       
   138 If the operation was successful, the routine \verb|glp_write_lp|
       
   139 returns zero. Otherwise, it prints an error message and returns
       
   140 non-zero.
       
   141 
       
   142 \subsection{glp\_read\_prob---read problem data in GLPK format}
       
   143 
       
   144 \subsubsection*{Synopsis}
       
   145 
       
   146 \begin{verbatim}
       
   147 int glp_read_prob(glp_prob *P, int flags, const char *fname);
       
   148 \end{verbatim}
       
   149 
       
   150 \subsubsection*{Description}
       
   151 
       
   152 The routine \verb|glp_read_prob| reads problem data in the GLPK LP/MIP
       
   153 format from a text file. (For description of the GLPK LP/MIP format see
       
   154 below.)
       
   155 
       
   156 The parameter \verb|flags| is reserved for use in the future and should
       
   157 be specified as zero.
       
   158 
       
   159 The character string \verb|fname| specifies a name of the text file to
       
   160 be read in. (If the file name ends with suffix `\verb|.gz|', the file
       
   161 is assumed to be compressed, in which case the routine
       
   162 \verb|glp_read_prob| decompresses it ``on the fly''.)
       
   163 
       
   164 Note that before reading data the current content of the problem object
       
   165 is completely erased with the routine \verb|glp_erase_prob|.
       
   166 
       
   167 \subsubsection*{Returns}
       
   168 
       
   169 If the operation was successful, the routine \verb|glp_read_prob|
       
   170 returns zero. Otherwise, it prints an error message and returns
       
   171 non-zero.
       
   172 
       
   173 \subsubsection*{GLPK LP/MIP format}
       
   174 
       
   175 The GLPK LP/MIP format is a DIMACS-like format.\footnote{The DIMACS
       
   176 formats were developed by the Center for Discrete Mathematics and
       
   177 Theoretical Computer Science (DIMACS) to facilitate exchange of problem
       
   178 data. For details see: {\tt <http://dimacs.rutgers.edu/Challenges/>}. }
       
   179 The file in this format is a plain ASCII text file containing lines of
       
   180 several types described below. A line is terminated with the end-of-line
       
   181 character. Fields in each line are separated by at least one blank
       
   182 space. Each line begins with a one-character designator to identify the
       
   183 line type.
       
   184 
       
   185 The first line of the data file must be the problem line (except
       
   186 optional comment lines, which may precede the problem line). The last
       
   187 line of the data file must be the end line. Other lines may follow in
       
   188 arbitrary order, however, duplicate lines are not allowed.
       
   189 
       
   190 \paragraph{Comment lines.} Comment lines give human-readable
       
   191 information about the data file and are ignored by GLPK routines.
       
   192 Comment lines can appear anywhere in the data file. Each comment line
       
   193 begins with the lower-case character \verb|c|.
       
   194 
       
   195 \begin{verbatim}
       
   196    c This is an example of comment line
       
   197 \end{verbatim}
       
   198 
       
   199 \paragraph{Problem line.} There must be exactly one problem line in the
       
   200 data file. This line must appear before any other lines except comment
       
   201 lines and has the following format:
       
   202 
       
   203 \begin{verbatim}
       
   204    p CLASS DIR ROWS COLS NONZ
       
   205 \end{verbatim}
       
   206 
       
   207 The lower-case letter \verb|p| specifies that this is the problem line.
       
   208 
       
   209 The \verb|CLASS| field defines the problem class and can contain either
       
   210 the keyword \verb|lp| (that means linear programming problem) or
       
   211 \verb|mip| (that means mixed integer programming problem).
       
   212 
       
   213 The \verb|DIR| field defines the optimization direction (that is, the
       
   214 objective function sense) and can contain either the keyword \verb|min|
       
   215 (that means minimization) or \verb|max| (that means maximization).
       
   216 
       
   217 The \verb|ROWS|, \verb|COLS|, and \verb|NONZ| fields contain
       
   218 non-negative integer values specifying, respectively, the number of
       
   219 rows (constraints), columns (variables), and non-zero constraint
       
   220 coefficients in the problem instance. Note that \verb|NONZ| value does
       
   221 not account objective coefficients.
       
   222 
       
   223 \paragraph{Row descriptors.} There must be at most one row descriptor
       
   224 line in the data file for each row (constraint). This line has one of
       
   225 the following formats:
       
   226 
       
   227 \begin{verbatim}
       
   228    i ROW f
       
   229    i ROW l RHS
       
   230    i ROW u RHS
       
   231    i ROW d RHS1 RHS2
       
   232    i ROW s RHS
       
   233 \end{verbatim}
       
   234 
       
   235 The lower-case letter \verb|i| specifies that this is the row
       
   236 descriptor line.
       
   237 
       
   238 The \verb|ROW| field specifies the row ordinal number, an integer
       
   239 between 1 and $m$, where $m$ is the number of rows in the problem
       
   240 instance.
       
   241 
       
   242 The next lower-case letter specifies the row type as follows:
       
   243 
       
   244 \verb|f| --- free (unbounded) row: $-\infty<\sum a_jx_j<+\infty$;
       
   245 
       
   246 \verb|l| --- inequality constraint of `$\geq$' type:
       
   247 $\sum a_jx_j\geq b$;
       
   248 
       
   249 \verb|u| --- inequality constraint of `$\leq$' type:
       
   250 $\sum a_jx_j\leq b$;
       
   251 
       
   252 \verb|d| --- double-sided inequality constraint:
       
   253 $b_1\leq\sum a_jx_j\leq b_2$;
       
   254 
       
   255 \verb|s| --- equality constraint: $\sum a_jx_j=b$.
       
   256 
       
   257 The \verb|RHS| field contains a floaing-point value specifying the
       
   258 row right-hand side. The \verb|RHS1| and \verb|RHS2| fields contain
       
   259 floating-point values specifying, respectively, the lower and upper
       
   260 right-hand sides for the double-sided row.
       
   261 
       
   262 If for some row its descriptor line does not appear in the data file,
       
   263 by default that row is assumed to be an equality constraint with zero
       
   264 right-hand side.
       
   265 
       
   266 \paragraph{Column descriptors.} There must be at most one column
       
   267 descriptor line in the data file for each column (variable). This line
       
   268 has one of the following formats depending on the problem class
       
   269 specified in the problem line:
       
   270 
       
   271 \bigskip
       
   272 
       
   273 \begin{tabular}{@{}l@{\hspace*{40pt}}l}
       
   274 LP class & MIP class \\
       
   275 \hline
       
   276 \verb|j COL f|           & \verb|j COL KIND f|           \\
       
   277 \verb|j COL l BND|       & \verb|j COL KIND l BND|       \\
       
   278 \verb|j COL u BND|       & \verb|j COL KIND u BND|       \\
       
   279 \verb|j COL d BND1 BND2| & \verb|j COL KIND d BND1 BND2| \\
       
   280 \verb|j COL s BND|       & \verb|j COL KIND s BND|       \\
       
   281 \end{tabular}
       
   282 
       
   283 \bigskip
       
   284 
       
   285 The lower-case letter \verb|j| specifies that this is the column
       
   286 descriptor line.
       
   287 
       
   288 The \verb|COL| field specifies the column ordinal number, an integer
       
   289 between 1 and $n$, where $n$ is the number of columns in the problem
       
   290 instance.
       
   291 
       
   292 The \verb|KIND| field is used only for MIP problems and specifies the
       
   293 column kind as follows:
       
   294 
       
   295 \verb|c| --- continuous column;
       
   296 
       
   297 \verb|i| --- integer column;
       
   298 
       
   299 \verb|b| --- binary column (in this case all remaining fields must be
       
   300 omitted).
       
   301 
       
   302 The next lower-case letter specifies the column type as follows:
       
   303 
       
   304 \verb|f| --- free (unbounded) column: $-\infty<x<+\infty$;
       
   305 
       
   306 \verb|l| --- column with lower bound: $x\geq l$;
       
   307 
       
   308 \verb|u| --- column with upper bound: $x\leq u$;
       
   309 
       
   310 \verb|d| --- double-bounded column: $l\leq x\leq u$;
       
   311 
       
   312 \verb|s| --- fixed column: $x=s$.
       
   313 
       
   314 The \verb|BND| field contains a floating-point value that specifies the
       
   315 column bound. The \verb|BND1| and \verb|BND2| fields contain
       
   316 floating-point values specifying, respectively, the lower and upper
       
   317 bounds for the double-bounded column.
       
   318 
       
   319 If for some column its descriptor line does not appear in the file, by
       
   320 default that column is assumed to be non-negative (in case of LP class)
       
   321 or binary (in case of MIP class).
       
   322 
       
   323 \paragraph{Coefficient descriptors.} There must be exactly one
       
   324 coefficient descriptor line in the data file for each non-zero
       
   325 objective or constraint coefficient. This line has the following format:
       
   326 
       
   327 \begin{verbatim}
       
   328    a ROW COL VAL
       
   329 \end{verbatim}
       
   330 
       
   331 The lower-case letter \verb|a| specifies that this is the coefficient
       
   332 descriptor line.
       
   333 
       
   334 For objective coefficients the \verb|ROW| field must contain 0. For
       
   335 constraint coefficients the \verb|ROW| field specifies the row ordinal
       
   336 number, an integer between 1 and $m$, where $m$ is the number of rows
       
   337 in the problem instance.
       
   338 
       
   339 The \verb|COL| field specifies the column ordinal number, an integer
       
   340 between 1 and $n$, where $n$ is the number of columns in the problem
       
   341 instance.
       
   342 
       
   343 If both the \verb|ROW| and \verb|COL| fields contain 0, the line
       
   344 specifies the constant term (``shift'') of the objective function
       
   345 rather than objective coefficient.
       
   346 
       
   347 The \verb|VAL| field contains a floating-point coefficient value (it is
       
   348 allowed to specify zero value in this field).
       
   349 
       
   350 The number of constraint coefficient descriptor lines must be exactly
       
   351 the same as specified in the field \verb|NONZ| of the problem line.
       
   352 
       
   353 \paragraph{Symbolic name descriptors.} There must be at most one
       
   354 symbolic name descriptor line for the problem instance, objective
       
   355 function, each row (constraint), and each column (variable). This line
       
   356 has one of the following formats:
       
   357 
       
   358 \begin{verbatim}
       
   359    n p NAME
       
   360    n z NAME
       
   361    n i ROW NAME
       
   362    n j COL NAME
       
   363 \end{verbatim}
       
   364 
       
   365 The lower-case letter \verb|n| specifies that this is the symbolic name
       
   366 descriptor line.
       
   367 
       
   368 The next lower-case letter specifies which object should be assigned a
       
   369 symbolic name:
       
   370 
       
   371 \verb|p| --- problem instance;
       
   372 
       
   373 \verb|z| --- objective function;
       
   374 
       
   375 \verb|i| --- row (constraint);
       
   376 
       
   377 \verb|j| --- column (variable).
       
   378 
       
   379 The \verb|ROW| field specifies the row ordinal number, an integer
       
   380 between 1 and $m$, where $m$ is the number of rows in the problem
       
   381 instance.
       
   382 
       
   383 The \verb|COL| field specifies the column ordinal number, an integer
       
   384 between 1 and $n$, where $n$ is the number of columns in the problem
       
   385 instance.
       
   386 
       
   387 The \verb|NAME| field contains the symbolic name, a sequence from 1 to
       
   388 255 arbitrary graphic ASCII characters, assigned to corresponding
       
   389 object.
       
   390 
       
   391 \paragraph{End line.} There must be exactly one end line in the data
       
   392 file. This line must appear last in the file and has the following
       
   393 format:
       
   394 
       
   395 \begin{verbatim}
       
   396    e
       
   397 \end{verbatim}
       
   398 
       
   399 The lower-case letter \verb|e| specifies that this is the end line.
       
   400 Anything that follows the end line is ignored by GLPK routines.
       
   401 
       
   402 \subsubsection*{Example of data file in GLPK LP/MIP format}
       
   403 
       
   404 The following example of a data file in GLPK LP/MIP format specifies
       
   405 the same LP problem as in Subsection ``Example of MPS file''.
       
   406 
       
   407 \begin{center}
       
   408 \footnotesize\tt
       
   409 \begin{tabular}{l@{\hspace*{50pt}}}
       
   410 p lp min 8 7 48   \\
       
   411 n p PLAN          \\
       
   412 n z VALUE         \\
       
   413 i 1 f             \\
       
   414 n i 1 VALUE       \\
       
   415 i 2 s 2000        \\
       
   416 n i 2 YIELD       \\
       
   417 i 3 u 60          \\
       
   418 n i 3 FE          \\
       
   419 i 4 u 100         \\
       
   420 n i 4 CU          \\
       
   421 i 5 u 40          \\
       
   422 n i 5 MN          \\
       
   423 i 6 u 30          \\
       
   424 n i 6 MG          \\
       
   425 i 7 l 1500        \\
       
   426 n i 7 AL          \\
       
   427 i 8 d 250 300     \\
       
   428 n i 8 SI          \\
       
   429 j 1 d 0 200       \\
       
   430 n j 1 BIN1        \\
       
   431 j 2 d 0 2500      \\
       
   432 n j 2 BIN2        \\
       
   433 j 3 d 400 800     \\
       
   434 n j 3 BIN3        \\
       
   435 j 4 d 100 700     \\
       
   436 n j 4 BIN4        \\
       
   437 j 5 d 0 1500      \\
       
   438 n j 5 BIN5        \\
       
   439 n j 6 ALUM        \\
       
   440 n j 7 SILICON     \\
       
   441 a 0 1 0.03        \\
       
   442 a 0 2 0.08        \\
       
   443 a 0 3 0.17        \\
       
   444 a 0 4 0.12        \\
       
   445 a 0 5 0.15        \\
       
   446 a 0 6 0.21        \\
       
   447 a 0 7 0.38        \\
       
   448 a 1 1 0.03        \\
       
   449 a 1 2 0.08        \\
       
   450 a 1 3 0.17        \\
       
   451 a 1 4 0.12        \\
       
   452 a 1 5 0.15        \\
       
   453 a 1 6 0.21        \\
       
   454 \end{tabular}
       
   455 \begin{tabular}{|@{\hspace*{80pt}}l}
       
   456 a 1 7 0.38        \\
       
   457 a 2 1 1           \\
       
   458 a 2 2 1           \\
       
   459 a 2 3 1           \\
       
   460 a 2 4 1           \\
       
   461 a 2 5 1           \\
       
   462 a 2 6 1           \\
       
   463 a 2 7 1           \\
       
   464 a 3 1 0.15        \\
       
   465 a 3 2 0.04        \\
       
   466 a 3 3 0.02        \\
       
   467 a 3 4 0.04        \\
       
   468 a 3 5 0.02        \\
       
   469 a 3 6 0.01        \\
       
   470 a 3 7 0.03        \\
       
   471 a 4 1 0.03        \\
       
   472 a 4 2 0.05        \\
       
   473 a 4 3 0.08        \\
       
   474 a 4 4 0.02        \\
       
   475 a 4 5 0.06        \\
       
   476 a 4 6 0.01        \\
       
   477 a 5 1 0.02        \\
       
   478 a 5 2 0.04        \\
       
   479 a 5 3 0.01        \\
       
   480 a 5 4 0.02        \\
       
   481 a 5 5 0.02        \\
       
   482 a 6 1 0.02        \\
       
   483 a 6 2 0.03        \\
       
   484 a 6 5 0.01        \\
       
   485 a 7 1 0.7         \\
       
   486 a 7 2 0.75        \\
       
   487 a 7 3 0.8         \\
       
   488 a 7 4 0.75        \\
       
   489 a 7 5 0.8         \\
       
   490 a 7 6 0.97        \\
       
   491 a 8 1 0.02        \\
       
   492 a 8 2 0.06        \\
       
   493 a 8 3 0.08        \\
       
   494 a 8 4 0.12        \\
       
   495 a 8 5 0.02        \\
       
   496 a 8 6 0.01        \\
       
   497 a 8 7 0.97        \\
       
   498 e o f             \\
       
   499 \\
       
   500 \end{tabular}
       
   501 \end{center}
       
   502 
       
   503 \newpage
       
   504 
       
   505 \subsection{glp\_write\_prob---write problem data in GLPK format}
       
   506 
       
   507 \subsubsection*{Synopsis}
       
   508 
       
   509 \begin{verbatim}
       
   510 int glp_write_prob(glp_prob *P, int flags, const char *fname);
       
   511 \end{verbatim}
       
   512 
       
   513 \subsubsection*{Description}
       
   514 
       
   515 The routine \verb|glp_write_prob| writes problem data in the GLPK
       
   516 LP/MIP format to a text file. (For description of the GLPK LP/MIP
       
   517 format see Subsection ``Read problem data in GLPK format''.)
       
   518 
       
   519 The parameter \verb|flags| is reserved for use in the future and should
       
   520 be specified as zero.
       
   521 
       
   522 The character string \verb|fname| specifies a name of the text file to
       
   523 be written out. (If the file name ends with suffix `\verb|.gz|', the
       
   524 file is assumed to be compressed, in which case the routine
       
   525 \verb|glp_write_prob| performs automatic compression on writing it.)
       
   526 
       
   527 \subsubsection*{Returns}
       
   528 
       
   529 If the operation was successful, the routine \verb|glp_read_prob|
       
   530 returns zero. Otherwise, it prints an error message and returns
       
   531 non-zero.
       
   532 
       
   533 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   534 
       
   535 \newpage
       
   536 
       
   537 \section{Routines for processing MathProg models}
       
   538 
       
   539 \subsection{Introduction}
       
   540 
       
   541 GLPK supports the {\it GNU MathProg modeling language}.\footnote{The
       
   542 GNU MathProg modeling language is a subset of the AMPL language. For
       
   543 its detailed description see the document ``Modeling Language GNU
       
   544 MathProg: Language Reference'' included in the GLPK distribution.}
       
   545 As a rule, models written in MathProg are solved with the GLPK LP/MIP
       
   546 stand-alone solver \verb|glpsol| (see Appendix D) and do not need any
       
   547 programming with API routines. However, for various reasons the user
       
   548 may need to process MathProg models directly in his/her application
       
   549 program, in which case he/she may use API routines described in this
       
   550 section. These routines provide an interface to the {\it MathProg
       
   551 translator}, a component of GLPK, which translates MathProg models into
       
   552 an internal code and then interprets (executes) this code.
       
   553 
       
   554 The processing of a model written in GNU MathProg includes several
       
   555 steps, which should be performed in the following order:
       
   556 
       
   557 \begin{enumerate}
       
   558 \item{\it Allocating the workspace.}
       
   559 The translator allocates the workspace, an internal data structure used
       
   560 on all subsequent steps.
       
   561 \item{\it Reading model section.} The translator reads model section
       
   562 and, optionally, data section from a specified text file and translates
       
   563 them into the internal code. If necessary, on this step data section
       
   564 may be ignored.
       
   565 \item{\it Reading data section(s).} The translator reads one or more
       
   566 data sections from specified text file(s) and translates them into the
       
   567 internal code.
       
   568 \item{\it Generating the model.} The translator executes the internal
       
   569 code to evaluate the content of the model objects such as sets,
       
   570 parameters, variables, constraints, and objectives. On this step the
       
   571 execution is suspended at the solve statement.
       
   572 \item {\it Building the problem object.} The translator obtains all
       
   573 necessary information from the workspace and builds the standard
       
   574 problem object (that is, the program object of type \verb|glp_prob|).
       
   575 \item{\it Solving the problem.} On this step the problem object built
       
   576 on the previous step is passed to a solver, which solves the problem
       
   577 instance and stores its solution back to the problem object.
       
   578 \item{\it Postsolving the model.} The translator copies the solution
       
   579 from the problem object to the workspace and then executes the internal
       
   580 code from the solve statement to the end of the model. (If model has
       
   581 no solve statement, the translator does nothing on this step.)
       
   582 \item{\it Freeing the workspace.} The translator frees all the memory
       
   583 allocated to the workspace.
       
   584 \end{enumerate}
       
   585 
       
   586 Note that the MathProg translator performs no error correction, so if
       
   587 any of steps 2 to 7 fails (due to errors in the model), the application
       
   588 program should terminate processing and go to step 8.
       
   589 
       
   590 \subsubsection*{Example 1}
       
   591 
       
   592 In this example the program reads model and data sections from input
       
   593 file \verb|egypt.mod|\footnote{This is an example model included in
       
   594 the GLPK distribution.} and writes the model to output file
       
   595 \verb|egypt.mps| in free MPS format (see Appendix B). No solution is
       
   596 performed.
       
   597 
       
   598 \begin{small}
       
   599 \begin{verbatim}
       
   600 /* mplsamp1.c */
       
   601 
       
   602 #include <stdio.h>
       
   603 #include <stdlib.h>
       
   604 #include <glpk.h>
       
   605 
       
   606 int main(void)
       
   607 {     glp_prob *lp;
       
   608       glp_tran *tran;
       
   609       int ret;
       
   610       lp = glp_create_prob();
       
   611       tran = glp_mpl_alloc_wksp();
       
   612       ret = glp_mpl_read_model(tran, "egypt.mod", 0);
       
   613       if (ret != 0)
       
   614       {  fprintf(stderr, "Error on translating model\n");
       
   615          goto skip;
       
   616       }
       
   617       ret = glp_mpl_generate(tran, NULL);
       
   618       if (ret != 0)
       
   619       {  fprintf(stderr, "Error on generating model\n");
       
   620          goto skip;
       
   621       }
       
   622       glp_mpl_build_prob(tran, lp);
       
   623       ret = glp_write_mps(lp, GLP_MPS_FILE, NULL, "egypt.mps");
       
   624       if (ret != 0)
       
   625          fprintf(stderr, "Error on writing MPS file\n");
       
   626 skip: glp_mpl_free_wksp(tran);
       
   627       glp_delete_prob(lp);
       
   628       return 0;
       
   629 }
       
   630 
       
   631 /* eof */
       
   632 \end{verbatim}
       
   633 \end{small}
       
   634 
       
   635 \subsubsection*{Example 2}
       
   636 
       
   637 In this example the program reads model section from file
       
   638 \verb|sudoku.mod|\footnote{This is an example model which is included
       
   639 in the GLPK distribution along with alternative data file
       
   640 {\tt sudoku.dat}.} ignoring data section in this file, reads alternative
       
   641 data section from file \verb|sudoku.dat|, solves the problem instance
       
   642 and passes the solution found back to the model.
       
   643 
       
   644 \begin{small}
       
   645 \begin{verbatim}
       
   646 /* mplsamp2.c */
       
   647 
       
   648 #include <stdio.h>
       
   649 #include <stdlib.h>
       
   650 #include <glpk.h>
       
   651 
       
   652 int main(void)
       
   653 {     glp_prob *mip;
       
   654       glp_tran *tran;
       
   655       int ret;
       
   656       mip = glp_create_prob();
       
   657       tran = glp_mpl_alloc_wksp();
       
   658       ret = glp_mpl_read_model(tran, "sudoku.mod", 1);
       
   659       if (ret != 0)
       
   660       {  fprintf(stderr, "Error on translating model\n");
       
   661          goto skip;
       
   662       }
       
   663       ret = glp_mpl_read_data(tran, "sudoku.dat");
       
   664       if (ret != 0)
       
   665       {  fprintf(stderr, "Error on translating data\n");
       
   666          goto skip;
       
   667       }
       
   668       ret = glp_mpl_generate(tran, NULL);
       
   669       if (ret != 0)
       
   670       {  fprintf(stderr, "Error on generating model\n");
       
   671          goto skip;
       
   672       }
       
   673       glp_mpl_build_prob(tran, mip);
       
   674       glp_simplex(mip, NULL);
       
   675       glp_intopt(mip, NULL);
       
   676       ret = glp_mpl_postsolve(tran, mip, GLP_MIP);
       
   677       if (ret != 0)
       
   678          fprintf(stderr, "Error on postsolving model\n");
       
   679 skip: glp_mpl_free_wksp(tran);
       
   680       glp_delete_prob(mip);
       
   681       return 0;
       
   682 }
       
   683 
       
   684 /* eof */
       
   685 \end{verbatim}
       
   686 \end{small}
       
   687 
       
   688 \subsection{glp\_mpl\_alloc\_wksp---allocate the translator workspace}
       
   689 
       
   690 \subsubsection*{Synopsis}
       
   691 
       
   692 \begin{verbatim}
       
   693 glp_tran *glp_mpl_alloc_wksp(void);
       
   694 \end{verbatim}
       
   695 
       
   696 \subsubsection*{Description}
       
   697 
       
   698 The routine \verb|glp_mpl_alloc_wksp| allocates the MathProg translator
       
   699 work\-space. (Note that multiple instances of the workspace may be
       
   700 allocated, if necessary.)
       
   701 
       
   702 \subsubsection*{Returns}
       
   703 
       
   704 The routine returns a pointer to the workspace, which should be used in
       
   705 all subsequent operations.
       
   706 
       
   707 \subsection{glp\_mpl\_read\_model---read and translate model section}
       
   708 
       
   709 \subsubsection*{Synopsis}
       
   710 
       
   711 \begin{verbatim}
       
   712 int glp_mpl_read_model(glp_tran *tran, const char *fname,
       
   713       int skip);
       
   714 \end{verbatim}
       
   715 
       
   716 \subsubsection*{Description}
       
   717 
       
   718 The routine \verb|glp_mpl_read_model| reads model section and,
       
   719 optionally, data section, which may follow the model section, from a
       
   720 text file, whose name is the character string \verb|fname|, performs
       
   721 translation of model statements and data blocks, and stores all the
       
   722 information in the workspace.
       
   723 
       
   724 The parameter \verb|skip| is a flag. If the input file contains the
       
   725 data section and this flag is non-zero, the data section is not read as
       
   726 if there were no data section and a warning message is printed. This
       
   727 allows reading data section(s) from other file(s).
       
   728 
       
   729 \subsubsection*{Returns}
       
   730 
       
   731 If the operation is successful, the routine returns zero. Otherwise
       
   732 the routine prints an error message and returns non-zero.
       
   733 
       
   734 \subsection{glp\_mpl\_read\_data---read and translate data section}
       
   735 
       
   736 \subsubsection*{Synopsis}
       
   737 
       
   738 \begin{verbatim}
       
   739 int glp_mpl_read_data(glp_tran *tran, const char *fname);
       
   740 \end{verbatim}
       
   741 
       
   742 \subsubsection*{Description}
       
   743 
       
   744 The routine \verb|glp_mpl_read_data| reads data section from a text
       
   745 file, whose name is the character string \verb|fname|, performs
       
   746 translation of data blocks, and stores the data read in the translator
       
   747 workspace. If necessary, this routine may be called more than once.
       
   748 
       
   749 \subsubsection*{Returns}
       
   750 
       
   751 If the operation is successful, the routine returns zero. Otherwise
       
   752 the routine prints an error message and returns non-zero.
       
   753 
       
   754 \subsection{glp\_mpl\_generate---generate the model}
       
   755 
       
   756 \subsubsection*{Synopsis}
       
   757 
       
   758 \begin{verbatim}
       
   759 int glp_mpl_generate(glp_tran *tran, const char *fname);
       
   760 \end{verbatim}
       
   761 
       
   762 \subsubsection*{Description}
       
   763 
       
   764 The routine \verb|glp_mpl_generate| generates the model using its
       
   765 description stored in the translator workspace. This operation means
       
   766 generating all variables, constraints, and objectives, executing check
       
   767 and display statements, which precede the solve statement (if it is
       
   768 presented).
       
   769 
       
   770 The character string \verb|fname| specifies the name of an output text
       
   771 file, to which output produced by display statements should be written.
       
   772 If \verb|fname| is \verb|NULL|, the output is sent to the terminal.
       
   773 
       
   774 \subsubsection*{Returns}
       
   775 
       
   776 If the operation is successful, the routine returns zero. Otherwise
       
   777 the routine prints an error message and returns non-zero.
       
   778 
       
   779 \subsection{glp\_mpl\_build\_prob---build problem instance from the
       
   780 model}
       
   781 
       
   782 \subsubsection*{Synopsis}
       
   783 
       
   784 \begin{verbatim}
       
   785 void glp_mpl_build_prob(glp_tran *tran, glp_prob *prob);
       
   786 \end{verbatim}
       
   787 
       
   788 \subsubsection*{Description}
       
   789 
       
   790 The routine \verb|glp_mpl_build_prob| obtains all necessary information
       
   791 from the translator workspace and stores it in the specified problem
       
   792 object \verb|prob|. Note that before building the current content of
       
   793 the problem object is erased with the routine \verb|glp_erase_prob|.
       
   794 
       
   795 \subsection{glp\_mpl\_postsolve---postsolve the model}
       
   796 
       
   797 \subsubsection*{Synopsis}
       
   798 
       
   799 \begin{verbatim}
       
   800 int glp_mpl_postsolve(glp_tran *tran, glp_prob *prob,
       
   801       int sol);
       
   802 \end{verbatim}
       
   803 
       
   804 \subsubsection*{Description}
       
   805 
       
   806 The routine \verb|glp_mpl_postsolve| copies the solution from the
       
   807 specified problem object \verb|prob| to the translator workspace and
       
   808 then executes all the remaining model statements, which follow the
       
   809 solve statement.
       
   810 
       
   811 The parameter \verb|sol| specifies which solution should be copied
       
   812 from the problem object to the workspace as follows:
       
   813 
       
   814 \begin{tabular}{@{}ll}
       
   815 \verb|GLP_SOL| & basic solution; \\
       
   816 \verb|GLP_IPT| & interior-point solution; \\
       
   817 \verb|GLP_MIP| & mixed integer solution. \\
       
   818 \end{tabular}
       
   819 
       
   820 \subsubsection*{Returns}
       
   821 
       
   822 If the operation is successful, the routine returns zero. Otherwise
       
   823 the routine prints an error message and returns non-zero.
       
   824 
       
   825 \subsection{glp\_mpl\_free\_wksp---free the translator workspace}
       
   826 
       
   827 \subsubsection*{Synopsis}
       
   828 
       
   829 \begin{verbatim}
       
   830 void glp_mpl_free_wksp(glp_tran *tran);
       
   831 \end{verbatim}
       
   832 
       
   833 \subsubsection*{Description}
       
   834 
       
   835 The routine \verb|glp_mpl_free_wksp| frees all the memory allocated to
       
   836 the translator workspace. It also frees all other resources, which are
       
   837 still used by the translator.
       
   838 
       
   839 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   840 
       
   841 \newpage
       
   842 
       
   843 \section{Problem solution reading/writing routines}
       
   844 
       
   845 \subsection{glp\_print\_sol---write basic solution in printable format}
       
   846 
       
   847 \subsubsection*{Synopsis}
       
   848 
       
   849 \begin{verbatim}
       
   850 int glp_print_sol(glp_prob *lp, const char *fname);
       
   851 \end{verbatim}
       
   852 
       
   853 \subsubsection*{Description}
       
   854 
       
   855 The routine \verb|glp_print_sol writes| the current basic solution of
       
   856 an LP problem, which is specified by the pointer \verb|lp|, to a text
       
   857 file, whose name is the character string \verb|fname|, in printable
       
   858 format.
       
   859 
       
   860 Information reported by the routine \verb|glp_print_sol| is intended
       
   861 mainly for visual analysis.
       
   862 
       
   863 \subsubsection*{Returns}
       
   864 
       
   865 If no errors occurred, the routine returns zero. Otherwise the routine
       
   866 prints an error message and returns non-zero.
       
   867 
       
   868 \subsection{glp\_read\_sol---read basic solution from text file}
       
   869 
       
   870 \subsubsection*{Synopsis}
       
   871 
       
   872 \begin{verbatim}
       
   873 int glp_read_sol(glp_prob *lp, const char *fname);
       
   874 \end{verbatim}
       
   875 
       
   876 \subsubsection*{Description}
       
   877 
       
   878 The routine \verb|glp_read_sol| reads basic solution from a text file
       
   879 whose name is specified by the parameter \verb|fname| into the problem
       
   880 object.
       
   881 
       
   882 For the file format see description of the routine \verb|glp_write_sol|.
       
   883 
       
   884 \subsubsection*{Returns}
       
   885 
       
   886 On success the routine returns zero, otherwise non-zero.
       
   887 
       
   888 \newpage
       
   889 
       
   890 \subsection{glp\_write\_sol---write basic solution to text file}
       
   891 
       
   892 \subsubsection*{Synopsis}
       
   893 
       
   894 \begin{verbatim}
       
   895 int glp_write_sol(glp_prob *lp, const char *fname);
       
   896 \end{verbatim}
       
   897 
       
   898 \subsubsection*{Description}
       
   899 
       
   900 The routine \verb|glp_write_sol| writes the current basic solution to a
       
   901 text file whose name is specified by the parameter \verb|fname|. This
       
   902 file can be read back with the routine \verb|glp_read_sol|.
       
   903 
       
   904 \subsubsection*{Returns}
       
   905 
       
   906 On success the routine returns zero, otherwise non-zero.
       
   907 
       
   908 \subsubsection*{File format}
       
   909 
       
   910 The file created by the routine \verb|glp_write_sol| is a plain text
       
   911 file, which contains the following information:
       
   912 
       
   913 \begin{verbatim}
       
   914    m n
       
   915    p_stat d_stat obj_val
       
   916    r_stat[1] r_prim[1] r_dual[1]
       
   917    . . .
       
   918    r_stat[m] r_prim[m] r_dual[m]
       
   919    c_stat[1] c_prim[1] c_dual[1]
       
   920    . . .
       
   921    c_stat[n] c_prim[n] c_dual[n]
       
   922 \end{verbatim}
       
   923 
       
   924 \noindent
       
   925 where:
       
   926 
       
   927 \noindent
       
   928 $m$ is the number of rows (auxiliary variables);
       
   929 
       
   930 \noindent
       
   931 $n$ is the number of columns (structural variables);
       
   932 
       
   933 \noindent
       
   934 \verb|p_stat| is the primal status of the basic solution
       
   935 (\verb|GLP_UNDEF| = 1, \verb|GLP_FEAS| = 2, \verb|GLP_INFEAS| = 3, or
       
   936 \verb|GLP_NOFEAS| = 4);
       
   937 
       
   938 \noindent
       
   939 \verb|d_stat| is the dual status of the basic solution
       
   940 (\verb|GLP_UNDEF| = 1, \verb|GLP_FEAS| = 2, \verb|GLP_INFEAS| = 3, or
       
   941 \verb|GLP_NOFEAS| = 4);
       
   942 
       
   943 \noindent
       
   944 \verb|obj_val| is the objective value;
       
   945 
       
   946 \noindent
       
   947 \verb|r_stat[i]|, $i=1,\dots,m$, is the status of $i$-th row
       
   948 (\verb|GLP_BS| = 1, \verb|GLP_NL| = 2, \verb|GLP_NU| = 3,
       
   949 \verb|GLP_NF| = 4, or \verb|GLP_NS| = 5);
       
   950 
       
   951 \noindent
       
   952 \verb|r_prim[i]|, $i=1,\dots,m$, is the primal value of $i$-th row;
       
   953 
       
   954 \noindent
       
   955 \verb|r_dual[i]|, $i=1,\dots,m$, is the dual value of $i$-th row;
       
   956 
       
   957 \noindent
       
   958 \verb|c_stat[j]|, $j=1,\dots,n$, is the status of $j$-th column
       
   959 (\verb|GLP_BS| = 1, \verb|GLP_NL| = 2, \verb|GLP_NU| = 3,
       
   960 \verb|GLP_NF| = 4, or \verb|GLP_NS| = 5);
       
   961 
       
   962 \noindent
       
   963 \verb|c_prim[j]|, $j=1,\dots,n$, is the primal value of $j$-th column;
       
   964 
       
   965 \noindent
       
   966 \verb|c_dual[j]|, $j=1,\dots,n$, is the dual value of $j$-th column.
       
   967 
       
   968 \subsection{glp\_print\_ipt---write interior-point solution in
       
   969 printable format}
       
   970 
       
   971 \subsubsection*{Synopsis}
       
   972 
       
   973 \begin{verbatim}
       
   974 int glp_print_ipt(glp_prob *lp, const char *fname);
       
   975 \end{verbatim}
       
   976 
       
   977 \subsubsection*{Description}
       
   978 
       
   979 The routine \verb|glp_print_ipt| writes the current interior point
       
   980 solution  of an LP problem, which the parameter \verb|lp| points to, to
       
   981 a text file, whose name is the character string \verb|fname|, in
       
   982 printable format.
       
   983 
       
   984 Information reported by the routine \verb|glp_print_ipt| is intended
       
   985 mainly for visual analysis.
       
   986 
       
   987 \subsubsection*{Returns}
       
   988 
       
   989 If no errors occurred, the routine returns zero. Otherwise the routine
       
   990 prints an error message and returns non-zero.
       
   991 
       
   992 \subsection{glp\_read\_ipt---read interior-point solution from text
       
   993 file}
       
   994 
       
   995 \subsubsection*{Synopsis}
       
   996 
       
   997 \begin{verbatim}
       
   998 int glp_read_ipt(glp_prob *lp, const char *fname);
       
   999 \end{verbatim}
       
  1000 
       
  1001 \subsubsection*{Description}
       
  1002 
       
  1003 The routine \verb|glp_read_ipt| reads interior-point solution from a
       
  1004 text file whose name is specified by the parameter \verb|fname| into the
       
  1005 problem object.
       
  1006 
       
  1007 For the file format see description of the routine \verb|glp_write_ipt|.
       
  1008 
       
  1009 \subsubsection*{Returns}
       
  1010 
       
  1011 On success the routine returns zero, otherwise non-zero.
       
  1012 
       
  1013 \subsection{glp\_write\_ipt---write interior-point solution to text
       
  1014 file}
       
  1015 
       
  1016 \subsubsection*{Synopsis}
       
  1017 
       
  1018 \begin{verbatim}
       
  1019 int glp_write_ipt(glp_prob *lp, const char *fname);
       
  1020 \end{verbatim}
       
  1021 
       
  1022 \subsubsection*{Description}
       
  1023 
       
  1024 The routine \verb|glp_write_ipt| writes the current interior-point
       
  1025 solution to a text file whose name is specified by the parameter
       
  1026 \verb|fname|. This file can be read back with the routine
       
  1027 \verb|glp_read_ipt|.
       
  1028 
       
  1029 \subsubsection*{Returns}
       
  1030 
       
  1031 On success the routine returns zero, otherwise non-zero.
       
  1032 
       
  1033 \subsubsection*{File format}
       
  1034 
       
  1035 The file created by the routine \verb|glp_write_ipt| is a plain text
       
  1036 file, which contains the following information:
       
  1037 
       
  1038 \begin{verbatim}
       
  1039    m n
       
  1040    stat obj_val
       
  1041    r_prim[1] r_dual[1]
       
  1042    . . .
       
  1043    r_prim[m] r_dual[m]
       
  1044    c_prim[1] c_dual[1]
       
  1045    . . .
       
  1046    c_prim[n] c_dual[n]
       
  1047 \end{verbatim}
       
  1048 
       
  1049 \noindent
       
  1050 where:
       
  1051 
       
  1052 \noindent
       
  1053 $m$ is the number of rows (auxiliary variables);
       
  1054 
       
  1055 \noindent
       
  1056 $n$ is the number of columns (structural variables);
       
  1057 
       
  1058 \noindent
       
  1059 \verb|stat| is the solution status (\verb|GLP_UNDEF| = 1 or
       
  1060 \verb|GLP_OPT| = 5);
       
  1061 
       
  1062 \noindent
       
  1063 \verb|obj_val| is the objective value;
       
  1064 
       
  1065 \noindent
       
  1066 \verb|r_prim[i]|, $i=1,\dots,m$, is the primal value of $i$-th row;
       
  1067 
       
  1068 \noindent
       
  1069 \verb|r_dual[i]|, $i=1,\dots,m$, is the dual value of $i$-th row;
       
  1070 
       
  1071 \noindent
       
  1072 \verb|c_prim[j]|, $j=1,\dots,n$, is the primal value of $j$-th column;
       
  1073 
       
  1074 \noindent
       
  1075 \verb|c_dual[j]|, $j=1,\dots,n$, is the dual value of $j$-th column.
       
  1076 
       
  1077 \subsection{glp\_print\_mip---write MIP solution in printable format}
       
  1078 
       
  1079 \subsubsection*{Synopsis}
       
  1080 
       
  1081 \begin{verbatim}
       
  1082 int glp_print_mip(glp_prob *lp, const char *fname);
       
  1083 \end{verbatim}
       
  1084 
       
  1085 \subsubsection*{Description}
       
  1086 
       
  1087 The routine \verb|glp_print_mip| writes a best known integer solution
       
  1088 of a MIP problem, which is specified by the pointer \verb|lp|, to a text
       
  1089 file, whose name is the character string \verb|fname|, in printable
       
  1090 format.
       
  1091 
       
  1092 Information reported by the routine \verb|glp_print_mip| is intended
       
  1093 mainly for visual analysis.
       
  1094 
       
  1095 \subsubsection*{Returns}
       
  1096 
       
  1097 If no errors occurred, the routine returns zero. Otherwise the routine
       
  1098 prints an error message and returns non-zero.
       
  1099 
       
  1100 \newpage
       
  1101 
       
  1102 \subsection{glp\_read\_mip---read MIP solution from text file}
       
  1103 
       
  1104 \subsubsection*{Synopsis}
       
  1105 
       
  1106 \begin{verbatim}
       
  1107 int glp_read_mip(glp_prob *mip, const char *fname);
       
  1108 \end{verbatim}
       
  1109 
       
  1110 \subsubsection*{Description}
       
  1111 
       
  1112 The routine \verb|glp_read_mip| reads MIP solution from a text file
       
  1113 whose name is specified by the parameter \verb|fname| into the problem
       
  1114 object.
       
  1115 
       
  1116 For the file format see description of the routine \verb|glp_write_mip|.
       
  1117 
       
  1118 \subsubsection*{Returns}
       
  1119 
       
  1120 On success the routine returns zero, otherwise non-zero.
       
  1121 
       
  1122 \subsection{glp\_write\_mip---write MIP solution to text file}
       
  1123 
       
  1124 \subsubsection*{Synopsis}
       
  1125 
       
  1126 \begin{verbatim}
       
  1127 int glp_write_mip(glp_prob *mip, const char *fname);
       
  1128 \end{verbatim}
       
  1129 
       
  1130 \subsubsection*{Description}
       
  1131 
       
  1132 The routine \verb|glp_write_mip| writes the current MIP solution to a
       
  1133 text file whose name is specified by the parameter \verb|fname|. This
       
  1134 file can be read back with the routine \verb|glp_read_mip|.
       
  1135 
       
  1136 \subsubsection*{Returns}
       
  1137 
       
  1138 On success the routine returns zero, otherwise non-zero.
       
  1139 
       
  1140 \subsubsection*{File format}
       
  1141 
       
  1142 The file created by the routine \verb|glp_write_sol| is a plain text
       
  1143 file, which contains the following information:
       
  1144 
       
  1145 \begin{verbatim}
       
  1146    m n
       
  1147    stat obj_val
       
  1148    r_val[1]
       
  1149    . . .
       
  1150    r_val[m]
       
  1151    c_val[1]
       
  1152    . . .
       
  1153    c_val[n]
       
  1154 \end{verbatim}
       
  1155 
       
  1156 \noindent
       
  1157 where:
       
  1158 
       
  1159 \noindent
       
  1160 $m$ is the number of rows (auxiliary variables);
       
  1161 
       
  1162 \noindent
       
  1163 $n$ is the number of columns (structural variables);
       
  1164 
       
  1165 \noindent
       
  1166 \verb|stat| is the solution status (\verb|GLP_UNDEF| = 1,
       
  1167 \verb|GLP_FEAS| = 2, \verb|GLP_NOFEAS| = 4, or \verb|GLP_OPT| = 5);
       
  1168 
       
  1169 \noindent
       
  1170 \verb|obj_val| is the objective value;
       
  1171 
       
  1172 \noindent
       
  1173 \verb|r_val[i]|, $i=1,\dots,m$, is the value of $i$-th row;
       
  1174 
       
  1175 \noindent
       
  1176 \verb|c_val[j]|, $j=1,\dots,n$, is the value of $j$-th column.
       
  1177 
       
  1178 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
  1179 
       
  1180 \newpage
       
  1181 
       
  1182 \section{Post-optimal analysis routines}
       
  1183 
       
  1184 \subsection{glp\_print\_ranges---print sensitivity analysis report}
       
  1185 
       
  1186 \subsubsection*{Synopsis}
       
  1187 
       
  1188 \begin{verbatim}
       
  1189 int glp_print_ranges(glp_prob *P, int len, const int list[],
       
  1190       int flags, const char *fname);
       
  1191 \end{verbatim}
       
  1192 
       
  1193 \subsubsection*{Description}
       
  1194 
       
  1195 The routine \verb|glp_print_ranges| performs sensitivity analysis of
       
  1196 current optimal basic solution and writes the analysis report in
       
  1197 human-readable format to a text file, whose name is the character
       
  1198 string {\it fname}. (Detailed description of the report structure is
       
  1199 given below.)
       
  1200 
       
  1201 The parameter {\it len} specifies the length of the row/column list.
       
  1202 
       
  1203 The array {\it list} specifies ordinal number of rows and columns to be
       
  1204 analyzed. The ordinal numbers should be passed in locations
       
  1205 {\it list}[1], {\it list}[2], \dots, {\it list}[{\it len}]. Ordinal
       
  1206 numbers from 1 to $m$ refer to rows, and ordinal numbers from $m+1$ to
       
  1207 $m+n$ refer to columns, where $m$ and $n$ are, resp., the total number
       
  1208 of rows and columns in the problem object. Rows and columns appear in
       
  1209 the analysis report in the same order as they follow in the array list.
       
  1210 
       
  1211 It is allowed to specify $len=0$, in which case the array {\it list} is
       
  1212 not used (so it can be specified as \verb|NULL|), and the routine
       
  1213 performs analysis for all rows and columns of the problem object.
       
  1214 
       
  1215 The parameter {\it flags} is reserved for use in the future and must be
       
  1216 specified as zero.
       
  1217 
       
  1218 On entry to the routine \verb|glp_print_ranges| the current basic
       
  1219 solution must be optimal and the basis factorization must exist.
       
  1220 The application program can check that with the routine
       
  1221 \verb|glp_bf_exists|, and if the factorization does
       
  1222 not exist, compute it with the routine \verb|glp_factorize|. Note that
       
  1223 if the LP preprocessor is not used, on normal exit from the simplex
       
  1224 solver routine \verb|glp_simplex| the basis factorization always exists.
       
  1225 
       
  1226 \subsubsection*{Returns}
       
  1227 
       
  1228 If the operation was successful, the routine \verb|glp_print_ranges|
       
  1229 returns zero. Otherwise, it prints an error message and returns
       
  1230 non-zero.
       
  1231 
       
  1232 \subsubsection*{Analysis report example}
       
  1233 
       
  1234 An example of the sensitivity analysis report is shown on the next two
       
  1235 pages. This example corresponds to the example of LP problem described
       
  1236 in Subsection ``Example of MPS file''.
       
  1237 
       
  1238 \subsubsection*{Structure of the analysis report}
       
  1239 
       
  1240 For each row and column specified in the array {\it list} the routine
       
  1241 prints two lines containing generic information and analysis
       
  1242 information, which depends on the status of corresponding row or column.
       
  1243 
       
  1244 Note that analysis of a row is analysis of its auxiliary variable,
       
  1245 which is equal to the row linear form $\sum a_jx_j$, and analysis of
       
  1246 a column is analysis of corresponding structural variable. Therefore,
       
  1247 formally, on performing the sensitivity analysis there is no difference
       
  1248 between rows and columns.
       
  1249 
       
  1250 \bigskip
       
  1251 
       
  1252 \noindent
       
  1253 {\it Generic information}
       
  1254 
       
  1255 \medskip
       
  1256 
       
  1257 \noindent
       
  1258 {\tt No.} is the row or column ordinal number in the problem object.
       
  1259 Rows are numbered from 1 to $m$, and columns are numbered from 1 to $n$,
       
  1260 where $m$ and $n$ are, resp., the total number of rows and columns in
       
  1261 the problem object.
       
  1262 
       
  1263 \medskip
       
  1264 
       
  1265 \noindent
       
  1266 {\tt Row name} is the symbolic name assigned to the row. If the row has
       
  1267 no name assigned, this field contains blanks.
       
  1268 
       
  1269 \medskip
       
  1270 
       
  1271 \noindent
       
  1272 {\tt Column name} is the symbolic name assigned to the column. If the
       
  1273 column has no name assigned, this field contains blanks.
       
  1274 
       
  1275 \medskip
       
  1276 
       
  1277 \noindent
       
  1278 {\tt St} is the status of the row or column in the optimal solution:
       
  1279 
       
  1280 {\tt BS} --- non-active constraint (row), basic column;
       
  1281 
       
  1282 {\tt NL} --- inequality constraint having its lower right-hand side
       
  1283 active (row), non-basic column having its lower bound active;
       
  1284 
       
  1285 {\tt NU} --- inequality constraint having its upper right-hand side
       
  1286 active (row), non-basic column having its upper bound active;
       
  1287 
       
  1288 {\tt NS} --- active equality constraint (row), non-basic fixed column.
       
  1289 
       
  1290 {\tt NF} --- active free row, non-basic free (unbounded) column. (This
       
  1291 case means that the optimal solution is dual degenerate.)
       
  1292 
       
  1293 \medskip
       
  1294 
       
  1295 \noindent
       
  1296 {\tt Activity} is the (primal) value of the auxiliary variable (row) or
       
  1297 structural variable (column) in the optimal solution.
       
  1298 
       
  1299 \medskip
       
  1300 
       
  1301 \noindent
       
  1302 {\tt Slack} is the (primal) value of the row slack variable.
       
  1303 
       
  1304 \medskip
       
  1305 
       
  1306 \noindent
       
  1307 {\tt Obj coef} is the objective coefficient of the column (structural
       
  1308 variable).
       
  1309 
       
  1310 \begin{landscape}
       
  1311 \begin{scriptsize}
       
  1312 \begin{verbatim}
       
  1313 GLPK 4.42 - SENSITIVITY ANALYSIS REPORT                                                                         Page   1
       
  1314 
       
  1315 Problem:    PLAN
       
  1316 Objective:  VALUE = 296.2166065 (MINimum)
       
  1317 
       
  1318    No. Row name     St      Activity         Slack   Lower bound       Activity      Obj coef  Obj value at Limiting
       
  1319                                           Marginal   Upper bound          range         range   break point variable
       
  1320 ------ ------------ -- ------------- ------------- -------------  ------------- ------------- ------------- ------------
       
  1321      1 VALUE        BS     296.21661    -296.21661          -Inf      299.25255      -1.00000        .      MN
       
  1322                                             .               +Inf      296.21661          +Inf          +Inf
       
  1323 
       
  1324      2 YIELD        NS    2000.00000        .         2000.00000     1995.06864          -Inf     296.28365 BIN3
       
  1325                                            -.01360    2000.00000     2014.03479          +Inf     296.02579 CU
       
  1326 
       
  1327      3 FE           NU      60.00000        .               -Inf       55.89016          -Inf     306.77162 BIN4
       
  1328                                           -2.56823      60.00000       62.69978       2.56823     289.28294 BIN3
       
  1329 
       
  1330      4 CU           BS      83.96751      16.03249          -Inf       93.88467       -.30613     270.51157 MN
       
  1331                                             .          100.00000       79.98213        .21474     314.24798 BIN5
       
  1332 
       
  1333      5 MN           NU      40.00000        .               -Inf       34.42336          -Inf     299.25255 BIN4
       
  1334                                            -.54440      40.00000       41.68691        .54440     295.29825 BIN3
       
  1335 
       
  1336      6 MG           BS      19.96029      10.03971          -Inf       24.74427      -1.79618     260.36433 BIN1
       
  1337                                             .           30.00000        9.40292        .28757     301.95652 MN
       
  1338 
       
  1339      7 AL           NL    1500.00000        .         1500.00000     1485.78425       -.25199     292.63444 CU
       
  1340                                             .25199          +Inf     1504.92126          +Inf     297.45669 BIN3
       
  1341 
       
  1342      8 SI           NL     250.00000      50.00000     250.00000      235.32871       -.48520     289.09812 CU
       
  1343                                             .48520     300.00000      255.06073          +Inf     298.67206 BIN3
       
  1344 \end{verbatim}
       
  1345 \end{scriptsize}
       
  1346 \end{landscape}
       
  1347 
       
  1348 \begin{landscape}
       
  1349 \begin{scriptsize}
       
  1350 \begin{verbatim}
       
  1351 GLPK 4.42 - SENSITIVITY ANALYSIS REPORT                                                                         Page   2
       
  1352 
       
  1353 Problem:    PLAN
       
  1354 Objective:  VALUE = 296.2166065 (MINimum)
       
  1355 
       
  1356    No. Column name  St      Activity      Obj coef   Lower bound       Activity      Obj coef  Obj value at Limiting
       
  1357                                           Marginal   Upper bound          range         range   break point variable
       
  1358 ------ ------------ -- ------------- ------------- -------------  ------------- ------------- ------------- ------------
       
  1359      1 BIN1         NL        .             .03000        .           -28.82475       -.22362     288.90594 BIN4
       
  1360                                             .25362     200.00000       33.88040          +Inf     304.80951 BIN4
       
  1361 
       
  1362      2 BIN2         BS     665.34296        .08000        .           802.22222        .01722     254.44822 BIN1
       
  1363                                             .         2500.00000      313.43066        .08863     301.95652 MN
       
  1364 
       
  1365      3 BIN3         BS     490.25271        .17000     400.00000      788.61314        .15982     291.22807 MN
       
  1366                                             .          800.00000     -347.42857        .17948     300.86548 BIN5
       
  1367 
       
  1368      4 BIN4         BS     424.18773        .12000     100.00000      710.52632        .10899     291.54745 MN
       
  1369                                             .          700.00000     -256.15524        .14651     307.46010 BIN1
       
  1370 
       
  1371      5 BIN5         NL        .             .15000        .          -201.78739        .13544     293.27940 BIN3
       
  1372                                             .01456    1500.00000       58.79586          +Inf     297.07244 BIN3
       
  1373 
       
  1374      6 ALUM         BS     299.63899        .21000        .           358.26772        .18885     289.87879 AL
       
  1375                                             .               +Inf      112.40876        .22622     301.07527 MN
       
  1376 
       
  1377      7 SILICON      BS     120.57762        .38000        .           124.27093        .14828     268.27586 BIN5
       
  1378                                             .               +Inf       85.54745        .46667     306.66667 MN
       
  1379 
       
  1380 End of report
       
  1381 \end{verbatim}
       
  1382 \end{scriptsize}
       
  1383 \end{landscape}
       
  1384 
       
  1385 \noindent
       
  1386 {\tt Marginal} is the reduced cost (dual activity) of the auxiliary
       
  1387 variable (row) or structural variable (column).
       
  1388 
       
  1389 \medskip
       
  1390 
       
  1391 \noindent
       
  1392 {\tt Lower bound} is the lower right-hand side (row) or lower bound
       
  1393 (column). If the row or column has no lower bound, this field contains
       
  1394 {\tt -Inf}.
       
  1395 
       
  1396 \medskip
       
  1397 
       
  1398 \noindent
       
  1399 {\tt Upper bound} is the upper right-hand side (row) or upper bound
       
  1400 (column). If the row or column has no upper bound, this field contains
       
  1401 {\tt +Inf}.
       
  1402 
       
  1403 \bigskip
       
  1404 
       
  1405 \noindent
       
  1406 {\it Sensitivity analysis of active bounds}
       
  1407 
       
  1408 \medskip
       
  1409 
       
  1410 \noindent
       
  1411 The sensitivity analysis of active bounds is performed only for rows,
       
  1412 which are active constraints, and only for non-basic columns, because
       
  1413 inactive constraints and basic columns have no active bounds.
       
  1414 
       
  1415 For every auxiliary (row) or structural (column) non-basic variable the
       
  1416 routine starts changing its active bound in both direction. The first
       
  1417 of the two lines in the report corresponds to decreasing, and the
       
  1418 second line corresponds to increasing of the active bound. Since the
       
  1419 variable being analyzed is non-basic, its activity, which is equal to
       
  1420 its active bound, also starts changing. This changing leads to changing
       
  1421 of basic (auxiliary and structural) variables, which depend on the
       
  1422 non-basic variable. The current basis remains primal feasible and
       
  1423 therefore optimal while values of all basic variables are primal
       
  1424 feasible, i.e. are within their bounds. Therefore, if some basic
       
  1425 variable called the {\it limiting variable} reaches its (lower or
       
  1426 upper) bound first, before any other basic variables, it thereby limits
       
  1427 further changing of the non-basic variable, because otherwise the
       
  1428 current basis would become primal infeasible. The point, at which this
       
  1429 happens, is called the {\it break point}. Note that there are two break
       
  1430 points: the lower break point, which corresponds to decreasing of the
       
  1431 non-basic variable, and the upper break point, which corresponds to
       
  1432 increasing of the non-basic variable.
       
  1433 
       
  1434 In the analysis report values of the non-basic variable (i.e. of its
       
  1435 active bound) being analyzed at both lower and upper break points are
       
  1436 printed in the field `{\tt Activity range}'. Corresponding values of
       
  1437 the objective function are printed in the field `{\tt Obj value at
       
  1438 break point}', and symbolic names of corresponding limiting basic
       
  1439 variables are printed in the field `{\tt Limiting variable}'.
       
  1440 If the active bound can decrease or/and increase unlimitedly, the field
       
  1441 `{\tt Activity range}' contains {\tt -Inf} or/and {\tt +Inf}, resp.
       
  1442 
       
  1443 For example (see the example report above), row SI is a double-sided
       
  1444 constraint, which is active on its lower bound (right-hand side), and
       
  1445 its activity in the optimal solution being equal to the lower bound is
       
  1446 250. The activity range for this row is $[235.32871,255.06073]$. This
       
  1447 means that the basis remains optimal while the lower bound is
       
  1448 increasing up to 255.06073, and further increasing is limited by
       
  1449 (structural) variable BIN3. If the lower bound reaches this upper break
       
  1450 point, the objective value becomes equal to 298.67206.
       
  1451 
       
  1452 Note that if the basis does not change, the objective function depends
       
  1453 on the non-basic variable linearly, and the per-unit change of the
       
  1454 objective function is the reduced cost (marginal value) of the
       
  1455 non-basic variable.
       
  1456 
       
  1457 \bigskip
       
  1458 
       
  1459 \noindent
       
  1460 {\it Sensitivity analysis of objective coefficients at non-basic
       
  1461 variables}
       
  1462 
       
  1463 \medskip
       
  1464 
       
  1465 \noindent
       
  1466 The sensitivity analysis of the objective coefficient at a non-basic
       
  1467 variable is quite simple, because in this case change in the objective
       
  1468 coefficient leads to equivalent change in the reduced cost (marginal
       
  1469 value).
       
  1470 
       
  1471 For every auxiliary (row) or structural (column) non-basic variable the
       
  1472 routine starts changing its objective coefficient in both direction.
       
  1473 (Note that auxiliary variables are not included in the objective
       
  1474 function and therefore always have zero objective coefficients.) The
       
  1475 first of the two lines in the report corresponds to decreasing, and the
       
  1476 second line corresponds to increasing of the objective coefficient.
       
  1477 This changing leads to changing of the reduced cost of the non-basic
       
  1478 variable to be analyzed and does affect reduced costs of all other
       
  1479 non-basic variables. The current basis remains dual feasible and
       
  1480 therefore optimal while the reduced cost keeps its sign. Therefore, if
       
  1481 the reduced cost reaches zero, it limits further changing of the
       
  1482 objective coefficient (if only the non-basic variable is non-fixed).
       
  1483 
       
  1484 In the analysis report minimal and maximal values of the objective
       
  1485 coefficient, on which the basis remains optimal, are printed in the
       
  1486 field `\verb|Obj coef range|'. If the objective coefficient can
       
  1487 decrease or/and increase unlimitedly, this field contains {\tt -Inf}
       
  1488 or/and {\tt +Inf}, resp.
       
  1489 
       
  1490 For example (see the example report above), column BIN5 is non-basic
       
  1491 having its lower bound active. Its objective coefficient is 0.15, and
       
  1492 reduced cost in the optimal solution 0.01456. The column lower bound
       
  1493 remains active while the column reduced cost remains non-negative,
       
  1494 thus, minimal value of the objective coefficient, on which the current
       
  1495 basis still remains optimal, is $0.15-0.01456=0.13644$, that is
       
  1496 indicated in the field `\verb|Obj coef range|'.
       
  1497 
       
  1498 \bigskip
       
  1499 
       
  1500 \noindent
       
  1501 {\it Sensitivity analysis of objective coefficients at basic variables}
       
  1502 
       
  1503 \medskip
       
  1504 
       
  1505 \noindent
       
  1506 To perform sensitivity analysis for every auxiliary (row) or structural
       
  1507 (column) variable the routine starts changing its objective coefficient
       
  1508 in both direction. (Note that auxiliary variables are not included in
       
  1509 the objective function and therefore always have zero objective
       
  1510 coefficients.) The first of the two lines in the report corresponds to
       
  1511 decreasing, and the second line corresponds to increasing of the
       
  1512 objective coefficient. This changing leads to changing of reduced costs
       
  1513 of non-basic variables. The current basis remains dual feasible and
       
  1514 therefore optimal while reduced costs of all non-basic variables
       
  1515 (except fixed variables) keep their signs. Therefore, if the reduced
       
  1516 cost of some non-basic non-fixed variable called the {\it limiting
       
  1517 variable} reaches zero first, before reduced cost of any other
       
  1518 non-basic non-fixed variable, it thereby limits further changing of the
       
  1519 objective coefficient, because otherwise the current basis would become
       
  1520 dual infeasible (non-optimal). The point, at which this happens, is
       
  1521 called the {\it break point}. Note that there are two break points: the
       
  1522 lower break point, which corresponds to decreasing of the objective
       
  1523 coefficient, and the upper break point, which corresponds to increasing
       
  1524 of the objective coefficient. Let the objective coefficient reach its
       
  1525 limit value and continue changing a bit further in the same direction
       
  1526 that makes the current basis dual infeasible (non-optimal). Then the
       
  1527 reduced cost of the non-basic limiting variable becomes ``a bit'' dual
       
  1528 infeasible that forces the limiting variable to enter the basis
       
  1529 replacing there some basic variable, which leaves the basis to keep its
       
  1530 primal feasibility. It should be understood that if we change the
       
  1531 current basis in this way exactly at the break point, both the current
       
  1532 and adjacent bases will be optimal with the same objective value,
       
  1533 because at the break point the limiting variable has zero reduced cost.
       
  1534 On the other hand, in the adjacent basis the value of the limiting
       
  1535 variable changes, because there it becomes basic, that leads to
       
  1536 changing of the value of the basic variable being analyzed. Note that
       
  1537 on determining the adjacent basis the bounds of the analyzed basic
       
  1538 variable are ignored as if it were a free (unbounded) variable, so it
       
  1539 cannot leave the current basis.
       
  1540 
       
  1541 In the analysis report lower and upper limits of the objective
       
  1542 coefficient at the basic variable being analyzed, when the basis
       
  1543 remains optimal, are printed in the field `{\tt Obj coef range}'.
       
  1544 Corresponding values of the objective function at both lower and upper
       
  1545 break points are printed in the field `{\tt Obj value at break point}',
       
  1546 symbolic names of corresponding non-basic limiting variables are
       
  1547 printed in the field `{\tt Limiting variable}', and values of the basic
       
  1548 variable, which it would take on in the adjacent bases (as was
       
  1549 explained above) are printed in the field `{\tt Activity range}'.
       
  1550 If the objective coefficient can increase or/and decrease unlimitedly,
       
  1551 the field `{\tt Obj coef range}' contains {\tt -Inf} and/or {\tt +Inf},
       
  1552 resp. It also may happen that no dual feasible adjacent basis exists
       
  1553 (i.e. on entering the basis the limiting variable can increase or
       
  1554 decrease unlimitedly), in which case the field `{\tt Activity range}'
       
  1555 contains {\tt -Inf} and/or {\tt +Inf}.
       
  1556 
       
  1557 \newpage
       
  1558 
       
  1559 For example (see the example report above), structural variable
       
  1560 (column) BIN3 is basic, its optimal value is 490.25271, and its
       
  1561 objective coefficient is 0.17. The objective coefficient range for this
       
  1562 column is $[0.15982,0.17948]$. This means that the basis remains
       
  1563 optimal while the objective coefficient is decreasing down to 0.15982,
       
  1564 and further decreasing is limited by (auxiliary) variable MN. If we
       
  1565 make the objective coefficient a bit less than 0.15982, the limiting
       
  1566 variable MN will enter the basis, and in that adjacent basis the
       
  1567 structural variable BIN3 will take on new optimal value 788.61314. At
       
  1568 the lower break point, where the objective coefficient is exactly
       
  1569 0.15982, the objective function takes on the value 291.22807 in both
       
  1570 the current and adjacent bases.
       
  1571 
       
  1572 Note that if the basis does not change, the objective function depends
       
  1573 on the objective coefficient at the basic variable linearly, and the
       
  1574 per-unit change of the objective function is the value of the basic
       
  1575 variable.
       
  1576 
       
  1577 %* eof *%