doc/glpk02.tex
changeset 2 4c8956a7bdf4
equal deleted inserted replaced
-1:000000000000 0:9afd438bb9eb
       
     1 %* glpk02.tex *%
       
     2 
       
     3 \chapter{Basic API Routines}
       
     4 
       
     5 This chapter describes GLPK API routines intended for using in
       
     6 application programs.
       
     7 
       
     8 \subsubsection*{Library header}
       
     9 
       
    10 All GLPK API data types and routines are defined in the header file
       
    11 \verb|glpk.h|. It should be included in all source files which use
       
    12 GLPK API, either directly or indirectly through some other header file
       
    13 as follows:
       
    14 
       
    15 \begin{verbatim}
       
    16    #include <glpk.h>
       
    17 \end{verbatim}
       
    18 
       
    19 \subsubsection*{Error handling}
       
    20 
       
    21 If some GLPK API routine detects erroneous or incorrect data passed by
       
    22 the application program, it writes appropriate diagnostic messages to
       
    23 the terminal and then abnormally terminates the application program.
       
    24 In most practical cases this allows to simplify programming by avoiding
       
    25 numerous checks of return codes. Thus, in order to prevent crashing the
       
    26 application program should check all data, which are suspected to be
       
    27 incorrect, before calling GLPK API routines.
       
    28 
       
    29 Should note that this kind of error handling is used only in cases of
       
    30 incorrect data passed by the application program. If, for example, the
       
    31 application program calls some GLPK API routine to read data from an
       
    32 input file and these data are incorrect, the GLPK API routine reports
       
    33 about error in the usual way by means of the return code.
       
    34 
       
    35 \subsubsection*{Thread safety}
       
    36 
       
    37 Currently GLPK API routines are non-reentrant and therefore cannot be
       
    38 used in multi-threaded programs.
       
    39 
       
    40 \subsubsection*{Array indexing}
       
    41 
       
    42 Normally all GLPK API routines start array indexing from 1, not from 0
       
    43 (except the specially stipulated cases). This means, for example, that
       
    44 if some vector $x$ of the length $n$ is passed as an array to some GLPK
       
    45 API routine, the latter expects vector components to be placed in
       
    46 locations \verb|x[1]|, \verb|x[2]|, \dots, \verb|x[n]|, and the location
       
    47 \verb|x[0]| normally is not used.
       
    48 
       
    49 In order to avoid indexing errors it is most convenient and most
       
    50 reliable to declare the array \verb|x| as follows:
       
    51 
       
    52 \begin{verbatim}
       
    53    double x[1+n];
       
    54 \end{verbatim}
       
    55 
       
    56 \noindent
       
    57 or to allocate it as follows:
       
    58 
       
    59 \begin{verbatim}
       
    60    double *x;
       
    61    . . .
       
    62    x = calloc(1+n, sizeof(double));
       
    63 \end{verbatim}
       
    64 
       
    65 \noindent
       
    66 In both cases one extra location \verb|x[0]| is reserved that allows
       
    67 passing the array to GLPK routines in a usual way.
       
    68 
       
    69 \section{Problem object}
       
    70 
       
    71 All GLPK API routines deal with so called {\it problem object}, which
       
    72 is a program object of type \verb|glp_prob| and intended to represent
       
    73 a particular LP or MIP instance.
       
    74 
       
    75 The type \verb|glp_prob| is a data structure declared in the header
       
    76 file \verb|glpk.h| as follows:
       
    77 
       
    78 \begin{verbatim}
       
    79    typedef struct { ... } glp_prob;
       
    80 \end{verbatim}
       
    81 
       
    82 Problem objects (i.e. program objects of the \verb|glp_prob| type) are
       
    83 allocated and managed internally by the GLPK API routines. The
       
    84 application program should never use any members of the \verb|glp_prob|
       
    85 structure directly and should deal only with pointers to these objects
       
    86 (that is, \verb|glp_prob *| values).
       
    87 
       
    88 \pagebreak
       
    89 
       
    90 The problem object consists of five segments, which are:
       
    91 
       
    92 $\bullet$ problem segment,
       
    93 
       
    94 $\bullet$ basis segment,
       
    95 
       
    96 $\bullet$ interior point segment,
       
    97 
       
    98 $\bullet$ MIP segment, and
       
    99 
       
   100 $\bullet$ control parameters and statistics segment.
       
   101 
       
   102 \subsubsection*{Problem segment}
       
   103 
       
   104 The {\it problem segment} contains original LP/MIP data, which
       
   105 corresponds to the problem formulation (1.1)---(1.3) (see Section
       
   106 \ref{seclp}, page \pageref{seclp}). It includes the following
       
   107 components:
       
   108 
       
   109 $\bullet$ rows (auxiliary variables),
       
   110 
       
   111 $\bullet$ columns (structural variables),
       
   112 
       
   113 $\bullet$ objective function, and
       
   114 
       
   115 $\bullet$ constraint matrix.
       
   116 
       
   117 Rows and columns have the same set of the following attributes:
       
   118 
       
   119 $\bullet$ ordinal number,
       
   120 
       
   121 $\bullet$ symbolic name (1 up to 255 arbitrary graphic characters),
       
   122 
       
   123 $\bullet$ type (free, lower bound, upper bound, double bound, fixed),
       
   124 
       
   125 $\bullet$ numerical values of lower and upper bounds,
       
   126 
       
   127 $\bullet$ scale factor.
       
   128 
       
   129 {\it Ordinal numbers} are intended for referencing rows and columns.
       
   130 Row ordinal numbers are integers $1, 2, \dots, m$, and column ordinal
       
   131 numbers are integers $1, 2, \dots, n$, where $m$ and $n$ are,
       
   132 respectively, the current number of rows and columns in the problem
       
   133 object.
       
   134 
       
   135 {\it Symbolic names} are intended for informational purposes. They also
       
   136 can be used for referencing rows and columns.
       
   137 
       
   138 {\it Types and bounds} of rows (auxiliary variables) and columns
       
   139 (structural variables) are explained above (see Section \ref{seclp},
       
   140 page \pageref{seclp}).
       
   141 
       
   142 {\it Scale factors} are used internally for scaling rows and columns of
       
   143 the constraint matrix.
       
   144 
       
   145 Information about the {\it objective function} includes numerical
       
   146 values of objective coefficients and a flag, which defines the
       
   147 optimization direction (i.e. minimization or maximization).
       
   148 
       
   149 The {\it constraint matrix} is a $m \times n$ rectangular matrix built
       
   150 of constraint coefficients $a_{ij}$, which defines the system of linear
       
   151 constraints (1.2) (see Section \ref{seclp}, page \pageref{seclp}). This
       
   152 matrix is stored in the problem object in both row-wise and column-wise
       
   153 sparse formats.
       
   154 
       
   155 Once the problem object has been created, the application program can
       
   156 access and modify any components of the problem segment in arbitrary
       
   157 order.
       
   158 
       
   159 \subsubsection*{Basis segment}
       
   160 
       
   161 The {\it basis segment} of the problem object keeps information related
       
   162 to the current basic solution. It includes:
       
   163 
       
   164 $\bullet$ row and column statuses,
       
   165 
       
   166 $\bullet$ basic solution statuses,
       
   167 
       
   168 $\bullet$ factorization of the current basis matrix, and
       
   169 
       
   170 $\bullet$ basic solution components.
       
   171 
       
   172 The {\it row and column statuses} define which rows and columns are
       
   173 basic and which are non-basic. These statuses may be assigned either by
       
   174 the application program of by some API routines. Note that these
       
   175 statuses are always defined independently on whether the corresponding
       
   176 basis is valid or not.
       
   177 
       
   178 The {\it basic solution statuses} include the {\it primal status} and
       
   179 the {\it dual status}, which are set by the simplex-based solver once
       
   180 the problem has been solved. The primal status shows whether a primal
       
   181 basic solution is feasible, infeasible, or undefined. The dual status
       
   182 shows the same for a dual basic solution.
       
   183 
       
   184 The {\it factorization of the basis matrix} is some factorized form
       
   185 (like LU-factorization) of the current basis matrix (defined by the
       
   186 current row and column statuses). The factorization is used by the
       
   187 simplex-based solver and kept when the solver terminates the search.
       
   188 This feature allows efficiently reoptimizing the problem after some
       
   189 modifications (for example, after changing some bounds or objective
       
   190 coefficients). It also allows performing the post-optimal analysis (for
       
   191 example, computing components of the simplex table, etc.).
       
   192 
       
   193 The {\it basic solution components} include primal and dual values of
       
   194 all auxiliary and structural variables for the most recently obtained
       
   195 basic solution.
       
   196 
       
   197 \subsubsection*{Interior point segment}
       
   198 
       
   199 The {\it interior point segment} is automatically allocated after the
       
   200 problem has been solved using the interior point solver. It contains
       
   201 interior point solution components, which include the solution status,
       
   202 and primal and dual values of all auxiliary and structural variables.
       
   203 
       
   204 \subsubsection*{MIP segment}
       
   205 
       
   206 The {\it MIP segment} is used only for MIP problems. This segment
       
   207 includes:
       
   208 
       
   209 $\bullet$ column kinds,
       
   210 
       
   211 $\bullet$ MIP solution status, and
       
   212 
       
   213 $\bullet$ MIP solution components.
       
   214 
       
   215 The {\it column kinds} define which columns (i.e. structural variables)
       
   216 are integer and which are continuous.
       
   217 
       
   218 The {\it MIP solution status} is set by the MIP solver and shows whether
       
   219 a MIP solution is integer optimal, integer feasible (non-optimal), or
       
   220 undefined.
       
   221 
       
   222 The {\it MIP solution components} are computed by the MIP solver and
       
   223 include primal values of all auxiliary and structural variables for the
       
   224 most recently obtained MIP solution.
       
   225 
       
   226 Note that in case of MIP problem the basis segment corresponds to
       
   227 the optimal solution of LP relaxation, which is also available to the
       
   228 application program.
       
   229 
       
   230 Currently the search tree is not kept in the MIP segment. Therefore if
       
   231 the search has been terminated, it cannot be continued.
       
   232 
       
   233 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   234 
       
   235 \newpage
       
   236 
       
   237 \section{Problem creating and modifying routines}
       
   238 
       
   239 \subsection{glp\_create\_prob---create problem object}
       
   240 
       
   241 \subsubsection*{Synopsis}
       
   242 
       
   243 \begin{verbatim}
       
   244 glp_prob *glp_create_prob(void);
       
   245 \end{verbatim}
       
   246 
       
   247 \subsubsection*{Description}
       
   248 
       
   249 The routine \verb|glp_create_prob| creates a new problem object, which
       
   250 initially is ``empty'', i.e. has no rows and columns.
       
   251 
       
   252 \subsubsection*{Returns}
       
   253 
       
   254 The routine returns a pointer to the created object, which should be
       
   255 used in any subsequent operations on this object.
       
   256 
       
   257 \subsection{glp\_set\_prob\_name---assign (change) problem name}
       
   258 
       
   259 \subsubsection*{Synopsis}
       
   260 
       
   261 \begin{verbatim}
       
   262 void glp_set_prob_name(glp_prob *lp, const char *name);
       
   263 \end{verbatim}
       
   264 
       
   265 \subsubsection*{Description}
       
   266 
       
   267 The routine \verb|glp_set_prob_name| assigns a given symbolic
       
   268 \verb|name| (1 up to 255 characters) to the specified problem object.
       
   269 
       
   270 If the parameter \verb|name| is \verb|NULL| or empty string, the routine
       
   271 erases an existing symbolic name of the problem object.
       
   272 
       
   273 \subsection{glp\_set\_obj\_name---assign (change) objective function
       
   274 name}
       
   275 
       
   276 \subsubsection*{Synopsis}
       
   277 
       
   278 \begin{verbatim}
       
   279 void glp_set_obj_name(glp_prob *lp, const char *name);
       
   280 \end{verbatim}
       
   281 
       
   282 \subsubsection*{Description}
       
   283 
       
   284 The routine \verb|glp_set_obj_name| assigns a given symbolic
       
   285 \verb|name| (1 up to 255 characters) to the objective function of the
       
   286 specified problem object.
       
   287 
       
   288 If the parameter \verb|name| is \verb|NULL| or empty string, the routine
       
   289 erases an existing symbolic name of the objective function.
       
   290 
       
   291 \subsection{glp\_set\_obj\_dir---set (change) optimization direction\\
       
   292 flag}
       
   293 
       
   294 \subsubsection*{Synopsis}
       
   295 
       
   296 \begin{verbatim}
       
   297 void glp_set_obj_dir(glp_prob *lp, int dir);
       
   298 \end{verbatim}
       
   299 
       
   300 \subsubsection*{Description}
       
   301 
       
   302 The routine \verb|glp_set_obj_dir| sets (changes) the optimization
       
   303 direction flag (i.e. ``sense'' of the objective function) as specified
       
   304 by the parameter \verb|dir|:
       
   305 
       
   306 \begin{tabular}{@{}ll}
       
   307 \verb|GLP_MIN| & minimization; \\
       
   308 \verb|GLP_MAX| & maximization. \\
       
   309 \end{tabular}
       
   310 
       
   311 \noindent
       
   312 (Note that by default the problem is minimization.)
       
   313 
       
   314 \subsection{glp\_add\_rows---add new rows to problem object}
       
   315 
       
   316 \subsubsection*{Synopsis}
       
   317 
       
   318 \begin{verbatim}
       
   319 int glp_add_rows(glp_prob *lp, int nrs);
       
   320 \end{verbatim}
       
   321 
       
   322 \subsubsection*{Description}
       
   323 
       
   324 The routine \verb|glp_add_rows| adds \verb|nrs| rows (constraints) to
       
   325 the specified problem object. New rows are always added to the end of
       
   326 the row list, so the ordinal numbers of existing rows are not changed.
       
   327 
       
   328 Being added each new row is initially free (unbounded) and has empty
       
   329 list of the constraint coefficients.
       
   330 
       
   331 \subsubsection*{Returns}
       
   332 
       
   333 The routine \verb|glp_add_rows| returns the ordinal number of the first
       
   334 new row added to the problem object.
       
   335 
       
   336 \newpage
       
   337 
       
   338 \subsection{glp\_add\_cols---add new columns to problem object}
       
   339 
       
   340 \subsubsection*{Synopsis}
       
   341 
       
   342 \begin{verbatim}
       
   343 int glp_add_cols(glp_prob *lp, int ncs);
       
   344 \end{verbatim}
       
   345 
       
   346 \subsubsection*{Description}
       
   347 
       
   348 The routine \verb|glp_add_cols| adds \verb|ncs| columns (structural
       
   349 variables) to the specified problem object. New columns are always added
       
   350 to the end of the column list, so the ordinal numbers of existing
       
   351 columns are not changed.
       
   352 
       
   353 Being added each new column is initially fixed at zero and has empty
       
   354 list of the constraint coefficients.
       
   355 
       
   356 \subsubsection*{Returns}
       
   357 
       
   358 The routine \verb|glp_add_cols| returns the ordinal number of the first
       
   359 new column added to the problem object.
       
   360 
       
   361 \subsection{glp\_set\_row\_name---assign (change) row name}
       
   362 
       
   363 \subsubsection*{Synopsis}
       
   364 
       
   365 \begin{verbatim}
       
   366 void glp_set_row_name(glp_prob *lp, int i, const char *name);
       
   367 \end{verbatim}
       
   368 
       
   369 \subsubsection*{Description}
       
   370 
       
   371 The routine \verb|glp_set_row_name| assigns a given symbolic
       
   372 \verb|name| (1 up to 255 characters) to \verb|i|-th row (auxiliary
       
   373 variable) of the specified problem object.
       
   374 
       
   375 If the parameter \verb|name| is \verb|NULL| or empty string, the routine
       
   376 erases an existing name of $i$-th row.
       
   377 
       
   378 \subsection{glp\_set\_col\_name---assign (change) column name}
       
   379 
       
   380 \subsubsection*{Synopsis}
       
   381 
       
   382 \begin{verbatim}
       
   383 void glp_set_col_name(glp_prob *lp, int j, const char *name);
       
   384 \end{verbatim}
       
   385 
       
   386 \subsubsection*{Description}
       
   387 
       
   388 The routine \verb|glp_set_col_name| assigns a given symbolic
       
   389 \verb|name| (1 up to 255 characters) to \verb|j|-th column (structural
       
   390 variable) of the specified problem object.
       
   391 
       
   392 If the parameter \verb|name| is \verb|NULL| or empty string, the routine
       
   393 erases an existing name of $j$-th column.
       
   394 
       
   395 \subsection{glp\_set\_row\_bnds---set (change) row bounds}
       
   396 
       
   397 \subsubsection*{Synopsis}
       
   398 
       
   399 \begin{verbatim}
       
   400 void glp_set_row_bnds(glp_prob *lp, int i, int type,
       
   401       double lb, double ub);
       
   402 \end{verbatim}
       
   403 
       
   404 \subsubsection*{Description}
       
   405 
       
   406 The routine \verb|glp_set_row_bnds| sets (changes) the type and bounds
       
   407 of \verb|i|-th row (auxiliary variable) of the specified problem object.
       
   408 
       
   409 The parameters \verb|type|, \verb|lb|, and \verb|ub| specify the type,
       
   410 lower bound, and upper bound, respectively, as follows:
       
   411 
       
   412 \begin{center}
       
   413 \begin{tabular}{cr@{}c@{}ll}
       
   414 Type & \multicolumn{3}{c}{Bounds} & Comment \\
       
   415 \hline
       
   416 \verb|GLP_FR| & $-\infty <$ &$\ x\ $& $< +\infty$
       
   417    & Free (unbounded) variable \\
       
   418 \verb|GLP_LO| & $lb \leq$ &$\ x\ $& $< +\infty$
       
   419    & Variable with lower bound \\
       
   420 \verb|GLP_UP| & $-\infty <$ &$\ x\ $& $\leq ub$
       
   421    & Variable with upper bound \\
       
   422 \verb|GLP_DB| & $lb \leq$ &$\ x\ $& $\leq ub$
       
   423    & Double-bounded variable \\
       
   424 \verb|GLP_FX| & $lb =$ &$\ x\ $& $= ub$
       
   425    & Fixed variable \\
       
   426 \end{tabular}
       
   427 \end{center}
       
   428 
       
   429 \noindent
       
   430 where $x$ is the auxiliary variable associated with $i$-th row.
       
   431 
       
   432 If the row has no lower bound, the parameter \verb|lb| is ignored. If
       
   433 the row has no upper bound, the parameter \verb|ub| is ignored. If the
       
   434 row is an equality constraint (i.e. the corresponding auxiliary variable
       
   435 is of fixed type), only the parameter \verb|lb| is used while the
       
   436 parameter \verb|ub| is ignored.
       
   437 
       
   438 Being added to the problem object each row is initially free, i.e. its
       
   439 type is \verb|GLP_FR|.
       
   440 
       
   441 \newpage
       
   442 
       
   443 \subsection{glp\_set\_col\_bnds---set (change) column bounds}
       
   444 
       
   445 \subsubsection*{Synopsis}
       
   446 
       
   447 \begin{verbatim}
       
   448 void glp_set_col_bnds(glp_prob *lp, int j, int type,
       
   449       double lb, double ub);
       
   450 \end{verbatim}
       
   451 
       
   452 \subsubsection*{Description}
       
   453 
       
   454 The routine \verb|glp_set_col_bnds| sets (changes) the type and bounds
       
   455 of \verb|j|-th column (structural variable) of the specified problem
       
   456 object.
       
   457 
       
   458 The parameters \verb|type|, \verb|lb|, and \verb|ub| specify the type,
       
   459 lower bound, and upper bound, respectively, as follows:
       
   460 
       
   461 \begin{center}
       
   462 \begin{tabular}{cr@{}c@{}ll}
       
   463 Type & \multicolumn{3}{c}{Bounds} & Comment \\
       
   464 \hline
       
   465 \verb|GLP_FR| & $-\infty <$ &$\ x\ $& $< +\infty$
       
   466    & Free (unbounded) variable \\
       
   467 \verb|GLP_LO| & $lb \leq$ &$\ x\ $& $< +\infty$
       
   468    & Variable with lower bound \\
       
   469 \verb|GLP_UP| & $-\infty <$ &$\ x\ $& $\leq ub$
       
   470    & Variable with upper bound \\
       
   471 \verb|GLP_DB| & $lb \leq$ &$\ x\ $& $\leq ub$
       
   472    & Double-bounded variable \\
       
   473 \verb|GLP_FX| & $lb =$ &$\ x\ $& $= ub$
       
   474    & Fixed variable \\
       
   475 \end{tabular}
       
   476 \end{center}
       
   477 
       
   478 \noindent
       
   479 where $x$ is the structural variable associated with $j$-th column.
       
   480 
       
   481 If the column has no lower bound, the parameter \verb|lb| is ignored.
       
   482 If the column has no upper bound, the parameter \verb|ub| is ignored.
       
   483 If the column is of fixed type, only the parameter \verb|lb| is used
       
   484 while the parameter \verb|ub| is ignored.
       
   485 
       
   486 Being added to the problem object each column is initially fixed at
       
   487 zero, i.e. its type is \verb|GLP_FX| and both bounds are 0.
       
   488 
       
   489 \subsection{glp\_set\_obj\_coef---set (change) objective coefficient
       
   490 or constant term}
       
   491 
       
   492 \subsubsection*{Synopsis}
       
   493 
       
   494 \begin{verbatim}
       
   495 void glp_set_obj_coef(glp_prob *lp, int j, double coef);
       
   496 \end{verbatim}
       
   497 
       
   498 \subsubsection*{Description}
       
   499 
       
   500 The routine \verb|glp_set_obj_coef| sets (changes) the objective
       
   501 coefficient at \verb|j|-th column (structural variable). A new value of
       
   502 the objective coefficient is specified by the parameter \verb|coef|.
       
   503 
       
   504 If the parameter \verb|j| is 0, the routine sets (changes) the constant
       
   505 term (``shift'') of the objective function.
       
   506 
       
   507 \subsection{glp\_set\_mat\_row---set (replace) row of the constraint
       
   508 matrix}
       
   509 
       
   510 \subsubsection*{Synopsis}
       
   511 
       
   512 \begin{verbatim}
       
   513 void glp_set_mat_row(glp_prob *lp, int i, int len,
       
   514       const int ind[], const double val[]);
       
   515 \end{verbatim}
       
   516 
       
   517 \subsubsection*{Description}
       
   518 
       
   519 The routine \verb|glp_set_mat_row| stores (replaces) the contents of
       
   520 \verb|i|-th row of the constraint matrix of the specified problem
       
   521 object.
       
   522 
       
   523 Column indices and numerical values of new row elements must be placed
       
   524 in locations \verb|ind[1]|, \dots, \verb|ind[len]| and \verb|val[1]|,
       
   525 \dots, \verb|val[len]|, respectively, where $0 \leq$ \verb|len| $\leq n$
       
   526 is the new length of $i$-th row, $n$ is the current number of columns in
       
   527 the problem object. Elements with identical column indices are not
       
   528 allowed. Zero elements are allowed, but they are not stored in the
       
   529 constraint matrix.
       
   530 
       
   531 If the parameter \verb|len| is 0, the parameters \verb|ind| and/or
       
   532 \verb|val| can be specified as \verb|NULL|.
       
   533 
       
   534 \subsection{glp\_set\_mat\_col---set (replace) column of the
       
   535 constr\-aint matrix}
       
   536 
       
   537 \subsubsection*{Synopsis}
       
   538 
       
   539 \begin{verbatim}
       
   540 void glp_set_mat_col(glp_prob *lp, int j, int len,
       
   541       const int ind[], const double val[]);
       
   542 \end{verbatim}
       
   543 
       
   544 \subsubsection*{Description}
       
   545 
       
   546 The routine \verb|glp_set_mat_col| stores (replaces) the contents of
       
   547 \verb|j|-th column of the constraint matrix of the specified problem
       
   548 object.
       
   549 
       
   550 Row indices and numerical values of new column elements must be placed
       
   551 in locations \verb|ind[1]|, \dots, \verb|ind[len]| and \verb|val[1]|,
       
   552 \dots, \verb|val[len]|, respectively, where $0 \leq$ \verb|len| $\leq m$
       
   553 is the new length of $j$-th column, $m$ is the current number of rows in
       
   554 the problem object. Elements with identical row indices are not allowed.
       
   555 Zero elements are allowed, but they are not stored in the constraint
       
   556 matrix.
       
   557 
       
   558 If the parameter \verb|len| is 0, the parameters \verb|ind| and/or
       
   559 \verb|val| can be specified as \verb|NULL|.
       
   560 
       
   561 \subsection{glp\_load\_matrix---load (replace) the whole constraint
       
   562 matrix}
       
   563 
       
   564 \subsubsection*{Synopsis}
       
   565 
       
   566 \begin{verbatim}
       
   567 void glp_load_matrix(glp_prob *lp, int ne, const int ia[],
       
   568       const int ja[], const double ar[]);
       
   569 \end{verbatim}
       
   570 
       
   571 \subsubsection*{Description}
       
   572 
       
   573 The routine \verb|glp_load_matrix| loads the constraint matrix passed
       
   574 in  the arrays \verb|ia|, \verb|ja|, and \verb|ar| into the specified
       
   575 problem object. Before loading the current contents of the constraint
       
   576 matrix is destroyed.
       
   577 
       
   578 Constraint coefficients (elements of the constraint matrix) must be
       
   579 specified as triplets (\verb|ia[k]|, \verb|ja[k]|, \verb|ar[k]|) for
       
   580 $k=1,\dots,ne$, where \verb|ia[k]| is the row index, \verb|ja[k]| is
       
   581 the column index, and \verb|ar[k]| is a numeric value of corresponding
       
   582 constraint coefficient. The parameter \verb|ne| specifies the total
       
   583 number of (non-zero) elements in the matrix to be loaded. Coefficients
       
   584 with identical indices are not allowed. Zero coefficients are allowed,
       
   585 however, they are not stored in the constraint matrix.
       
   586 
       
   587 If the parameter \verb|ne| is 0, the parameters \verb|ia|, \verb|ja|,
       
   588 and/or \verb|ar| can be specified as \verb|NULL|.
       
   589 
       
   590 \subsection{glp\_check\_dup---check for duplicate elements in sparse
       
   591 matrix}
       
   592 
       
   593 \subsubsection*{Synopsis}
       
   594 
       
   595 \begin{verbatim}
       
   596 int glp_check_dup(int m, int n, int ne, const int ia[],
       
   597    const int ja[]);
       
   598 \end{verbatim}
       
   599 
       
   600 \subsubsection*{Description}
       
   601 
       
   602 The routine \verb|glp_check_dup checks| for duplicate elements (that
       
   603 is, elements with identical indices) in a sparse matrix specified in
       
   604 the coordinate format.
       
   605 
       
   606 The parameters $m$ and $n$ specifies, respectively, the number of rows
       
   607 and columns in the matrix, $m\geq 0$, $n\geq 0$.
       
   608 
       
   609 The parameter {\it ne} specifies the number of (structurally) non-zero
       
   610 elements in the matrix, {\it ne} $\geq 0$.
       
   611 
       
   612 Elements of the matrix are specified as doublets $(ia[k],ja[k])$ for
       
   613 $k=1,\dots,ne$, where $ia[k]$ is a row index, $ja[k]$ is a column index.
       
   614 
       
   615 The routine \verb|glp_check_dup| can be used prior to a call to the
       
   616 routine \verb|glp_load_matrix| to check that the constraint matrix to
       
   617 be loaded has no duplicate elements.
       
   618 
       
   619 \subsubsection*{Returns}
       
   620 
       
   621 The routine \verb|glp_check_dup| returns one of the following values:
       
   622 
       
   623 \noindent
       
   624 \begin{tabular}{@{}r@{\ }c@{\ }l@{}}
       
   625 0&---&the matrix has no duplicate elements;\\
       
   626 $-k$&---&indices $ia[k]$ or/and $ja[k]$ are out of range;\\
       
   627 $+k$&---&element $(ia[k],ja[k])$ is duplicate.\\
       
   628 \end{tabular}
       
   629 
       
   630 \subsection{glp\_sort\_matrix---sort elements of the constraint matrix}
       
   631 
       
   632 \subsubsection*{Synopsis}
       
   633 
       
   634 \begin{verbatim}
       
   635 void glp_sort_matrix(glp_prob *P);
       
   636 \end{verbatim}
       
   637 
       
   638 \subsubsection*{Description}
       
   639 
       
   640 The routine \verb|glp_sort_matrix| sorts elements of the constraint
       
   641 matrix rebuilding its row and column linked lists. On exit from the
       
   642 routine the constraint matrix is not changed, however, elements in the
       
   643 row linked lists become ordered by ascending column indices, and the
       
   644 elements in the column linked lists become ordered by ascending row
       
   645 indices.
       
   646 
       
   647 \subsection{glp\_del\_rows---delete rows from problem object}
       
   648 
       
   649 \subsubsection*{Synopsis}
       
   650 
       
   651 \begin{verbatim}
       
   652 void glp_del_rows(glp_prob *lp, int nrs, const int num[]);
       
   653 \end{verbatim}
       
   654 
       
   655 \subsubsection*{Description}
       
   656 
       
   657 The routine \verb|glp_del_rows| deletes rows from the specified problem
       
   658 ob-\linebreak ject. Ordinal numbers of rows to be deleted should be
       
   659 placed in locations \verb|num[1]|, \dots, \verb|num[nrs]|, where
       
   660 ${\tt nrs}>0$.
       
   661 
       
   662 Note that deleting rows involves changing ordinal numbers of other
       
   663 rows remaining in the problem object. New ordinal numbers of the
       
   664 remaining rows are assigned under the assumption that the original
       
   665 order of rows is not changed. Let, for example, before deletion there
       
   666 be five rows $a$, $b$, $c$, $d$, $e$ with ordinal numbers 1, 2, 3, 4, 5,
       
   667 and let rows $b$ and $d$ have been deleted. Then after deletion the
       
   668 remaining rows $a$, $c$, $e$ are assigned new oridinal numbers 1, 2, 3.
       
   669 
       
   670 \subsection{glp\_del\_cols---delete columns from problem object}
       
   671 
       
   672 \subsubsection*{Synopsis}
       
   673 
       
   674 \begin{verbatim}
       
   675 void glp_del_cols(glp_prob *lp, int ncs, const int num[]);
       
   676 \end{verbatim}
       
   677 
       
   678 \subsubsection*{Description}
       
   679 
       
   680 The routine \verb|glp_del_cols| deletes columns from the specified
       
   681 problem object. Ordinal numbers of columns to be deleted should be
       
   682 placed in locations \verb|num[1]|, \dots, \verb|num[ncs]|, where
       
   683 ${\tt ncs}>0$.
       
   684 
       
   685 Note that deleting columns involves changing ordinal numbers of other
       
   686 columns remaining in the problem object. New ordinal numbers of the
       
   687 remaining columns are assigned under the assumption that the original
       
   688 order of columns is not changed. Let, for example, before deletion there
       
   689 be six columns $p$, $q$, $r$, $s$, $t$, $u$ with ordinal numbers 1, 2,
       
   690 3, 4, 5, 6, and let columns $p$, $q$, $s$ have been deleted. Then after
       
   691 deletion the remaining columns $r$, $t$, $u$ are assigned new ordinal
       
   692 numbers 1, 2, 3.
       
   693 
       
   694 \subsection{glp\_copy\_prob---copy problem object content}
       
   695 
       
   696 \subsubsection*{Synopsis}
       
   697 
       
   698 \begin{verbatim}
       
   699 void glp_copy_prob(glp_prob *dest, glp_prob *prob, int names);
       
   700 \end{verbatim}
       
   701 
       
   702 \subsubsection*{Description}
       
   703 
       
   704 The routine \verb|glp_copy_prob| copies the content of the problem
       
   705 object \verb|prob| to the problem object \verb|dest|.
       
   706 
       
   707 The parameter \verb|names| is a flag. If it is \verb|GLP_ON|,
       
   708 the routine also copies all symbolic names; otherwise, if it is
       
   709 \verb|GLP_OFF|, no symbolic names are copied.
       
   710 
       
   711 \newpage
       
   712 
       
   713 \subsection{glp\_erase\_prob---erase problem object content}
       
   714 
       
   715 \subsubsection*{Synopsis}
       
   716 
       
   717 \begin{verbatim}
       
   718 void glp_erase_prob(glp_prob *lp);
       
   719 \end{verbatim}
       
   720 
       
   721 \subsubsection*{Description}
       
   722 
       
   723 The routine \verb|glp_erase_prob| erases the content of the specified
       
   724 problem object. The effect of this operation is the same as if the
       
   725 problem object would be deleted with the routine \verb|glp_delete_prob|
       
   726 and then created anew with the routine \verb|glp_create_prob|, with the
       
   727 only exception that the handle (pointer) to the problem object remains
       
   728 valid.
       
   729 
       
   730 \subsection{glp\_delete\_prob---delete problem object}
       
   731 
       
   732 \subsubsection*{Synopsis}
       
   733 
       
   734 \begin{verbatim}
       
   735 void glp_delete_prob(glp_prob *lp);
       
   736 \end{verbatim}
       
   737 
       
   738 \subsubsection*{Description}
       
   739 
       
   740 The routine \verb|glp_delete_prob| deletes a problem object, which the
       
   741 parameter \verb|lp| points to, freeing all the memory allocated to this
       
   742 object.
       
   743 
       
   744 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   745 
       
   746 \newpage
       
   747 
       
   748 \section{Problem retrieving routines}
       
   749 
       
   750 \subsection{glp\_get\_prob\_name---retrieve problem name}
       
   751 
       
   752 \subsubsection*{Synopsis}
       
   753 
       
   754 \begin{verbatim}
       
   755 const char *glp_get_prob_name(glp_prob *lp);
       
   756 \end{verbatim}
       
   757 
       
   758 \subsubsection*{Returns}
       
   759 
       
   760 The routine \verb|glp_get_prob_name| returns a pointer to an internal
       
   761 buffer, which contains symbolic name of the problem. However, if the
       
   762 problem has no assigned name, the routine returns \verb|NULL|.
       
   763 
       
   764 \subsection{glp\_get\_obj\_name---retrieve objective function name}
       
   765 
       
   766 \subsubsection*{Synopsis}
       
   767 
       
   768 \begin{verbatim}
       
   769 const char *glp_get_obj_name(glp_prob *lp);
       
   770 \end{verbatim}
       
   771 
       
   772 \subsubsection*{Returns}
       
   773 
       
   774 The routine \verb|glp_get_obj_name| returns a pointer to an internal
       
   775 buffer, which contains symbolic name assigned to the objective
       
   776 function. However, if the objective function has no assigned name, the
       
   777 routine returns \verb|NULL|.
       
   778 
       
   779 \subsection{glp\_get\_obj\_dir---retrieve optimization direction flag}
       
   780 
       
   781 \subsubsection*{Synopsis}
       
   782 
       
   783 \begin{verbatim}
       
   784 int glp_get_obj_dir(glp_prob *lp);
       
   785 \end{verbatim}
       
   786 
       
   787 \subsubsection*{Returns}
       
   788 
       
   789 The routine \verb|glp_get_obj_dir| returns the optimization direction
       
   790 flag (i.e. ``sense'' of the objective function):
       
   791 
       
   792 \begin{tabular}{@{}ll}
       
   793 \verb|GLP_MIN| & minimization; \\
       
   794 \verb|GLP_MAX| & maximization. \\
       
   795 \end{tabular}
       
   796 
       
   797 \pagebreak
       
   798 
       
   799 \subsection{glp\_get\_num\_rows---retrieve number of rows}
       
   800 
       
   801 \subsubsection*{Synopsis}
       
   802 
       
   803 \begin{verbatim}
       
   804 int glp_get_num_rows(glp_prob *lp);
       
   805 \end{verbatim}
       
   806 
       
   807 \subsubsection*{Returns}
       
   808 
       
   809 The routine \verb|glp_get_num_rows| returns the current number of rows
       
   810 in the specified problem object.
       
   811 
       
   812 \subsection{glp\_get\_num\_cols---retrieve number of columns}
       
   813 
       
   814 \subsubsection*{Synopsis}
       
   815 
       
   816 \begin{verbatim}
       
   817 int glp_get_num_cols(glp_prob *lp);
       
   818 \end{verbatim}
       
   819 
       
   820 \subsubsection*{Returns}
       
   821 
       
   822 The routine \verb|glp_get_num_cols| returns the current number of
       
   823 columns the specified problem object.
       
   824 
       
   825 \subsection{glp\_get\_row\_name---retrieve row name}
       
   826 
       
   827 \subsubsection*{Synopsis}
       
   828 
       
   829 \begin{verbatim}
       
   830 const char *glp_get_row_name(glp_prob *lp, int i);
       
   831 \end{verbatim}
       
   832 
       
   833 \subsubsection*{Returns}
       
   834 
       
   835 The routine \verb|glp_get_row_name| returns a pointer to an internal
       
   836 buffer, which contains a symbolic name assigned to \verb|i|-th row.
       
   837 However, if the row has no assigned name, the routine returns
       
   838 \verb|NULL|.
       
   839 
       
   840 \subsection{glp\_get\_col\_name---retrieve column name}
       
   841 
       
   842 \subsubsection*{Synopsis}
       
   843 
       
   844 \begin{verbatim}
       
   845 const char *glp_get_col_name(glp_prob *lp, int j);
       
   846 \end{verbatim}
       
   847 
       
   848 \subsubsection*{Returns}
       
   849 
       
   850 The routine \verb|glp_get_col_name| returns a pointer to an internal
       
   851 buffer, which contains a symbolic name assigned to \verb|j|-th column.
       
   852 However, if the column has no assigned name, the routine returns
       
   853 \verb|NULL|.
       
   854 
       
   855 \subsection{glp\_get\_row\_type---retrieve row type}
       
   856 
       
   857 \subsubsection*{Synopsis}
       
   858 
       
   859 \begin{verbatim}
       
   860 int glp_get_row_type(glp_prob *lp, int i);
       
   861 \end{verbatim}
       
   862 
       
   863 \subsubsection*{Returns}
       
   864 
       
   865 The routine \verb|glp_get_row_type| returns the type of \verb|i|-th
       
   866 row, i.e. the type of corresponding auxiliary variable, as follows:
       
   867 
       
   868 \begin{tabular}{@{}ll}
       
   869 \verb|GLP_FR| & free (unbounded) variable; \\
       
   870 \verb|GLP_LO| & variable with lower bound; \\
       
   871 \verb|GLP_UP| & variable with upper bound; \\
       
   872 \verb|GLP_DB| & double-bounded variable; \\
       
   873 \verb|GLP_FX| & fixed variable. \\
       
   874 \end{tabular}
       
   875 
       
   876 \subsection{glp\_get\_row\_lb---retrieve row lower bound}
       
   877 
       
   878 \subsubsection*{Synopsis}
       
   879 
       
   880 \begin{verbatim}
       
   881 double glp_get_row_lb(glp_prob *lp, int i);
       
   882 \end{verbatim}
       
   883 
       
   884 \subsubsection*{Returns}
       
   885 
       
   886 The routine \verb|glp_get_row_lb| returns the lower bound of
       
   887 \verb|i|-th row, i.e. the lower bound of corresponding auxiliary
       
   888 variable. However, if the row has no lower bound, the routine returns
       
   889 \verb|-DBL_MAX|.
       
   890 
       
   891 \subsection{glp\_get\_row\_ub---retrieve row upper bound}
       
   892 
       
   893 \subsubsection*{Synopsis}
       
   894 
       
   895 \begin{verbatim}
       
   896 double glp_get_row_ub(glp_prob *lp, int i);
       
   897 \end{verbatim}
       
   898 
       
   899 \subsubsection*{Returns}
       
   900 
       
   901 The routine \verb|glp_get_row_ub| returns the upper bound of
       
   902 \verb|i|-th row, i.e. the upper bound of corresponding auxiliary
       
   903 variable. However, if the row has no upper bound, the routine returns
       
   904 \verb|+DBL_MAX|.
       
   905 
       
   906 \subsection{glp\_get\_col\_type---retrieve column type}
       
   907 
       
   908 \subsubsection*{Synopsis}
       
   909 
       
   910 \begin{verbatim}
       
   911 int glp_get_col_type(glp_prob *lp, int j);
       
   912 \end{verbatim}
       
   913 
       
   914 \subsubsection*{Returns}
       
   915 
       
   916 The routine \verb|glp_get_col_type| returns the type of \verb|j|-th
       
   917 column, i.e. the type of corresponding structural variable, as follows:
       
   918 
       
   919 \begin{tabular}{@{}ll}
       
   920 \verb|GLP_FR| & free (unbounded) variable; \\
       
   921 \verb|GLP_LO| & variable with lower bound; \\
       
   922 \verb|GLP_UP| & variable with upper bound; \\
       
   923 \verb|GLP_DB| & double-bounded variable; \\
       
   924 \verb|GLP_FX| & fixed variable. \\
       
   925 \end{tabular}
       
   926 
       
   927 \subsection{glp\_get\_col\_lb---retrieve column lower bound}
       
   928 
       
   929 \subsubsection*{Synopsis}
       
   930 
       
   931 \begin{verbatim}
       
   932 double glp_get_col_lb(glp_prob *lp, int j);
       
   933 \end{verbatim}
       
   934 
       
   935 \subsubsection*{Returns}
       
   936 
       
   937 The routine \verb|glp_get_col_lb| returns the lower bound of
       
   938 \verb|j|-th column, i.e. the lower bound of corresponding structural
       
   939 variable. However, if the column has no lower bound, the routine returns
       
   940 \verb|-DBL_MAX|.
       
   941 
       
   942 \subsection{glp\_get\_col\_ub---retrieve column upper bound}
       
   943 
       
   944 \subsubsection*{Synopsis}
       
   945 
       
   946 \begin{verbatim}
       
   947 double glp_get_col_ub(glp_prob *lp, int j);
       
   948 \end{verbatim}
       
   949 
       
   950 \subsubsection*{Returns}
       
   951 
       
   952 The routine \verb|glp_get_col_ub| returns the upper bound of
       
   953 \verb|j|-th column, i.e. the upper bound of corresponding structural
       
   954 variable. However, if the column has no upper bound, the routine returns
       
   955 \verb|+DBL_MAX|.
       
   956 
       
   957 \subsection{glp\_get\_obj\_coef---retrieve objective coefficient or\\
       
   958 constant term}
       
   959 
       
   960 \subsubsection*{Synopsis}
       
   961 
       
   962 \begin{verbatim}
       
   963 double glp_get_obj_coef(glp_prob *lp, int j);
       
   964 \end{verbatim}
       
   965 
       
   966 \subsubsection*{Returns}
       
   967 
       
   968 The routine \verb|glp_get_obj_coef| returns the objective coefficient
       
   969 at \verb|j|-th structural variable (column).
       
   970 
       
   971 If the parameter \verb|j| is 0, the routine returns the constant term
       
   972 (``shift'') of the objective function.
       
   973 
       
   974 \subsection{glp\_get\_num\_nz---retrieve number of constraint
       
   975 coefficients}
       
   976 
       
   977 \subsubsection*{Synopsis}
       
   978 
       
   979 \begin{verbatim}
       
   980 int glp_get_num_nz(glp_prob *lp);
       
   981 \end{verbatim}
       
   982 
       
   983 \subsubsection*{Returns}
       
   984 
       
   985 The routine \verb|glp_get_num_nz| returns the number of non-zero
       
   986 elements in the constraint matrix of the specified problem object.
       
   987 
       
   988 \subsection{glp\_get\_mat\_row---retrieve row of the constraint
       
   989 matrix}
       
   990 
       
   991 \subsubsection*{Synopsis}
       
   992 
       
   993 \begin{verbatim}
       
   994 int glp_get_mat_row(glp_prob *lp, int i, int ind[],
       
   995       double val[]);
       
   996 \end{verbatim}
       
   997 
       
   998 \subsubsection*{Description}
       
   999 
       
  1000 The routine \verb|glp_get_mat_row| scans (non-zero) elements of
       
  1001 \verb|i|-th row of the constraint matrix of the specified problem object
       
  1002 and stores their column indices and numeric values to locations
       
  1003 \verb|ind[1]|, \dots, \verb|ind[len]| and \verb|val[1]|, \dots,
       
  1004 \verb|val[len]|, respectively, where $0\leq{\tt len}\leq n$ is the
       
  1005 number of elements in $i$-th row, $n$ is the number of columns.
       
  1006 
       
  1007 The parameter \verb|ind| and/or \verb|val| can be specified as
       
  1008 \verb|NULL|, in which case corresponding information is not stored.
       
  1009 
       
  1010 \subsubsection*{Returns}
       
  1011 
       
  1012 The routine \verb|glp_get_mat_row| returns the length \verb|len|, i.e.
       
  1013 the number of (non-zero) elements in \verb|i|-th row.
       
  1014 
       
  1015 \subsection{glp\_get\_mat\_col---retrieve column of the constraint\\
       
  1016 matrix}
       
  1017 
       
  1018 \subsubsection*{Synopsis}
       
  1019 
       
  1020 \begin{verbatim}
       
  1021 int glp_get_mat_col(glp_prob *lp, int j, int ind[],
       
  1022       double val[]);
       
  1023 \end{verbatim}
       
  1024 
       
  1025 \subsubsection*{Description}
       
  1026 
       
  1027 The routine \verb|glp_get_mat_col| scans (non-zero) elements of
       
  1028 \verb|j|-th column of the constraint matrix of the specified problem
       
  1029 object and stores their row indices and numeric values to locations
       
  1030 \verb|ind[1]|, \dots, \verb|ind[len]| and \verb|val[1]|, \dots,
       
  1031 \verb|val[len]|, respectively, where $0\leq{\tt len}\leq m$ is the
       
  1032 number of elements in $j$-th column, $m$ is the number of rows.
       
  1033 
       
  1034 The parameter \verb|ind| and/or \verb|val| can be specified as
       
  1035 \verb|NULL|, in which case corresponding information is not stored.
       
  1036 
       
  1037 \subsubsection*{Returns}
       
  1038 
       
  1039 The routine \verb|glp_get_mat_col| returns the length \verb|len|, i.e.
       
  1040 the number of (non-zero) elements in \verb|j|-th column.
       
  1041 
       
  1042 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
  1043 
       
  1044 \newpage
       
  1045 
       
  1046 \section{Row and column searching routines}
       
  1047 
       
  1048 \subsection{glp\_create\_index---create the name index}
       
  1049 
       
  1050 \subsubsection*{Synopsis}
       
  1051 
       
  1052 \begin{verbatim}
       
  1053 void glp_create_index(glp_prob *lp);
       
  1054 \end{verbatim}
       
  1055 
       
  1056 \subsubsection*{Description}
       
  1057 
       
  1058 The routine \verb|glp_create_index| creates the name index for the
       
  1059 specified problem object. The name index is an auxiliary data structure,
       
  1060 which is intended to quickly (i.e. for logarithmic time) find rows and
       
  1061 columns by their names.
       
  1062 
       
  1063 This routine can be called at any time. If the name index already
       
  1064 exists, the routine does nothing.
       
  1065 
       
  1066 \subsection{glp\_find\_row---find row by its name}
       
  1067 
       
  1068 \subsubsection*{Synopsis}
       
  1069 
       
  1070 \begin{verbatim}
       
  1071 int glp_find_row(glp_prob *lp, const char *name);
       
  1072 \end{verbatim}
       
  1073 
       
  1074 \subsubsection*{Returns}
       
  1075 
       
  1076 The routine \verb|glp_find_row| returns the ordinal number of a row,
       
  1077 which is assigned (by the routine \verb|glp_set_row_name|) the specified
       
  1078 symbolic \verb|name|. If no such row exists, the routine returns 0.
       
  1079 
       
  1080 \subsection{glp\_find\_col---find column by its name}
       
  1081 
       
  1082 \subsubsection*{Synopsis}
       
  1083 
       
  1084 \begin{verbatim}
       
  1085 int glp_find_col(glp_prob *lp, const char *name);
       
  1086 \end{verbatim}
       
  1087 
       
  1088 \subsubsection*{Returns}
       
  1089 
       
  1090 The routine \verb|glp_find_col| returns the ordinal number of a column,
       
  1091 which is assigned (by the routine \verb|glp_set_col_name|) the specified
       
  1092 symbolic \verb|name|. If no such column exists, the routine returns 0.
       
  1093 
       
  1094 \subsection{glp\_delete\_index---delete the name index}
       
  1095 
       
  1096 \subsubsection*{Synopsis}
       
  1097 
       
  1098 \begin{verbatim}
       
  1099 void glp_delete_index(glp_prob *lp);
       
  1100 \end{verbatim}
       
  1101 
       
  1102 \subsubsection*{Description}
       
  1103 
       
  1104 The routine \verb|glp_delete_index| deletes the name index previously
       
  1105 created by the routine \verb|glp_create_index| and frees the memory
       
  1106 allocated to this auxiliary data structure.
       
  1107 
       
  1108 This routine can be called at any time. If the name index does not
       
  1109 exist, the routine does nothing.
       
  1110 
       
  1111 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
  1112 
       
  1113 \newpage
       
  1114 
       
  1115 \section{Problem scaling routines}
       
  1116 
       
  1117 \subsection{Background}
       
  1118 
       
  1119 In GLPK the {\it scaling} means a linear transformation applied to the
       
  1120 constraint matrix to improve its numerical properties.\footnote{In many
       
  1121 cases a proper scaling allows making the constraint matrix to be better
       
  1122 conditioned, i.e. decreasing its condition number, that makes
       
  1123 computations numerically more stable.}
       
  1124 
       
  1125 The main equality is the following:
       
  1126 $$\widetilde{A}=RAS,\eqno(2.1)$$
       
  1127 where $A=(a_{ij})$ is the original constraint matrix, $R=(r_{ii})>0$ is
       
  1128 a diagonal matrix used to scale rows (constraints), $S=(s_{jj})>0$ is a
       
  1129 diagonal matrix used to scale columns (variables), $\widetilde{A}$ is
       
  1130 the scaled constraint matrix.
       
  1131 
       
  1132 From (2.1) it follows that in the {\it scaled} problem instance each
       
  1133 original constraint coefficient $a_{ij}$ is replaced by corresponding
       
  1134 scaled constraint coefficient:
       
  1135 $$\widetilde{a}_{ij}=r_{ii}a_{ij}s_{jj}.\eqno(2.2)$$
       
  1136 
       
  1137 Note that the scaling is performed internally and therefore
       
  1138 transparently to the user. This means that on API level the user always
       
  1139 deal with unscaled data.
       
  1140 
       
  1141 Scale factors $r_{ii}$ and $s_{jj}$ can be set or changed at any time
       
  1142 either directly by the application program in a problem specific way
       
  1143 (with the routines \verb|glp_set_rii| and \verb|glp_set_sjj|), or by
       
  1144 some API routines intended for automatic scaling.
       
  1145 
       
  1146 \subsection{glp\_set\_rii---set (change) row scale factor}
       
  1147 
       
  1148 \subsubsection*{Synopsis}
       
  1149 
       
  1150 \begin{verbatim}
       
  1151 void glp_set_rii(glp_prob *lp, int i, double rii);
       
  1152 \end{verbatim}
       
  1153 
       
  1154 \subsubsection*{Description}
       
  1155 
       
  1156 The routine \verb|glp_set_rii| sets (changes) the scale factor $r_{ii}$
       
  1157 for $i$-th row of the specified problem object.
       
  1158 
       
  1159 \subsection{glp\_set\_sjj---set (change) column scale factor}
       
  1160 
       
  1161 \subsubsection*{Synopsis}
       
  1162 
       
  1163 \begin{verbatim}
       
  1164 void glp_set_sjj(glp_prob *lp, int j, double sjj);
       
  1165 \end{verbatim}
       
  1166 
       
  1167 \subsubsection*{Description}
       
  1168 
       
  1169 The routine \verb|glp_set_sjj| sets (changes) the scale factor $s_{jj}$
       
  1170 for $j$-th column of the specified problem object.
       
  1171 
       
  1172 \subsection{glp\_get\_rii---retrieve row scale factor}
       
  1173 
       
  1174 \subsubsection*{Synopsis}
       
  1175 
       
  1176 \begin{verbatim}
       
  1177 double glp_get_rii(glp_prob *lp, int i);
       
  1178 \end{verbatim}
       
  1179 
       
  1180 \subsubsection*{Returns}
       
  1181 
       
  1182 The routine \verb|glp_get_rii| returns current scale factor $r_{ii}$ for
       
  1183 $i$-th row of the specified problem object.
       
  1184 
       
  1185 \subsection{glp\_get\_sjj---retrieve column scale factor}
       
  1186 
       
  1187 \subsubsection*{Synopsis}
       
  1188 
       
  1189 \begin{verbatim}
       
  1190 double glp_get_sjj(glp_prob *lp, int j);
       
  1191 \end{verbatim}
       
  1192 
       
  1193 \subsubsection*{Returns}
       
  1194 
       
  1195 The routine \verb|glp_get_sjj| returns current scale factor $s_{jj}$ for
       
  1196 $j$-th column of the specified problem object.
       
  1197 
       
  1198 \subsection{glp\_scale\_prob---scale problem data}
       
  1199 
       
  1200 \subsubsection*{Synopsis}
       
  1201 
       
  1202 \begin{verbatim}
       
  1203 void glp_scale_prob(glp_prob *lp, int flags);
       
  1204 \end{verbatim}
       
  1205 
       
  1206 \subsubsection*{Description}
       
  1207 
       
  1208 The routine \verb|glp_scale_prob| performs automatic scaling of problem
       
  1209 data for the specified problem object.
       
  1210 
       
  1211 The parameter \verb|flags| specifies scaling options used by the
       
  1212 routine. The options can be combined with the bitwise OR operator and
       
  1213 may be the following:
       
  1214 
       
  1215 \begin{tabular}{@{}ll}
       
  1216 \verb|GLP_SF_GM| & perform geometric mean scaling;\\
       
  1217 \verb|GLP_SF_EQ| & perform equilibration scaling;\\
       
  1218 \verb|GLP_SF_2N| & round scale factors to nearest power of two;\\
       
  1219 \verb|GLP_SF_SKIP| & skip scaling, if the problem is well scaled.\\
       
  1220 \end{tabular}
       
  1221 
       
  1222 The parameter \verb|flags| may be specified as \verb|GLP_SF_AUTO|, in
       
  1223 which case the routine chooses the scaling options automatically.
       
  1224 
       
  1225 \subsection{glp\_unscale\_prob---unscale problem data}
       
  1226 
       
  1227 \subsubsection*{Synopsis}
       
  1228 
       
  1229 \begin{verbatim}
       
  1230 void glp_unscale_prob(glp_prob *lp);
       
  1231 \end{verbatim}
       
  1232 
       
  1233 The routine \verb|glp_unscale_prob| performs unscaling of problem data
       
  1234 for the specified problem object.
       
  1235 
       
  1236 ``Unscaling'' means replacing the current scaling matrices $R$ and $S$
       
  1237 by unity matrices that cancels the scaling effect.
       
  1238 
       
  1239 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
  1240 
       
  1241 \newpage
       
  1242 
       
  1243 \section{LP basis constructing routines}
       
  1244 
       
  1245 \subsection{Background}
       
  1246 
       
  1247 To start the search the simplex method needs a valid initial basis. In
       
  1248 GLPK the basis is completely defined by a set of {\it statuses} assigned
       
  1249 to {\it all} (auxiliary and structural) variables, where the status may
       
  1250 be one of the following:
       
  1251 
       
  1252 \begin{tabular}{@{}ll}
       
  1253 \verb|GLP_BS| & basic variable;\\
       
  1254 \verb|GLP_NL| & non-basic variable having active lower bound;\\
       
  1255 \verb|GLP_NU| & non-basic variable having active upper bound;\\
       
  1256 \verb|GLP_NF| & non-basic free variable;\\
       
  1257 \verb|GLP_NS| & non-basic fixed variable.\\
       
  1258 \end{tabular}
       
  1259 
       
  1260 The basis is {\it valid}, if the basis matrix, which is a matrix built
       
  1261 of columns of the augmented constraint matrix $(I\:|-A)$ corresponding
       
  1262 to basic variables, is non-singular. This, in particular, means that
       
  1263 the number of basic variables must be the same as the number of rows in
       
  1264 the problem object. (For more details see Section \ref{lpbasis}, page
       
  1265 \pageref{lpbasis}.)
       
  1266 
       
  1267 Any initial basis may be constructed (or restored) with the API
       
  1268 routines \verb|glp_set_row_stat| and \verb|glp_set_col_stat| by
       
  1269 assigning appropriate statuses to auxiliary and structural variables.
       
  1270 Another way to construct an initial basis is to use API routines like
       
  1271 \verb|glp_adv_basis|, which implement so called
       
  1272 {\it crashing}.\footnote{This term is from early linear programming
       
  1273 systems and means a heuristic to construct a valid initial basis.} Note
       
  1274 that on normal exit the simplex solver remains the basis valid, so in
       
  1275 case of reoptimization there is no need to construct an initial basis
       
  1276 from scratch.
       
  1277 
       
  1278 \subsection{glp\_set\_row\_stat---set (change) row status}
       
  1279 
       
  1280 \subsubsection*{Synopsis}
       
  1281 
       
  1282 \begin{verbatim}
       
  1283 void glp_set_row_stat(glp_prob *lp, int i, int stat);
       
  1284 \end{verbatim}
       
  1285 
       
  1286 \subsubsection*{Description}
       
  1287 
       
  1288 The routine \verb|glp_set_row_stat| sets (changes) the current status
       
  1289 of \verb|i|-th row (auxiliary variable) as specified by the parameter
       
  1290 \verb|stat|:
       
  1291 
       
  1292 \begin{tabular}{@{}lp{104.2mm}@{}}
       
  1293 \verb|GLP_BS| & make the row basic (make the constraint inactive); \\
       
  1294 \verb|GLP_NL| & make the row non-basic (make the constraint active); \\
       
  1295 \end{tabular}
       
  1296 
       
  1297 \newpage
       
  1298 
       
  1299 \begin{tabular}{@{}lp{104.2mm}@{}}
       
  1300 \verb|GLP_NU| & make the row non-basic and set it to the upper bound;
       
  1301    if the row is not double-bounded, this status is equivalent to
       
  1302    \verb|GLP_NL| (only in the case of this routine); \\
       
  1303 \verb|GLP_NF| & the same as \verb|GLP_NL| (only in the case of this
       
  1304    routine); \\
       
  1305 \verb|GLP_NS| & the same as \verb|GLP_NL| (only in the case of this
       
  1306    routine). \\
       
  1307 \end{tabular}
       
  1308 
       
  1309 \subsection{glp\_set\_col\_stat---set (change) column status}
       
  1310 
       
  1311 \subsubsection*{Synopsis}
       
  1312 
       
  1313 \begin{verbatim}
       
  1314 void glp_set_col_stat(glp_prob *lp, int j, int stat);
       
  1315 \end{verbatim}
       
  1316 
       
  1317 \subsubsection*{Description}
       
  1318 
       
  1319 The routine \verb|glp_set_col_stat sets| (changes) the current status
       
  1320 of \verb|j|-th column (structural variable) as specified by the
       
  1321 parameter \verb|stat|:
       
  1322 
       
  1323 \begin{tabular}{@{}lp{104.2mm}@{}}
       
  1324 \verb|GLP_BS| & make the column basic; \\
       
  1325 \verb|GLP_NL| & make the column non-basic; \\
       
  1326 \verb|GLP_NU| & make the column non-basic and set it to the upper
       
  1327    bound; if the column is not double-bounded, this status is equivalent
       
  1328    to \verb|GLP_NL| (only in the case of this routine); \\
       
  1329 \verb|GLP_NF| & the same as \verb|GLP_NL| (only in the case of this
       
  1330    routine); \\
       
  1331 \verb|GLP_NS| & the same as \verb|GLP_NL| (only in the case of this
       
  1332    routine).
       
  1333 \end{tabular}
       
  1334 
       
  1335 \subsection{glp\_std\_basis---construct standard initial LP basis}
       
  1336 
       
  1337 \subsubsection*{Synopsis}
       
  1338 
       
  1339 \begin{verbatim}
       
  1340 void glp_std_basis(glp_prob *lp);
       
  1341 \end{verbatim}
       
  1342 
       
  1343 \subsubsection*{Description}
       
  1344 
       
  1345 The routine \verb|glp_std_basis| constructs the ``standard'' (trivial)
       
  1346 initial LP basis for the specified problem object.
       
  1347 
       
  1348 In the ``standard'' LP basis all auxiliary variables (rows) are basic,
       
  1349 and all structural variables (columns) are non-basic (so the
       
  1350 corresponding basis matrix is unity).
       
  1351 
       
  1352 \newpage
       
  1353 
       
  1354 \subsection{glp\_adv\_basis---construct advanced initial LP basis}
       
  1355 
       
  1356 \subsubsection*{Synopsis}
       
  1357 
       
  1358 \begin{verbatim}
       
  1359 void glp_adv_basis(glp_prob *lp, int flags);
       
  1360 \end{verbatim}
       
  1361 
       
  1362 \subsubsection*{Description}
       
  1363 
       
  1364 The routine \verb|glp_adv_basis| constructs an advanced initial LP
       
  1365 basis for the specified problem object.
       
  1366 
       
  1367 The parameter \verb|flags| is reserved for use in the future and must
       
  1368 be specified as zero.
       
  1369 
       
  1370 In order to construct the advanced initial LP basis the routine does
       
  1371 the following:
       
  1372 
       
  1373 1) includes in the basis all non-fixed auxiliary variables;
       
  1374 
       
  1375 2) includes in the basis as many non-fixed structural variables as
       
  1376 possible keeping the triangular form of the basis matrix;
       
  1377 
       
  1378 3) includes in the basis appropriate (fixed) auxiliary variables to
       
  1379 complete the basis.
       
  1380 
       
  1381 As a result the initial LP basis has as few fixed variables as possible
       
  1382 and the corresponding basis matrix is triangular.
       
  1383 
       
  1384 \subsection{glp\_cpx\_basis---construct Bixby's initial LP basis}
       
  1385 
       
  1386 \subsubsection*{Synopsis}
       
  1387 
       
  1388 \begin{verbatim}
       
  1389 void glp_cpx_basis(glp_prob *lp);
       
  1390 \end{verbatim}
       
  1391 
       
  1392 \subsubsection*{Description}
       
  1393 
       
  1394 The routine \verb|glp_cpx_basis| constructs an initial basis for the
       
  1395 specified problem object with the algorithm proposed by
       
  1396 R.~Bixby.\footnote{Robert E. Bixby, ``Implementing the Simplex Method:
       
  1397 The Initial Basis.'' ORSA Journal on Computing, Vol. 4, No. 3, 1992,
       
  1398 pp. 267-84.}
       
  1399 
       
  1400 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
  1401 
       
  1402 \newpage
       
  1403 
       
  1404 \section{Simplex method routines}
       
  1405 
       
  1406 The {\it simplex method} is a well known efficient numerical procedure
       
  1407 to solve LP problems.
       
  1408 
       
  1409 On each iteration the simplex method transforms the original system of
       
  1410 equaility constraints (1.2) resolving them through different sets of
       
  1411 variables to an equivalent system called {\it the simplex table} (or
       
  1412 sometimes {\it the simplex tableau}), which has the following form:
       
  1413 $$
       
  1414 \begin{array}{r@{\:}c@{\:}r@{\:}c@{\:}r@{\:}c@{\:}r}
       
  1415 z&=&d_1(x_N)_1&+&d_2(x_N)_2&+ \dots +&d_n(x_N)_n \\
       
  1416 (x_B)_1&=&\xi_{11}(x_N)_1& +& \xi_{12}(x_N)_2& + \dots +&
       
  1417    \xi_{1n}(x_N)_n \\
       
  1418 (x_B)_2&=& \xi_{21}(x_N)_1& +& \xi_{22}(x_N)_2& + \dots +&
       
  1419    \xi_{2n}(x_N)_n \\
       
  1420 \multicolumn{7}{c}
       
  1421 {.\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .} \\
       
  1422 (x_B)_m&=&\xi_{m1}(x_N)_1& +& \xi_{m2}(x_N)_2& + \dots +&
       
  1423    \xi_{mn}(x_N)_n \\
       
  1424 \end{array} \eqno (2.3)
       
  1425 $$
       
  1426 where: $(x_B)_1, (x_B)_2, \dots, (x_B)_m$ are basic variables;
       
  1427 $(x_N)_1, (x_N)_2, \dots, (x_N)_n$ are non-basic variables;
       
  1428 $d_1, d_2, \dots, d_n$ are reduced costs;
       
  1429 $\xi_{11}, \xi_{12}, \dots, \xi_{mn}$ are coefficients of the
       
  1430 simplex table. (May note that the original LP problem (1.1)---(1.3) also
       
  1431 has the form of a simplex table, where all equalities are resolved
       
  1432 through auxiliary variables.)
       
  1433 
       
  1434 From the linear programming theory it is known that if an optimal
       
  1435 solution of the LP problem (1.1)---(1.3) exists, it can always be
       
  1436 written in the form (2.3), where non-basic variables are set on their
       
  1437 bounds while values of the objective function and basic variables are
       
  1438 determined by the corresponding equalities of the simplex table.
       
  1439 
       
  1440 A set of values of all basic and non-basic variables determined by the
       
  1441 simplex table is called {\it basic solution}. If all basic variables are
       
  1442 within their bounds, the basic solution is called {\it (primal)
       
  1443 feasible}, otherwise it is called {\it (primal) infeasible}. A feasible
       
  1444 basic solution, which provides a smallest (in case of minimization) or
       
  1445 a largest (in case of maximization) value of the objective function is
       
  1446 called {\it optimal}. Therefore, for solving LP problem the simplex
       
  1447 method tries to find its optimal basic solution.
       
  1448 
       
  1449 Primal feasibility of some basic solution may be stated by simple
       
  1450 checking if all basic variables are within their bounds. Basic solution
       
  1451 is optimal if additionally the following optimality conditions are
       
  1452 satisfied for all non-basic variables:
       
  1453 \begin{center}
       
  1454 \begin{tabular}{lcc}
       
  1455 Status of $(x_N)_j$ & Minimization & Maximization \\
       
  1456 \hline
       
  1457 $(x_N)_j$ is free & $d_j = 0$ & $d_j = 0$ \\
       
  1458 $(x_N)_j$ is on its lower bound & $d_j \geq 0$ & $d_j \leq 0$ \\
       
  1459 $(x_N)_j$ is on its upper bound & $d_j \leq 0$ & $d_j \geq 0$ \\
       
  1460 \end{tabular}
       
  1461 \end{center}
       
  1462 In other words, basic solution is optimal if there is no non-basic
       
  1463 variable, which changing in the feasible direction (i.e. increasing if
       
  1464 it is free or on its lower bound, or decreasing if it is free or on its
       
  1465 upper bound) can improve (i.e. decrease in case of minimization or
       
  1466 increase in case of maximization) the objective function.
       
  1467 
       
  1468 If all non-basic variables satisfy to the optimality conditions shown
       
  1469 above (independently on whether basic variables are within their bounds
       
  1470 or not), the basic solution is called {\it dual feasible}, otherwise it
       
  1471 is called {\it dual infeasible}.
       
  1472 
       
  1473 It may happen that some LP problem has no primal feasible solution due
       
  1474 to incorrect formulation---this means that its constraints conflict
       
  1475 with each other. It also may happen that some LP problem has unbounded
       
  1476 solution again due to incorrect formulation---this means that some
       
  1477 non-basic variable can improve the objective function, i.e. the
       
  1478 optimality conditions are violated, and at the same time this variable
       
  1479 can infinitely change in the feasible direction meeting no resistance
       
  1480 from basic variables. (May note that in the latter case the LP problem
       
  1481 has no dual feasible solution.)
       
  1482 
       
  1483 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
  1484 
       
  1485 \subsection{glp\_simplex---solve LP problem with the primal or dual
       
  1486 simplex method}
       
  1487 
       
  1488 \subsubsection*{Synopsis}
       
  1489 
       
  1490 \begin{verbatim}
       
  1491 int glp_simplex(glp_prob *lp, const glp_smcp *parm);
       
  1492 \end{verbatim}
       
  1493 
       
  1494 \subsubsection*{Description}
       
  1495 
       
  1496 The routine \verb|glp_simplex| is a driver to the LP solver based on
       
  1497 the simplex method. This routine retrieves problem data from the
       
  1498 specified problem object, calls the solver to solve the problem
       
  1499 instance, and stores results of computations back into the problem
       
  1500 object.
       
  1501 
       
  1502 The simplex solver has a set of control parameters. Values of the
       
  1503 control parameters can be passed in the structure \verb|glp_smcp|,
       
  1504 which the parameter \verb|parm| points to. For detailed description of
       
  1505 this structure see paragraph ``Control parameters'' below.
       
  1506 Before specifying some control parameters the application program
       
  1507 should initialize the structure \verb|glp_smcp| by default values of
       
  1508 all control parameters using the routine \verb|glp_init_smcp| (see the
       
  1509 next subsection). This is needed for backward compatibility, because in
       
  1510 the future there may appear new members in the structure
       
  1511 \verb|glp_smcp|.
       
  1512 
       
  1513 The parameter \verb|parm| can be specified as \verb|NULL|, in which
       
  1514 case the solver uses default settings.
       
  1515 
       
  1516 \subsubsection*{Returns}
       
  1517 
       
  1518 \def\arraystretch{1}
       
  1519 
       
  1520 \begin{tabular}{@{}p{25mm}p{97.3mm}@{}}
       
  1521 0 & The LP problem instance has been successfully solved. (This code
       
  1522 does {\it not} necessarily mean that the solver has found optimal
       
  1523 solution. It only means that the solution process was successful.) \\
       
  1524 \verb|GLP_EBADB| & Unable to start the search, because the initial basis
       
  1525 specified in the problem object is invalid---the number of basic
       
  1526 (auxiliary and structural) variables is not the same as the number of
       
  1527 rows in the problem object.\\
       
  1528 \verb|GLP_ESING| & Unable to start the search, because the basis matrix
       
  1529 corresponding to the initial basis is singular within the working
       
  1530 precision.\\
       
  1531 \verb|GLP_ECOND| & Unable to start the search, because the basis matrix
       
  1532 corresponding to the initial basis is ill-conditioned, i.e. its
       
  1533 condition number is too large.\\
       
  1534 \verb|GLP_EBOUND| & Unable to start the search, because some
       
  1535 double-bounded (auxiliary or structural) variables have incorrect
       
  1536 bounds.\\
       
  1537 \verb|GLP_EFAIL| & The search was prematurely terminated due to the
       
  1538 solver failure.\\
       
  1539 \verb|GLP_EOBJLL| & The search was prematurely terminated, because the
       
  1540 objective function being maximized has reached its lower limit and
       
  1541 continues decreasing (the dual simplex only).\\
       
  1542 \verb|GLP_EOBJUL| & The search was prematurely terminated, because the
       
  1543 objective function being minimized has reached its upper limit and
       
  1544 continues increasing (the dual simplex only).\\
       
  1545 \verb|GLP_EITLIM| & The search was prematurely terminated, because the
       
  1546 simplex iteration limit has been exceeded.\\
       
  1547 \verb|GLP_ETMLIM| & The search was prematurely terminated, because the
       
  1548 time limit has been exceeded.\\
       
  1549 \verb|GLP_ENOPFS| & The LP problem instance has no primal feasible
       
  1550 solution (only if the LP presolver is used).\\
       
  1551 \verb|GLP_ENODFS| & The LP problem instance has no dual feasible
       
  1552 solution (only if the LP presolver is used).\\
       
  1553 \end{tabular}
       
  1554 
       
  1555 \subsubsection*{Built-in LP presolver}
       
  1556 
       
  1557 The simplex solver has {\it built-in LP presolver}. It is a subprogram
       
  1558 that transforms the original LP problem specified in the problem object
       
  1559 to an equivalent LP problem, which may be easier for solving with the
       
  1560 simplex method than the original one. This is attained mainly due to
       
  1561 reducing the problem size and improving its numeric properties (for
       
  1562 example, by removing some inactive constraints or by fixing some
       
  1563 non-basic variables). Once the transformed LP problem has been solved,
       
  1564 the presolver transforms its basic solution back to the corresponding
       
  1565 basic solution of the original problem.
       
  1566 
       
  1567 Presolving is an optional feature of the routine \verb|glp_simplex|,
       
  1568 and by default it is disabled. In order to enable the LP presolver the
       
  1569 control parameter \verb|presolve| should be set to \verb|GLP_ON| (see
       
  1570 paragraph ``Control parameters'' below). Presolving may be used when
       
  1571 the problem instance is solved for the first time. However, on
       
  1572 performing re-optimization the presolver should be disabled.
       
  1573 
       
  1574 The presolving procedure is transparent to the API user in the sense
       
  1575 that all necessary processing is performed internally, and a basic
       
  1576 solution of the original problem recovered by the presolver is the same
       
  1577 as if it were computed directly, i.e. without presolving.
       
  1578 
       
  1579 Note that the presolver is able to recover only optimal solutions. If
       
  1580 a computed solution is infeasible or non-optimal, the corresponding
       
  1581 solution of the original problem cannot be recovered and therefore
       
  1582 remains undefined. If you need to know a basic solution even if it is
       
  1583 infeasible or non-optimal, the presolver should be disabled.
       
  1584 
       
  1585 \subsubsection*{Terminal output}
       
  1586 
       
  1587 Solving large problem instances may take a long time, so the solver
       
  1588 reports some information about the current basic solution, which is sent
       
  1589 to the terminal. This information has the following format:
       
  1590 
       
  1591 \begin{verbatim}
       
  1592 nnn:  obj = xxx  infeas = yyy (ddd)
       
  1593 \end{verbatim}
       
  1594 
       
  1595 \noindent
       
  1596 where: `\verb|nnn|' is the iteration number, `\verb|xxx|' is the
       
  1597 current value of the objective function (it is is unscaled and has
       
  1598 correct sign); `\verb|yyy|' is the current sum of primal or dual
       
  1599 infeasibilities (it is scaled and therefore may be used only for visual
       
  1600 estimating), `\verb|ddd|' is the current number of fixed basic
       
  1601 variables.
       
  1602 
       
  1603 The symbol preceding the iteration number indicates which phase of the
       
  1604 simplex method is in effect:
       
  1605 
       
  1606 {\it Blank} means that the solver is searching for primal feasible
       
  1607 solution using the primal simplex or for dual feasible solution using
       
  1608 the dual simplex;
       
  1609 
       
  1610 {\it Asterisk} (\verb|*|) means that the solver is searching for
       
  1611 optimal solution using the primal simplex;
       
  1612 
       
  1613 {\it Vertical dash} (\verb/|/) means that the solver is searching for
       
  1614 optimal solution using the dual simplex.
       
  1615 
       
  1616 \subsubsection*{Control parameters}
       
  1617 
       
  1618 This paragraph describes all control parameters currently used in the
       
  1619 simplex solver. Symbolic names of control parameters are names of
       
  1620 corresponding members in the structure \verb|glp_smcp|.
       
  1621 
       
  1622 \medskip
       
  1623 
       
  1624 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  1625 \multicolumn{2}{@{}l}{{\tt int msg\_lev} (default: {\tt GLP\_MSG\_ALL})}
       
  1626 \\
       
  1627 &Message level for terminal output:\\
       
  1628 &\verb|GLP_MSG_OFF|---no output;\\
       
  1629 &\verb|GLP_MSG_ERR|---error and warning messages only;\\
       
  1630 &\verb|GLP_MSG_ON |---normal output;\\
       
  1631 &\verb|GLP_MSG_ALL|---full output (including informational messages).
       
  1632 \\
       
  1633 \end{tabular}
       
  1634 
       
  1635 \medskip
       
  1636 
       
  1637 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  1638 \multicolumn{2}{@{}l}{{\tt int meth} (default: {\tt GLP\_PRIMAL})}
       
  1639 \\
       
  1640 &Simplex method option:\\
       
  1641 &\verb|GLP_PRIMAL|---use two-phase primal simplex;\\
       
  1642 &\verb|GLP_DUAL  |---use two-phase dual simplex;\\
       
  1643 &\verb|GLP_DUALP |---use two-phase dual simplex, and if it fails,
       
  1644 switch to the\\
       
  1645 &\verb|            |$\:$ primal simplex.\\
       
  1646 \end{tabular}
       
  1647 
       
  1648 \medskip
       
  1649 
       
  1650 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  1651 \multicolumn{2}{@{}l}{{\tt int pricing} (default: {\tt GLP\_PT\_PSE})}
       
  1652 \\
       
  1653 &Pricing technique:\\
       
  1654 &\verb|GLP_PT_STD|---standard (textbook);\\
       
  1655 &\verb|GLP_PT_PSE|---projected steepest edge.\\
       
  1656 \end{tabular}
       
  1657 
       
  1658 \medskip
       
  1659 
       
  1660 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  1661 \multicolumn{2}{@{}l}{{\tt int r\_test} (default: {\tt GLP\_RT\_HAR})}
       
  1662 \\
       
  1663 &Ratio test technique:\\
       
  1664 &\verb|GLP_RT_STD|---standard (textbook);\\
       
  1665 &\verb|GLP_RT_HAR|---Harris' two-pass ratio test.\\
       
  1666 \end{tabular}
       
  1667 
       
  1668 \medskip
       
  1669 
       
  1670 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  1671 \multicolumn{2}{@{}l}{{\tt double tol\_bnd} (default: {\tt 1e-7})}
       
  1672 \\
       
  1673 &Tolerance used to check if the basic solution is primal feasible.
       
  1674 (Do not change this parameter without detailed understanding its
       
  1675 purpose.)\\
       
  1676 \end{tabular}
       
  1677 
       
  1678 \medskip
       
  1679 
       
  1680 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  1681 \multicolumn{2}{@{}l}{{\tt double tol\_dj} (default: {\tt 1e-7})}
       
  1682 \\
       
  1683 &Tolerance used to check if the basic solution is dual feasible.
       
  1684 (Do not change this parameter without detailed understanding its
       
  1685 purpose.)\\
       
  1686 \end{tabular}
       
  1687 
       
  1688 \medskip
       
  1689 
       
  1690 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  1691 \multicolumn{2}{@{}l}{{\tt double tol\_piv} (default: {\tt 1e-10})}
       
  1692 \\
       
  1693 &Tolerance used to choose eligble pivotal elements of the simplex table.
       
  1694 (Do not change this parameter without detailed understanding its
       
  1695 purpose.)\\
       
  1696 \end{tabular}
       
  1697 
       
  1698 \medskip
       
  1699 
       
  1700 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  1701 \multicolumn{2}{@{}l}{{\tt double obj\_ll} (default: {\tt -DBL\_MAX})}
       
  1702 \\
       
  1703 &Lower limit of the objective function. If the objective function
       
  1704 reaches this limit and continues decreasing, the solver terminates the
       
  1705 search. (Used in the dual simplex only.)\\
       
  1706 \end{tabular}
       
  1707 
       
  1708 \medskip
       
  1709 
       
  1710 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  1711 \multicolumn{2}{@{}l}{{\tt double obj\_ul} (default: {\tt +DBL\_MAX})}
       
  1712 \\
       
  1713 &Upper limit of the objective function. If the objective function
       
  1714 reaches this limit and continues increasing, the solver terminates the
       
  1715 search. (Used in the dual simplex only.)\\
       
  1716 \end{tabular}
       
  1717 
       
  1718 \medskip
       
  1719 
       
  1720 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  1721 \multicolumn{2}{@{}l}{{\tt int it\_lim} (default: {\tt INT\_MAX})}
       
  1722 \\
       
  1723 &Simplex iteration limit.\\
       
  1724 \end{tabular}
       
  1725 
       
  1726 \medskip
       
  1727 
       
  1728 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  1729 \multicolumn{2}{@{}l}{{\tt int tm\_lim} (default: {\tt INT\_MAX})}
       
  1730 \\
       
  1731 &Searching time limit, in milliseconds.\\
       
  1732 \end{tabular}
       
  1733 
       
  1734 \medskip
       
  1735 
       
  1736 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  1737 \multicolumn{2}{@{}l}{{\tt int out\_frq} (default: {\tt 500})}
       
  1738 \\
       
  1739 &Output frequency, in iterations. This parameter specifies how
       
  1740 frequently the solver sends information about the solution process to
       
  1741 the terminal.\\
       
  1742 \end{tabular}
       
  1743 
       
  1744 \medskip
       
  1745 
       
  1746 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  1747 \multicolumn{2}{@{}l}{{\tt int out\_dly} (default: {\tt 0})}
       
  1748 \\
       
  1749 &Output delay, in milliseconds. This parameter specifies how long the
       
  1750 solver should delay sending information about the solution process to
       
  1751 the terminal.\\
       
  1752 \end{tabular}
       
  1753 
       
  1754 \medskip
       
  1755 
       
  1756 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  1757 \multicolumn{2}{@{}l}{{\tt int presolve} (default: {\tt GLP\_OFF})}
       
  1758 \\
       
  1759 &LP presolver option:\\
       
  1760 &\verb|GLP_ON |---enable using the LP presolver;\\
       
  1761 &\verb|GLP_OFF|---disable using the LP presolver.\\
       
  1762 \end{tabular}
       
  1763 
       
  1764 \subsubsection*{Example 1}
       
  1765 
       
  1766 The following main program reads LP problem instance in fixed MPS
       
  1767 format from file \verb|25fv47.mps|,\footnote{This instance in fixed MPS
       
  1768 format can be found in the Netlib LP collection; see
       
  1769 {\tt ftp://ftp.netlib.org/lp/data/}.} constructs an advanced initial
       
  1770 basis, solves the instance with the primal simplex method (by default),
       
  1771 and writes the solution to file \verb|25fv47.txt|.
       
  1772 
       
  1773 \newpage
       
  1774 
       
  1775 \begin{footnotesize}
       
  1776 \begin{verbatim}
       
  1777 /* spxsamp1.c */
       
  1778 
       
  1779 #include <stdio.h>
       
  1780 #include <stdlib.h>
       
  1781 #include <glpk.h>
       
  1782 
       
  1783 int main(void)
       
  1784 {     glp_prob *P;
       
  1785       P = glp_create_prob();
       
  1786       glp_read_mps(P, GLP_MPS_DECK, NULL, "25fv47.mps");
       
  1787       glp_adv_basis(P, 0);
       
  1788       glp_simplex(P, NULL);
       
  1789       glp_print_sol(P, "25fv47.txt");
       
  1790       glp_delete_prob(P);
       
  1791       return 0;
       
  1792 }
       
  1793 
       
  1794 /* eof */
       
  1795 \end{verbatim}
       
  1796 \end{footnotesize}
       
  1797 
       
  1798 \noindent
       
  1799 Below here is shown the terminal output from this example program.
       
  1800 
       
  1801 \begin{footnotesize}
       
  1802 \begin{verbatim}
       
  1803 Reading problem data from `25fv47.mps'...
       
  1804 Problem: 25FV47
       
  1805 Objective: R0000
       
  1806 822 rows, 1571 columns, 11127 non-zeros
       
  1807 6919 records were read
       
  1808 Crashing...
       
  1809 Size of triangular part = 799
       
  1810       0: obj =   1.627307307e+04  infeas =  5.194e+04 (23)
       
  1811     200: obj =   1.474901610e+04  infeas =  1.233e+04 (19)
       
  1812     400: obj =   1.343909995e+04  infeas =  3.648e+03 (13)
       
  1813     600: obj =   1.756052217e+04  infeas =  4.179e+02 (7)
       
  1814 *   775: obj =   1.789251591e+04  infeas =  4.982e-14 (1)
       
  1815 *   800: obj =   1.663354510e+04  infeas =  2.857e-14 (1)
       
  1816 *  1000: obj =   1.024935068e+04  infeas =  1.958e-12 (1)
       
  1817 *  1200: obj =   7.860174791e+03  infeas =  2.810e-29 (1)
       
  1818 *  1400: obj =   6.642378184e+03  infeas =  2.036e-16 (1)
       
  1819 *  1600: obj =   6.037014568e+03  infeas =  0.000e+00 (1)
       
  1820 *  1800: obj =   5.662171307e+03  infeas =  6.447e-15 (1)
       
  1821 *  2000: obj =   5.528146165e+03  infeas =  9.764e-13 (1)
       
  1822 *  2125: obj =   5.501845888e+03  infeas =  0.000e+00 (1)
       
  1823 OPTIMAL SOLUTION FOUND
       
  1824 Writing basic solution to `25fv47.txt'...
       
  1825 \end{verbatim}
       
  1826 \end{footnotesize}
       
  1827 
       
  1828 \newpage
       
  1829 
       
  1830 \subsubsection*{Example 2}
       
  1831 
       
  1832 The following main program solves the same LP problem instance as in
       
  1833 Example 1 above, however, it uses the dual simplex method, which starts
       
  1834 from the standard initial basis.
       
  1835 
       
  1836 \begin{footnotesize}
       
  1837 \begin{verbatim}
       
  1838 /* spxsamp2.c */
       
  1839 
       
  1840 #include <stdio.h>
       
  1841 #include <stdlib.h>
       
  1842 #include <glpk.h>
       
  1843 
       
  1844 int main(void)
       
  1845 {     glp_prob *P;
       
  1846       glp_smcp parm;
       
  1847       P = glp_create_prob();
       
  1848       glp_read_mps(P, GLP_MPS_DECK, NULL, "25fv47.mps");
       
  1849       glp_init_smcp(&parm);
       
  1850       parm.meth = GLP_DUAL;
       
  1851       glp_simplex(P, &parm);
       
  1852       glp_print_sol(P, "25fv47.txt");
       
  1853       glp_delete_prob(P);
       
  1854       return 0;
       
  1855 }
       
  1856 
       
  1857 /* eof */
       
  1858 \end{verbatim}
       
  1859 \end{footnotesize}
       
  1860 
       
  1861 \noindent
       
  1862 Below here is shown the terminal output from this example program.
       
  1863 
       
  1864 \begin{footnotesize}
       
  1865 \begin{verbatim}
       
  1866 Reading problem data from `25fv47.mps'...
       
  1867 Problem: 25FV47
       
  1868 Objective: R0000
       
  1869 822 rows, 1571 columns, 11127 non-zeros
       
  1870 6919 records were read
       
  1871       0:                          infeas =  1.223e+03 (516)
       
  1872     200:                          infeas =  7.000e+00 (471)
       
  1873     240:                          infeas =  1.106e-14 (461)
       
  1874 |   400: obj =  -5.394267152e+03  infeas =  5.571e-16 (391)
       
  1875 |   600: obj =  -4.586395752e+03  infeas =  1.389e-15 (340)
       
  1876 |   800: obj =  -4.158268146e+03  infeas =  1.640e-15 (264)
       
  1877 |  1000: obj =  -3.725320045e+03  infeas =  5.181e-15 (245)
       
  1878 |  1200: obj =  -3.104802163e+03  infeas =  1.019e-14 (210)
       
  1879 |  1400: obj =  -2.584190499e+03  infeas =  8.865e-15 (178)
       
  1880 |  1600: obj =  -2.073852927e+03  infeas =  7.867e-15 (142)
       
  1881 |  1800: obj =  -1.164037407e+03  infeas =  8.792e-15 (109)
       
  1882 |  2000: obj =  -4.370590250e+02  infeas =  2.591e-14 (85)
       
  1883 |  2200: obj =   1.068240144e+03  infeas =  1.025e-13 (70)
       
  1884 |  2400: obj =   1.607481126e+03  infeas =  3.272e-14 (67)
       
  1885 |  2600: obj =   3.038230551e+03  infeas =  4.850e-14 (52)
       
  1886 |  2800: obj =   4.316238187e+03  infeas =  2.622e-14 (36)
       
  1887 |  3000: obj =   5.443842629e+03  infeas =  3.976e-15 (11)
       
  1888 |  3060: obj =   5.501845888e+03  infeas =  8.806e-15 (2)
       
  1889 OPTIMAL SOLUTION FOUND
       
  1890 Writing basic solution to `25fv47.txt'...
       
  1891 \end{verbatim}
       
  1892 \end{footnotesize}
       
  1893 
       
  1894 \subsection{glp\_exact---solve LP problem in exact arithmetic}
       
  1895 
       
  1896 \subsubsection*{Synopsis}
       
  1897 
       
  1898 \begin{verbatim}
       
  1899 int glp_exact(glp_prob *lp, const glp_smcp *parm);
       
  1900 \end{verbatim}
       
  1901 
       
  1902 \subsubsection*{Description}
       
  1903 
       
  1904 The routine \verb|glp_exact| is a tentative implementation of the
       
  1905 primal two-phase simplex method based on exact (rational) arithmetic.
       
  1906 It is similar to the routine \verb|glp_simplex|, however, for all
       
  1907 internal computations it uses arithmetic of rational numbers, which is
       
  1908 exact in mathematical sense, i.e. free of round-off errors unlike
       
  1909 floating-point arithmetic.
       
  1910 
       
  1911 Note that the routine \verb|glp_exact| uses only two control parameters
       
  1912 passed in the structure \verb|glp_smcp|, namely, \verb|it_lim| and
       
  1913 \verb|tm_lim|.
       
  1914 
       
  1915 \subsubsection*{Returns}
       
  1916 
       
  1917 \def\arraystretch{1}
       
  1918 
       
  1919 \begin{tabular}{@{}p{25mm}p{97.3mm}@{}}
       
  1920 0 & The LP problem instance has been successfully solved. (This code
       
  1921 does {\it not} necessarily mean that the solver has found optimal
       
  1922 solution. It only means that the solution process was successful.) \\
       
  1923 \verb|GLP_EBADB| & Unable to start the search, because the initial basis
       
  1924 specified in the problem object is invalid---the number of basic
       
  1925 (auxiliary and structural) variables is not the same as the number of
       
  1926 rows in the problem object.\\
       
  1927 \verb|GLP_ESING| & Unable to start the search, because the basis matrix
       
  1928 corresponding to the initial basis is exactly singular.\\
       
  1929 \verb|GLP_EBOUND| & Unable to start the search, because some
       
  1930 double-bounded (auxiliary or structural) variables have incorrect
       
  1931 bounds.\\
       
  1932 \verb|GLP_EFAIL| & The problem instance has no rows/columns.\\
       
  1933 \verb|GLP_EITLIM| & The search was prematurely terminated, because the
       
  1934 simplex iteration limit has been exceeded.\\
       
  1935 \verb|GLP_ETMLIM| & The search was prematurely terminated, because the
       
  1936 time limit has been exceeded.\\
       
  1937 \end{tabular}
       
  1938 
       
  1939 \subsubsection*{Comments}
       
  1940 
       
  1941 Computations in exact arithmetic are very time consuming, so solving
       
  1942 LP problem with the routine \verb|glp_exact| from the very beginning is
       
  1943 not a good idea. It is much better at first to find an optimal basis
       
  1944 with the routine \verb|glp_simplex| and only then to call
       
  1945 \verb|glp_exact|, in which case only a few simplex iterations need to
       
  1946 be performed in exact arithmetic.
       
  1947 
       
  1948 \subsection{glp\_init\_smcp---initialize simplex solver control
       
  1949 parameters}
       
  1950 
       
  1951 \subsubsection*{Synopsis}
       
  1952 
       
  1953 \begin{verbatim}
       
  1954 int glp_init_smcp(glp_smcp *parm);
       
  1955 \end{verbatim}
       
  1956 
       
  1957 \subsubsection*{Description}
       
  1958 
       
  1959 The routine \verb|glp_init_smcp| initializes control parameters, which
       
  1960 are used by the simplex solver, with default values.
       
  1961 
       
  1962 Default values of the control parameters are stored in a \verb|glp_smcp|
       
  1963 structure, which the parameter \verb|parm| points to.
       
  1964 
       
  1965 \subsection{glp\_get\_status---determine generic status of basic
       
  1966 solution}
       
  1967 
       
  1968 \subsubsection*{Synopsis}
       
  1969 
       
  1970 \begin{verbatim}
       
  1971 int glp_get_status(glp_prob *lp);
       
  1972 \end{verbatim}
       
  1973 
       
  1974 \subsubsection*{Returns}
       
  1975 
       
  1976 The routine \verb|glp_get_status| reports the generic status of the
       
  1977 current basic solution for the specified problem object as follows:
       
  1978 
       
  1979 \begin{tabular}{@{}ll}
       
  1980 \verb|GLP_OPT|    & solution is optimal; \\
       
  1981 \verb|GLP_FEAS|   & solution is feasible; \\
       
  1982 \verb|GLP_INFEAS| & solution is infeasible; \\
       
  1983 \verb|GLP_NOFEAS| & problem has no feasible solution; \\
       
  1984 \verb|GLP_UNBND|  & problem has unbounded solution; \\
       
  1985 \verb|GLP_UNDEF|  & solution is undefined. \\
       
  1986 \end{tabular}
       
  1987 
       
  1988 More detailed information about the status of basic solution can be
       
  1989 retrieved with the routines \verb|glp_get_prim_stat| and
       
  1990 \verb|glp_get_dual_stat|.
       
  1991 
       
  1992 \newpage
       
  1993 
       
  1994 \subsection{glp\_get\_prim\_stat---retrieve status of primal basic
       
  1995 solution}
       
  1996 
       
  1997 \subsubsection*{Synopsis}
       
  1998 
       
  1999 \begin{verbatim}
       
  2000 int glp_get_prim_stat(glp_prob *lp);
       
  2001 \end{verbatim}
       
  2002 
       
  2003 \subsubsection*{Returns}
       
  2004 
       
  2005 The routine \verb|glp_get_prim_stat| reports the status of the primal
       
  2006 basic solution for the specified problem object as follows:
       
  2007 
       
  2008 \begin{tabular}{@{}ll}
       
  2009 \verb|GLP_UNDEF|  & primal solution is undefined; \\
       
  2010 \verb|GLP_FEAS|   & primal solution is feasible; \\
       
  2011 \verb|GLP_INFEAS| & primal solution is infeasible; \\
       
  2012 \verb|GLP_NOFEAS| & no primal feasible solution exists. \\
       
  2013 \end{tabular}
       
  2014 
       
  2015 \subsection{glp\_get\_dual\_stat---retrieve status of dual basic
       
  2016 solution}
       
  2017 
       
  2018 \subsubsection*{Synopsis}
       
  2019 
       
  2020 \begin{verbatim}
       
  2021 int glp_get_dual_stat(glp_prob *lp);
       
  2022 \end{verbatim}
       
  2023 
       
  2024 \subsubsection*{Returns}
       
  2025 
       
  2026 The routine \verb|glp_get_dual_stat| reports the status of the dual
       
  2027 basic solution for the specified problem object as follows:
       
  2028 
       
  2029 \begin{tabular}{@{}ll}
       
  2030 \verb|GLP_UNDEF|  & dual solution is undefined; \\
       
  2031 \verb|GLP_FEAS|   & dual solution is feasible; \\
       
  2032 \verb|GLP_INFEAS| & dual solution is infeasible; \\
       
  2033 \verb|GLP_NOFEAS| & no dual feasible solution exists. \\
       
  2034 \end{tabular}
       
  2035 
       
  2036 \subsection{glp\_get\_obj\_val---retrieve objective value}
       
  2037 
       
  2038 \subsubsection*{Synopsis}
       
  2039 
       
  2040 \begin{verbatim}
       
  2041 double glp_get_obj_val(glp_prob *lp);
       
  2042 \end{verbatim}
       
  2043 
       
  2044 \subsubsection*{Returns}
       
  2045 
       
  2046 The routine \verb|glp_get_obj_val| returns current value of the
       
  2047 objective function.
       
  2048 
       
  2049 \subsection{glp\_get\_row\_stat---retrieve row status}
       
  2050 
       
  2051 \subsubsection*{Synopsis}
       
  2052 
       
  2053 \begin{verbatim}
       
  2054 int glp_get_row_stat(glp_prob *lp, int i);
       
  2055 \end{verbatim}
       
  2056 
       
  2057 \subsubsection*{Returns}
       
  2058 
       
  2059 The routine \verb|glp_get_row_stat| returns current status assigned to
       
  2060 the auxiliary variable associated with \verb|i|-th row as follows:
       
  2061 
       
  2062 \begin{tabular}{@{}ll}
       
  2063 \verb|GLP_BS| & basic variable; \\
       
  2064 \verb|GLP_NL| & non-basic variable on its lower bound; \\
       
  2065 \verb|GLP_NU| & non-basic variable on its upper bound; \\
       
  2066 \verb|GLP_NF| & non-basic free (unbounded) variable; \\
       
  2067 \verb|GLP_NS| & non-basic fixed variable. \\
       
  2068 \end{tabular}
       
  2069 
       
  2070 \subsection{glp\_get\_row\_prim---retrieve row primal value}
       
  2071 
       
  2072 \subsubsection*{Synopsis}
       
  2073 
       
  2074 \begin{verbatim}
       
  2075 double glp_get_row_prim(glp_prob *lp, int i);
       
  2076 \end{verbatim}
       
  2077 
       
  2078 \subsubsection*{Returns}
       
  2079 
       
  2080 The routine \verb|glp_get_row_prim| returns primal value of the
       
  2081 auxiliary variable associated with \verb|i|-th row.
       
  2082 
       
  2083 \subsection{glp\_get\_row\_dual---retrieve row dual value}
       
  2084 
       
  2085 \subsubsection*{Synopsis}
       
  2086 
       
  2087 \begin{verbatim}
       
  2088 double glp_get_row_dual(glp_prob *lp, int i);
       
  2089 \end{verbatim}
       
  2090 
       
  2091 \subsubsection*{Returns}
       
  2092 
       
  2093 The routine \verb|glp_get_row_dual| returns dual value (i.e. reduced
       
  2094 cost) of the auxiliary variable associated with \verb|i|-th row.
       
  2095 
       
  2096 \newpage
       
  2097 
       
  2098 \subsection{glp\_get\_col\_stat---retrieve column status}
       
  2099 
       
  2100 \subsubsection*{Synopsis}
       
  2101 
       
  2102 \begin{verbatim}
       
  2103 int glp_get_col_stat(glp_prob *lp, int j);
       
  2104 \end{verbatim}
       
  2105 
       
  2106 \subsubsection*{Returns}
       
  2107 
       
  2108 The routine \verb|glp_get_col_stat| returns current status assigned to
       
  2109 the structural variable associated with \verb|j|-th column as follows:
       
  2110 
       
  2111 \begin{tabular}{@{}ll}
       
  2112 \verb|GLP_BS| & basic variable; \\
       
  2113 \verb|GLP_NL| & non-basic variable on its lower bound; \\
       
  2114 \verb|GLP_NU| & non-basic variable on its upper bound; \\
       
  2115 \verb|GLP_NF| & non-basic free (unbounded) variable; \\
       
  2116 \verb|GLP_NS| & non-basic fixed variable. \\
       
  2117 \end{tabular}
       
  2118 
       
  2119 \subsection{glp\_get\_col\_prim---retrieve column primal value}
       
  2120 
       
  2121 \subsubsection*{Synopsis}
       
  2122 
       
  2123 \begin{verbatim}
       
  2124 double glp_get_col_prim(glp_prob *lp, int j);
       
  2125 \end{verbatim}
       
  2126 
       
  2127 \subsubsection*{Returns}
       
  2128 
       
  2129 The routine \verb|glp_get_col_prim| returns primal value of the
       
  2130 structural variable associated with \verb|j|-th column.
       
  2131 
       
  2132 \subsection{glp\_get\_col\_dual---retrieve column dual value}
       
  2133 
       
  2134 \subsubsection*{Synopsis}
       
  2135 
       
  2136 \begin{verbatim}
       
  2137 double glp_get_col_dual(glp_prob *lp, int j);
       
  2138 \end{verbatim}
       
  2139 
       
  2140 \subsubsection*{Returns}
       
  2141 
       
  2142 The routine \verb|glp_get_col_dual| returns dual value (i.e. reduced
       
  2143 cost) of the structural variable associated with \verb|j|-th column.
       
  2144 
       
  2145 \newpage
       
  2146 
       
  2147 \subsection{glp\_get\_unbnd\_ray---determine variable causing\\
       
  2148 unboundedness}
       
  2149 
       
  2150 \subsubsection*{Synopsis}
       
  2151 
       
  2152 \begin{verbatim}
       
  2153 int glp_get_unbnd_ray(glp_prob *lp);
       
  2154 \end{verbatim}
       
  2155 
       
  2156 \subsubsection*{Returns}
       
  2157 
       
  2158 The routine \verb|glp_get_unbnd_ray| returns the number $k$ of
       
  2159 a variable, which causes primal or dual unboundedness.
       
  2160 If $1\leq k\leq m$, it is $k$-th auxiliary variable, and if
       
  2161 $m+1\leq k\leq m+n$, it is $(k-m)$-th structural variable, where $m$ is
       
  2162 the number of rows, $n$ is the number of columns in the problem object.
       
  2163 If such variable is not defined, the routine returns 0.
       
  2164 
       
  2165 \subsubsection*{Comments}
       
  2166 
       
  2167 If it is not exactly known which version of the simplex solver
       
  2168 detected unboundedness, i.e. whether the unboundedness is primal or
       
  2169 dual, it is sufficient to check the status of the variable
       
  2170 with the routine \verb|glp_get_row_stat| or \verb|glp_get_col_stat|.
       
  2171 If the variable is non-basic, the unboundedness is primal, otherwise,
       
  2172 if the variable is basic, the unboundedness is dual (the latter case
       
  2173 means that the problem has no primal feasible dolution).
       
  2174 
       
  2175 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
  2176 
       
  2177 \newpage
       
  2178 
       
  2179 \section{Interior-point method routines}
       
  2180 
       
  2181 {\it Interior-point methods} (also known as {\it barrier methods}) are
       
  2182 more modern and powerful numerical methods for large-scale linear
       
  2183 programming. Such methods are especially efficient for very sparse LP
       
  2184 problems and allow solving such problems much faster than the simplex
       
  2185 method.
       
  2186 
       
  2187 In brief, the GLPK interior-point solver works as follows.
       
  2188 
       
  2189 At first, the solver transforms the original LP to a {\it working} LP
       
  2190 in the standard format:
       
  2191 
       
  2192 \medskip
       
  2193 
       
  2194 \noindent
       
  2195 \hspace{.5in} minimize
       
  2196 $$z = c_1x_{m+1} + c_2x_{m+2} + \dots + c_nx_{m+n} + c_0 \eqno (2.4)$$
       
  2197 \hspace{.5in} subject to linear constraints
       
  2198 $$
       
  2199 \begin{array}{r@{\:}c@{\:}r@{\:}c@{\:}r@{\:}c@{\:}l}
       
  2200 a_{11}x_{m+1}&+&a_{12}x_{m+2}&+ \dots +&a_{1n}x_{m+n}&=&b_1 \\
       
  2201 a_{21}x_{m+1}&+&a_{22}x_{m+2}&+ \dots +&a_{2n}x_{m+n}&=&b_2 \\
       
  2202 \multicolumn{7}{c}
       
  2203 {.\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .} \\
       
  2204 a_{m1}x_{m+1}&+&a_{m2}x_{m+2}&+ \dots +&a_{mn}x_{m+n}&=&b_m \\
       
  2205 \end{array} \eqno (2.5)
       
  2206 $$
       
  2207 \hspace{.5in} and non-negative variables
       
  2208 $$x_1\geq 0,\ \ x_2\geq 0,\ \ \dots,\ \ x_n\geq 0 \eqno(2.6)$$
       
  2209 where: $z$ is the objective function; $x_1$, \dots, $x_n$ are variables;
       
  2210 $c_1$, \dots, $c_n$ are objective coefficients; $c_0$ is a constant term
       
  2211 of the objective function;\linebreak $a_{11}$, \dots, $a_{mn}$ are
       
  2212 constraint coefficients; $b_1$, \dots, $b_m$ are right-hand sides.
       
  2213 
       
  2214 Using vector and matrix notations the working LP (2.4)---(2.6) can be
       
  2215 written as follows:
       
  2216 $$z=c^Tx+c_0\ \rightarrow\ \min,\eqno(2.7)$$
       
  2217 $$Ax=b,\eqno(2.8)$$
       
  2218 $$x\geq 0,\eqno(2.9)$$
       
  2219 where: $x=(x_j)$ is $n$-vector of variables, $c=(c_j)$ is $n$-vector of
       
  2220 objective coefficients, $A=(a_{ij})$ is $m\times n$-matrix of
       
  2221 constraint coefficients, and $b=(b_i)$ is $m$-vector of right-hand
       
  2222 sides.
       
  2223 
       
  2224 Karush--Kuhn--Tucker optimality conditions for LP (2.7)---(2.9) are the
       
  2225 following:
       
  2226 
       
  2227 \newpage
       
  2228 
       
  2229 $$Ax=b,\eqno(2.10)$$
       
  2230 $$A^T\pi+\lambda=c,\eqno(2.11)$$
       
  2231 $$\lambda^Tx=0,\eqno(2.12)$$
       
  2232 $$x\geq 0,\ \ \lambda\geq 0,\eqno(2.13)$$
       
  2233 where: $\pi$ is $m$-vector of Lagrange multipliers (dual variables) for
       
  2234 equality constraints (2.8), $\lambda$ is $n$-vector of Lagrange
       
  2235 multipliers (dual variables) for non-negativity constraints (2.9),
       
  2236 (2.10) is the primal feasibility condition, (2.11) is the dual
       
  2237 feasibility condition, (2.12) is the primal-dual complementarity
       
  2238 condition, and (2.13) is the non-negativity conditions.
       
  2239 
       
  2240 The main idea of the primal-dual interior-point method is based on
       
  2241 finding a point in the primal-dual space (i.e. in the space of all
       
  2242 primal and dual variables $x$, $\pi$, and $\lambda$), which satisfies
       
  2243 to all optimality conditions (2.10)---(2.13). Obviously, $x$-component
       
  2244 of such point then provides an optimal solution to the working LP
       
  2245 (2.7)---(2.9).
       
  2246 
       
  2247 To find the optimal point $(x^*,\pi^*,\lambda^*)$ the interior-point
       
  2248 method attempts to solve the system of equations (2.10)---(2.12), which
       
  2249 is closed in the sense that the number of variables $x_j$, $\pi_i$, and
       
  2250 $\lambda_j$ and the number equations are the same and equal to $m+2n$.
       
  2251 Due to condition (2.12) this system of equations is non-linear, so it
       
  2252 can be solved with a version of {\it Newton's method} provided with
       
  2253 additional rules to keep the current point within the positive orthant
       
  2254 as required by the non-negativity conditions (2.13).
       
  2255 
       
  2256 Finally, once the optimal point $(x^*,\pi^*,\lambda^*)$ has been found,
       
  2257 the solver performs inverse transformations to recover corresponding
       
  2258 solution to the original LP passed to the solver from the application
       
  2259 program.
       
  2260 
       
  2261 \subsection{glp\_interior---solve LP problem with the interior-point
       
  2262 method}
       
  2263 
       
  2264 \subsubsection*{Synopsis}
       
  2265 
       
  2266 \begin{verbatim}
       
  2267 int glp_interior(glp_prob *P, const glp_iptcp *parm);
       
  2268 \end{verbatim}
       
  2269 
       
  2270 \subsubsection*{Description}
       
  2271 
       
  2272 The routine \verb|glp_interior| is a driver to the LP solver based on
       
  2273 the primal-dual interior-point method. This routine retrieves problem
       
  2274 data from the specified problem object, calls the solver to solve the
       
  2275 problem instance, and stores results of computations back into the
       
  2276 problem object.
       
  2277 
       
  2278 The interior-point solver has a set of control parameters. Values of
       
  2279 the control parameters can be passed in the structure \verb|glp_iptcp|,
       
  2280 which the parameter \verb|parm| points to. For detailed description of
       
  2281 this structure see paragraph ``Control parameters'' below. Before
       
  2282 specifying some control parameters the application program should
       
  2283 initialize the structure \verb|glp_iptcp| by default values of all
       
  2284 control parameters using the routine \verb|glp_init_iptcp| (see the
       
  2285 next subsection). This is needed for backward compatibility, because in
       
  2286 the future there may appear new members in the structure
       
  2287 \verb|glp_iptcp|.
       
  2288 
       
  2289 The parameter \verb|parm| can be specified as \verb|NULL|, in which
       
  2290 case the solver uses default settings.
       
  2291 
       
  2292 \subsubsection*{Returns}
       
  2293 
       
  2294 \def\arraystretch{1}
       
  2295 
       
  2296 \begin{tabular}{@{}p{25mm}p{97.3mm}@{}}
       
  2297 0 & The LP problem instance has been successfully solved. (This code
       
  2298 does {\it not} necessarily mean that the solver has found optimal
       
  2299 solution. It only means that the solution process was successful.) \\
       
  2300 \verb|GLP_EFAIL| & The problem has no rows/columns.\\
       
  2301 \verb|GLP_ENOCVG| & Very slow convergence or divergence.\\
       
  2302 \verb|GLP_EITLIM| & Iteration limit exceeded.\\
       
  2303 \verb|GLP_EINSTAB| & Numerical instability on solving Newtonian
       
  2304 system.\\
       
  2305 \end{tabular}
       
  2306 
       
  2307 \subsubsection*{Comments}
       
  2308 
       
  2309 The routine \verb|glp_interior| implements an easy version of
       
  2310 the primal-dual interior-point method based on Mehrotra's
       
  2311 technique.\footnote{S. Mehrotra. On the implementation of a primal-dual
       
  2312 interior point method. SIAM J. on Optim., 2(4), pp. 575-601, 1992.}
       
  2313 
       
  2314 Note that currently the GLPK interior-point solver does not include
       
  2315 many important features, in particular:
       
  2316 
       
  2317 $\bullet$ it is not able to process dense columns. Thus, if the
       
  2318 constraint matrix of the LP problem has dense columns, the solving
       
  2319 process may be inefficient;
       
  2320 
       
  2321 $\bullet$ it has no features against numerical instability. For some
       
  2322 LP problems premature termination may happen if the matrix $ADA^T$
       
  2323 becomes singular or ill-conditioned;
       
  2324 
       
  2325 $\bullet$ it is not able to identify the optimal basis, which
       
  2326 corresponds to the interior-point solution found.
       
  2327 
       
  2328 \newpage
       
  2329 
       
  2330 \subsubsection*{Terminal output}
       
  2331 
       
  2332 Solving large LP problems may take a long time, so the solver reports
       
  2333 some information about every interior-point iteration,\footnote{Unlike
       
  2334 the simplex method the interior point method usually needs 30---50
       
  2335 iterations (independently on the problem size) in order to find an
       
  2336 optimal solution.} which is sent to the terminal. This information has
       
  2337 the following format:
       
  2338 
       
  2339 \begin{verbatim}
       
  2340 nnn: obj = fff; rpi = ppp; rdi = ddd; gap = ggg
       
  2341 \end{verbatim}
       
  2342 
       
  2343 \noindent where: \verb|nnn| is iteration number, \verb|fff| is the
       
  2344 current value of the objective function (in the case of maximization it
       
  2345 has wrong sign), \verb|ppp| is the current relative primal
       
  2346 infeasibility (cf. (2.10)):
       
  2347 $$\frac{\|Ax^{(k)}-b\|}{1+\|b\|},\eqno(2.14)$$
       
  2348 \verb|ddd| is the current relative dual infeasibility (cf. (2.11)):
       
  2349 $$\frac{\|A^T\pi^{(k)}+\lambda^{(k)}-c\|}{1+\|c\|},\eqno(2.15)$$
       
  2350 \verb|ggg| is the current primal-dual gap (cf. (2.12)):
       
  2351 $$\frac{|c^Tx^{(k)}-b^T\pi^{(k)}|}{1+|c^Tx^{(k)}|},\eqno(2.16)$$
       
  2352 and $[x^{(k)},\pi^{(k)},\lambda^{(k)}]$ is the current point on $k$-th
       
  2353 iteration, $k=0,1,2,\dots$\ . Note that all solution components are
       
  2354 internally scaled, so information sent to the terminal is suitable only
       
  2355 for visual inspection.
       
  2356 
       
  2357 \subsubsection*{Control parameters}
       
  2358 
       
  2359 This paragraph describes all control parameters currently used in the
       
  2360 interior-point solver. Symbolic names of control parameters are names of
       
  2361 corresponding members in the structure \verb|glp_iptcp|.
       
  2362 
       
  2363 \medskip
       
  2364 
       
  2365 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2366 \multicolumn{2}{@{}l}{{\tt int msg\_lev} (default: {\tt GLP\_MSG\_ALL})}
       
  2367 \\
       
  2368 &Message level for terminal output:\\
       
  2369 &\verb|GLP_MSG_OFF|---no output;\\
       
  2370 &\verb|GLP_MSG_ERR|---error and warning messages only;\\
       
  2371 &\verb|GLP_MSG_ON |---normal output;\\
       
  2372 &\verb|GLP_MSG_ALL|---full output (including informational messages).
       
  2373 \\
       
  2374 \end{tabular}
       
  2375 
       
  2376 \medskip
       
  2377 
       
  2378 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2379 \multicolumn{2}{@{}l}{{\tt int ord\_alg} (default: {\tt GLP\_ORD\_AMD})}
       
  2380 \\
       
  2381 &Ordering algorithm used prior to Cholesky factorization:\\
       
  2382 &\verb|GLP_ORD_NONE  |---use natural (original) ordering;\\
       
  2383 &\verb|GLP_ORD_QMD   |---quotient minimum degree (QMD);\\
       
  2384 &\verb|GLP_ORD_AMD   |---approximate minimum degree (AMD);\\
       
  2385 &\verb|GLP_ORD_SYMAMD|---approximate minimum degree (SYMAMD).\\
       
  2386 \end{tabular}
       
  2387 
       
  2388 \subsubsection*{Example}
       
  2389 
       
  2390 The following main program reads LP problem instance in fixed MPS
       
  2391 format from file \verb|25fv47.mps|,\footnote{This instance in fixed MPS
       
  2392 format can be found in the Netlib LP collection; see
       
  2393 {\tt ftp://ftp.netlib.org/lp/data/}.} solves it with the interior-point
       
  2394 solver, and writes the solution to file \verb|25fv47.txt|.
       
  2395 
       
  2396 \begin{footnotesize}
       
  2397 \begin{verbatim}
       
  2398 /* iptsamp.c */
       
  2399 
       
  2400 #include <stdio.h>
       
  2401 #include <stdlib.h>
       
  2402 #include <glpk.h>
       
  2403 
       
  2404 int main(void)
       
  2405 {     glp_prob *P;
       
  2406       P = glp_create_prob();
       
  2407       glp_read_mps(P, GLP_MPS_DECK, NULL, "25fv47.mps");
       
  2408       glp_interior(P, NULL);
       
  2409       glp_print_ipt(P, "25fv47.txt");
       
  2410       glp_delete_prob(P);
       
  2411       return 0;
       
  2412 }
       
  2413 
       
  2414 /* eof */
       
  2415 \end{verbatim}
       
  2416 \end{footnotesize}
       
  2417 
       
  2418 \noindent
       
  2419 Below here is shown the terminal output from this example program.
       
  2420 
       
  2421 \begin{footnotesize}
       
  2422 \begin{verbatim}
       
  2423 Reading problem data from `25fv47.mps'...
       
  2424 Problem: 25FV47
       
  2425 Objective: R0000
       
  2426 822 rows, 1571 columns, 11127 non-zeros
       
  2427 6919 records were read
       
  2428 Original LP has 822 row(s), 1571 column(s), and 11127 non-zero(s)
       
  2429 Working LP has 821 row(s), 1876 column(s), and 10705 non-zero(s)
       
  2430 Matrix A has 10705 non-zeros
       
  2431 Matrix S = A*A' has 11895 non-zeros (upper triangle)
       
  2432 Minimal degree ordering...
       
  2433 Computing Cholesky factorization S = L'*L...
       
  2434 Matrix L has 35411 non-zeros
       
  2435 Guessing initial point...
       
  2436 Optimization begins...
       
  2437   0: obj =   1.823377629e+05; rpi =  1.3e+01; rdi =  1.4e+01; gap =  9.3e-01
       
  2438   1: obj =   9.260045192e+04; rpi =  5.3e+00; rdi =  5.6e+00; gap =  6.8e+00
       
  2439   2: obj =   3.596999742e+04; rpi =  1.5e+00; rdi =  1.2e+00; gap =  1.8e+01
       
  2440   3: obj =   1.989627568e+04; rpi =  4.7e-01; rdi =  3.0e-01; gap =  1.9e+01
       
  2441   4: obj =   1.430215557e+04; rpi =  1.1e-01; rdi =  8.6e-02; gap =  1.4e+01
       
  2442   5: obj =   1.155716505e+04; rpi =  2.3e-02; rdi =  2.4e-02; gap =  6.8e+00
       
  2443   6: obj =   9.660273208e+03; rpi =  6.7e-03; rdi =  4.6e-03; gap =  3.9e+00
       
  2444   7: obj =   8.694348283e+03; rpi =  3.7e-03; rdi =  1.7e-03; gap =  2.0e+00
       
  2445   8: obj =   8.019543639e+03; rpi =  2.4e-03; rdi =  3.9e-04; gap =  1.0e+00
       
  2446   9: obj =   7.122676293e+03; rpi =  1.2e-03; rdi =  1.5e-04; gap =  6.6e-01
       
  2447  10: obj =   6.514534518e+03; rpi =  6.1e-04; rdi =  4.3e-05; gap =  4.1e-01
       
  2448  11: obj =   6.361572203e+03; rpi =  4.8e-04; rdi =  2.2e-05; gap =  3.0e-01
       
  2449  12: obj =   6.203355508e+03; rpi =  3.2e-04; rdi =  1.7e-05; gap =  2.6e-01
       
  2450  13: obj =   6.032943411e+03; rpi =  2.0e-04; rdi =  9.3e-06; gap =  2.1e-01
       
  2451  14: obj =   5.796553021e+03; rpi =  9.8e-05; rdi =  3.2e-06; gap =  1.0e-01
       
  2452  15: obj =   5.667032431e+03; rpi =  4.4e-05; rdi =  1.1e-06; gap =  5.6e-02
       
  2453  16: obj =   5.613911867e+03; rpi =  2.5e-05; rdi =  4.1e-07; gap =  3.5e-02
       
  2454  17: obj =   5.560572626e+03; rpi =  9.9e-06; rdi =  2.3e-07; gap =  2.1e-02
       
  2455  18: obj =   5.537276001e+03; rpi =  5.5e-06; rdi =  8.4e-08; gap =  1.1e-02
       
  2456  19: obj =   5.522746942e+03; rpi =  2.2e-06; rdi =  4.0e-08; gap =  6.7e-03
       
  2457  20: obj =   5.509956679e+03; rpi =  7.5e-07; rdi =  1.8e-08; gap =  2.9e-03
       
  2458  21: obj =   5.504571733e+03; rpi =  1.6e-07; rdi =  5.8e-09; gap =  1.1e-03
       
  2459  22: obj =   5.502576367e+03; rpi =  3.4e-08; rdi =  1.0e-09; gap =  2.5e-04
       
  2460  23: obj =   5.502057119e+03; rpi =  8.1e-09; rdi =  3.0e-10; gap =  7.7e-05
       
  2461  24: obj =   5.501885996e+03; rpi =  9.4e-10; rdi =  1.2e-10; gap =  2.4e-05
       
  2462  25: obj =   5.501852464e+03; rpi =  1.4e-10; rdi =  1.2e-11; gap =  3.0e-06
       
  2463  26: obj =   5.501846549e+03; rpi =  1.4e-11; rdi =  1.2e-12; gap =  3.0e-07
       
  2464  27: obj =   5.501845954e+03; rpi =  1.4e-12; rdi =  1.2e-13; gap =  3.0e-08
       
  2465  28: obj =   5.501845895e+03; rpi =  1.5e-13; rdi =  1.2e-14; gap =  3.0e-09
       
  2466 OPTIMAL SOLUTION FOUND
       
  2467 Writing interior-point solution to `25fv47.txt'...
       
  2468 \end{verbatim}
       
  2469 \end{footnotesize}
       
  2470 
       
  2471 \subsection{glp\_init\_iptcp---initialize interior-point solver control
       
  2472 parameters}
       
  2473 
       
  2474 \subsubsection*{Synopsis}
       
  2475 
       
  2476 \begin{verbatim}
       
  2477 int glp_init_iptcp(glp_iptcp *parm);
       
  2478 \end{verbatim}
       
  2479 
       
  2480 \subsubsection*{Description}
       
  2481 
       
  2482 The routine \verb|glp_init_iptcp| initializes control parameters, which
       
  2483 are used by the interior-point solver, with default values.
       
  2484 
       
  2485 Default values of the control parameters are stored in the structure
       
  2486 \verb|glp_iptcp|, which the parameter \verb|parm| points to.
       
  2487 
       
  2488 \subsection{glp\_ipt\_status---determine solution status}
       
  2489 
       
  2490 \subsubsection*{Synopsis}
       
  2491 
       
  2492 \begin{verbatim}
       
  2493 int glp_ipt_status(glp_prob *lp);
       
  2494 \end{verbatim}
       
  2495 
       
  2496 \subsubsection*{Returns}
       
  2497 
       
  2498 The routine \verb|glp_ipt_status| reports the status of a solution
       
  2499 found by the interior-point solver as follows:
       
  2500 
       
  2501 \begin{tabular}{@{}p{25mm}p{91.3mm}@{}}
       
  2502 \verb|GLP_UNDEF| & interior-point solution is undefined. \\
       
  2503 \verb|GLP_OPT|   & interior-point solution is optimal. \\
       
  2504 \verb|GLP_INFEAS|& interior-point solution is infeasible. \\
       
  2505 \verb|GLP_NOFEAS|& no feasible primal-dual solution exists.\\
       
  2506 \end{tabular}
       
  2507 
       
  2508 \subsection{glp\_ipt\_obj\_val---retrieve objective value}
       
  2509 
       
  2510 \subsubsection*{Synopsis}
       
  2511 
       
  2512 \begin{verbatim}
       
  2513 double glp_ipt_obj_val(glp_prob *lp);
       
  2514 \end{verbatim}
       
  2515 
       
  2516 \subsubsection*{Returns}
       
  2517 
       
  2518 The routine \verb|glp_ipt_obj_val| returns value of the objective
       
  2519 function for interior-point solution.
       
  2520 
       
  2521 \subsection{glp\_ipt\_row\_prim---retrieve row primal value}
       
  2522 
       
  2523 \subsubsection*{Synopsis}
       
  2524 
       
  2525 \begin{verbatim}
       
  2526 double glp_ipt_row_prim(glp_prob *lp, int i);
       
  2527 \end{verbatim}
       
  2528 
       
  2529 \subsubsection*{Returns}
       
  2530 
       
  2531 The routine \verb|glp_ipt_row_prim| returns primal value of the
       
  2532 auxiliary variable associated with \verb|i|-th row.
       
  2533 
       
  2534 \newpage
       
  2535 
       
  2536 \subsection{glp\_ipt\_row\_dual---retrieve row dual value}
       
  2537 
       
  2538 \subsubsection*{Synopsis}
       
  2539 
       
  2540 \begin{verbatim}
       
  2541 double glp_ipt_row_dual(glp_prob *lp, int i);
       
  2542 \end{verbatim}
       
  2543 
       
  2544 \subsubsection*{Returns}
       
  2545 
       
  2546 The routine \verb|glp_ipt_row_dual| returns dual value (i.e. reduced
       
  2547 cost) of the auxiliary variable associated with \verb|i|-th row.
       
  2548 
       
  2549 \subsection{glp\_ipt\_col\_prim---retrieve column primal value}
       
  2550 
       
  2551 \subsubsection*{Synopsis}
       
  2552 
       
  2553 \begin{verbatim}
       
  2554 double glp_ipt_col_prim(glp_prob *lp, int j);
       
  2555 \end{verbatim}
       
  2556 
       
  2557 \subsubsection*{Returns}
       
  2558 
       
  2559 The routine \verb|glp_ipt_col_prim| returns primal value of the
       
  2560 structural variable associated with \verb|j|-th column.
       
  2561 
       
  2562 \subsection{glp\_ipt\_col\_dual---retrieve column dual value}
       
  2563 
       
  2564 \subsubsection*{Synopsis}
       
  2565 
       
  2566 \begin{verbatim}
       
  2567 double glp_ipt_col_dual(glp_prob *lp, int j);
       
  2568 \end{verbatim}
       
  2569 
       
  2570 \subsubsection*{Returns}
       
  2571 
       
  2572 The routine \verb|glp_ipt_col_dual| returns dual value (i.e. reduced
       
  2573 cost) of the structural variable associated with \verb|j|-th column.
       
  2574 
       
  2575 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
  2576 
       
  2577 \newpage
       
  2578 
       
  2579 \section{Mixed integer programming routines}
       
  2580 
       
  2581 \subsection{glp\_set\_col\_kind---set (change) column kind}
       
  2582 
       
  2583 \subsubsection*{Synopsis}
       
  2584 
       
  2585 \begin{verbatim}
       
  2586 void glp_set_col_kind(glp_prob *mip, int j, int kind);
       
  2587 \end{verbatim}
       
  2588 
       
  2589 \subsubsection*{Description}
       
  2590 
       
  2591 The routine \verb|glp_set_col_kind| sets (changes) the kind of
       
  2592 \verb|j|-th column (structural variable) as specified by the parameter
       
  2593 \verb|kind|:
       
  2594 
       
  2595 \begin{tabular}{@{}ll}
       
  2596 \verb|GLP_CV| & continuous variable; \\
       
  2597 \verb|GLP_IV| & integer variable; \\
       
  2598 \verb|GLP_BV| & binary variable. \\
       
  2599 \end{tabular}
       
  2600 
       
  2601 %If a column is set to \verb|GLP_IV|, its bounds must be exact integer
       
  2602 %numbers with no tolerance, such that the condition
       
  2603 %\verb|bnd == floor(bnd)| would hold.
       
  2604 
       
  2605 Setting a column to \verb|GLP_BV| has the same effect as if it were
       
  2606 set to \verb|GLP_IV|, its lower bound were set 0, and its upper bound
       
  2607 were set to 1.
       
  2608 
       
  2609 \subsection{glp\_get\_col\_kind---retrieve column kind}
       
  2610 
       
  2611 \subsubsection*{Synopsis}
       
  2612 
       
  2613 \begin{verbatim}
       
  2614 int glp_get_col_kind(glp_prob *mip, int j);
       
  2615 \end{verbatim}
       
  2616 
       
  2617 \subsubsection*{Returns}
       
  2618 
       
  2619 The routine \verb|glp_get_col_kind| returns the kind of \verb|j|-th
       
  2620 column (structural variable) as follows:
       
  2621 
       
  2622 \begin{tabular}{@{}ll}
       
  2623 \verb|GLP_CV| & continuous variable; \\
       
  2624 \verb|GLP_IV| & integer variable; \\
       
  2625 \verb|GLP_BV| & binary variable. \\
       
  2626 \end{tabular}
       
  2627 
       
  2628 \subsection{glp\_get\_num\_int---retrieve number of integer columns}
       
  2629 
       
  2630 \subsubsection*{Synopsis}
       
  2631 
       
  2632 \begin{verbatim}
       
  2633 int glp_get_num_int(glp_prob *mip);
       
  2634 \end{verbatim}
       
  2635 
       
  2636 \subsubsection*{Returns}
       
  2637 
       
  2638 The routine \verb|glp_get_num_int| returns the number of columns
       
  2639 (structural variables), which are marked as integer. Note that this
       
  2640 number {\it does} include binary columns.
       
  2641 
       
  2642 \subsection{glp\_get\_num\_bin---retrieve number of binary columns}
       
  2643 
       
  2644 \subsubsection*{Synopsis}
       
  2645 
       
  2646 \begin{verbatim}
       
  2647 int glp_get_num_bin(glp_prob *mip);
       
  2648 \end{verbatim}
       
  2649 
       
  2650 \subsubsection*{Returns}
       
  2651 
       
  2652 The routine \verb|glp_get_num_bin| returns the number of columns
       
  2653 (structural variables), which are marked as integer and whose lower
       
  2654 bound is zero and upper bound is one.
       
  2655 
       
  2656 \subsection{glp\_intopt---solve MIP problem with the branch-and-cut
       
  2657 method}
       
  2658 
       
  2659 \subsubsection*{Synopsis}
       
  2660 
       
  2661 \begin{verbatim}
       
  2662 int glp_intopt(glp_prob *mip, const glp_iocp *parm);
       
  2663 \end{verbatim}
       
  2664 
       
  2665 \subsubsection*{Description}
       
  2666 
       
  2667 The routine \verb|glp_intopt| is a driver to the MIP solver based on
       
  2668 the branch-and-cut method, which is a hybrid of branch-and-bound and
       
  2669 cutting plane methods.
       
  2670 
       
  2671 If the presolver is disabled (see paragraph ``Control parameters''
       
  2672 below), on entry to the routine \verb|glp_intopt| the problem object,
       
  2673 which the parameter \verb|mip| points to, should contain optimal
       
  2674 solution to LP relaxation (it can be obtained, for example, with the
       
  2675 routine \verb|glp_simplex|). Otherwise, if the presolver is enabled, it
       
  2676 is not necessary.
       
  2677 
       
  2678 The MIP solver has a set of control parameters. Values of the control
       
  2679 parameters can be passed in the structure \verb|glp_iocp|, which the
       
  2680 parameter \verb|parm| points to. For detailed description of this
       
  2681 structure see paragraph ``Control parameters'' below. Before specifying
       
  2682 some control parameters the application program should initialize the
       
  2683 structure \verb|glp_iocp| by default values of all control parameters
       
  2684 using the routine \verb|glp_init_iocp| (see the next subsection). This
       
  2685 is needed for backward compatibility, because in the future there may
       
  2686 appear new members in the structure \verb|glp_iocp|.
       
  2687 
       
  2688 The parameter \verb|parm| can be specified as \verb|NULL|, in which case
       
  2689 the solver uses default settings.
       
  2690 
       
  2691 Note that the GLPK branch-and-cut solver is not perfect, so it is unable
       
  2692 to solve hard or very large scale MIP instances for a reasonable time.
       
  2693 
       
  2694 \subsubsection*{Returns}
       
  2695 
       
  2696 \def\arraystretch{1}
       
  2697 
       
  2698 \begin{tabular}{@{}p{25mm}p{97.3mm}@{}}
       
  2699 0 & The MIP problem instance has been successfully solved. (This code
       
  2700 does {\it not} necessarily mean that the solver has found optimal
       
  2701 solution. It only means that the solution process was successful.) \\
       
  2702 \verb|GLP_EBOUND| & Unable to start the search, because some
       
  2703 double-bounded variables have incorrect bounds or some integer variables
       
  2704 have non-integer (fractional) bounds.\\
       
  2705 \verb|GLP_EROOT| & Unable to start the search, because optimal basis for
       
  2706 initial LP relaxation is not provided. (This code may appear only if the
       
  2707 presolver is disabled.)\\
       
  2708 \verb|GLP_ENOPFS| & Unable to start the search, because LP relaxation
       
  2709 of the MIP problem instance has no primal feasible solution. (This code
       
  2710 may appear only if the presolver is enabled.)\\
       
  2711 \verb|GLP_ENODFS| & Unable to start the search, because LP relaxation
       
  2712 of the MIP problem instance has no dual feasible solution. In other
       
  2713 word, this code means that if the LP relaxation has at least one primal
       
  2714 feasible solution, its optimal solution is unbounded, so if the MIP
       
  2715 problem has at least one integer feasible solution, its (integer)
       
  2716 optimal solution is also unbounded. (This code may appear only if the
       
  2717 presolver is enabled.)\\
       
  2718 \verb|GLP_EFAIL| & The search was prematurely terminated due to the
       
  2719 solver failure.\\
       
  2720 \verb|GLP_EMIPGAP| & The search was prematurely terminated, because the
       
  2721 relative mip gap tolerance has been reached.\\
       
  2722 \verb|GLP_ETMLIM| & The search was prematurely terminated, because the
       
  2723 time limit has been exceeded.\\
       
  2724 \verb|GLP_ESTOP| & The search was prematurely terminated by application.
       
  2725 (This code may appear only if the advanced solver interface is used.)\\
       
  2726 \end{tabular}
       
  2727 
       
  2728 \subsubsection*{Built-in MIP presolver}
       
  2729 
       
  2730 The branch-and-cut solver has {\it built-in MIP presolver}. It is
       
  2731 a subprogram that transforms the original MIP problem specified in the
       
  2732 problem object to an equivalent MIP problem, which may be easier for
       
  2733 solving with the branch-and-cut method than the original one. For
       
  2734 example, the presolver can remove redundant constraints and variables,
       
  2735 whose optimal values are known, perform bound and coefficient reduction,
       
  2736 etc. Once the transformed MIP problem has been solved, the presolver
       
  2737 transforms its solution back to corresponding solution of the original
       
  2738 problem.
       
  2739 
       
  2740 Presolving is an optional feature of the routine \verb|glp_intopt|, and
       
  2741 by default it is disabled. In order to enable the MIP presolver, the
       
  2742 control parameter \verb|presolve| should be set to \verb|GLP_ON| (see
       
  2743 paragraph ``Control parameters'' below).
       
  2744 
       
  2745 \subsubsection*{Advanced solver interface}
       
  2746 
       
  2747 The routine \verb|glp_intopt| allows the user to control the
       
  2748 branch-and-cut search by passing to the solver a user-defined callback
       
  2749 routine. For more details see Chapter ``Branch-and-Cut API Routines''.
       
  2750 
       
  2751 \subsubsection*{Terminal output}
       
  2752 
       
  2753 Solving a MIP problem may take a long time, so the solver reports some
       
  2754 information about best known solutions, which is sent to the terminal.
       
  2755 This information has the following format:
       
  2756 
       
  2757 \begin{verbatim}
       
  2758 +nnn: mip = xxx <rho> yyy gap (ppp; qqq)
       
  2759 \end{verbatim}
       
  2760 
       
  2761 \noindent
       
  2762 where: `\verb|nnn|' is the simplex iteration number; `\verb|xxx|' is a
       
  2763 value of the objective function for the best known integer feasible
       
  2764 solution (if no integer feasible solution has been found yet,
       
  2765 `\verb|xxx|' is the text `\verb|not found yet|'); `\verb|rho|' is the
       
  2766 string `\verb|>=|' (in case of minimization) or `\verb|<=|' (in case of
       
  2767 maximization); `\verb|yyy|' is a global bound for exact integer optimum
       
  2768 (i.e. the exact integer optimum is always in the range from `\verb|xxx|'
       
  2769 to `\verb|yyy|'); `\verb|gap|' is the relative mip gap, in percents,
       
  2770 computed as $gap=|xxx-yyy|/(|xxx|+{\tt DBL\_EPSILON})\cdot 100\%$ (if
       
  2771 $gap$ is greater than $999.9\%$, it is not printed); `\verb|ppp|' is the
       
  2772 number of subproblems in the active list, `\verb|qqq|' is the number of
       
  2773 subproblems which have been already fathomed and therefore removed from
       
  2774 the branch-and-bound search tree.
       
  2775 
       
  2776 \subsubsection{Control parameters}
       
  2777 
       
  2778 This paragraph describes all control parameters currently used in the
       
  2779 MIP solver. Symbolic names of control parameters are names of
       
  2780 corresponding members in the structure \verb|glp_iocp|.
       
  2781 
       
  2782 \medskip
       
  2783 
       
  2784 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2785 \multicolumn{2}{@{}l}{{\tt int msg\_lev} (default: {\tt GLP\_MSG\_ALL})}
       
  2786 \\
       
  2787 &Message level for terminal output:\\
       
  2788 &\verb|GLP_MSG_OFF|---no output;\\
       
  2789 &\verb|GLP_MSG_ERR|---error and warning messages only;\\
       
  2790 &\verb|GLP_MSG_ON |---normal output;\\
       
  2791 &\verb|GLP_MSG_ALL|---full output (including informational messages).
       
  2792 \\
       
  2793 \end{tabular}
       
  2794 
       
  2795 \medskip
       
  2796 
       
  2797 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2798 \multicolumn{2}{@{}l}{{\tt int br\_tech} (default: {\tt GLP\_BR\_DTH})}
       
  2799 \\
       
  2800 &Branching technique option:\\
       
  2801 &\verb|GLP_BR_FFV|---first fractional variable;\\
       
  2802 &\verb|GLP_BR_LFV|---last fractional variable;\\
       
  2803 &\verb|GLP_BR_MFV|---most fractional variable;\\
       
  2804 &\verb|GLP_BR_DTH|---heuristic by Driebeck and Tomlin;\\
       
  2805 &\verb|GLP_BR_PCH|---hybrid pseudocost heuristic.\\
       
  2806 \end{tabular}
       
  2807 
       
  2808 \medskip
       
  2809 
       
  2810 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2811 \multicolumn{2}{@{}l}{{\tt int bt\_tech} (default: {\tt GLP\_BT\_BLB})}
       
  2812 \\
       
  2813 &Backtracking technique option:\\
       
  2814 &\verb|GLP_BT_DFS|---depth first search;\\
       
  2815 &\verb|GLP_BT_BFS|---breadth first search;\\
       
  2816 &\verb|GLP_BT_BLB|---best local bound;\\
       
  2817 &\verb|GLP_BT_BPH|---best projection heuristic.\\
       
  2818 \end{tabular}
       
  2819 
       
  2820 \medskip
       
  2821 
       
  2822 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2823 \multicolumn{2}{@{}l}{{\tt int pp\_tech} (default: {\tt GLP\_PP\_ALL})}
       
  2824 \\
       
  2825 &Preprocessing technique option:\\
       
  2826 &\verb|GLP_PP_NONE|---disable preprocessing;\\
       
  2827 &\verb|GLP_PP_ROOT|---perform preprocessing only on the root level;\\
       
  2828 &\verb|GLP_PP_ALL |---perform preprocessing on all levels.\\
       
  2829 \end{tabular}
       
  2830 
       
  2831 \medskip
       
  2832 
       
  2833 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2834 \multicolumn{2}{@{}l}{{\tt int fp\_heur} (default: {\tt GLP\_OFF})}
       
  2835 \\
       
  2836 &Feasibility pump heuristic option:\\
       
  2837 &\verb|GLP_ON |---enable applying the feasibility pump heuristic;\\
       
  2838 &\verb|GLP_OFF|---disable applying the feasibility pump heuristic.\\
       
  2839 \end{tabular}
       
  2840 
       
  2841 \medskip
       
  2842 
       
  2843 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2844 \multicolumn{2}{@{}l}{{\tt int gmi\_cuts} (default: {\tt GLP\_OFF})}\\
       
  2845 &Gomory's mixed integer cut option:\\
       
  2846 &\verb|GLP_ON |---enable generating Gomory's cuts;\\
       
  2847 &\verb|GLP_OFF|---disable generating Gomory's cuts.\\
       
  2848 \end{tabular}
       
  2849 
       
  2850 \medskip
       
  2851 
       
  2852 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2853 \multicolumn{2}{@{}l}{{\tt int mir\_cuts} (default: {\tt GLP\_OFF})}\\
       
  2854 &Mixed integer rounding (MIR) cut option:\\
       
  2855 &\verb|GLP_ON |---enable generating MIR cuts;\\
       
  2856 &\verb|GLP_OFF|---disable generating MIR cuts.\\
       
  2857 \end{tabular}
       
  2858 
       
  2859 \medskip
       
  2860 
       
  2861 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2862 \multicolumn{2}{@{}l}{{\tt int cov\_cuts} (default: {\tt GLP\_OFF})}\\
       
  2863 &Mixed cover cut option:\\
       
  2864 &\verb|GLP_ON |---enable generating mixed cover cuts;\\
       
  2865 &\verb|GLP_OFF|---disable generating mixed cover cuts.\\
       
  2866 \end{tabular}
       
  2867 
       
  2868 \medskip
       
  2869 
       
  2870 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2871 \multicolumn{2}{@{}l}{{\tt int clq\_cuts} (default: {\tt GLP\_OFF})}\\
       
  2872 &Clique cut option:\\
       
  2873 &\verb|GLP_ON |---enable generating clique cuts;\\
       
  2874 &\verb|GLP_OFF|---disable generating clique cuts.\\
       
  2875 \end{tabular}
       
  2876 
       
  2877 \medskip
       
  2878 
       
  2879 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2880 \multicolumn{2}{@{}l}{{\tt double tol\_int} (default: {\tt 1e-5})}\\
       
  2881 &Absolute tolerance used to check if optimal solution to the current LP
       
  2882 relaxation is integer feasible. (Do not change this parameter without
       
  2883 detailed understanding its purpose.)\\
       
  2884 \end{tabular}
       
  2885 
       
  2886 \medskip
       
  2887 
       
  2888 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2889 \multicolumn{2}{@{}l}{{\tt double tol\_obj} (default: {\tt 1e-7})}\\
       
  2890 &Relative tolerance used to check if the objective value in optimal
       
  2891 solution to the current LP relaxation is not better than in the best
       
  2892 known integer feasible solution. (Do not change this parameter without
       
  2893 detailed understanding its purpose.)\\
       
  2894 \end{tabular}
       
  2895 
       
  2896 \medskip
       
  2897 
       
  2898 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2899 \multicolumn{2}{@{}l}{{\tt double mip\_gap} (default: {\tt 0.0})}\\
       
  2900 &The relative mip gap tolerance. If the relative mip gap for currently
       
  2901 known best integer feasible solution falls below this tolerance, the
       
  2902 solver terminates the search. This allows obtainig suboptimal integer
       
  2903 feasible solutions if solving the problem to optimality takes too long
       
  2904 time.\\
       
  2905 \end{tabular}
       
  2906 
       
  2907 \medskip
       
  2908 
       
  2909 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2910 \multicolumn{2}{@{}l}{{\tt int tm\_lim} (default: {\tt INT\_MAX})}\\
       
  2911 &Searching time limit, in milliseconds.\\
       
  2912 \end{tabular}
       
  2913 
       
  2914 \medskip
       
  2915 
       
  2916 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2917 \multicolumn{2}{@{}l}{{\tt int out\_frq} (default: {\tt 5000})}\\
       
  2918 &Output frequency, in milliseconds. This parameter specifies how
       
  2919 frequently the solver sends information about the solution process to
       
  2920 the terminal.\\
       
  2921 \end{tabular}
       
  2922 
       
  2923 \medskip
       
  2924 
       
  2925 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2926 \multicolumn{2}{@{}l}{{\tt int out\_dly} (default: {\tt 10000})}\\
       
  2927 &Output delay, in milliseconds. This parameter specifies how long the
       
  2928 solver should delay sending information about solution of the current
       
  2929 LP relaxation with the simplex method to the terminal.\\
       
  2930 \end{tabular}
       
  2931 
       
  2932 \medskip
       
  2933 
       
  2934 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2935 \multicolumn{2}{@{}l}
       
  2936 {{\tt void (*cb\_func)(glp\_tree *tree, void *info)}
       
  2937 (default: {\tt NULL})}\\
       
  2938 &Entry point to the user-defined callback routine. \verb|NULL| means
       
  2939 the advanced solver interface is not used. For more details see Chapter
       
  2940 ``Branch-and-Cut API Routines''.\\
       
  2941 \end{tabular}
       
  2942 
       
  2943 \medskip
       
  2944 
       
  2945 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2946 \multicolumn{2}{@{}l}{{\tt void *cb\_info} (default: {\tt NULL})}\\
       
  2947 &Transit pointer passed to the routine \verb|cb_func| (see above).\\
       
  2948 \end{tabular}
       
  2949 
       
  2950 \medskip
       
  2951 
       
  2952 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2953 \multicolumn{2}{@{}l}{{\tt int cb\_size} (default: {\tt 0})}\\
       
  2954 &The number of extra (up to 256) bytes allocated for each node of the
       
  2955 branch-and-bound tree to store application-specific data. On creating
       
  2956 a node these bytes are initialized by binary zeros.\\
       
  2957 \end{tabular}
       
  2958 
       
  2959 \medskip
       
  2960 
       
  2961 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2962 \multicolumn{2}{@{}l}{{\tt int presolve} (default: {\tt GLP\_OFF})}\\
       
  2963 &MIP presolver option:\\
       
  2964 &\verb|GLP_ON |---enable using the MIP presolver;\\
       
  2965 &\verb|GLP_OFF|---disable using the MIP presolver.\\
       
  2966 \end{tabular}
       
  2967 
       
  2968 \medskip
       
  2969 
       
  2970 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}}
       
  2971 \multicolumn{2}{@{}l}{{\tt int binarize} (default: {\tt GLP\_OFF})}\\
       
  2972 &Binarization option (used only if the presolver is enabled):\\
       
  2973 &\verb|GLP_ON |---replace general integer variables by binary ones;\\
       
  2974 &\verb|GLP_OFF|---do not use binarization.\\
       
  2975 \end{tabular}
       
  2976 
       
  2977 \subsection{glp\_init\_iocp---initialize integer optimizer control
       
  2978 parameters}
       
  2979 
       
  2980 \subsubsection*{Synopsis}
       
  2981 
       
  2982 \begin{verbatim}
       
  2983 void glp_init_iocp(glp_iocp *parm);
       
  2984 \end{verbatim}
       
  2985 
       
  2986 \subsubsection*{Description}
       
  2987 
       
  2988 The routine \verb|glp_init_iocp| initializes control parameters, which
       
  2989 are used by the branch-and-cut solver, with default values.
       
  2990 
       
  2991 Default values of the control parameters are stored in a \verb|glp_iocp|
       
  2992 structure, which the parameter \verb|parm| points to.
       
  2993 
       
  2994 \subsection{glp\_mip\_status---determine status of MIP solution}
       
  2995 
       
  2996 \subsubsection*{Synopsis}
       
  2997 
       
  2998 \begin{verbatim}
       
  2999 int glp_mip_status(glp_prob *mip);
       
  3000 \end{verbatim}
       
  3001 
       
  3002 \subsubsection*{Returns}
       
  3003 
       
  3004 The routine \verb|glp_mip_status| reports the status of a MIP solution
       
  3005 found by the MIP solver as follows:
       
  3006 
       
  3007 \smallskip
       
  3008 
       
  3009 \begin{tabular}{@{}p{25mm}p{91.3mm}@{}}
       
  3010 \verb|GLP_UNDEF| & MIP solution is undefined. \\
       
  3011 \verb|GLP_OPT|   & MIP solution is integer optimal. \\
       
  3012 \verb|GLP_FEAS|  & MIP solution is integer feasible, however, its
       
  3013    optimality (or non-optimality) has not been proven, perhaps due to
       
  3014    premature termination of the search. \\
       
  3015 \end{tabular}
       
  3016 
       
  3017 \begin{tabular}{@{}p{25mm}p{91.3mm}@{}}
       
  3018 \verb|GLP_NOFEAS| & problem has no integer feasible solution (proven by
       
  3019    the solver). \\
       
  3020 \end{tabular}
       
  3021 
       
  3022 \subsection{glp\_mip\_obj\_val---retrieve objective value}
       
  3023 
       
  3024 \subsubsection*{Synopsis}
       
  3025 
       
  3026 \begin{verbatim}
       
  3027 double glp_mip_obj_val(glp_prob *mip);
       
  3028 \end{verbatim}
       
  3029 
       
  3030 \subsubsection*{Returns}
       
  3031 
       
  3032 The routine \verb|glp_mip_obj_val| returns value of the objective
       
  3033 function for MIP solution.
       
  3034 
       
  3035 \subsection{glp\_mip\_row\_val---retrieve row value}
       
  3036 
       
  3037 \subsubsection*{Synopsis}
       
  3038 
       
  3039 \begin{verbatim}
       
  3040 double glp_mip_row_val(glp_prob *mip, int i);
       
  3041 \end{verbatim}
       
  3042 
       
  3043 \subsubsection*{Returns}
       
  3044 
       
  3045 The routine \verb|glp_mip_row_val| returns value of the auxiliary
       
  3046 variable associated with \verb|i|-th row for MIP solution.
       
  3047 
       
  3048 \subsection{glp\_mip\_col\_val---retrieve column value}
       
  3049 
       
  3050 \subsubsection*{Synopsis}
       
  3051 
       
  3052 \begin{verbatim}
       
  3053 double glp_mip_col_val(glp_prob *mip, int j);
       
  3054 \end{verbatim}
       
  3055 
       
  3056 \subsubsection*{Returns}
       
  3057 
       
  3058 The routine \verb|glp_mip_col_val| returns value of the structural
       
  3059 variable associated with \verb|j|-th column for MIP solution.
       
  3060 
       
  3061 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
  3062 
       
  3063 \newpage
       
  3064 
       
  3065 \section{Additional routines}
       
  3066 
       
  3067 \subsection{lpx\_check\_kkt---check Karush-Kuhn-Tucker optimality
       
  3068 conditions}
       
  3069 
       
  3070 \subsubsection*{Synopsis}
       
  3071 
       
  3072 \begin{verbatim}
       
  3073 void lpx_check_kkt(glp_prob *lp, int scaled, LPXKKT *kkt);
       
  3074 \end{verbatim}
       
  3075 
       
  3076 \subsubsection*{Description}
       
  3077 
       
  3078 The routine \verb|lpx_check_kkt| checks Karush-Kuhn-Tucker optimality
       
  3079 conditions for basic solution. It is assumed that both primal and dual
       
  3080 components of basic solution are valid.
       
  3081 
       
  3082 If the parameter \verb|scaled| is zero, the optimality conditions are
       
  3083 checked for the original, unscaled LP problem. Otherwise, if the
       
  3084 parameter \verb|scaled| is non-zero, the routine checks the conditions
       
  3085 for an internally scaled LP problem.
       
  3086 
       
  3087 The parameter \verb|kkt| is a pointer to the structure \verb|LPXKKT|,
       
  3088 to which the routine stores results of the check. Members of this
       
  3089 structure are shown in the table below.
       
  3090 
       
  3091 \begin{table}[h]
       
  3092 \begin{center}
       
  3093 \begin{tabular}{@{}c|l|l@{}}
       
  3094 Condition & Member & Comment \\
       
  3095 \hline
       
  3096 (KKT.PE) & \verb|pe_ae_max| &
       
  3097          Largest absolute error \\
       
  3098          & \verb|pe_ae_row| &
       
  3099          Number of row with largest absolute error \\
       
  3100          & \verb|pe_re_max| &
       
  3101          Largest relative error \\
       
  3102          & \verb|pe_re_row| &
       
  3103          Number of row with largest relative error \\
       
  3104          & \verb|pe_quality| &
       
  3105          Quality of primal solution \\
       
  3106 \hline
       
  3107 (KKT.PB) & \verb|pb_ae_max| &
       
  3108          Largest absolute error \\
       
  3109          & \verb|pb_ae_ind| &
       
  3110          Number of variable with largest absolute error \\
       
  3111          & \verb|pb_re_max| &
       
  3112          Largest relative error \\
       
  3113          & \verb|pb_re_ind| &
       
  3114          Number of variable with largest relative error \\
       
  3115          & \verb|pb_quality| &
       
  3116          Quality of primal feasibility \\
       
  3117 \hline
       
  3118 (KKT.DE) & \verb|de_ae_max| &
       
  3119          Largest absolute error \\
       
  3120          & \verb|de_ae_col| &
       
  3121          Number of column with largest absolute error \\
       
  3122          & \verb|de_re_max| &
       
  3123          Largest relative error \\
       
  3124          & \verb|de_re_col| &
       
  3125          Number of column with largest relative error \\
       
  3126          & \verb|de_quality| &
       
  3127          Quality of dual solution \\
       
  3128 \hline
       
  3129 (KKT.DB) & \verb|db_ae_max| &
       
  3130          Largest absolute error \\
       
  3131          & \verb|db_ae_ind| &
       
  3132          Number of variable with largest absolute error \\
       
  3133          & \verb|db_re_max| &
       
  3134          Largest relative error \\
       
  3135          & \verb|db_re_ind| &
       
  3136          Number of variable with largest relative error \\
       
  3137          & \verb|db_quality| &
       
  3138          Quality of dual feasibility \\
       
  3139 \end{tabular}
       
  3140 \end{center}
       
  3141 \end{table}
       
  3142 
       
  3143 The routine performs all computations using only components of the
       
  3144 given LP problem and the current basic solution.
       
  3145 
       
  3146 \subsubsection*{Background}
       
  3147 
       
  3148 The first condition checked by the routine is:
       
  3149 $$x_R - A x_S = 0, \eqno{\rm (KKT.PE)}$$
       
  3150 where $x_R$ is the subvector of auxiliary variables (rows), $x_S$ is the
       
  3151 subvector of structural variables (columns), $A$ is the constraint
       
  3152 matrix. This condition expresses the requirement that all primal
       
  3153 variables must satisfy to the system of equality constraints of the
       
  3154 original LP problem. In case of exact arithmetic this condition would be
       
  3155 satisfied for any basic solution; however, in case of inexact
       
  3156 (floating-point) arithmetic, this condition shows how accurate the
       
  3157 primal basic solution is, that depends on accuracy of a representation
       
  3158 of the basis matrix used by the simplex method routines.
       
  3159 
       
  3160 The second condition checked by the routine is:
       
  3161 $$l_k \leq x_k \leq u_k {\rm \ \ \ for\ all}\ k=1,\dots,m+n,
       
  3162 \eqno{\rm (KKT.PB)}$$
       
  3163 where $x_k$ is auxiliary ($1\leq k\leq m$) or structural
       
  3164 ($m+1\leq k\leq m+n$) variable, $l_k$ and $u_k$ are, respectively,
       
  3165 lower and upper bounds of the variable $x_k$ (including cases of
       
  3166 infinite bounds). This condition expresses the requirement that all
       
  3167 primal variables must satisfy to bound constraints of the original LP
       
  3168 problem. Since in case of basic solution all non-basic variables are
       
  3169 placed on their bounds, actually the condition (KKT.PB) needs to be
       
  3170 checked for basic variables only. If the primal basic solution has
       
  3171 sufficient accuracy, this condition shows primal feasibility of the
       
  3172 solution.
       
  3173 
       
  3174 The third condition checked by the routine is:
       
  3175 $${\rm grad}\;Z = c = (\tilde{A})^T \pi + d,$$
       
  3176 where $Z$ is the objective function, $c$ is the vector of objective
       
  3177 coefficients, $(\tilde{A})^T$ is a matrix transposed to the expanded
       
  3178 constraint matrix $\tilde{A} = (I|-A)$, $\pi$ is a vector of Lagrange
       
  3179 multipliers that correspond to equality constraints of the original LP
       
  3180 problem, $d$ is a vector of Lagrange multipliers that correspond to
       
  3181 bound constraints for all (auxiliary and structural) variables of the
       
  3182 original LP problem. Geometrically the third condition expresses the
       
  3183 requirement that the gradient of the objective function must belong to
       
  3184 the orthogonal complement of a linear subspace defined by the equality
       
  3185 and active bound constraints, i.e. that the gradient must be a linear
       
  3186 combination of normals to the constraint planes, where Lagrange
       
  3187 multipliers $\pi$ and $d$ are coefficients of that linear combination.
       
  3188 
       
  3189 To eliminate the vector $\pi$ the third condition can be rewritten as:
       
  3190 $$
       
  3191 \left(\begin{array}{@{}c@{}}I \\ -A^T\end{array}\right) \pi =
       
  3192 \left(\begin{array}{@{}c@{}}d_R \\ d_S\end{array}\right) +
       
  3193 \left(\begin{array}{@{}c@{}}c_R \\ c_S\end{array}\right),
       
  3194 $$
       
  3195 or, equivalently:
       
  3196 $$
       
  3197 \begin{array}{r@{}c@{}c}
       
  3198 \pi + d_R&\ =\ &c_R, \\
       
  3199 -A^T\pi + d_S&\ =\ &c_S. \\
       
  3200 \end{array}
       
  3201 $$
       
  3202 Then substituting the vector $\pi$ from the first equation into the
       
  3203 second one we have:
       
  3204 $$A^T (d_R - c_R) + (d_S - c_S) = 0, \eqno{\rm (KKT.DE)}$$
       
  3205 where $d_R$ is the subvector of reduced costs of auxiliary variables
       
  3206 (rows), $d_S$ is the subvector of reduced costs of structural variables
       
  3207 (columns), $c_R$ and $c_S$ are subvectors of objective coefficients at,
       
  3208 respectively, auxiliary and structural variables, $A^T$ is a matrix
       
  3209 transposed to the constraint matrix of the original LP problem. In case
       
  3210 of exact arithmetic this condition would be satisfied for any basic
       
  3211 solution; however, in case of inexact (floating-point) arithmetic, this
       
  3212 condition shows how accurate the dual basic solution is, that depends on
       
  3213 accuracy of a representation of the basis matrix used by the simplex
       
  3214 method routines.
       
  3215 
       
  3216 The last, fourth condition checked by the routine is (KKT.DB):
       
  3217 
       
  3218 \medskip
       
  3219 
       
  3220 \begin{tabular}{r@{}c@{}ll}
       
  3221 &$\ d_k\ $& $=0,$&if $x_k$ is basic or free non-basic variable \\
       
  3222 $0\leq$&$\ d_k\ $&$<+\infty$&if $x_k$ is non-basic on its lower
       
  3223 (minimization) \\
       
  3224 &&&or upper (maximization) bound \\
       
  3225 $-\infty<$&$\ d_k\ $&$\leq 0$&if $x_k$ is non-basic on its upper
       
  3226 (minimization) \\
       
  3227 &&&or lower (maximization) bound \\
       
  3228 $-\infty<$&$\ d_k\ $&$<+\infty$&if $x_k$ is non-basic fixed variable \\
       
  3229 \end{tabular}
       
  3230 
       
  3231 \medskip
       
  3232 
       
  3233 \noindent
       
  3234 for all $k=1,\dots,m+n$, where $d_k$ is a reduced cost (Lagrange
       
  3235 multiplier) of auxiliary ($1\leq k\leq m$) or structural
       
  3236 ($m+1\leq k\leq m+n$) variable $x_k$. Geometrically this condition
       
  3237 expresses the requirement that constraints of the original problem must
       
  3238 "hold" the point preventing its movement along the anti-gradient (in
       
  3239 case of minimization) or the gradient (in case of maximization) of the
       
  3240 objective function. Since in case of basic solution reduced costs of
       
  3241 all basic variables are placed on their (zero) bounds, actually the
       
  3242 condition (KKT.DB) needs to be checked for non-basic variables only.
       
  3243 If the dual basic solution has sufficient accuracy, this condition shows
       
  3244 dual feasibility of the solution.
       
  3245 
       
  3246 Should note that the complete set of Karush-Kuhn-Tucker optimality
       
  3247 conditions also includes the fifth, so called complementary slackness
       
  3248 condition, which expresses the requirement that at least either a primal
       
  3249 variable $x_k$ or its dual counterpart $d_k$ must be on its bound for
       
  3250 all $k=1,\dots,m+n$. However, being always satisfied by definition for
       
  3251 any basic solution that condition is not checked by the routine.
       
  3252 
       
  3253 To check the first condition (KKT.PE) the routine computes a vector of
       
  3254 residuals:
       
  3255 $$g = x_R - A x_S,$$
       
  3256 determines component of this vector that correspond to largest absolute
       
  3257 and relative errors:
       
  3258 
       
  3259 \medskip
       
  3260 
       
  3261 \hspace{30mm}
       
  3262 \verb|pe_ae_max| $\displaystyle{= \max_{1\leq i\leq m}|g_i|}$,
       
  3263 
       
  3264 \medskip
       
  3265 
       
  3266 \hspace{30mm}
       
  3267 \verb|pe_re_max| $\displaystyle{= \max_{1\leq i\leq m}
       
  3268 \frac{|g_i|}{1+|(x_R)_i|}}$,
       
  3269 
       
  3270 \medskip
       
  3271 
       
  3272 \noindent
       
  3273 and stores these quantities and corresponding row indices to the
       
  3274 structure \verb|LPXKKT|.
       
  3275 
       
  3276 To check the second condition (KKT.PB) the routine computes a vector
       
  3277 of residuals:
       
  3278 $$
       
  3279 h_k = \left\{
       
  3280 \begin{array}{ll}
       
  3281 0,         & {\rm if}\ l_k \leq x_k \leq u_k \\
       
  3282 x_k - l_k, & {\rm if}\ x_k < l_k \\
       
  3283 x_k - u_k, & {\rm if}\ x_k > u_k \\
       
  3284 \end{array}
       
  3285 \right.
       
  3286 $$
       
  3287 for all $k=1,\dots,m+n$, determines components of this vector that
       
  3288 correspond to largest absolute and relative errors:
       
  3289 
       
  3290 \medskip
       
  3291 
       
  3292 \hspace{30mm}
       
  3293 \verb|pb_ae_max| $\displaystyle{= \max_{1\leq k \leq m+n}|h_k|}$,
       
  3294 
       
  3295 \medskip
       
  3296 
       
  3297 \hspace{30mm}
       
  3298 \verb|pb_re_max| $\displaystyle{= \max_{1\leq k \leq m+n}
       
  3299 \frac{|h_k|}{1+|x_k|}}$,
       
  3300 
       
  3301 \medskip
       
  3302 
       
  3303 \noindent
       
  3304 and stores these quantities and corresponding variable indices to the
       
  3305 structure \verb|LPXKKT|.
       
  3306 
       
  3307 To check the third condition (KKT.DE) the routine computes a vector of
       
  3308 residuals:
       
  3309 $$u = A^T (d_R - c_R) + (d_S - c_S),$$
       
  3310 determines components of this vector that correspond to largest
       
  3311 absolute and relative errors:
       
  3312 
       
  3313 \medskip
       
  3314 
       
  3315 \hspace{30mm}
       
  3316 \verb|de_ae_max| $\displaystyle{= \max_{1\leq j\leq n}|u_j|}$,
       
  3317 
       
  3318 \medskip
       
  3319 
       
  3320 \hspace{30mm}
       
  3321 \verb|de_re_max| $\displaystyle{= \max_{1\leq j\leq n}
       
  3322 \frac{|u_j|}{1+|(d_S)_j - (c_S)_j|}}$,
       
  3323 
       
  3324 \medskip
       
  3325 
       
  3326 \noindent
       
  3327 and stores these quantities and corresponding column indices to the
       
  3328 structure \verb|LPXKKT|.
       
  3329 
       
  3330 To check the fourth condition (KKT.DB) the routine computes a vector
       
  3331 of residuals:
       
  3332 
       
  3333 $$
       
  3334 v_k = \left\{
       
  3335 \begin{array}{ll}
       
  3336 0,         & {\rm if}\ d_k\ {\rm has\ correct\ sign} \\
       
  3337 d_k,       & {\rm if}\ d_k\ {\rm has\ wrong\ sign} \\
       
  3338 \end{array}
       
  3339 \right.
       
  3340 $$
       
  3341 for all $k=1,\dots,m+n$, determines components of this vector that
       
  3342 correspond to largest absolute and relative errors:
       
  3343 
       
  3344 \medskip
       
  3345 
       
  3346 \hspace{30mm}
       
  3347 \verb|db_ae_max| $\displaystyle{= \max_{1\leq k\leq m+n}|v_k|}$,
       
  3348 
       
  3349 \medskip
       
  3350 
       
  3351 \hspace{30mm}
       
  3352 \verb|db_re_max| $\displaystyle{= \max_{1\leq k\leq m+n}
       
  3353 \frac{|v_k|}{1+|d_k - c_k|}}$,
       
  3354 
       
  3355 \medskip
       
  3356 
       
  3357 \noindent
       
  3358 and stores these quantities and corresponding variable indices to the
       
  3359 structure \verb|LPXKKT|.
       
  3360 
       
  3361 Using the relative errors for all the four conditions listed above the
       
  3362 routine
       
  3363 \verb|lpx_check_kkt| also estimates a "quality" of the basic solution
       
  3364 from the standpoint of these conditions and stores corresponding
       
  3365 quality indicators to the structure \verb|LPXKKT|:
       
  3366 
       
  3367 \verb|pe_quality|---quality of primal solution;
       
  3368 
       
  3369 \verb|pb_quality|---quality of primal feasibility;
       
  3370 
       
  3371 \verb|de_quality|---quality of dual solution;
       
  3372 
       
  3373 \verb|db_quality|---quality of dual feasibility.
       
  3374 
       
  3375 Each of these indicators is assigned to one of the following four
       
  3376 values:
       
  3377 
       
  3378 \verb|'H'| means high quality,
       
  3379 
       
  3380 \verb|'M'| means medium quality,
       
  3381 
       
  3382 \verb|'L'| means low quality, or
       
  3383 
       
  3384 \verb|'?'| means wrong or infeasible solution.
       
  3385 
       
  3386 If all the indicators show high or medium quality (for an internally
       
  3387 scaled LP problem, i.e. when the parameter \verb|scaled| in a call to
       
  3388 the routine \verb|lpx_check_kkt| is non-zero), the user can be sure that
       
  3389 the obtained basic solution is quite accurate.
       
  3390 
       
  3391 If some of the indicators show low quality, the solution can still be
       
  3392 considered as relevant, though an additional analysis is needed
       
  3393 depending on which indicator shows low quality.
       
  3394 
       
  3395 If the indicator \verb|pe_quality| is assigned to \verb|'?'|, the
       
  3396 primal solution is wrong. If the indicator \verb|de_quality| is assigned
       
  3397 to \verb|'?'|, the dual solution is wrong.
       
  3398 
       
  3399 If the indicator \verb|db_quality| is assigned to \verb|'?'| while
       
  3400 other indicators show a good quality, this means that the current
       
  3401 basic solution being primal feasible is not dual feasible. Similarly,
       
  3402 if the indicator \verb|pb_quality| is assigned to \verb|'?'| while
       
  3403 other indicators are not, this means that the current basic solution
       
  3404 being dual feasible is not primal feasible.
       
  3405 
       
  3406 %* eof *%