diff --git a/LICENSE b/LICENSE --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,7 @@ LEMON code without an explicit copyright notice is covered by the following copyright/license. -Copyright (C) 2003-2009 Egervary Jeno Kombinatorikus Optimalizalasi +Copyright (C) 2003-2010 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport (Egervary Combinatorial Optimization Research Group, EGRES). diff --git a/NEWS b/NEWS --- a/NEWS +++ b/NEWS @@ -1,3 +1,83 @@ +2010-03-19 Version 1.2 released + + This is major feature release + + * New algorithms + * Bellman-Ford algorithm (#51) + * Minimum mean cycle algorithms (#179) + * Karp, Hartman-Orlin and Howard algorithms + * New minimum cost flow algorithms (#180) + * Cost Scaling algorithms + * Capacity Scaling algorithm + * Cycle-Canceling algorithms + * Planarity related algorithms (#62) + * Planarity checking algorithm + * Planar embedding algorithm + * Schnyder's planar drawing algorithm + * Coloring planar graphs with five or six colors + * Fractional matching algorithms (#314) + * New data structures + * StaticDigraph structure (#68) + * Several new priority queue structures (#50, #301) + * Fibonacci, Radix, Bucket, Pairing, Binomial + D-ary and fourary heaps (#301) + * Iterable map structures (#73) + * Other new tools and functionality + * Map utility functions (#320) + * Reserve functions are added to ListGraph and SmartGraph (#311) + * A resize() function is added to HypercubeGraph (#311) + * A count() function is added to CrossRefMap (#302) + * Support for multiple targets in Suurballe using fullInit() (#181) + * Traits class and named parameters for Suurballe (#323) + * Separate reset() and resetParams() functions in NetworkSimplex + to handle graph changes (#327) + * tolerance() functions are added to HaoOrlin (#306) + * Implementation improvements + * Improvements in weighted matching algorithms (#314) + * Jumpstart initialization + * ArcIt iteration is based on out-arc lists instead of in-arc lists + in ListDigraph (#311) + * Faster add row operation in CbcMip (#203) + * Better implementation for split() in ListDigraph (#311) + * ArgParser can also throw exception instead of exit(1) (#332) + * Miscellaneous + * A simple interactive bootstrap script + * Doc improvements (#62,#180,#299,#302,#303,#304,#307,#311,#331,#315, + #316,#319) + * BibTeX references in the doc (#184) + * Optionally use valgrind when running tests + * Also check ReferenceMapTag in concept checks (#312) + * dimacs-solver uses long long type by default. + * Several bugfixes (compared to release 1.1): + #295: Suppress MSVC warnings using pragmas + ----: Various CMAKE related improvements + * Remove duplications from doc/CMakeLists.txt + * Rename documentation install folder from 'docs' to 'html' + * Add tools/CMakeLists.txt to the tarball + * Generate and install LEMONConfig.cmake + * Change the label of the html project in Visual Studio + * Fix the check for the 'long long' type + * Put the version string into config.h + * Minor CMake improvements + * Set the version to 'hg-tip' if everything fails + #311: Add missing 'explicit' keywords + #302: Fix the implementation and doc of CrossRefMap + #308: Remove duplicate list_graph.h entry from source list + #307: Bugfix in Preflow and Circulation + #305: Bugfix and extension in the rename script + #312: Also check ReferenceMapTag in concept checks + #250: Bugfix in pathSource() and pathTarget() + #321: Use pathCopy(from,to) instead of copyPath(to,from) + #322: Distribure LEMONConfig.cmake.in + #330: Bug fix in map_extender.h + #336: Fix the date field comment of graphToEps() output + #323: Bug fix in Suurballe + #335: Fix clear() function in ExtendFindEnum + #337: Use void* as the LPX object pointer + #317: Fix (and improve) error message in mip_test.cc + Remove unnecessary OsiCbc dependency + #356: Allow multiple executions of weighted matching algorithms (#356) + 2009-05-13 Version 1.1 released This is the second stable release of the 1.x series. It @@ -72,7 +152,7 @@ ----: Minor clarification in the LICENSE file ----: Add missing unistd.h include to time_measure.h #204: Compilation bug fixed in graph_to_eps.h with VS2005 - #214,#215: windows.h should never be included by lemon headers + #214,#215: windows.h should never be included by LEMON headers #230: Build systems check the availability of 'long long' type #229: Default implementation of Tolerance<> is used for integer types #211,#212: Various fixes for compiling on AIX @@ -94,51 +174,51 @@ 2008-10-13 Version 1.0 released - This is the first stable release of LEMON. Compared to the 0.x - release series, it features a considerably smaller but more - matured set of tools. The API has also completely revised and - changed in several places. + This is the first stable release of LEMON. Compared to the 0.x + release series, it features a considerably smaller but more + matured set of tools. The API has also completely revised and + changed in several places. - * The major name changes compared to the 0.x series (see the + * The major name changes compared to the 0.x series (see the Migration Guide in the doc for more details) * Graph -> Digraph, UGraph -> Graph * Edge -> Arc, UEdge -> Edge - * source(UEdge)/target(UEdge) -> u(Edge)/v(Edge) - * Other improvements - * Better documentation - * Reviewed and cleaned up codebase - * CMake based build system (along with the autotools based one) - * Contents of the library (ported from 0.x) - * Algorithms - * breadth-first search (bfs.h) - * depth-first search (dfs.h) - * Dijkstra's algorithm (dijkstra.h) - * Kruskal's algorithm (kruskal.h) - * Data structures - * graph data structures (list_graph.h, smart_graph.h) - * path data structures (path.h) - * binary heap data structure (bin_heap.h) - * union-find data structures (unionfind.h) - * miscellaneous property maps (maps.h) - * two dimensional vector and bounding box (dim2.h) + * source(UEdge)/target(UEdge) -> u(Edge)/v(Edge) + * Other improvements + * Better documentation + * Reviewed and cleaned up codebase + * CMake based build system (along with the autotools based one) + * Contents of the library (ported from 0.x) + * Algorithms + * breadth-first search (bfs.h) + * depth-first search (dfs.h) + * Dijkstra's algorithm (dijkstra.h) + * Kruskal's algorithm (kruskal.h) + * Data structures + * graph data structures (list_graph.h, smart_graph.h) + * path data structures (path.h) + * binary heap data structure (bin_heap.h) + * union-find data structures (unionfind.h) + * miscellaneous property maps (maps.h) + * two dimensional vector and bounding box (dim2.h) * Concepts - * graph structure concepts (concepts/digraph.h, concepts/graph.h, + * graph structure concepts (concepts/digraph.h, concepts/graph.h, concepts/graph_components.h) - * concepts for other structures (concepts/heap.h, concepts/maps.h, - concepts/path.h) - * Tools - * Mersenne twister random number generator (random.h) - * tools for measuring cpu and wall clock time (time_measure.h) - * tools for counting steps and events (counter.h) - * tool for parsing command line arguments (arg_parser.h) - * tool for visualizing graphs (graph_to_eps.h) - * tools for reading and writing data in LEMON Graph Format + * concepts for other structures (concepts/heap.h, concepts/maps.h, + concepts/path.h) + * Tools + * Mersenne twister random number generator (random.h) + * tools for measuring cpu and wall clock time (time_measure.h) + * tools for counting steps and events (counter.h) + * tool for parsing command line arguments (arg_parser.h) + * tool for visualizing graphs (graph_to_eps.h) + * tools for reading and writing data in LEMON Graph Format (lgf_reader.h, lgf_writer.h) * tools to handle the anomalies of calculations with - floating point numbers (tolerance.h) + floating point numbers (tolerance.h) * tools to manage RGB colors (color.h) - * Infrastructure - * extended assertion handling (assert.h) - * exception classes and error handling (error.h) - * concept checking (concept_check.h) - * commonly used mathematical constants (math.h) + * Infrastructure + * extended assertion handling (assert.h) + * exception classes and error handling (error.h) + * concept checking (concept_check.h) + * commonly used mathematical constants (math.h) diff --git a/doc/groups.dox b/doc/groups.dox --- a/doc/groups.dox +++ b/doc/groups.dox @@ -263,14 +263,6 @@ */ /** -@defgroup matrices Matrices -@ingroup datas -\brief Two dimensional data storages implemented in LEMON. - -This group contains two dimensional data storages implemented in LEMON. -*/ - -/** @defgroup auxdat Auxiliary Data Structures @ingroup datas \brief Auxiliary data structures implemented in LEMON. @@ -472,19 +464,19 @@ function. LEMON contains three algorithms for solving the minimum mean cycle problem: -- \ref Karp "Karp"'s original algorithm \ref amo93networkflows, +- \ref KarpMmc Karp's original algorithm \ref amo93networkflows, \ref dasdan98minmeancycle. -- \ref HartmannOrlin "Hartmann-Orlin"'s algorithm, which is an improved +- \ref HartmannOrlinMmc Hartmann-Orlin's algorithm, which is an improved version of Karp's algorithm \ref dasdan98minmeancycle. -- \ref Howard "Howard"'s policy iteration algorithm +- \ref HowardMmc Howard's policy iteration algorithm \ref dasdan98minmeancycle. -In practice, the Howard algorithm proved to be by far the most efficient -one, though the best known theoretical bound on its running time is -exponential. -Both Karp and HartmannOrlin algorithms run in time O(ne) and use space -O(n2+e), but the latter one is typically faster due to the -applied early termination scheme. +In practice, the \ref HowardMmc "Howard" algorithm proved to be by far the +most efficient one, though the best known theoretical bound on its running +time is exponential. +Both \ref KarpMmc "Karp" and \ref HartmannOrlinMmc "Hartmann-Orlin" algorithms +run in time O(ne) and use space O(n2+e), but the latter one is +typically faster due to the applied early termination scheme. */ /** diff --git a/lemon/arg_parser.h b/lemon/arg_parser.h --- a/lemon/arg_parser.h +++ b/lemon/arg_parser.h @@ -35,12 +35,19 @@ namespace lemon { ///Exception used by ArgParser + + ///Exception used by ArgParser. + /// class ArgParserException : public Exception { public: + /// Reasons for failure + + /// Reasons for failure. + /// enum Reason { - HELP, /// --help option was given - UNKNOWN_OPT, /// Unknown option was given - INVALID_OPT /// Invalid combination of options + HELP, ///< --help option was given. + UNKNOWN_OPT, ///< Unknown option was given. + INVALID_OPT ///< Invalid combination of options. }; private: diff --git a/lemon/bellman_ford.h b/lemon/bellman_ford.h --- a/lemon/bellman_ford.h +++ b/lemon/bellman_ford.h @@ -28,27 +28,24 @@ #include #include #include -#include #include #include namespace lemon { - /// \brief Default operation traits for the BellmanFord algorithm class. + /// \brief Default OperationTraits for the BellmanFord algorithm class. /// /// This operation traits class defines all computational operations /// and constants that are used in the Bellman-Ford algorithm. /// The default implementation is based on the \c numeric_limits class. /// If the numeric type does not have infinity value, then the maximum /// value is used as extremal infinity value. - /// - /// \see BellmanFordToleranceOperationTraits template < typename V, bool has_inf = std::numeric_limits::has_infinity> struct BellmanFordDefaultOperationTraits { - /// \brief Value type for the algorithm. + /// \e typedef V Value; /// \brief Gives back the zero value of the type. static Value zero() { @@ -87,51 +84,6 @@ } }; - /// \brief Operation traits for the BellmanFord algorithm class - /// using tolerance. - /// - /// This operation traits class defines all computational operations - /// and constants that are used in the Bellman-Ford algorithm. - /// The only difference between this implementation and - /// \ref BellmanFordDefaultOperationTraits is that this class uses - /// the \ref Tolerance "tolerance technique" in its \ref less() - /// function. - /// - /// \tparam V The value type. - /// \tparam eps The epsilon value for the \ref less() function. - /// By default, it is the epsilon value used by \ref Tolerance - /// "Tolerance". - /// - /// \see BellmanFordDefaultOperationTraits -#ifdef DOXYGEN - template -#else - template < - typename V, - V eps = Tolerance::def_epsilon> -#endif - struct BellmanFordToleranceOperationTraits { - /// \brief Value type for the algorithm. - typedef V Value; - /// \brief Gives back the zero value of the type. - static Value zero() { - return static_cast(0); - } - /// \brief Gives back the positive infinity value of the type. - static Value infinity() { - return std::numeric_limits::infinity(); - } - /// \brief Gives back the sum of the given two elements. - static Value plus(const Value& left, const Value& right) { - return left + right; - } - /// \brief Gives back \c true only if the first value is less than - /// the second. - static bool less(const Value& left, const Value& right) { - return left + eps < right; - } - }; - /// \brief Default traits class of BellmanFord class. /// /// Default traits class of BellmanFord class. @@ -155,8 +107,7 @@ /// /// It defines the used operations and the infinity value for the /// given \c Value type. - /// \see BellmanFordDefaultOperationTraits, - /// BellmanFordToleranceOperationTraits + /// \see BellmanFordDefaultOperationTraits typedef BellmanFordDefaultOperationTraits OperationTraits; /// \brief The type of the map that stores the last arcs of the @@ -886,8 +837,7 @@ /// /// It defines the used operations and the infinity value for the /// given \c Value type. - /// \see BellmanFordDefaultOperationTraits, - /// BellmanFordToleranceOperationTraits + /// \see BellmanFordDefaultOperationTraits typedef BellmanFordDefaultOperationTraits OperationTraits; /// \brief The type of the map that stores the last diff --git a/lemon/hartmann_orlin_mmc.h b/lemon/hartmann_orlin_mmc.h --- a/lemon/hartmann_orlin_mmc.h +++ b/lemon/hartmann_orlin_mmc.h @@ -38,7 +38,7 @@ /// Default traits class of HartmannOrlinMmc class. /// \tparam GR The type of the digraph. /// \tparam CM The type of the cost map. - /// It must conform to the \ref concepts::Rea_data "Rea_data" concept. + /// It must conform to the \ref concepts::ReadMap "ReadMap" concept. #ifdef DOXYGEN template #else @@ -99,7 +99,7 @@ /// This class implements the Hartmann-Orlin algorithm for finding /// a directed cycle of minimum mean cost in a digraph /// \ref amo93networkflows, \ref dasdan98minmeancycle. - /// It is an improved version of \ref Karp "Karp"'s original algorithm, + /// It is an improved version of \ref KarpMmc "Karp"'s original algorithm, /// it applies an efficient early termination scheme. /// It runs in time O(ne) and uses space O(n2+e). /// diff --git a/test/bellman_ford_test.cc b/test/bellman_ford_test.cc --- a/test/bellman_ford_test.cc +++ b/test/bellman_ford_test.cc @@ -104,7 +104,6 @@ BF::SetPredMap > ::SetDistMap > ::SetOperationTraits > - ::SetOperationTraits > ::Create bf_test(gr,length); LengthMap length_map;