lemon-project-template-glpk
comparison deps/glpk/doc/glpk_faq.txt @ 9:33de93886c88
Import GLPK 4.47
author | Alpar Juttner <alpar@cs.elte.hu> |
---|---|
date | Sun, 06 Nov 2011 20:59:10 +0100 |
parents | |
children |
comparison
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 |