%* glpk10.tex *%

\chapter{Stand-alone LP/MIP Solver}
\label{chaglpsol}

The GLPK package includes the program \verb|glpsol|, which is a
stand-alone LP/MIP solver. This program can be invoked from the command
line to read LP/MIP problem data in any format supported by GLPK, solve
the problem, and write its solution to an output text file.

\para{Usage}

\verb|glpsol| [{\it options\dots}] [{\it filename}]

\para{General options}

\begin{verbatim}
   --mps             read LP/MIP problem in fixed MPS format
   --freemps         read LP/MIP problem in free MPS format (default)
   --lp              read LP/MIP problem in CPLEX LP format
   --glp             read LP/MIP problem in GLPK format
   --math            read LP/MIP model written in GNU MathProg modeling
                     language
   -m filename, --model filename
                     read model section and optional data section from
                     filename (same as --math)
   -d filename, --data filename
                     read data section from filename (for --math only);
                     if model file also has data section, it is ignored
   -y filename, --display filename
                     send display output to filename (for --math only);
                     by default the output is sent to terminal
   --seed value      initialize pseudo-random number generator used in
                     MathProg model with specified seed (any integer);
                     if seed value is ?, some random seed will be used
   --mincost         read min-cost flow problem in DIMACS format
   --maxflow         read maximum flow problem in DIMACS format
   --cnf             read CNF-SAT problem in DIMACS format
   --simplex         use simplex method (default)
   --interior        use interior point method (LP only)
   -r filename, --read filename
                     read solution from filename rather to find it with
                     the solver
   --min             minimization
   --max             maximization
   --scale           scale problem (default)
   --noscale         do not scale problem
   -o filename, --output filename
                     write solution to filename in printable format
   -w filename, --write filename
                     write solution to filename in plain text format
   --ranges filename
                     write sensitivity analysis report to filename in
                     printable format (simplex only)
   --tmlim nnn       limit solution time to nnn seconds
   --memlim nnn      limit available memory to nnn megabytes
   --check           do not solve problem, check input data only
   --name probname   change problem name to probname
   --wmps filename   write problem to filename in fixed MPS format
   --wfreemps filename
                     write problem to filename in free MPS format
   --wlp filename    write problem to filename in CPLEX LP format
   --wglp filename   write problem to filename in GLPK format
   --wcnf filename   write problem to filename in DIMACS CNF-SAT format
   --log filename    write copy of terminal output to filename
   -h, --help        display this help information and exit
   -v, --version     display program version and exit
\end{verbatim}

\para{LP basis factorization options}

\begin{verbatim}
   --luf             plain LU factorization (default)
   --btf             block triangular LU factorization
   --ft              Forrest-Tomlin update (requires --luf; default)
   --cbg             Schur complement + Bartels-Golub update
   --cgr             Schur complement + Givens rotation update
\end{verbatim}

\para{Options specific to the simplex solver}

\begin{verbatim}
   --primal          use primal simplex (default)
   --dual            use dual simplex
   --std             use standard initial basis of all slacks
   --adv             use advanced initial basis (default)
   --bib             use Bixby's initial basis
   --ini filename    use as initial basis previously saved with -w
                     (disables LP presolver)
   --steep           use steepest edge technique (default)
   --nosteep         use standard "textbook" pricing
   --relax           use Harris' two-pass ratio test (default)
   --norelax         use standard "textbook" ratio test
   --presol          use presolver (default; assumes --scale and --adv)
   --nopresol        do not use presolver
   --exact           use simplex method based on exact arithmetic
   --xcheck          check final basis using exact arithmetic
\end{verbatim}

\para{Options specific to the interior-point solver}

\begin{verbatim}
   --nord            use natural (original) ordering
   --qmd             use quotient minimum degree ordering
   --amd             use approximate minimum degree ordering (default)
   --symamd          use approximate minimum degree ordering
\end{verbatim}

\para{Options specific to the MIP solver}

\begin{verbatim}
   --nomip           consider all integer variables as continuous
                     (allows solving MIP as pure LP)
   --first           branch on first integer variable
   --last            branch on last integer variable
   --mostf           branch on most fractional variable
   --drtom           branch using heuristic by Driebeck and Tomlin
                     (default)
   --pcost           branch using hybrid pseudocost heuristic (may be
                     useful for hard instances)
   --dfs             backtrack using depth first search
   --bfs             backtrack using breadth first search
   --bestp           backtrack using the best projection heuristic
   --bestb           backtrack using node with best local bound
                     (default)
   --intopt          use MIP presolver (default)
   --nointopt        do not use MIP presolver
   --binarize        replace general integer variables by binary ones
                     (assumes --intopt)
   --fpump           apply feasibility pump heuristic
   --proxy [nnn]     apply proximity search heuristic (nnn is time limit
                     in seconds; default is 60)
   --gomory          generate Gomory's mixed integer cuts
   --mir             generate MIR (mixed integer rounding) cuts
   --cover           generate mixed cover cuts
   --clique          generate clique cuts
   --cuts            generate all cuts above
   --mipgap tol      set relative mip gap tolerance to tol
   --minisat         translate integer feasibility problem to CNF-SAT
                     and solve it with MiniSat solver
\end{verbatim}

\newpage

\begin{verbatim}
   --objbnd bound    add inequality obj <= bound (minimization) or
                     obj >= bound (maximization) to integer feasibility
                     problem (assumes --minisat)
\end{verbatim}

For description of the MPS format see Appendix \ref{champs}, page
\pageref{champs}.

For description of the CPLEX LP format see Appendix \ref{chacplex},
page \pageref{chacplex}.

For description of the modeling language see the document ``Modeling
Language GNU MathProg: Language Reference'' included in the GLPK
distribution.

For description of the DIMACS min-cost flow problem format and DIMACS
maximum flow problem format see the document ``GLPK: Graph and Network
Routines'' included in the GLPK distribution.

%* eof *%