# HG changeset patch
# User Peter Kovacs <kpeter@inf.elte.hu>
# Date 1255060637 -7200
# Node ID 1de05cf355c5b109b6fbe46a0ebb163473027ad9
# Parent 420e33e371205619e1feff24f0c2725d31e09203
Insert citations into the doc (#184)
- Add general citations to modules.
- Add specific citations for max flow and min cost flow algorithms.
- Add citations for the supported LP and MIP solvers.
- Extend the main page.
- Replace inproceedings entries with the journal versions.
- Add a new entry about network simplex.
- Remove uncited (and potentially unwanted) entries.
diff --git a/doc/groups.dox b/doc/groups.dox
a
|
b
|
|
316 | 316 | \brief Common graph search algorithms. |
317 | 317 | |
318 | 318 | This group contains the common graph search algorithms, namely |
319 | | \e breadth-first \e search (BFS) and \e depth-first \e search (DFS). |
| 319 | \e breadth-first \e search (BFS) and \e depth-first \e search (DFS) |
| 320 | \ref clrs01algorithms. |
320 | 321 | */ |
321 | 322 | |
322 | 323 | /** |
… |
… |
|
324 | 325 | @ingroup algs |
325 | 326 | \brief Algorithms for finding shortest paths. |
326 | 327 | |
327 | | This group contains the algorithms for finding shortest paths in digraphs. |
| 328 | This group contains the algorithms for finding shortest paths in digraphs |
| 329 | \ref clrs01algorithms. |
328 | 330 | |
329 | 331 | - \ref Dijkstra algorithm for finding shortest paths from a source node |
330 | 332 | when all arc lengths are non-negative. |
… |
… |
|
346 | 348 | \brief Algorithms for finding minimum cost spanning trees and arborescences. |
347 | 349 | |
348 | 350 | This group contains the algorithms for finding minimum cost spanning |
349 | | trees and arborescences. |
| 351 | trees and arborescences \ref clrs01algorithms. |
350 | 352 | */ |
351 | 353 | |
352 | 354 | /** |
… |
… |
|
355 | 357 | \brief Algorithms for finding maximum flows. |
356 | 358 | |
357 | 359 | This group contains the algorithms for finding maximum flows and |
358 | | feasible circulations. |
| 360 | feasible circulations \ref clrs01algorithms, \ref amo93networkflows. |
359 | 361 | |
360 | 362 | The \e maximum \e flow \e problem is to find a flow of maximum value between |
361 | 363 | a single source and a single target. Formally, there is a \f$G=(V,A)\f$ |
… |
… |
|
370 | 372 | \f[ 0 \leq f(uv) \leq cap(uv) \quad \forall uv\in A \f] |
371 | 373 | |
372 | 374 | LEMON contains several algorithms for solving maximum flow problems: |
373 | | - \ref EdmondsKarp Edmonds-Karp algorithm. |
374 | | - \ref Preflow Goldberg-Tarjan's preflow push-relabel algorithm. |
375 | | - \ref DinitzSleatorTarjan Dinitz's blocking flow algorithm with dynamic trees. |
376 | | - \ref GoldbergTarjan Preflow push-relabel algorithm with dynamic trees. |
| 375 | - \ref EdmondsKarp Edmonds-Karp algorithm |
| 376 | \ref edmondskarp72theoretical. |
| 377 | - \ref Preflow Goldberg-Tarjan's preflow push-relabel algorithm |
| 378 | \ref goldberg88newapproach. |
| 379 | - \ref DinitzSleatorTarjan Dinitz's blocking flow algorithm with dynamic trees |
| 380 | \ref dinic70algorithm, \ref sleator83dynamic. |
| 381 | - \ref GoldbergTarjan !Preflow push-relabel algorithm with dynamic trees |
| 382 | \ref goldberg88newapproach, \ref sleator83dynamic. |
377 | 383 | |
378 | | In most cases the \ref Preflow "Preflow" algorithm provides the |
| 384 | In most cases the \ref Preflow algorithm provides the |
379 | 385 | fastest method for computing a maximum flow. All implementations |
380 | 386 | also provide functions to query the minimum cut, which is the dual |
381 | 387 | problem of maximum flow. |
… |
… |
|
393 | 399 | \brief Algorithms for finding minimum cost flows and circulations. |
394 | 400 | |
395 | 401 | This group contains the algorithms for finding minimum cost flows and |
396 | | circulations. For more information about this problem and its dual |
397 | | solution see \ref min_cost_flow "Minimum Cost Flow Problem". |
| 402 | circulations \ref amo93networkflows. For more information about this |
| 403 | problem and its dual solution, see \ref min_cost_flow |
| 404 | "Minimum Cost Flow Problem". |
398 | 405 | |
399 | 406 | LEMON contains several algorithms for this problem. |
400 | 407 | - \ref NetworkSimplex Primal Network Simplex algorithm with various |
401 | | pivot strategies. |
| 408 | pivot strategies \ref dantzig63linearprog, \ref kellyoneill91netsimplex. |
402 | 409 | - \ref CostScaling Push-Relabel and Augment-Relabel algorithms based on |
403 | | cost scaling. |
| 410 | cost scaling \ref goldberg90approximation, \ref goldberg97efficient, |
| 411 | \ref bunnagel98efficient. |
404 | 412 | - \ref CapacityScaling Successive Shortest %Path algorithm with optional |
405 | | capacity scaling. |
406 | | - \ref CancelAndTighten The Cancel and Tighten algorithm. |
407 | | - \ref CycleCanceling Cycle-Canceling algorithms. |
| 413 | capacity scaling \ref edmondskarp72theoretical. |
| 414 | - \ref CancelAndTighten The Cancel and Tighten algorithm |
| 415 | \ref goldberg89cyclecanceling. |
| 416 | - \ref CycleCanceling Cycle-Canceling algorithms |
| 417 | \ref klein67primal, \ref goldberg89cyclecanceling. |
408 | 418 | |
409 | 419 | In general NetworkSimplex is the most efficient implementation, |
410 | 420 | but in special cases other algorithms could be faster. |
… |
… |
|
534 | 544 | */ |
535 | 545 | |
536 | 546 | /** |
537 | | @defgroup lp_group Lp and Mip Solvers |
| 547 | @defgroup lp_group LP and MIP Solvers |
538 | 548 | @ingroup gen_opt_group |
539 | | \brief Lp and Mip solver interfaces for LEMON. |
| 549 | \brief LP and MIP solver interfaces for LEMON. |
540 | 550 | |
541 | | This group contains Lp and Mip solver interfaces for LEMON. The |
542 | | various LP solvers could be used in the same manner with this |
543 | | interface. |
| 551 | This group contains LP and MIP solver interfaces for LEMON. |
| 552 | Various LP solvers could be used in the same manner with this |
| 553 | high-level interface. |
| 554 | |
| 555 | The currently supported solvers are \ref glpk, \ref clp, \ref cbc, |
| 556 | \ref cplex, \ref soplex. |
544 | 557 | */ |
545 | 558 | |
546 | 559 | /** |
diff --git a/doc/mainpage.dox b/doc/mainpage.dox
a
|
b
|
|
21 | 21 | |
22 | 22 | \section intro Introduction |
23 | 23 | |
24 | | \subsection whatis What is LEMON |
25 | | |
26 | | LEMON stands for <b>L</b>ibrary for <b>E</b>fficient <b>M</b>odeling |
27 | | and <b>O</b>ptimization in <b>N</b>etworks. |
28 | | It is a C++ template |
29 | | library aimed at combinatorial optimization tasks which |
30 | | often involve in working |
31 | | with graphs. |
| 24 | <b>LEMON</b> stands for <i><b>L</b>ibrary for <b>E</b>fficient <b>M</b>odeling |
| 25 | and <b>O</b>ptimization in <b>N</b>etworks</i>. |
| 26 | It is a C++ template library providing efficient implementation of common |
| 27 | data structures and algorithms with focus on combinatorial optimization |
| 28 | problems in graphs and networks. |
32 | 29 | |
33 | 30 | <b> |
34 | 31 | LEMON is an <a class="el" href="http://opensource.org/">open source</a> |
… |
… |
|
38 | 35 | \ref license "license terms". |
39 | 36 | </b> |
40 | 37 | |
41 | | \subsection howtoread How to read the documentation |
| 38 | The project is maintained by the |
| 39 | <a href="http://www.cs.elte.hu/egres/">Egerváry Research Group on |
| 40 | Combinatorial Optimization</a> \ref egres |
| 41 | at the Operations Research Department of the |
| 42 | <a href="http://www.elte.hu/">Eötvös Loránd University, |
| 43 | Budapest</a>, Hungary. |
| 44 | LEMON is also a member of the <a href="http://www.coin-or.org/">COIN-OR</a> |
| 45 | initiative \ref coinor. |
| 46 | |
| 47 | \section howtoread How to Read the Documentation |
42 | 48 | |
43 | 49 | If you would like to get to know the library, see |
44 | 50 | <a class="el" href="http://lemon.cs.elte.hu/pub/tutorial/">LEMON Tutorial</a>. |
diff --git a/doc/min_cost_flow.dox b/doc/min_cost_flow.dox
a
|
b
|
|
26 | 26 | The \e minimum \e cost \e flow \e problem is to find a feasible flow of |
27 | 27 | minimum total cost from a set of supply nodes to a set of demand nodes |
28 | 28 | in a network with capacity constraints (lower and upper bounds) |
29 | | and arc costs. |
| 29 | and arc costs \ref amo93networkflows. |
30 | 30 | |
31 | 31 | Formally, let \f$G=(V,A)\f$ be a digraph, \f$lower: A\rightarrow\mathbf{R}\f$, |
32 | 32 | \f$upper: A\rightarrow\mathbf{R}\cup\{+\infty\}\f$ denote the lower and |
diff --git a/doc/references.bib b/doc/references.bib
a
|
b
|
|
15 | 15 | } |
16 | 16 | |
17 | 17 | |
18 | | %%%%% Other libraries %%%%%% |
19 | | |
20 | | @misc{boost, |
21 | | key = {Boost}, |
22 | | title = {{B}oost {C++} {L}ibraries}, |
23 | | url = {http://www.boost.org/} |
24 | | } |
25 | | |
26 | | @book{bglbook, |
27 | | author = {Jeremy G. Siek and Lee-Quan Lee and Andrew |
28 | | Lumsdaine}, |
29 | | title = {The Boost Graph Library: User Guide and Reference |
30 | | Manual}, |
31 | | publisher = {Addison-Wesley}, |
32 | | year = 2002 |
33 | | } |
34 | | |
35 | | @misc{leda, |
36 | | key = {LEDA}, |
37 | | title = {{LEDA} -- {L}ibrary of {E}fficient {D}ata {T}ypes and |
38 | | {A}lgorithms}, |
39 | | url = {http://www.algorithmic-solutions.com/} |
40 | | } |
41 | | |
42 | | @book{ledabook, |
43 | | author = {Kurt Mehlhorn and Stefan N{\"a}her}, |
44 | | title = {{LEDA}: {A} platform for combinatorial and geometric |
45 | | computing}, |
46 | | isbn = {0-521-56329-1}, |
47 | | publisher = {Cambridge University Press}, |
48 | | address = {New York, NY, USA}, |
49 | | year = 1999 |
50 | | } |
51 | | |
52 | | |
53 | 18 | %%%%% Tools that LEMON depends on %%%%% |
54 | 19 | |
55 | 20 | @misc{cmake, |
… |
… |
|
142 | 107 | |
143 | 108 | %%%%% Maximum flow algorithms %%%%% |
144 | 109 | |
145 | | @inproceedings{goldberg86newapproach, |
| 110 | @article{edmondskarp72theoretical, |
| 111 | author = {Jack Edmonds and Richard M. Karp}, |
| 112 | title = {Theoretical improvements in algorithmic efficiency |
| 113 | for network flow problems}, |
| 114 | journal = {Journal of the ACM}, |
| 115 | year = 1972, |
| 116 | volume = 19, |
| 117 | number = 2, |
| 118 | pages = {248-264} |
| 119 | } |
| 120 | |
| 121 | @article{goldberg88newapproach, |
146 | 122 | author = {Andrew V. Goldberg and Robert E. Tarjan}, |
147 | 123 | title = {A new approach to the maximum flow problem}, |
148 | | booktitle = {STOC '86: Proceedings of the Eighteenth Annual ACM |
149 | | Symposium on Theory of Computing}, |
150 | | year = 1986, |
151 | | publisher = {ACM Press}, |
152 | | address = {New York, NY}, |
153 | | pages = {136-146} |
| 124 | journal = {Journal of the ACM}, |
| 125 | year = 1988, |
| 126 | volume = 35, |
| 127 | number = 4, |
| 128 | pages = {921-940} |
154 | 129 | } |
155 | 130 | |
156 | 131 | @article{dinic70algorithm, |
… |
… |
|
221 | 196 | pages = {205-220} |
222 | 197 | } |
223 | 198 | |
224 | | @inproceedings{goldberg88cyclecanceling, |
| 199 | @article{goldberg89cyclecanceling, |
225 | 200 | author = {Andrew V. Goldberg and Robert E. Tarjan}, |
226 | 201 | title = {Finding minimum-cost circulations by canceling |
227 | 202 | negative cycles}, |
228 | | booktitle = {STOC '88: Proceedings of the Twentieth Annual ACM |
229 | | Symposium on Theory of Computing}, |
230 | | year = 1988, |
231 | | publisher = {ACM Press}, |
232 | | address = {New York, NY}, |
233 | | pages = {388-397} |
| 203 | journal = {Journal of the ACM}, |
| 204 | year = 1989, |
| 205 | volume = 36, |
| 206 | number = 4, |
| 207 | pages = {873-886} |
234 | 208 | } |
235 | 209 | |
236 | | @article{edmondskarp72theoretical, |
237 | | author = {Jack Edmonds and Richard M. Karp}, |
238 | | title = {Theoretical improvements in algorithmic efficiency |
239 | | for network flow problems}, |
240 | | journal = {Journal of the ACM}, |
241 | | year = 1972, |
242 | | volume = 19, |
243 | | number = 2, |
244 | | pages = {248-264} |
245 | | } |
246 | | |
247 | | @inproceedings{goldberg87approximation, |
248 | | author = {Andrew V. Goldberg and Robert E. Tarjan}, |
249 | | title = {Solving minimum-cost flow problems by successive |
250 | | approximation}, |
251 | | booktitle = {STOC '87: Proceedings of the Nineteenth Annual ACM |
252 | | Symposium on Theory of Computing}, |
253 | | year = 1987, |
254 | | publisher = {ACM Press}, |
255 | | address = {New York, NY}, |
256 | | pages = {7-18} |
257 | | } |
258 | | |
259 | | @article{goldberg90finding, |
| 210 | @article{goldberg90approximation, |
260 | 211 | author = {Andrew V. Goldberg and Robert E. Tarjan}, |
261 | 212 | title = {Finding Minimum-Cost Circulations by Successive |
262 | 213 | Approximation}, |
… |
… |
|
289 | 240 | pages = {157-174} |
290 | 241 | } |
291 | 242 | |
| 243 | @book{dantzig63linearprog, |
| 244 | author = {George B. Dantzig}, |
| 245 | title = {Linear Programming and Extensions}, |
| 246 | publisher = {Princeton University Press}, |
| 247 | year = 1963 |
| 248 | } |
| 249 | |
292 | 250 | @mastersthesis{kellyoneill91netsimplex, |
293 | 251 | author = {Damian J. Kelly and Garrett M. O'Neill}, |
294 | 252 | title = {The Minimum Cost Flow Problem and The Network |
… |
… |
|
298 | 256 | year = 1991, |
299 | 257 | month = sep, |
300 | 258 | } |
301 | | |
302 | | @techreport{lobel96networksimplex, |
303 | | author = {Andreas L{\"o}bel}, |
304 | | title = {Solving large-scale real-world minimum-cost flow |
305 | | problems by a network simplex method}, |
306 | | institution = {Konrad-Zuse-Zentrum fur Informationstechnik Berlin |
307 | | ({ZIB})}, |
308 | | address = {Berlin, Germany}, |
309 | | year = 1996, |
310 | | number = {SC 96-7} |
311 | | } |
312 | | |
313 | | @article{frangioni06computational, |
314 | | author = {Antonio Frangioni and Antonio Manca}, |
315 | | title = {A Computational Study of Cost Reoptimization for |
316 | | Min-Cost Flow Problems}, |
317 | | journal = {INFORMS Journal On Computing}, |
318 | | year = 2006, |
319 | | volume = 18, |
320 | | number = 1, |
321 | | pages = {61-70} |
322 | | } |
diff --git a/lemon/network_simplex.h b/lemon/network_simplex.h
a
|
b
|
|
40 | 40 | /// for finding a \ref min_cost_flow "minimum cost flow". |
41 | 41 | /// |
42 | 42 | /// \ref NetworkSimplex implements the primal Network Simplex algorithm |
43 | | /// for finding a \ref min_cost_flow "minimum cost flow". |
| 43 | /// for finding a \ref min_cost_flow "minimum cost flow" |
| 44 | /// \ref amo93networkflows, \ref dantzig63linearprog, |
| 45 | /// \ref kellyoneill91netsimplex. |
44 | 46 | /// This algorithm is a specialized version of the linear programming |
45 | 47 | /// simplex method directly for the minimum cost flow problem. |
46 | 48 | /// It is one of the most efficient solution methods. |
diff --git a/lemon/preflow.h b/lemon/preflow.h
a
|
b
|
|
102 | 102 | /// |
103 | 103 | /// This class provides an implementation of Goldberg-Tarjan's \e preflow |
104 | 104 | /// \e push-relabel algorithm producing a \ref max_flow |
105 | | /// "flow of maximum value" in a digraph. |
| 105 | /// "flow of maximum value" in a digraph \ref clrs01algorithms, |
| 106 | /// \ref amo93networkflows, \ref goldberg88newapproach. |
106 | 107 | /// The preflow algorithms are the fastest known maximum |
107 | 108 | /// flow algorithms. The current implementation uses a mixture of the |
108 | 109 | /// \e "highest label" and the \e "bound decrease" heuristics. |