COIN-OR::LEMON - Graph Library

Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/groups.dox

    r844 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
    23 This group contains the several data structures implemented in LEMON.
     21This group describes the several data structures implemented in LEMON.
    2422*/
    2523
     
    6361
    6462/**
    65 @defgroup graph_adaptors Adaptor Classes for Graphs
     63@defgroup semi_adaptors Semi-Adaptor Classes for Graphs
    6664@ingroup graphs
    67 \brief Adaptor classes for digraphs and graphs
    68 
    69 This group contains several useful adaptor classes for digraphs and graphs.
    70 
    71 The main parts of LEMON are the different graph structures, generic
    72 graph algorithms, graph concepts, which couple them, and graph
    73 adaptors. While the previous notions are more or less clear, the
    74 latter one needs further explanation. Graph adaptors are graph classes
    75 which serve for considering graph structures in different ways.
    76 
    77 A short example makes this much clearer.  Suppose that we have an
    78 instance \c g of a directed graph type, say ListDigraph and an algorithm
    79 \code
    80 template <typename Digraph>
    81 int algorithm(const Digraph&);
    82 \endcode
    83 is needed to run on the reverse oriented graph.  It may be expensive
    84 (in time or in memory usage) to copy \c g with the reversed
    85 arcs.  In this case, an adaptor class is used, which (according
    86 to LEMON \ref concepts::Digraph "digraph concepts") works as a digraph.
    87 The adaptor uses the original digraph structure and digraph operations when
    88 methods of the reversed oriented graph are called.  This means that the adaptor
    89 have minor memory usage, and do not perform sophisticated algorithmic
    90 actions.  The purpose of it is to give a tool for the cases when a
    91 graph have to be used in a specific alteration.  If this alteration is
    92 obtained by a usual construction like filtering the node or the arc set or
    93 considering a new orientation, then an adaptor is worthwhile to use.
    94 To come back to the reverse oriented graph, in this situation
    95 \code
    96 template<typename Digraph> class ReverseDigraph;
    97 \endcode
    98 template class can be used. The code looks as follows
    99 \code
    100 ListDigraph g;
    101 ReverseDigraph<ListDigraph> rg(g);
    102 int result = algorithm(rg);
    103 \endcode
    104 During running the algorithm, the original digraph \c g is untouched.
    105 This techniques give rise to an elegant code, and based on stable
    106 graph adaptors, complex algorithms can be implemented easily.
    107 
    108 In flow, circulation and matching problems, the residual
    109 graph is of particular importance. Combining an adaptor implementing
    110 this with shortest path algorithms or minimum mean cycle algorithms,
    111 a range of weighted and cardinality optimization algorithms can be
    112 obtained. For other examples, the interested user is referred to the
    113 detailed documentation of particular adaptors.
    114 
    115 The behavior of graph adaptors can be very different. Some of them keep
    116 capabilities of the original graph while in other cases this would be
    117 meaningless. This means that the concepts that they meet depend
    118 on the graph adaptor, and the wrapped graph.
    119 For example, if an arc of a reversed digraph is deleted, this is carried
    120 out by deleting the corresponding arc of the original digraph, thus the
    121 adaptor modifies the original digraph.
    122 However in case of a residual digraph, this operation has no sense.
    123 
    124 Let us stand one more example here to simplify your work.
    125 ReverseDigraph has constructor
    126 \code
    127 ReverseDigraph(Digraph& digraph);
    128 \endcode
    129 This means that in a situation, when a <tt>const %ListDigraph&</tt>
    130 reference to a graph is given, then it have to be instantiated with
    131 <tt>Digraph=const %ListDigraph</tt>.
    132 \code
    133 int algorithm1(const ListDigraph& g) {
    134   ReverseDigraph<const ListDigraph> rg(g);
    135   return algorithm2(rg);
    136 }
    137 \endcode
     65\brief Graph types between real graphs and graph adaptors.
     66
     67This group describes some graph types between real graphs and graph adaptors.
     68These classes wrap graphs to give new functionality as the adaptors do it.
     69On the other hand they are not light-weight structures as the adaptors.
    13870*/
    13971
     
    14375\brief Map structures implemented in LEMON.
    14476
    145 This group contains the map structures implemented in LEMON.
     77This group describes the map structures implemented in LEMON.
    14678
    14779LEMON provides several special purpose maps and map adaptors that e.g. combine
     
    15688\brief Special graph-related maps.
    15789
    158 This group contains maps that are specifically designed to assign
    159 values to the nodes and arcs/edges of graphs.
    160 
    161 If you are looking for the standard graph maps (\c NodeMap, \c ArcMap,
    162 \c EdgeMap), see the \ref graph_concepts "Graph Structure Concepts".
     90This group describes maps that are specifically designed to assign
     91values to the nodes and arcs of graphs.
    16392*/
    16493
     
    16897\brief Tools to create new maps from existing ones
    16998
    170 This group contains map adaptors that are used to create "implicit"
     99This group describes map adaptors that are used to create "implicit"
    171100maps from other maps.
    172101
    173 Most of them are \ref concepts::ReadMap "read-only maps".
     102Most of them are \ref lemon::concepts::ReadMap "read-only maps".
    174103They can make arithmetic and logical operations between one or two maps
    175104(negation, shifting, addition, multiplication, logical 'and', 'or',
     
    227156
    228157/**
     158@defgroup matrices Matrices
     159@ingroup datas
     160\brief Two dimensional data storages implemented in LEMON.
     161
     162This group describes two dimensional data storages implemented in LEMON.
     163*/
     164
     165/**
    229166@defgroup paths Path Structures
    230167@ingroup datas
    231168\brief %Path structures implemented in LEMON.
    232169
    233 This group contains the path structures implemented in LEMON.
     170This group describes the path structures implemented in LEMON.
    234171
    235172LEMON provides flexible data structures to work with paths.
     
    247184\brief Auxiliary data structures implemented in LEMON.
    248185
    249 This group contains some data structures implemented in LEMON in
     186This group describes some data structures implemented in LEMON in
    250187order to make it easier to implement combinatorial algorithms.
    251188*/
     
    253190/**
    254191@defgroup algs Algorithms
    255 \brief This group contains the several algorithms
     192\brief This group describes the several algorithms
    256193implemented in LEMON.
    257194
    258 This group contains the several algorithms
     195This group describes the several algorithms
    259196implemented in LEMON.
    260197*/
     
    265202\brief Common graph search algorithms.
    266203
    267 This group contains the common graph search algorithms, namely
    268 \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).
    269206*/
    270207
     
    274211\brief Algorithms for finding shortest paths.
    275212
    276 This group contains the algorithms for finding shortest paths in digraphs.
    277 
    278  - \ref Dijkstra Dijkstra's algorithm for finding shortest paths from a
    279    source node when all arc lengths are non-negative.
    280  - \ref Suurballe A successive shortest path algorithm for finding
    281    arc-disjoint paths between two nodes having minimum total length.
     213This group describes the algorithms for finding shortest paths in graphs.
    282214*/
    283215
     
    287219\brief Algorithms for finding maximum flows.
    288220
    289 This group contains the algorithms for finding maximum flows and
     221This group describes the algorithms for finding maximum flows and
    290222feasible circulations.
    291223
    292 The \e maximum \e flow \e problem is to find a flow of maximum value between
    293 a single source and a single target. Formally, there is a \f$G=(V,A)\f$
    294 digraph, a \f$cap: A\rightarrow\mathbf{R}^+_0\f$ capacity function and
    295 \f$s, t \in V\f$ source and target nodes.
    296 A maximum flow is an \f$f: A\rightarrow\mathbf{R}^+_0\f$ solution of the
    297 following optimization problem.
    298 
    299 \f[ \max\sum_{sv\in A} f(sv) - \sum_{vs\in A} f(vs) \f]
    300 \f[ \sum_{uv\in A} f(uv) = \sum_{vu\in A} f(vu)
    301     \quad \forall u\in V\setminus\{s,t\} \f]
    302 \f[ 0 \leq f(uv) \leq cap(uv) \quad \forall uv\in A \f]
    303 
    304 \ref Preflow implements the preflow push-relabel algorithm of Goldberg and
    305 Tarjan for solving this problem. It also provides functions to query the
    306 minimum cut, which is the dual problem of maximum flow.
    307 
    308 
    309 \ref Circulation is a preflow push-relabel algorithm implemented directly
    310 for finding feasible circulations, which is a somewhat different problem,
    311 but it is strongly related to maximum flow.
    312 For more information, see \ref Circulation.
    313 */
    314 
    315 /**
    316 @defgroup min_cost_flow_algs Minimum Cost Flow Algorithms
     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]
     234
     235LEMON contains several algorithms for solving maximum flow problems:
     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.
     245*/
     246
     247/**
     248@defgroup min_cost_flow Minimum Cost Flow Algorithms
    317249@ingroup algs
    318250
    319251\brief Algorithms for finding minimum cost flows and circulations.
    320252
    321 This group contains the algorithms for finding minimum cost flows and
    322 circulations. For more information about this problem and its dual
    323 solution see \ref min_cost_flow "Minimum Cost Flow Problem".
    324 
    325 \ref NetworkSimplex is an efficient implementation of the primal Network
    326 Simplex algorithm for finding minimum cost flows. It also provides dual
    327 solution (node potentials), if an optimal flow is found.
     253This group describes the algorithms for finding minimum cost flows and
     254circulations.
    328255*/
    329256
     
    334261\brief Algorithms for finding minimum cut in graphs.
    335262
    336 This group contains the algorithms for finding minimum cut in graphs.
    337 
    338 The \e minimum \e cut \e problem is to find a non-empty and non-complete
    339 \f$X\f$ subset of the nodes with minimum overall capacity on
    340 outgoing arcs. Formally, there is a \f$G=(V,A)\f$ digraph, a
    341 \f$cap: A\rightarrow\mathbf{R}^+_0\f$ capacity function. The minimum
     263This group describes the algorithms for finding minimum cut in graphs.
     264
     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
    342269cut is the \f$X\f$ solution of the next optimization problem:
    343270
    344271\f[ \min_{X \subset V, X\not\in \{\emptyset, V\}}
    345     \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]
    346273
    347274LEMON contains several algorithms related to minimum cut problems:
    348275
    349 - \ref HaoOrlin "Hao-Orlin algorithm" for calculating minimum cut
    350   in directed graphs.
    351 - \ref GomoryHu "Gomory-Hu tree computation" for calculating
    352   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
    353282
    354283If you want to find minimum cut just between two distinict nodes,
    355 see the \ref max_flow "maximum flow problem".
    356 */
    357 
    358 /**
    359 @defgroup graph_properties Connectivity and Other Graph Properties
     284please see the \ref max_flow "Maximum Flow page".
     285*/
     286
     287/**
     288@defgroup graph_prop Connectivity and Other Graph Properties
    360289@ingroup algs
    361290\brief Algorithms for discovering the graph properties
    362291
    363 This group contains the algorithms for discovering the graph properties
     292This group describes the algorithms for discovering the graph properties
    364293like connectivity, bipartiteness, euler property, simplicity etc.
    365294
     
    369298
    370299/**
     300@defgroup planar Planarity Embedding and Drawing
     301@ingroup algs
     302\brief Algorithms for planarity checking, embedding and drawing
     303
     304This group describes the algorithms for planarity checking,
     305embedding and drawing.
     306
     307\image html planar.png
     308\image latex planar.eps "Plane graph" width=\textwidth
     309*/
     310
     311/**
    371312@defgroup matching Matching Algorithms
    372313@ingroup algs
    373314\brief Algorithms for finding matchings in graphs and bipartite graphs.
    374315
    375 This group contains the algorithms for calculating matchings in graphs.
    376 The general matching problem is finding a subset of the edges for which
    377 each node has at most one incident edge.
     316This group contains algorithm objects and functions to calculate
     317matchings in graphs and bipartite graphs. The general matching problem is
     318finding a subset of the arcs which does not shares common endpoints.
    378319
    379320There are several different algorithms for calculate matchings in
    380 graphs. The goal of the matching optimization
    381 can be finding maximum cardinality, maximum weight or minimum cost
     321graphs.  The matching problems in bipartite graphs are generally
     322easier than in general graphs. The goal of the matching optimization
     323can be the finding maximum cardinality, maximum weight or minimum cost
    382324matching. The search can be constrained to find perfect or
    383325maximum cardinality matching.
    384326
    385 The matching algorithms implemented in LEMON:
    386 - \ref MaxMatching Edmond's blossom shrinking algorithm for calculating
    387   maximum cardinality matching in general graphs.
    388 - \ref MaxWeightedMatching Edmond's blossom shrinking algorithm for calculating
    389   maximum weighted matching in general graphs.
    390 - \ref MaxWeightedPerfectMatching
    391   Edmond's blossom shrinking algorithm for calculating maximum weighted
    392   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
    393347
    394348\image html bipartite_matching.png
     
    399353@defgroup spantree Minimum Spanning Tree Algorithms
    400354@ingroup algs
    401 \brief Algorithms for finding minimum cost spanning trees and arborescences.
    402 
    403 This group contains the algorithms for finding minimum cost spanning
    404 trees and arborescences.
     355\brief Algorithms for finding a minimum cost spanning tree in a graph.
     356
     357This group describes the algorithms for finding a minimum cost spanning
     358tree in a graph
    405359*/
    406360
     
    410364\brief Auxiliary algorithms implemented in LEMON.
    411365
    412 This group contains some algorithms implemented in LEMON
     366This group describes some algorithms implemented in LEMON
    413367in order to make it easier to implement complex algorithms.
    414368*/
    415369
    416370/**
     371@defgroup approx Approximation Algorithms
     372@ingroup algs
     373\brief Approximation algorithms.
     374
     375This group describes the approximation and heuristic algorithms
     376implemented in LEMON.
     377*/
     378
     379/**
    417380@defgroup gen_opt_group General Optimization Tools
    418 \brief This group contains some general optimization frameworks
     381\brief This group describes some general optimization frameworks
    419382implemented in LEMON.
    420383
    421 This group contains some general optimization frameworks
     384This group describes some general optimization frameworks
    422385implemented in LEMON.
    423386*/
     
    428391\brief Lp and Mip solver interfaces for LEMON.
    429392
    430 This group contains Lp and Mip solver interfaces for LEMON. The
     393This group describes Lp and Mip solver interfaces for LEMON. The
    431394various LP solvers could be used in the same manner with this
    432395interface.
     396*/
     397
     398/**
     399@defgroup lp_utils Tools for Lp and Mip Solvers
     400@ingroup lp_group
     401\brief Helper tools to the Lp and Mip solvers.
     402
     403This group adds some helper tools to general optimization framework
     404implemented in LEMON.
     405*/
     406
     407/**
     408@defgroup metah Metaheuristics
     409@ingroup gen_opt_group
     410\brief Metaheuristics for LEMON library.
     411
     412This group describes some metaheuristic optimization tools.
    433413*/
    434414
     
    445425\brief Simple basic graph utilities.
    446426
    447 This group contains some simple basic graph utilities.
     427This group describes some simple basic graph utilities.
    448428*/
    449429
     
    453433\brief Tools for development, debugging and testing.
    454434
    455 This group contains several useful tools for development,
     435This group describes several useful tools for development,
    456436debugging and testing.
    457437*/
     
    462442\brief Simple tools for measuring the performance of algorithms.
    463443
    464 This group contains simple tools for measuring the performance
     444This group describes simple tools for measuring the performance
    465445of algorithms.
    466446*/
     
    471451\brief Exceptions defined in LEMON.
    472452
    473 This group contains the exceptions defined in LEMON.
     453This group describes the exceptions defined in LEMON.
    474454*/
    475455
     
    478458\brief Graph Input-Output methods
    479459
    480 This group contains the tools for importing and exporting graphs
     460This group describes the tools for importing and exporting graphs
    481461and graph related data. Now it supports the \ref lgf-format
    482462"LEMON Graph Format", the \c DIMACS format and the encapsulated
     
    485465
    486466/**
    487 @defgroup lemon_io LEMON Graph Format
     467@defgroup lemon_io LEMON Input-Output
    488468@ingroup io_group
    489469\brief Reading and writing LEMON Graph Format.
    490470
    491 This group contains methods for reading and writing
     471This group describes methods for reading and writing
    492472\ref lgf-format "LEMON Graph Format".
    493473*/
     
    498478\brief General \c EPS drawer and graph exporter
    499479
    500 This group contains general \c EPS drawing methods and special
     480This group describes general \c EPS drawing methods and special
    501481graph exporting tools.
    502 */
    503 
    504 /**
    505 @defgroup dimacs_group DIMACS format
    506 @ingroup io_group
    507 \brief Read and write files in DIMACS format
    508 
    509 Tools to read a digraph from or write it to a file in DIMACS format data.
    510 */
    511 
    512 /**
    513 @defgroup nauty_group NAUTY Format
    514 @ingroup io_group
    515 \brief Read \e Nauty format
    516 
    517 Tool to read graphs from \e Nauty format data.
    518482*/
    519483
     
    522486\brief Skeleton classes and concept checking classes
    523487
    524 This group contains the data/algorithm skeletons and concept checking
     488This group describes the data/algorithm skeletons and concept checking
    525489classes implemented in LEMON.
    526490
     
    552516\brief Skeleton and concept checking classes for graph structures
    553517
    554 This group contains the skeletons and concept checking classes of LEMON's
     518This group describes the skeletons and concept checking classes of LEMON's
    555519graph structures and helper classes used to implement these.
    556520*/
     
    561525\brief Skeleton and concept checking classes for maps
    562526
    563 This group contains the skeletons and concept checking classes of maps.
     527This group describes the skeletons and concept checking classes of maps.
    564528*/
    565529
     
    567531\anchor demoprograms
    568532
    569 @defgroup demos Demo Programs
     533@defgroup demos Demo programs
    570534
    571535Some demo programs are listed here. Their full source codes can be found in
    572536the \c demo subdirectory of the source tree.
    573537
    574 In order to compile them, use the <tt>make demo</tt> or the
    575 <tt>make check</tt> commands.
    576 */
    577 
    578 /**
    579 @defgroup tools Standalone Utility Applications
     538It order to compile them, use <tt>--enable-demo</tt> configure option when
     539build the library.
     540*/
     541
     542/**
     543@defgroup tools Standalone utility applications
    580544
    581545Some utility applications are listed here.
     
    585549*/
    586550
    587 }
Note: See TracChangeset for help on using the changeset viewer.