doc/glpk_faq.txt
changeset 1 c445c931472f
equal deleted inserted replaced
-1:000000000000 0:320dc29cb6b5
       
     1 
       
     2 GNU Linear Programming Kit FAQ
       
     3 
       
     4   Summary: Frequently Asked Questions about the GNU Linear Programming Kit
       
     5 
       
     6   Author: Dr. Harley Mackenzie <hjm@hardsoftware.com>                     
       
     7 
       
     8   Posting-Frequency: Monthly                                              
       
     9 
       
    10   Language: English                                                       
       
    11 
       
    12   $Date: 2004/01/09 05:57:57 $                                            
       
    13 
       
    14   $Revision: 1.6 $                                                        
       
    15 
       
    16 
       
    17 
       
    18 Introduction
       
    19 
       
    20   Q. What is GPLK?                                                        
       
    21 
       
    22   A. GLPK stands for the GNU Linear Programming Kit. The GLPK package is  
       
    23   a set of routines written in ANSI C and organized in the form of a      
       
    24   callable library. This package is intended for solving large-scale      
       
    25   linear programming (LP), mixed integer linear programming (MIP), and    
       
    26   other related problems.                                                 
       
    27 
       
    28   The GLPK package includes the following main components:                
       
    29 
       
    30     * implementation of the simplex method,                                   
       
    31 
       
    32     * implementation of the primal-dual interior point method,                
       
    33 
       
    34     * implementation of the branch-and-bound method,                          
       
    35 
       
    36     * application program interface (API),                                    
       
    37 
       
    38     * GNU MathProg modeling language (a subset of AMPL),                      
       
    39 
       
    40     * GLPSOL, a stand-alone LP/MIP solver.                                    
       
    41 
       
    42 
       
    43   Q. Who develops and maintains GLPK?                                     
       
    44 
       
    45   A. GLPK is currently developed and maintained by Andrew Makhorin,       
       
    46   Department for Applied Informatics, Moscow Aviation Institute, Moscow,  
       
    47   Russia. Andrew's email address is <mao@mai2.rcnet.ru> and his postal    
       
    48   address is 125871, Russia, Moscow, Volokolamskoye sh., 4, Moscow        
       
    49   Aviation Institute, Andrew O. Makhorin                                  
       
    50 
       
    51 
       
    52   Q. How is GLPK licensed?                                                
       
    53 
       
    54   A. GLPK is currently licensed under the GNU General Public License      
       
    55   (GPL). GLPK is free software; you can redistribute it and/or modify it  
       
    56   under the terms of the GNU General Public License as published by the   
       
    57   Free Software Foundation; either version 2, or (at your option) any     
       
    58   later version.                                                          
       
    59 
       
    60   GLPK is not licensed under the Lesser General Public License (LGPL) as  
       
    61   distinct from other free LP codes such as lp_solve. The most            
       
    62   significant implication is that code that is linked to the GLPK library 
       
    63   must be released under the GPL, whereas with the LGPL, code linked to   
       
    64   the library does not have to be released under the same license.        
       
    65 
       
    66 
       
    67   Q. Where is the GLPK home page?                                         
       
    68 
       
    69   The GLPK home page is part of the GNU web site and can found at         
       
    70   <http://www.gnu.org/software/glpk/glpk.html>.                           
       
    71 
       
    72 
       
    73   Q. How do I download and install GLPK?                                  
       
    74 
       
    75   A. The GLPK source distribution can be found in the subdirectory        
       
    76   /gnu/glpk/ on your favorite GNU mirror                                  
       
    77   <http://www.gnu.org/prep/ftp.html> and can be compiled directly from    
       
    78   the source.                                                             
       
    79 
       
    80   The GLPK package (like all other GNU software) is distributed in the    
       
    81   form of packed archive. This is one file named 'glpk-x.y.tar.gz', where 
       
    82   x is the major version number and y is the minor version number.        
       
    83 
       
    84   In order to prepare the distribution for installation you should:       
       
    85 
       
    86     1. Copy the GLPK distribution file to some subdirectory.                   
       
    87 
       
    88     2. Enter the command 'gzip -d glpk-x.y.tar.gz' in order to unpack the      
       
    89        distribution file. After unpacking the name of the distribution file    
       
    90        will be automatically changed to 'glpk-x.y.tar'.                        
       
    91 
       
    92     3. Enter the command 'tar -x < glpk-x.y.tar' in order to unarchive the     
       
    93        distribution. After this operation the subdirectory 'glpk-x.y' which is 
       
    94        the GLPK distribution will have been automatically created.             
       
    95 
       
    96   After you have unpacked and unarchived GLPK distribution you should     
       
    97   configure the package, and compiled the application. The result of      
       
    98   compilation is:                                                         
       
    99 
       
   100     * the file 'libglpk.a', which is a library archive containing object code 
       
   101       for all GLPK routines; and                                              
       
   102 
       
   103     * the program 'glpsol', which is a stand-alone LP/MIP solver.             
       
   104 
       
   105   Complete compilation and installation instructions are included in the  
       
   106   INSTALL file included with the distribution.                            
       
   107 
       
   108   The distribution includes make files for the Microsoft Visual C/C++     
       
   109   version 6 and Borland C/C++ version 5 and by default compiles and links 
       
   110   a glpk*.lib library file, a glpk*.dll DLL file and an glpsol.exe        
       
   111   application file. A GNU Windows 4.1 binary, source and documentation    
       
   112   compiled using the mingw32 C/C++ compiler is also available from        
       
   113   <http://gnuwin32.sourceforge.net/packages/glpk.htm>.                    
       
   114 
       
   115 
       
   116   Q. Is there a GLPK mailing list or newsgroup?                           
       
   117 
       
   118   A. GLPK has two mailing lists: <help-glpk@gnu.org> and                  
       
   119   <bug-glpk@gnu.org>.                                                     
       
   120 
       
   121   The main discussion list is <help-glpk@gnu.org>, and is used to discuss 
       
   122   all aspects of GLPK, including its development and porting. There is    
       
   123   also a special list used for reporting bugs at <bug-glpk@gnu.org>.      
       
   124 
       
   125   To subscribe to any GLPK mailing list, send an empty mail with a        
       
   126   Subject: header line of just "subscribe" to the relevant -request list. 
       
   127   For example, to subscribe yourself to the main list, you would send     
       
   128   mail to <help-glpk-request@gnu.org> with no body and a Subject: header  
       
   129   line of just "subscribe".                                               
       
   130 
       
   131   Another way to subscribe to the GLP mailing lists is to visit the web   
       
   132   pages <http://mail.gnu.org/mailman/listinfo/help-glpk> and              
       
   133   <http://mail.gnu.org/mailman/listinfo/bug-glpk>.                        
       
   134 
       
   135   Currently there are no newsgroups dedicated to GLPK.                    
       
   136 
       
   137 
       
   138   Q. Who maintains this FAQ and how do I contribute to this FAQ?          
       
   139 
       
   140   A. The present maintainer of this FAQ is Dr. Harley Mackenzie, HARD     
       
   141   software, although the content of the FAQ is derived from many sources  
       
   142   such as GLPK documentation, GLPK email archives and original content.   
       
   143 
       
   144   Harley's email address is <hjm@hardsoftware.com> and his postal address 
       
   145   is c/o HARD software, PO Box 8004, Newtown, Victoria 3220, Australia.   
       
   146 
       
   147   All contributions to this FAQ, such as questions and (preferably)       
       
   148   answers should be sent to the <hjm@hardsoftware.com> email address.     
       
   149   This FAQ is copyright Harley Mackenzie 2003 and is released under the   
       
   150   same license, terms and conditions as GLPK, that is, GPL version 2 or   
       
   151   later.                                                                  
       
   152 
       
   153   Contributions are not directly referenced in the body of the FAQ as     
       
   154   this would become unmanageable and messy, but rather as a list of       
       
   155   contributors to this FAQ. If you are the author of any information      
       
   156   included in this FAQ and you do not want your content to be included,   
       
   157   please contact the FAQ maintainer and your material will be removed.    
       
   158   Also if you have not been correctly included as a contributor to this   
       
   159   FAQ, your details have changed, or you do not want your name listed in  
       
   160   the list of contributors, please contact the FAQ maintainer for         
       
   161   correction.                                                             
       
   162 
       
   163 
       
   164   Q. Where can I download this FAQ?                                       
       
   165 
       
   166   The latest version of the GLPK FAQ is available to download from        
       
   167   <http://www.hardsoftware.com/downloads.php#GLPK+FAQ> in the following   
       
   168   formats:                                                                
       
   169 
       
   170     * DocBook                                                                 
       
   171 
       
   172     * Formatted text                                                          
       
   173 
       
   174     * Adobe PDF                                                               
       
   175 
       
   176 
       
   177   Q. Who are the FAQ contributors?                                        
       
   178 
       
   179   A. The FAQ contents were created from the following sources:            
       
   180 
       
   181     * Michael Hennebry                                                        
       
   182 
       
   183     * http://www-unix.mcs.anl.gov/otc/Guide/faq/linear-programming-faq.html   
       
   184 
       
   185     * Harley Mackenzie, HARD software Pty. Ltd.                               
       
   186 
       
   187     * Andrew Makhorin, Department for Applied Informatics, Moscow Aviation    
       
   188       Institute                                                               
       
   189 
       
   190 
       
   191 GLPK functions & features
       
   192 
       
   193   Q. What is the current state of GLPK development?                       
       
   194 
       
   195   A. GLPK is a work in progress and is presently under continual          
       
   196   development. As of the current version 4.3, GLPK is a simplex-based     
       
   197   solver is able to handle problems with up to 100,000 constraints. In    
       
   198   particular, it successfully solves all instances from netlib (see the   
       
   199   file bench.txt included in the GLPK distribution). The interior-point   
       
   200   solver is not very robust as it is unable to handle dense columns,      
       
   201   sometimes terminates due to numeric instability or slow convergence.    
       
   202 
       
   203   The Mixed Integer Programming (MIP) solver currently is based on        
       
   204   branch-and-bound, so it is unable to solve hard or very large problems  
       
   205   with a probable practical limit of 100-200 integer variables. However,  
       
   206   sometimes it is able to solve larger problems of up to 1000 integer     
       
   207   variables, although the size that depends on properties of particular   
       
   208   problem.                                                                
       
   209 
       
   210 
       
   211   Q. How does GLPK compare with other LP codes?                           
       
   212 
       
   213   A. I think that on very large-scale instances CPLEX 8.0 dual simplex is 
       
   214   10-100 times faster than the GLPK simplex solver and, of course, much   
       
   215   more robust. In many cases GLPK is faster and more robust than lp_solve 
       
   216   4.0 for pure LPs as well as MIP's. See the bench.txt file in the GLPK   
       
   217   distribution doc directory for GLPK netlib benchmark results.           
       
   218 
       
   219   You can find benchmarks for some LP and MIP solvers such as CPLEX,      
       
   220   GLPK, lp_solve, and OSL on Hans Mittelmann's webpage at                 
       
   221   <http://plato.asu.edu/bench.html>.                                      
       
   222 
       
   223 
       
   224   Q. What are the differences between AMPL and GNU MathProg?              
       
   225 
       
   226   A. The subset of AMPL implemented in MathProg approximately corresponds 
       
   227   to AMPL status in 1990, because it is mainly based on the paper Robert  
       
   228   Fourer, David M Gay and Brian W Kernighan (1990), "A Modeling Language  
       
   229   for Mathematical Programming", Management Science, Vol 36, pp. 519-554  
       
   230   and is available at                                                     
       
   231   <http://users.iems.nwu.edu/~4er/WRITINGS/amplmod.pdf>.                  
       
   232 
       
   233   The GNU MathProg translator was developed as part of GLPK. However, GNU 
       
   234   MathProg can be easily used in other applications as there is a set of  
       
   235   MathProg interface routines designed for use in other applications.     
       
   236 
       
   237 
       
   238   Q. What input file formats does GLPK support?                           
       
   239 
       
   240   A. GLPK presently can read input and output LP model files in three     
       
   241   supported formats:                                                      
       
   242 
       
   243     * MPS format - which is a column oriented and widely supported file       
       
   244       format but has poor human readability.                                  
       
   245 
       
   246     * CPLEX format - which is an easily readable row oriented format.         
       
   247 
       
   248     * GNU MathProg - which is an AMPL like mathematical modeling language.    
       
   249 
       
   250 
       
   251   Q. What interfaces are available for GLPK?                              
       
   252 
       
   253   A. The GLPK package is in fact a C API that can be either by statically 
       
   254   or dynamically linked directly with many programming systems.           
       
   255 
       
   256   Presently there are three contributed external interfaces included with 
       
   257   the GLPK package:                                                       
       
   258 
       
   259     * GLPK Java Native Interface (JNI)                                        
       
   260 
       
   261     * GLPK Delphi Interface (DELI)                                            
       
   262 
       
   263     * GLPKMEX Matlab MEX interface                                            
       
   264 
       
   265   There is an unofficial Microsoft Visual Basic, Tcl/Tk and Java GLPK     
       
   266   interface available at                                                  
       
   267   <http://gottfried.lindner.bei.t-online.de/glpk.htm>.                    
       
   268 
       
   269   There are other language interfaces under development, including a Perl 
       
   270   interface currently being developed by the FAQ maintainer, Dr. Harley   
       
   271   Mackenzie <hjm@hardsoftware.com>.                                       
       
   272 
       
   273 
       
   274   Q. Where can I find some examples?                                      
       
   275 
       
   276   A. The GLPK package distribution contains many examples written in GNU  
       
   277   MathProg (*.mod), C API calls (*.c), CPLEX input file format (*.lpt),   
       
   278   MPS format (*.mps) as well as some specific Traveling Salesman examples 
       
   279   (*.tsp).                                                                
       
   280 
       
   281   All of the examples can be found in the GLPK distribution examples      
       
   282   sub-directory.                                                          
       
   283 
       
   284 
       
   285   Q. What are the future plans for GLPK?                                  
       
   286 
       
   287   A. Developments planned for GLPK include improving the existing key     
       
   288   GLPK components, such as developing a more robust and more efficient    
       
   289   implementation of the simplex-based and interior-point solvers. Future  
       
   290   GLPK enhancements planned are implementing a branch-and-cut solver, a   
       
   291   MIP pre-processor, post-optimal and sensitivity analysis and possibly   
       
   292   network simplex and quadratic programming solvers.                      
       
   293 
       
   294 
       
   295   Q. How do I report a GLPK bug?                                          
       
   296 
       
   297   A. If you think you have found a bug in GLPK, then you should send as   
       
   298   complete a report as possible to <bug-glpk@gnu.org>.                    
       
   299 
       
   300 
       
   301   Q. How do I contribute to the GLPK development?                         
       
   302 
       
   303   A. At present new GLPK development patches should be emailed to Andrew  
       
   304   Makhorin <mao@mai2.rcnet.ru >, with sufficient documentation and test   
       
   305   code to explain the nature of the patch, how to install it and the      
       
   306   implications of its use. Before commencing any major GLPK development   
       
   307   for inclusion in the GLPK distribution, it would be a good idea to      
       
   308   discuss the idea on the GLPK mailing list.                              
       
   309 
       
   310 
       
   311   Q. How do I compile and link a GLPK application on a UNIX platform?     
       
   312 
       
   313   A. To compile a GLPK application on a UNIX platform, then compiler must 
       
   314   be able to include the GLPK include files and link to the GLPK library. 
       
   315   For example, on a system where the GLPK system is installed:            
       
   316 
       
   317   gcc mylp.c -o mylp -lglpk                                               
       
   318 
       
   319   or specify the include files and libglpk.a explicitly, if GLPK is not   
       
   320   installed.                                                              
       
   321 
       
   322 
       
   323   Q. How do I compile and link a GLPK application on a Win32 platform?    
       
   324 
       
   325   A. On a Win32 platform, GLPK is implemented either as a Win32 Dynamic   
       
   326   Link Library (DLL) or can be statically linked to the glpk*.lib file.   
       
   327   As with the UNIX instructions, a GLPK application must set a path to    
       
   328   the GLPK include files and also reference the GLPK library if           
       
   329   statically linked.                                                      
       
   330 
       
   331 
       
   332   Q. How do I limit the GLPK execution time?                              
       
   333 
       
   334   A. You can limit the computing time by setting the control parameter    
       
   335   LPX_K_TMLIM via the API routine lpx_set_real_parm . At present there is 
       
   336   no way of limiting the execution time of glpsol without changing the    
       
   337   source and recompiling a specific version.                              
       
   338 
       
   339 
       
   340 GLPK Linear Programming
       
   341 
       
   342   Q. What is Linear Programming and how does it work?                     
       
   343 
       
   344   A. Linear Programming is a mathematical technique that is a generic     
       
   345   method for solving certain systems of equations with linear terms. The  
       
   346   real power of LP's are that they have many practical applications and   
       
   347   have proven to be a powerful and robust tool.                           
       
   348 
       
   349   The best single source of information on LP's is the Linear Programming 
       
   350   FAQ                                                                     
       
   351   <http://www-unix.mcs.anl.gov/otc/Guide/faq/linear-programming-faq.html> 
       
   352   that has information on LP's and MIP's, includes a comprehensive list   
       
   353   of available LP software and has many LP references for further study.  
       
   354 
       
   355 
       
   356   Q. How do I determine the stability of an LP solution?                  
       
   357 
       
   358   A. You can perform sensitivity analysis by specifying the --bounds      
       
   359   option for glpsol as:                                                   
       
   360 
       
   361   glpsol ... --bounds filename                                            
       
   362 
       
   363   in which case the solver writes results of the analysis to the          
       
   364   specified filename in plain text format. The corresponding API routine  
       
   365   is lpx_print_sens_bnds() .                                              
       
   366 
       
   367 
       
   368   Q. How do I determine which constraints are causing infeasibility?      
       
   369 
       
   370   A straightforward way to find such a set of constraints is to drop      
       
   371   constraints one at a time. If dropping a constraint results in a        
       
   372   solvable problem, pick it up and go on to the next constraint. After    
       
   373   applying phase 1 to an infeasible problem, all basic satisfied          
       
   374   constraints may be dropped.                                             
       
   375 
       
   376   If the problem has a feasible dual, then running the dual simplex       
       
   377   method is a more direct approach. After the last pivot, the nonbasic    
       
   378   constraints and one of the violated constraints will constitute a       
       
   379   minimal set. The GLPK simplex table routines will allow you to pick a   
       
   380   correct constraint from the violated ones.                              
       
   381 
       
   382   Note that the GLPK pre-solver needs to be turned off for the preceding  
       
   383   technique to work, otherwise GLPK does not keep the basis of an         
       
   384   infeasible solution.                                                    
       
   385 
       
   386   Also a more detailed methodology has been posted on the mail list       
       
   387   archive at                                                              
       
   388   <http://mail.gnu.org/archive/html/help-glpk/2003-09/msg00017.html>.     
       
   389 
       
   390 
       
   391   Q. What is the difference between checks and constraints?               
       
   392 
       
   393   A. Check statements are intended to check that all data specified by    
       
   394   the user of the model are correct, mainly in the data section of a      
       
   395   MathProg model. For example, if some parameter means the number of      
       
   396   nodes in a network, it must be positive integer, that is just the       
       
   397   condition to be checked in the check statement (although in this case   
       
   398   such condition may be also checked directly in the parameter            
       
   399   statement). Note that check statements are performed when the           
       
   400   translator is generating the model, so they cannot include variables.   
       
   401 
       
   402   Constraints are conditions that are expressed in terms of variables and 
       
   403   resolved by the solver after the model has been completely generated.   
       
   404   If all data specified in the model are correct a priori, check          
       
   405   statements are not needed and can be omitted, while constraints are     
       
   406   essential components of the model and therefore cannot be omitted.      
       
   407 
       
   408 
       
   409 GLPK Integer Programming 
       
   410 
       
   411   Q. What is Integer Programming and how does it work?                    
       
   412 
       
   413   A. Integer LP models are ones whose variables are constrained to take   
       
   414   integer or whole number (as opposed to fractional) values. It may not   
       
   415   be obvious that integer programming is a very much harder problem than  
       
   416   ordinary linear programming, but that is nonetheless the case, in both  
       
   417   theory and practice.                                                    
       
   418 
       
   419 
       
   420   Q. What is the Integer Optimization Suite (IOS)?                        
       
   421 
       
   422   A. IOS is a framework to implement implicit enumeration methods based   
       
   423   on LP relaxation (like branch-and-bound and branch-and-cut). Currently  
       
   424   IOS includes only basic features (the enumeration tree, API routines,   
       
   425   and the driver) and is not completely documented.                       
       
   426 
       
   427 
       
   428   Q. I have just changed an LP to a MIP and now it doesn't work?          
       
   429 
       
   430   A. If you have an existing LP that is working and you change to an MIP  
       
   431   and receive a "lpx_integer: optimal solution of LP relaxation required" 
       
   432   204 (==LPX_E_FAULT) error, you probably have not called the LP solution 
       
   433   method lpx_simplex() before lpx_integer() . The MIP routines use the LP 
       
   434   solution as part of the MIP solution methodology.                       
       
   435