314 @defgroup search Graph Search |
314 @defgroup search Graph Search |
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 */ |
321 */ |
321 |
322 |
322 /** |
323 /** |
323 @defgroup shortest_path Shortest Path Algorithms |
324 @defgroup shortest_path Shortest Path Algorithms |
324 @ingroup algs |
325 @ingroup algs |
325 \brief Algorithms for finding shortest paths. |
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 - \ref Dijkstra algorithm for finding shortest paths from a source node |
331 - \ref Dijkstra algorithm for finding shortest paths from a source node |
330 when all arc lengths are non-negative. |
332 when all arc lengths are non-negative. |
331 - \ref BellmanFord "Bellman-Ford" algorithm for finding shortest paths |
333 - \ref BellmanFord "Bellman-Ford" algorithm for finding shortest paths |
332 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, |
344 @defgroup spantree Minimum Spanning Tree Algorithms |
346 @defgroup spantree Minimum Spanning Tree Algorithms |
345 @ingroup algs |
347 @ingroup algs |
346 \brief Algorithms for finding minimum cost spanning trees and arborescences. |
348 \brief Algorithms for finding minimum cost spanning trees and arborescences. |
347 |
349 |
348 This group contains the algorithms for finding minimum cost spanning |
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 /** |
353 @defgroup max_flow Maximum Flow Algorithms |
355 @defgroup max_flow Maximum Flow Algorithms |
354 @ingroup algs |
356 @ingroup algs |
355 \brief Algorithms for finding maximum flows. |
357 \brief Algorithms for finding maximum flows. |
356 |
358 |
357 This group contains the algorithms for finding maximum flows and |
359 This group contains the algorithms for finding maximum flows and |
358 feasible circulations. |
360 feasible circulations \ref clrs01algorithms, \ref amo93networkflows. |
359 |
361 |
360 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 |
361 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$ |
362 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 |
363 \f$s, t \in V\f$ source and target nodes. |
365 \f$s, t \in V\f$ source and target nodes. |
368 \f[ \sum_{uv\in A} f(uv) = \sum_{vu\in A} f(vu) |
370 \f[ \sum_{uv\in A} f(uv) = \sum_{vu\in A} f(vu) |
369 \quad \forall u\in V\setminus\{s,t\} \f] |
371 \quad \forall u\in V\setminus\{s,t\} \f] |
370 \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] |
371 |
373 |
372 LEMON contains several algorithms for solving maximum flow problems: |
374 LEMON contains several algorithms for solving maximum flow problems: |
373 - \ref EdmondsKarp Edmonds-Karp algorithm. |
375 - \ref EdmondsKarp Edmonds-Karp algorithm |
374 - \ref Preflow Goldberg-Tarjan's preflow push-relabel algorithm. |
376 \ref edmondskarp72theoretical. |
375 - \ref DinitzSleatorTarjan Dinitz's blocking flow algorithm with dynamic trees. |
377 - \ref Preflow Goldberg-Tarjan's preflow push-relabel algorithm |
376 - \ref GoldbergTarjan Preflow push-relabel algorithm with dynamic trees. |
378 \ref goldberg88newapproach. |
377 |
379 - \ref DinitzSleatorTarjan Dinitz's blocking flow algorithm with dynamic trees |
378 In most cases the \ref Preflow "Preflow" algorithm provides the |
380 \ref dinic70algorithm, \ref sleator83dynamic. |
|
381 - \ref GoldbergTarjan !Preflow push-relabel algorithm with dynamic trees |
|
382 \ref goldberg88newapproach, \ref sleator83dynamic. |
|
383 |
|
384 In most cases the \ref Preflow algorithm provides the |
379 fastest method for computing a maximum flow. All implementations |
385 fastest method for computing a maximum flow. All implementations |
380 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 |
381 problem of maximum flow. |
387 problem of maximum flow. |
382 |
388 |
383 \ref Circulation is a preflow push-relabel algorithm implemented directly |
389 \ref Circulation is a preflow push-relabel algorithm implemented directly |
391 @ingroup algs |
397 @ingroup algs |
392 |
398 |
393 \brief Algorithms for finding minimum cost flows and circulations. |
399 \brief Algorithms for finding minimum cost flows and circulations. |
394 |
400 |
395 This group contains the algorithms for finding minimum cost flows and |
401 This group contains the algorithms for finding minimum cost flows and |
396 circulations. For more information about this problem and its dual |
402 circulations \ref amo93networkflows. For more information about this |
397 solution see \ref min_cost_flow "Minimum Cost Flow Problem". |
403 problem and its dual solution, see \ref min_cost_flow |
|
404 "Minimum Cost Flow Problem". |
398 |
405 |
399 LEMON contains several algorithms for this problem. |
406 LEMON contains several algorithms for this problem. |
400 - \ref NetworkSimplex Primal Network Simplex algorithm with various |
407 - \ref NetworkSimplex Primal Network Simplex algorithm with various |
401 pivot strategies. |
408 pivot strategies \ref dantzig63linearprog, \ref kellyoneill91netsimplex. |
402 - \ref CostScaling Push-Relabel and Augment-Relabel algorithms based on |
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 - \ref CapacityScaling Successive Shortest %Path algorithm with optional |
412 - \ref CapacityScaling Successive Shortest %Path algorithm with optional |
405 capacity scaling. |
413 capacity scaling \ref edmondskarp72theoretical. |
406 - \ref CancelAndTighten The Cancel and Tighten algorithm. |
414 - \ref CancelAndTighten The Cancel and Tighten algorithm |
407 - \ref CycleCanceling Cycle-Canceling algorithms. |
415 \ref goldberg89cyclecanceling. |
|
416 - \ref CycleCanceling Cycle-Canceling algorithms |
|
417 \ref klein67primal, \ref goldberg89cyclecanceling. |
408 |
418 |
409 In general NetworkSimplex is the most efficient implementation, |
419 In general NetworkSimplex is the most efficient implementation, |
410 but in special cases other algorithms could be faster. |
420 but in special cases other algorithms could be faster. |
411 For example, if the total supply and/or capacities are rather small, |
421 For example, if the total supply and/or capacities are rather small, |
412 CapacityScaling is usually the fastest algorithm (without effective scaling). |
422 CapacityScaling is usually the fastest algorithm (without effective scaling). |
532 This group contains some general optimization frameworks |
542 This group contains some general optimization frameworks |
533 implemented in LEMON. |
543 implemented in LEMON. |
534 */ |
544 */ |
535 |
545 |
536 /** |
546 /** |
537 @defgroup lp_group Lp and Mip Solvers |
547 @defgroup lp_group LP and MIP Solvers |
538 @ingroup gen_opt_group |
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 |
551 This group contains LP and MIP solver interfaces for LEMON. |
542 various LP solvers could be used in the same manner with this |
552 Various LP solvers could be used in the same manner with this |
543 interface. |
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 /** |
547 @defgroup lp_utils Tools for Lp and Mip Solvers |
560 @defgroup lp_utils Tools for Lp and Mip Solvers |
548 @ingroup lp_group |
561 @ingroup lp_group |