# 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. |