COIN-OR::LEMON - Graph Library

Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/groups.dox

    r463 r318  
    33 * This file is a part of LEMON, a generic C++ optimization library.
    44 *
    5  * Copyright (C) 2003-2009
     5 * Copyright (C) 2003-2008
    66 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
    77 * (Egervary Research Group on Combinatorial Optimization, EGRES).
     
    1717 */
    1818
    19 namespace lemon {
    20 
    2119/**
    2220@defgroup datas Data Structures
     
    6361
    6462/**
    65 @defgroup graph_adaptors Adaptor Classes for graphs
    66 @ingroup graphs
    67 \brief This group contains several adaptor classes for digraphs and graphs
    68 
    69 The main parts of LEMON are the different graph structures, generic
    70 graph algorithms, graph concepts which couple these, and graph
    71 adaptors. While the previous notions are more or less clear, the
    72 latter one needs further explanation. Graph adaptors are graph classes
    73 which serve for considering graph structures in different ways.
    74 
    75 A short example makes this much clearer.  Suppose that we have an
    76 instance \c g of a directed graph type say ListDigraph and an algorithm
    77 \code
    78 template <typename Digraph>
    79 int algorithm(const Digraph&);
    80 \endcode
    81 is needed to run on the reverse oriented graph.  It may be expensive
    82 (in time or in memory usage) to copy \c g with the reversed
    83 arcs.  In this case, an adaptor class is used, which (according
    84 to LEMON digraph concepts) works as a digraph.  The adaptor uses the
    85 original digraph structure and digraph operations when methods of the
    86 reversed oriented graph are called.  This means that the adaptor have
    87 minor memory usage, and do not perform sophisticated algorithmic
    88 actions.  The purpose of it is to give a tool for the cases when a
    89 graph have to be used in a specific alteration.  If this alteration is
    90 obtained by a usual construction like filtering the arc-set or
    91 considering a new orientation, then an adaptor is worthwhile to use.
    92 To come back to the reverse oriented graph, in this situation
    93 \code
    94 template<typename Digraph> class ReverseDigraph;
    95 \endcode
    96 template class can be used. The code looks as follows
    97 \code
    98 ListDigraph g;
    99 ReverseDigraph<ListGraph> rg(g);
    100 int result = algorithm(rg);
    101 \endcode
    102 After running the algorithm, the original graph \c g is untouched.
    103 This techniques gives rise to an elegant code, and based on stable
    104 graph adaptors, complex algorithms can be implemented easily.
    105 
    106 In flow, circulation and bipartite matching problems, the residual
    107 graph is of particular importance. Combining an adaptor implementing
    108 this, shortest path algorithms and minimum mean cycle algorithms,
    109 a range of weighted and cardinality optimization algorithms can be
    110 obtained. For other examples, the interested user is referred to the
    111 detailed documentation of particular adaptors.
    112 
    113 The behavior of graph adaptors can be very different. Some of them keep
    114 capabilities of the original graph while in other cases this would be
    115 meaningless. This means that the concepts that they are models of depend
    116 on the graph adaptor, and the wrapped graph(s).
    117 If an arc of \c rg is deleted, this is carried out by deleting the
    118 corresponding arc of \c g, thus the adaptor modifies the original graph.
    119 
    120 But for a residual graph, this operation has no sense.
    121 Let us stand one more example here to simplify your work.
    122 RevGraphAdaptor has constructor
    123 \code
    124 ReverseDigraph(Digraph& digraph);
    125 \endcode
    126 This means that in a situation, when a <tt>const ListDigraph&</tt>
    127 reference to a graph is given, then it have to be instantiated with
    128 <tt>Digraph=const ListDigraph</tt>.
    129 \code
    130 int algorithm1(const ListDigraph& g) {
    131   RevGraphAdaptor<const ListDigraph> rg(g);
    132   return algorithm2(rg);
    133 }
    134 \endcode
    135 */
    136 
    137 /**
    13863@defgroup semi_adaptors Semi-Adaptor Classes for Graphs
    13964@ingroup graphs
     
    16489
    16590This group describes maps that are specifically designed to assign
    166 values to the nodes and arcs/edges of graphs.
    167 
    168 If you are looking for the standard graph maps (\c NodeMap, \c ArcMap,
    169 \c EdgeMap), see the \ref graph_concepts "Graph Structure Concepts".
     91values to the nodes and arcs of graphs.
    17092*/
    17193
     
    178100maps from other maps.
    179101
    180 Most of them are \ref concepts::ReadMap "read-only maps".
     102Most of them are \ref lemon::concepts::ReadMap "read-only maps".
    181103They can make arithmetic and logical operations between one or two maps
    182104(negation, shifting, addition, multiplication, logical 'and', 'or',
     
    280202\brief Common graph search algorithms.
    281203
    282 This group describes the common graph search algorithms, namely
    283 \e breadth-first \e search (BFS) and \e depth-first \e search (DFS).
     204This group describes the common graph search algorithms like
     205Breadth-First Search (BFS) and Depth-First Search (DFS).
    284206*/
    285207
     
    289211\brief Algorithms for finding shortest paths.
    290212
    291 This group describes the algorithms for finding shortest paths in digraphs.
    292 
    293  - \ref Dijkstra algorithm for finding shortest paths from a source node
    294    when all arc lengths are non-negative.
    295  - \ref BellmanFord "Bellman-Ford" algorithm for finding shortest paths
    296    from a source node when arc lenghts can be either positive or negative,
    297    but the digraph should not contain directed cycles with negative total
    298    length.
    299  - \ref FloydWarshall "Floyd-Warshall" and \ref Johnson "Johnson" algorithms
    300    for solving the \e all-pairs \e shortest \e paths \e problem when arc
    301    lenghts can be either positive or negative, but the digraph should
    302    not contain directed cycles with negative total length.
    303  - \ref Suurballe A successive shortest path algorithm for finding
    304    arc-disjoint paths between two nodes having minimum total length.
     213This group describes the algorithms for finding shortest paths in graphs.
    305214*/
    306215
     
    313222feasible circulations.
    314223
    315 The \e maximum \e flow \e problem is to find a flow of maximum value between
    316 a single source and a single target. Formally, there is a \f$G=(V,A)\f$
    317 digraph, a \f$cap:A\rightarrow\mathbf{R}^+_0\f$ capacity function and
    318 \f$s, t \in V\f$ source and target nodes.
    319 A maximum flow is an \f$f:A\rightarrow\mathbf{R}^+_0\f$ solution of the
    320 following optimization problem.
    321 
    322 \f[ \max\sum_{a\in\delta_{out}(s)}f(a) - \sum_{a\in\delta_{in}(s)}f(a) \f]
    323 \f[ \sum_{a\in\delta_{out}(v)} f(a) = \sum_{a\in\delta_{in}(v)} f(a)
    324     \qquad \forall v\in V\setminus\{s,t\} \f]
    325 \f[ 0 \leq f(a) \leq cap(a) \qquad \forall a\in A \f]
     224The maximum flow problem is to find a flow between a single source and
     225a single target that is maximum. Formally, there is a \f$G=(V,A)\f$
     226directed graph, an \f$c_a:A\rightarrow\mathbf{R}^+_0\f$ capacity
     227function and given \f$s, t \in V\f$ source and target node. The
     228maximum flow is the \f$f_a\f$ solution of the next optimization problem:
     229
     230\f[ 0 \le f_a \le c_a \f]
     231\f[ \sum_{v\in\delta^{-}(u)}f_{vu}=\sum_{v\in\delta^{+}(u)}f_{uv}
     232\qquad \forall u \in V \setminus \{s,t\}\f]
     233\f[ \max \sum_{v\in\delta^{+}(s)}f_{uv} - \sum_{v\in\delta^{-}(s)}f_{vu}\f]
    326234
    327235LEMON contains several algorithms for solving maximum flow problems:
    328 - \ref EdmondsKarp Edmonds-Karp algorithm.
    329 - \ref Preflow Goldberg-Tarjan's preflow push-relabel algorithm.
    330 - \ref DinitzSleatorTarjan Dinitz's blocking flow algorithm with dynamic trees.
    331 - \ref GoldbergTarjan Preflow push-relabel algorithm with dynamic trees.
    332 
    333 In most cases the \ref Preflow "Preflow" algorithm provides the
    334 fastest method for computing a maximum flow. All implementations
    335 provides functions to also query the minimum cut, which is the dual
    336 problem of the maximum flow.
     236- \ref lemon::EdmondsKarp "Edmonds-Karp"
     237- \ref lemon::Preflow "Goldberg's Preflow algorithm"
     238- \ref lemon::DinitzSleatorTarjan "Dinitz's blocking flow algorithm with dynamic trees"
     239- \ref lemon::GoldbergTarjan "Preflow algorithm with dynamic trees"
     240
     241In most cases the \ref lemon::Preflow "Preflow" algorithm provides the
     242fastest method to compute the maximum flow. All impelementations
     243provides functions to query the minimum cut, which is the dual linear
     244programming problem of the maximum flow.
    337245*/
    338246
     
    345253This group describes the algorithms for finding minimum cost flows and
    346254circulations.
    347 
    348 The \e minimum \e cost \e flow \e problem is to find a feasible flow of
    349 minimum total cost from a set of supply nodes to a set of demand nodes
    350 in a network with capacity constraints and arc costs.
    351 Formally, let \f$G=(V,A)\f$ be a digraph,
    352 \f$lower, upper: A\rightarrow\mathbf{Z}^+_0\f$ denote the lower and
    353 upper bounds for the flow values on the arcs,
    354 \f$cost: A\rightarrow\mathbf{Z}^+_0\f$ denotes the cost per unit flow
    355 on the arcs, and
    356 \f$supply: V\rightarrow\mathbf{Z}\f$ denotes the supply/demand values
    357 of the nodes.
    358 A minimum cost flow is an \f$f:A\rightarrow\mathbf{R}^+_0\f$ solution of
    359 the following optimization problem.
    360 
    361 \f[ \min\sum_{a\in A} f(a) cost(a) \f]
    362 \f[ \sum_{a\in\delta_{out}(v)} f(a) - \sum_{a\in\delta_{in}(v)} f(a) =
    363     supply(v) \qquad \forall v\in V \f]
    364 \f[ lower(a) \leq f(a) \leq upper(a) \qquad \forall a\in A \f]
    365 
    366 LEMON contains several algorithms for solving minimum cost flow problems:
    367  - \ref CycleCanceling Cycle-canceling algorithms.
    368  - \ref CapacityScaling Successive shortest path algorithm with optional
    369    capacity scaling.
    370  - \ref CostScaling Push-relabel and augment-relabel algorithms based on
    371    cost scaling.
    372  - \ref NetworkSimplex Primal network simplex algorithm with various
    373    pivot strategies.
    374255*/
    375256
     
    382263This group describes the algorithms for finding minimum cut in graphs.
    383264
    384 The \e minimum \e cut \e problem is to find a non-empty and non-complete
    385 \f$X\f$ subset of the nodes with minimum overall capacity on
    386 outgoing arcs. Formally, there is a \f$G=(V,A)\f$ digraph, a
    387 \f$cap: A\rightarrow\mathbf{R}^+_0\f$ capacity function. The minimum
     265The minimum cut problem is to find a non-empty and non-complete
     266\f$X\f$ subset of the vertices with minimum overall capacity on
     267outgoing arcs. Formally, there is \f$G=(V,A)\f$ directed graph, an
     268\f$c_a:A\rightarrow\mathbf{R}^+_0\f$ capacity function. The minimum
    388269cut is the \f$X\f$ solution of the next optimization problem:
    389270
    390271\f[ \min_{X \subset V, X\not\in \{\emptyset, V\}}
    391     \sum_{uv\in A, u\in X, v\not\in X}cap(uv) \f]
     272\sum_{uv\in A, u\in X, v\not\in X}c_{uv}\f]
    392273
    393274LEMON contains several algorithms related to minimum cut problems:
    394275
    395 - \ref HaoOrlin "Hao-Orlin algorithm" for calculating minimum cut
    396   in directed graphs.
    397 - \ref NagamochiIbaraki "Nagamochi-Ibaraki algorithm" for
    398   calculating minimum cut in undirected graphs.
    399 - \ref GomoryHuTree "Gomory-Hu tree computation" for calculating
    400   all-pairs minimum cut in undirected graphs.
     276- \ref lemon::HaoOrlin "Hao-Orlin algorithm" to calculate minimum cut
     277  in directed graphs
     278- \ref lemon::NagamochiIbaraki "Nagamochi-Ibaraki algorithm" to
     279  calculate minimum cut in undirected graphs
     280- \ref lemon::GomoryHuTree "Gomory-Hu tree computation" to calculate all
     281  pairs minimum cut in undirected graphs
    401282
    402283If you want to find minimum cut just between two distinict nodes,
    403 see the \ref max_flow "maximum flow problem".
     284please see the \ref max_flow "Maximum Flow page".
    404285*/
    405286
     
    440321graphs.  The matching problems in bipartite graphs are generally
    441322easier than in general graphs. The goal of the matching optimization
    442 can be finding maximum cardinality, maximum weight or minimum cost
     323can be the finding maximum cardinality, maximum weight or minimum cost
    443324matching. The search can be constrained to find perfect or
    444325maximum cardinality matching.
    445326
    446 The matching algorithms implemented in LEMON:
    447 - \ref MaxBipartiteMatching Hopcroft-Karp augmenting path algorithm
    448   for calculating maximum cardinality matching in bipartite graphs.
    449 - \ref PrBipartiteMatching Push-relabel algorithm
    450   for calculating maximum cardinality matching in bipartite graphs.
    451 - \ref MaxWeightedBipartiteMatching
    452   Successive shortest path algorithm for calculating maximum weighted
    453   matching and maximum weighted bipartite matching in bipartite graphs.
    454 - \ref MinCostMaxBipartiteMatching
    455   Successive shortest path algorithm for calculating minimum cost maximum
    456   matching in bipartite graphs.
    457 - \ref MaxMatching Edmond's blossom shrinking algorithm for calculating
    458   maximum cardinality matching in general graphs.
    459 - \ref MaxWeightedMatching Edmond's blossom shrinking algorithm for calculating
    460   maximum weighted matching in general graphs.
    461 - \ref MaxWeightedPerfectMatching
    462   Edmond's blossom shrinking algorithm for calculating maximum weighted
    463   perfect matching in general graphs.
     327LEMON contains the next algorithms:
     328- \ref lemon::MaxBipartiteMatching "MaxBipartiteMatching" Hopcroft-Karp
     329  augmenting path algorithm for calculate maximum cardinality matching in
     330  bipartite graphs
     331- \ref lemon::PrBipartiteMatching "PrBipartiteMatching" Push-Relabel
     332  algorithm for calculate maximum cardinality matching in bipartite graphs
     333- \ref lemon::MaxWeightedBipartiteMatching "MaxWeightedBipartiteMatching"
     334  Successive shortest path algorithm for calculate maximum weighted matching
     335  and maximum weighted bipartite matching in bipartite graph
     336- \ref lemon::MinCostMaxBipartiteMatching "MinCostMaxBipartiteMatching"
     337  Successive shortest path algorithm for calculate minimum cost maximum
     338  matching in bipartite graph
     339- \ref lemon::MaxMatching "MaxMatching" Edmond's blossom shrinking algorithm
     340  for calculate maximum cardinality matching in general graph
     341- \ref lemon::MaxWeightedMatching "MaxWeightedMatching" Edmond's blossom
     342  shrinking algorithm for calculate maximum weighted matching in general
     343  graph
     344- \ref lemon::MaxWeightedPerfectMatching "MaxWeightedPerfectMatching"
     345  Edmond's blossom shrinking algorithm for calculate maximum weighted
     346  perfect matching in general graph
    464347
    465348\image html bipartite_matching.png
     
    473356
    474357This group describes the algorithms for finding a minimum cost spanning
    475 tree in a graph.
     358tree in a graph
    476359*/
    477360
     
    582465
    583466/**
    584 @defgroup lemon_io LEMON Graph Format
     467@defgroup lemon_io LEMON Input-Output
    585468@ingroup io_group
    586469\brief Reading and writing LEMON Graph Format.
     
    597480This group describes general \c EPS drawing methods and special
    598481graph exporting tools.
    599 */
    600 
    601 /**
    602 @defgroup dimacs_group DIMACS format
    603 @ingroup io_group
    604 \brief Read and write files in DIMACS format
    605 
    606 Tools to read a digraph from or write it to a file in DIMACS format data.
    607 */
    608 
    609 /**
    610 @defgroup nauty_group NAUTY Format
    611 @ingroup io_group
    612 \brief Read \e Nauty format
    613 
    614 Tool to read graphs from \e Nauty format data.
    615482*/
    616483
     
    664531\anchor demoprograms
    665532
    666 @defgroup demos Demo Programs
     533@defgroup demos Demo programs
    667534
    668535Some demo programs are listed here. Their full source codes can be found in
     
    674541
    675542/**
    676 @defgroup tools Standalone Utility Applications
     543@defgroup tools Standalone utility applications
    677544
    678545Some utility applications are listed here.
     
    682549*/
    683550
    684 }
Note: See TracChangeset for help on using the changeset viewer.