315 @ingroup algs |
315 @ingroup algs |
316 \brief Common graph search algorithms. |
316 \brief Common graph search algorithms. |
317 |
317 |
318 This group contains the common graph search algorithms, namely |
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 \cite clrs01algorithms. |
321 */ |
321 */ |
322 |
322 |
323 /** |
323 /** |
324 @defgroup shortest_path Shortest Path Algorithms |
324 @defgroup shortest_path Shortest Path Algorithms |
325 @ingroup algs |
325 @ingroup algs |
326 \brief Algorithms for finding shortest paths. |
326 \brief Algorithms for finding shortest paths. |
327 |
327 |
328 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. |
329 \cite clrs01algorithms. |
330 |
330 |
331 - \ref Dijkstra algorithm for finding shortest paths from a source node |
331 - \ref Dijkstra algorithm for finding shortest paths from a source node |
332 when all arc lengths are non-negative. |
332 when all arc lengths are non-negative. |
333 - \ref BellmanFord "Bellman-Ford" algorithm for finding shortest paths |
333 - \ref BellmanFord "Bellman-Ford" algorithm for finding shortest paths |
334 from a source node when arc lenghts can be either positive or negative, |
334 from a source node when arc lenghts can be either positive or negative, |
346 @defgroup spantree Minimum Spanning Tree Algorithms |
346 @defgroup spantree Minimum Spanning Tree Algorithms |
347 @ingroup algs |
347 @ingroup algs |
348 \brief Algorithms for finding minimum cost spanning trees and arborescences. |
348 \brief Algorithms for finding minimum cost spanning trees and arborescences. |
349 |
349 |
350 This group contains the algorithms for finding minimum cost spanning |
350 This group contains the algorithms for finding minimum cost spanning |
351 trees and arborescences \ref clrs01algorithms. |
351 trees and arborescences \cite clrs01algorithms. |
352 */ |
352 */ |
353 |
353 |
354 /** |
354 /** |
355 @defgroup max_flow Maximum Flow Algorithms |
355 @defgroup max_flow Maximum Flow Algorithms |
356 @ingroup algs |
356 @ingroup algs |
357 \brief Algorithms for finding maximum flows. |
357 \brief Algorithms for finding maximum flows. |
358 |
358 |
359 This group contains the algorithms for finding maximum flows and |
359 This group contains the algorithms for finding maximum flows and |
360 feasible circulations \ref clrs01algorithms, \ref amo93networkflows. |
360 feasible circulations \cite clrs01algorithms, \cite amo93networkflows. |
361 |
361 |
362 The \e maximum \e flow \e problem is to find a flow of maximum value between |
362 The \e maximum \e flow \e problem is to find a flow of maximum value between |
363 a single source and a single target. Formally, there is a \f$G=(V,A)\f$ |
363 a single source and a single target. Formally, there is a \f$G=(V,A)\f$ |
364 digraph, a \f$cap: A\rightarrow\mathbf{R}^+_0\f$ capacity function and |
364 digraph, a \f$cap: A\rightarrow\mathbf{R}^+_0\f$ capacity function and |
365 \f$s, t \in V\f$ source and target nodes. |
365 \f$s, t \in V\f$ source and target nodes. |
371 \quad \forall u\in V\setminus\{s,t\} \f] |
371 \quad \forall u\in V\setminus\{s,t\} \f] |
372 \f[ 0 \leq f(uv) \leq cap(uv) \quad \forall uv\in A \f] |
372 \f[ 0 \leq f(uv) \leq cap(uv) \quad \forall uv\in A \f] |
373 |
373 |
374 LEMON contains several algorithms for solving maximum flow problems: |
374 LEMON contains several algorithms for solving maximum flow problems: |
375 - \ref EdmondsKarp Edmonds-Karp algorithm |
375 - \ref EdmondsKarp Edmonds-Karp algorithm |
376 \ref edmondskarp72theoretical. |
376 \cite edmondskarp72theoretical. |
377 - \ref Preflow Goldberg-Tarjan's preflow push-relabel algorithm |
377 - \ref Preflow Goldberg-Tarjan's preflow push-relabel algorithm |
378 \ref goldberg88newapproach. |
378 \cite goldberg88newapproach. |
379 - \ref DinitzSleatorTarjan Dinitz's blocking flow algorithm with dynamic trees |
379 - \ref DinitzSleatorTarjan Dinitz's blocking flow algorithm with dynamic trees |
380 \ref dinic70algorithm, \ref sleator83dynamic. |
380 \cite dinic70algorithm, \cite sleator83dynamic. |
381 - \ref GoldbergTarjan !Preflow push-relabel algorithm with dynamic trees |
381 - \ref GoldbergTarjan !Preflow push-relabel algorithm with dynamic trees |
382 \ref goldberg88newapproach, \ref sleator83dynamic. |
382 \cite goldberg88newapproach, \cite sleator83dynamic. |
383 |
383 |
384 In most cases the \ref Preflow algorithm provides the |
384 In most cases the \ref Preflow algorithm provides the |
385 fastest method for computing a maximum flow. All implementations |
385 fastest method for computing a maximum flow. All implementations |
386 also provide functions to query the minimum cut, which is the dual |
386 also provide functions to query the minimum cut, which is the dual |
387 problem of maximum flow. |
387 problem of maximum flow. |
397 @ingroup algs |
397 @ingroup algs |
398 |
398 |
399 \brief Algorithms for finding minimum cost flows and circulations. |
399 \brief Algorithms for finding minimum cost flows and circulations. |
400 |
400 |
401 This group contains the algorithms for finding minimum cost flows and |
401 This group contains the algorithms for finding minimum cost flows and |
402 circulations \ref amo93networkflows. For more information about this |
402 circulations \cite amo93networkflows. For more information about this |
403 problem and its dual solution, see: \ref min_cost_flow |
403 problem and its dual solution, see: \ref min_cost_flow |
404 "Minimum Cost Flow Problem". |
404 "Minimum Cost Flow Problem". |
405 |
405 |
406 LEMON contains several algorithms for this problem. |
406 LEMON contains several algorithms for this problem. |
407 - \ref NetworkSimplex Primal Network Simplex algorithm with various |
407 - \ref NetworkSimplex Primal Network Simplex algorithm with various |
408 pivot strategies \ref dantzig63linearprog, \ref kellyoneill91netsimplex. |
408 pivot strategies \cite dantzig63linearprog, \cite kellyoneill91netsimplex. |
409 - \ref CostScaling Cost Scaling algorithm based on push/augment and |
409 - \ref CostScaling Cost Scaling algorithm based on push/augment and |
410 relabel operations \ref goldberg90approximation, \ref goldberg97efficient, |
410 relabel operations \cite goldberg90approximation, \cite goldberg97efficient, |
411 \ref bunnagel98efficient. |
411 \cite bunnagel98efficient. |
412 - \ref CapacityScaling Capacity Scaling algorithm based on the successive |
412 - \ref CapacityScaling Capacity Scaling algorithm based on the successive |
413 shortest path method \ref edmondskarp72theoretical. |
413 shortest path method \cite edmondskarp72theoretical. |
414 - \ref CycleCanceling Cycle-Canceling algorithms, two of which are |
414 - \ref CycleCanceling Cycle-Canceling algorithms, two of which are |
415 strongly polynomial \ref klein67primal, \ref goldberg89cyclecanceling. |
415 strongly polynomial \cite klein67primal, \cite goldberg89cyclecanceling. |
416 |
416 |
417 In general, \ref NetworkSimplex and \ref CostScaling are the most efficient |
417 In general, \ref NetworkSimplex and \ref CostScaling are the most efficient |
418 implementations. |
418 implementations. |
419 \ref NetworkSimplex is usually the fastest on relatively small graphs (up to |
419 \ref NetworkSimplex is usually the fastest on relatively small graphs (up to |
420 several thousands of nodes) and on dense graphs, while \ref CostScaling is |
420 several thousands of nodes) and on dense graphs, while \ref CostScaling is |
428 (capacities, supply values, and costs), except for \ref CapacityScaling, |
428 (capacities, supply values, and costs), except for \ref CapacityScaling, |
429 which is capable of handling real-valued arc costs (other numerical |
429 which is capable of handling real-valued arc costs (other numerical |
430 data are required to be integer). |
430 data are required to be integer). |
431 |
431 |
432 For more details about these implementations and for a comprehensive |
432 For more details about these implementations and for a comprehensive |
433 experimental study, see the paper \ref KiralyKovacs12MCF. |
433 experimental study, see the paper \cite KiralyKovacs12MCF. |
434 It also compares these codes to other publicly available |
434 It also compares these codes to other publicly available |
435 minimum cost flow solvers. |
435 minimum cost flow solvers. |
436 */ |
436 */ |
437 |
437 |
438 /** |
438 /** |
469 @defgroup min_mean_cycle Minimum Mean Cycle Algorithms |
469 @defgroup min_mean_cycle Minimum Mean Cycle Algorithms |
470 @ingroup algs |
470 @ingroup algs |
471 \brief Algorithms for finding minimum mean cycles. |
471 \brief Algorithms for finding minimum mean cycles. |
472 |
472 |
473 This group contains the algorithms for finding minimum mean cycles |
473 This group contains the algorithms for finding minimum mean cycles |
474 \ref amo93networkflows, \ref karp78characterization. |
474 \cite amo93networkflows, \cite karp78characterization. |
475 |
475 |
476 The \e minimum \e mean \e cycle \e problem is to find a directed cycle |
476 The \e minimum \e mean \e cycle \e problem is to find a directed cycle |
477 of minimum mean length (cost) in a digraph. |
477 of minimum mean length (cost) in a digraph. |
478 The mean length of a cycle is the average length of its arcs, i.e. the |
478 The mean length of a cycle is the average length of its arcs, i.e. the |
479 ratio between the total length of the cycle and the number of arcs on it. |
479 ratio between the total length of the cycle and the number of arcs on it. |
485 cycle mean is the smallest \f$\epsilon\f$ value so that increasing the |
485 cycle mean is the smallest \f$\epsilon\f$ value so that increasing the |
486 arc lengths uniformly by \f$\epsilon\f$ results in a conservative length |
486 arc lengths uniformly by \f$\epsilon\f$ results in a conservative length |
487 function. |
487 function. |
488 |
488 |
489 LEMON contains three algorithms for solving the minimum mean cycle problem: |
489 LEMON contains three algorithms for solving the minimum mean cycle problem: |
490 - \ref KarpMmc Karp's original algorithm \ref karp78characterization. |
490 - \ref KarpMmc Karp's original algorithm \cite karp78characterization. |
491 - \ref HartmannOrlinMmc Hartmann-Orlin's algorithm, which is an improved |
491 - \ref HartmannOrlinMmc Hartmann-Orlin's algorithm, which is an improved |
492 version of Karp's algorithm \ref hartmann93finding. |
492 version of Karp's algorithm \cite hartmann93finding. |
493 - \ref HowardMmc Howard's policy iteration algorithm |
493 - \ref HowardMmc Howard's policy iteration algorithm |
494 \ref dasdan98minmeancycle, \ref dasdan04experimental. |
494 \cite dasdan98minmeancycle, \cite dasdan04experimental. |
495 |
495 |
496 In practice, the \ref HowardMmc "Howard" algorithm turned out to be by far the |
496 In practice, the \ref HowardMmc "Howard" algorithm turned out to be by far the |
497 most efficient one, though the best known theoretical bound on its running |
497 most efficient one, though the best known theoretical bound on its running |
498 time is exponential. |
498 time is exponential. |
499 Both \ref KarpMmc "Karp" and \ref HartmannOrlinMmc "Hartmann-Orlin" algorithms |
499 Both \ref KarpMmc "Karp" and \ref HartmannOrlinMmc "Hartmann-Orlin" algorithms |
645 |
645 |
646 This group contains LP and MIP solver interfaces for LEMON. |
646 This group contains LP and MIP solver interfaces for LEMON. |
647 Various LP solvers could be used in the same manner with this |
647 Various LP solvers could be used in the same manner with this |
648 high-level interface. |
648 high-level interface. |
649 |
649 |
650 The currently supported solvers are \ref glpk, \ref clp, \ref cbc, |
650 The currently supported solvers are \cite glpk, \cite clp, \cite cbc, |
651 \ref cplex, \ref soplex. |
651 \cite cplex, \cite soplex. |
652 */ |
652 */ |
653 |
653 |
654 /** |
654 /** |
655 @defgroup lp_utils Tools for Lp and Mip Solvers |
655 @defgroup lp_utils Tools for Lp and Mip Solvers |
656 @ingroup lp_group |
656 @ingroup lp_group |