COIN-OR::LEMON - Graph Library

Ignore:
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • LICENSE

    r959 r600  
    22copyright/license.
    33
    4 Copyright (C) 2003-2010 Egervary Jeno Kombinatorikus Optimalizalasi
     4Copyright (C) 2003-2009 Egervary Jeno Kombinatorikus Optimalizalasi
    55Kutatocsoport (Egervary Combinatorial Optimization Research Group,
    66EGRES).
  • NEWS

    r962 r712  
    1 2010-03-19 Version 1.2 released
    2 
    3         This is major feature release
    4 
    5         * New algorithms
    6           * Bellman-Ford algorithm (#51)
    7           * Minimum mean cycle algorithms (#179)
    8             * Karp, Hartman-Orlin and Howard algorithms
    9           * New minimum cost flow algorithms (#180)
    10             * Cost Scaling algorithms
    11             * Capacity Scaling algorithm
    12             * Cycle-Canceling algorithms
    13           * Planarity related algorithms (#62)
    14             * Planarity checking algorithm
    15             * Planar embedding algorithm
    16             * Schnyder's planar drawing algorithm
    17             * Coloring planar graphs with five or six colors
    18           * Fractional matching algorithms (#314)
    19         * New data structures
    20           * StaticDigraph structure (#68)
    21           * Several new priority queue structures (#50, #301)
    22             * Fibonacci, Radix, Bucket, Pairing, Binomial
    23               D-ary and fourary heaps (#301)
    24           * Iterable map structures (#73)
    25         * Other new tools and functionality
    26           * Map utility functions (#320)
    27           * Reserve functions are added to ListGraph and SmartGraph (#311)
    28           * A resize() function is added to HypercubeGraph (#311)
    29           * A count() function is added to CrossRefMap (#302)
    30           * Support for multiple targets in Suurballe using fullInit() (#181)
    31           * Traits class and named parameters for Suurballe (#323)
    32           * Separate reset() and resetParams() functions in NetworkSimplex
    33             to handle graph changes (#327)
    34           * tolerance() functions are added to HaoOrlin (#306)
    35         * Implementation improvements
    36           * Improvements in weighted matching algorithms (#314)
    37             * Jumpstart initialization
    38           * ArcIt iteration is based on out-arc lists instead of in-arc lists
    39             in ListDigraph (#311)
    40           * Faster add row operation in CbcMip (#203)
    41           * Better implementation for split() in ListDigraph (#311)
    42           * ArgParser can also throw exception instead of exit(1) (#332)
    43         * Miscellaneous
    44           * A simple interactive bootstrap script
    45           * Doc improvements (#62,#180,#299,#302,#303,#304,#307,#311,#331,#315,
    46                 #316,#319)
    47             * BibTeX references in the doc (#184)
    48           * Optionally use valgrind when running tests
    49           * Also check ReferenceMapTag in concept checks (#312)
    50           * dimacs-solver uses long long type by default.
    51         * Several bugfixes (compared to release 1.1):
    52           #295: Suppress MSVC warnings using pragmas
    53           ----: Various CMAKE related improvements
    54                 * Remove duplications from doc/CMakeLists.txt
    55                 * Rename documentation install folder from 'docs' to 'html'
    56                 * Add tools/CMakeLists.txt to the tarball
    57                 * Generate and install LEMONConfig.cmake
    58                 * Change the label of the html project in Visual Studio
    59                 * Fix the check for the 'long long' type
    60                 * Put the version string into config.h
    61                 * Minor CMake improvements
    62                 * Set the version to 'hg-tip' if everything fails
    63           #311: Add missing 'explicit' keywords
    64           #302: Fix the implementation and doc of CrossRefMap
    65           #308: Remove duplicate list_graph.h entry from source list
    66           #307: Bugfix in Preflow and Circulation
    67           #305: Bugfix and extension in the rename script
    68           #312: Also check ReferenceMapTag in concept checks
    69           #250: Bugfix in pathSource() and pathTarget()
    70           #321: Use pathCopy(from,to) instead of copyPath(to,from)
    71           #322: Distribure LEMONConfig.cmake.in
    72           #330: Bug fix in map_extender.h
    73           #336: Fix the date field comment of graphToEps() output
    74           #323: Bug fix in Suurballe
    75           #335: Fix clear() function in ExtendFindEnum
    76           #337: Use void* as the LPX object pointer
    77           #317: Fix (and improve) error message in mip_test.cc
    78                 Remove unnecessary OsiCbc dependency
    79           #356: Allow multiple executions of weighted matching algorithms (#356)
    80 
    8112009-05-13 Version 1.1 released
    822
     
    15373          ----: Add missing unistd.h include to time_measure.h
    15474          #204: Compilation bug fixed in graph_to_eps.h with VS2005
    155           #214,#215: windows.h should never be included by LEMON headers
     75          #214,#215: windows.h should never be included by lemon headers
    15676          #230: Build systems check the availability of 'long long' type
    15777          #229: Default implementation of Tolerance<> is used for integer types
     
    175952008-10-13 Version 1.0 released
    17696
    177         This is the first stable release of LEMON. Compared to the 0.x
    178         release series, it features a considerably smaller but more
    179         matured set of tools. The API has also completely revised and
    180         changed in several places.
     97        This is the first stable release of LEMON. Compared to the 0.x
     98        release series, it features a considerably smaller but more
     99        matured set of tools. The API has also completely revised and
     100        changed in several places.
    181101
    182         * The major name changes compared to the 0.x series (see the
     102        * The major name changes compared to the 0.x series (see the
    183103          Migration Guide in the doc for more details)
    184104          * Graph -> Digraph, UGraph -> Graph
    185105          * Edge -> Arc, UEdge -> Edge
    186           * source(UEdge)/target(UEdge) -> u(Edge)/v(Edge)
    187         * Other improvements
    188           * Better documentation
    189           * Reviewed and cleaned up codebase
    190           * CMake based build system (along with the autotools based one)
    191         * Contents of the library (ported from 0.x)
    192           * Algorithms
    193             * breadth-first search (bfs.h)
    194             * depth-first search (dfs.h)
    195             * Dijkstra's algorithm (dijkstra.h)
    196             * Kruskal's algorithm (kruskal.h)
    197           * Data structures
    198             * graph data structures (list_graph.h, smart_graph.h)
    199             * path data structures (path.h)
    200             * binary heap data structure (bin_heap.h)
    201             * union-find data structures (unionfind.h)
    202             * miscellaneous property maps (maps.h)
    203             * two dimensional vector and bounding box (dim2.h)
     106          * source(UEdge)/target(UEdge) -> u(Edge)/v(Edge)
     107        * Other improvements
     108          * Better documentation
     109          * Reviewed and cleaned up codebase
     110          * CMake based build system (along with the autotools based one)
     111        * Contents of the library (ported from 0.x)
     112          * Algorithms
     113            * breadth-first search (bfs.h)
     114            * depth-first search (dfs.h)
     115            * Dijkstra's algorithm (dijkstra.h)
     116            * Kruskal's algorithm (kruskal.h)
     117          * Data structures
     118            * graph data structures (list_graph.h, smart_graph.h)
     119            * path data structures (path.h)
     120            * binary heap data structure (bin_heap.h)
     121            * union-find data structures (unionfind.h)
     122            * miscellaneous property maps (maps.h)
     123            * two dimensional vector and bounding box (dim2.h)
    204124          * Concepts
    205             * graph structure concepts (concepts/digraph.h, concepts/graph.h,
     125            * graph structure concepts (concepts/digraph.h, concepts/graph.h,
    206126              concepts/graph_components.h)
    207             * concepts for other structures (concepts/heap.h, concepts/maps.h,
    208               concepts/path.h)
    209           * Tools
    210             * Mersenne twister random number generator (random.h)
    211             * tools for measuring cpu and wall clock time (time_measure.h)
    212             * tools for counting steps and events (counter.h)
    213             * tool for parsing command line arguments (arg_parser.h)
    214             * tool for visualizing graphs (graph_to_eps.h)
    215             * tools for reading and writing data in LEMON Graph Format
     127            * concepts for other structures (concepts/heap.h, concepts/maps.h,
     128              concepts/path.h)
     129          * Tools
     130            * Mersenne twister random number generator (random.h)
     131            * tools for measuring cpu and wall clock time (time_measure.h)
     132            * tools for counting steps and events (counter.h)
     133            * tool for parsing command line arguments (arg_parser.h)
     134            * tool for visualizing graphs (graph_to_eps.h)
     135            * tools for reading and writing data in LEMON Graph Format
    216136              (lgf_reader.h, lgf_writer.h)
    217137            * tools to handle the anomalies of calculations with
    218               floating point numbers (tolerance.h)
     138              floating point numbers (tolerance.h)
    219139            * tools to manage RGB colors (color.h)
    220           * Infrastructure
    221             * extended assertion handling (assert.h)
    222             * exception classes and error handling (error.h)
    223             * concept checking (concept_check.h)
    224             * commonly used mathematical constants (math.h)
     140          * Infrastructure
     141            * extended assertion handling (assert.h)
     142            * exception classes and error handling (error.h)
     143            * concept checking (concept_check.h)
     144            * commonly used mathematical constants (math.h)
  • doc/groups.dox

    r963 r961  
    264264
    265265/**
     266@defgroup matrices Matrices
     267@ingroup datas
     268\brief Two dimensional data storages implemented in LEMON.
     269
     270This group contains two dimensional data storages implemented in LEMON.
     271*/
     272
     273/**
    266274@defgroup auxdat Auxiliary Data Structures
    267275@ingroup datas
     
    441449
    442450LEMON contains three algorithms for solving the minimum mean cycle problem:
    443 - \ref KarpMmc Karp's original algorithm \ref amo93networkflows,
     451- \ref Karp "Karp"'s original algorithm \ref amo93networkflows,
    444452  \ref dasdan98minmeancycle.
    445 - \ref HartmannOrlinMmc Hartmann-Orlin's algorithm, which is an improved
     453- \ref HartmannOrlin "Hartmann-Orlin"'s algorithm, which is an improved
    446454  version of Karp's algorithm \ref dasdan98minmeancycle.
    447 - \ref HowardMmc Howard's policy iteration algorithm
     455- \ref Howard "Howard"'s policy iteration algorithm
    448456  \ref dasdan98minmeancycle.
    449457
    450 In practice, the \ref HowardMmc "Howard" algorithm proved to be by far the
    451 most efficient one, though the best known theoretical bound on its running
    452 time is exponential.
    453 Both \ref KarpMmc "Karp" and \ref HartmannOrlinMmc "Hartmann-Orlin" algorithms
    454 run in time O(ne) and use space O(n<sup>2</sup>+e), but the latter one is
    455 typically faster due to the applied early termination scheme.
     458In practice, the Howard algorithm proved to be by far the most efficient
     459one, though the best known theoretical bound on its running time is
     460exponential.
     461Both Karp and HartmannOrlin algorithms run in time O(ne) and use space
     462O(n<sup>2</sup>+e), but the latter one is typically faster due to the
     463applied early termination scheme.
    456464*/
    457465
  • lemon/arg_parser.h

    r959 r956  
    3636
    3737  ///Exception used by ArgParser
    38 
    39   ///Exception used by ArgParser.
    40   ///
    4138  class ArgParserException : public Exception {
    4239  public:
    43     /// Reasons for failure
    44 
    45     /// Reasons for failure.
    46     ///
    4740    enum Reason {
    48       HELP,         ///< <tt>--help</tt> option was given.
    49       UNKNOWN_OPT,  ///< Unknown option was given.
    50       INVALID_OPT   ///< Invalid combination of options.
     41      HELP,         /// <tt>--help</tt> option was given
     42      UNKNOWN_OPT,  /// Unknown option was given
     43      INVALID_OPT   /// Invalid combination of options
    5144    };
    5245
  • lemon/bellman_ford.h

    r960 r956  
    2929#include <lemon/error.h>
    3030#include <lemon/maps.h>
     31#include <lemon/tolerance.h>
    3132#include <lemon/path.h>
    3233
     
    3536namespace lemon {
    3637
    37   /// \brief Default OperationTraits for the BellmanFord algorithm class.
     38  /// \brief Default operation traits for the BellmanFord algorithm class.
    3839  ///
    3940  /// This operation traits class defines all computational operations
     
    4243  /// If the numeric type does not have infinity value, then the maximum
    4344  /// value is used as extremal infinity value.
     45  ///
     46  /// \see BellmanFordToleranceOperationTraits
    4447  template <
    4548    typename V,
    4649    bool has_inf = std::numeric_limits<V>::has_infinity>
    4750  struct BellmanFordDefaultOperationTraits {
    48     /// \e
     51    /// \brief Value type for the algorithm.
    4952    typedef V Value;
    5053    /// \brief Gives back the zero value of the type.
     
    8285    static bool less(const Value& left, const Value& right) {
    8386      return left < right;
     87    }
     88  };
     89
     90  /// \brief Operation traits for the BellmanFord algorithm class
     91  /// using tolerance.
     92  ///
     93  /// This operation traits class defines all computational operations
     94  /// and constants that are used in the Bellman-Ford algorithm.
     95  /// The only difference between this implementation and
     96  /// \ref BellmanFordDefaultOperationTraits is that this class uses
     97  /// the \ref Tolerance "tolerance technique" in its \ref less()
     98  /// function.
     99  ///
     100  /// \tparam V The value type.
     101  /// \tparam eps The epsilon value for the \ref less() function.
     102  /// By default, it is the epsilon value used by \ref Tolerance
     103  /// "Tolerance<V>".
     104  ///
     105  /// \see BellmanFordDefaultOperationTraits
     106#ifdef DOXYGEN
     107  template <typename V, V eps>
     108#else
     109  template <
     110    typename V,
     111    V eps = Tolerance<V>::def_epsilon>
     112#endif
     113  struct BellmanFordToleranceOperationTraits {
     114    /// \brief Value type for the algorithm.
     115    typedef V Value;
     116    /// \brief Gives back the zero value of the type.
     117    static Value zero() {
     118      return static_cast<Value>(0);
     119    }
     120    /// \brief Gives back the positive infinity value of the type.
     121    static Value infinity() {
     122      return std::numeric_limits<Value>::infinity();
     123    }
     124    /// \brief Gives back the sum of the given two elements.
     125    static Value plus(const Value& left, const Value& right) {
     126      return left + right;
     127    }
     128    /// \brief Gives back \c true only if the first value is less than
     129    /// the second.
     130    static bool less(const Value& left, const Value& right) {
     131      return left + eps < right;
    84132    }
    85133  };
     
    108156    /// It defines the used operations and the infinity value for the
    109157    /// given \c Value type.
    110     /// \see BellmanFordDefaultOperationTraits
     158    /// \see BellmanFordDefaultOperationTraits,
     159    /// BellmanFordToleranceOperationTraits
    111160    typedef BellmanFordDefaultOperationTraits<Value> OperationTraits;
    112161
     
    838887    /// It defines the used operations and the infinity value for the
    839888    /// given \c Value type.
    840     /// \see BellmanFordDefaultOperationTraits
     889    /// \see BellmanFordDefaultOperationTraits,
     890    /// BellmanFordToleranceOperationTraits
    841891    typedef BellmanFordDefaultOperationTraits<Value> OperationTraits;
    842892
  • lemon/hartmann_orlin_mmc.h

    r959 r956  
    3939  /// \tparam GR The type of the digraph.
    4040  /// \tparam CM The type of the cost map.
    41   /// It must conform to the \ref concepts::ReadMap "ReadMap" concept.
     41  /// It must conform to the \ref concepts::Rea_data "Rea_data" concept.
    4242#ifdef DOXYGEN
    4343  template <typename GR, typename CM>
     
    100100  /// a directed cycle of minimum mean cost in a digraph
    101101  /// \ref amo93networkflows, \ref dasdan98minmeancycle.
    102   /// It is an improved version of \ref KarpMmc "Karp"'s original algorithm,
     102  /// It is an improved version of \ref Karp "Karp"'s original algorithm,
    103103  /// it applies an efficient early termination scheme.
    104104  /// It runs in time O(ne) and uses space O(n<sup>2</sup>+e).
  • test/bellman_ford_test.cc

    r960 r956  
    105105      ::SetDistMap<concepts::ReadWriteMap<Node,Value> >
    106106      ::SetOperationTraits<BellmanFordDefaultOperationTraits<Value> >
     107      ::SetOperationTraits<BellmanFordToleranceOperationTraits<Value, 0> >
    107108      ::Create bf_test(gr,length);
    108109
Note: See TracChangeset for help on using the changeset viewer.