doc/groups.dox
changeset 1073 73c892335e74
parent 1051 4f9a45a6d6f0
child 1080 c5cd8960df74
equal deleted inserted replaced
57:47cc78fbb06d 58:d7fc57f4c7c2
   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