gravatar
alpar (Alpar Juttner)
alpar@cs.elte.hu
Merge
0 7 0
merge default
0 files changed with 146 insertions and 118 deletions:
↑ Collapse diff ↑
Ignore white space 6 line context
1 1
LEMON code without an explicit copyright notice is covered by the following
2 2
copyright/license.
3 3

	
4
Copyright (C) 2003-2009 Egervary Jeno Kombinatorikus Optimalizalasi
4
Copyright (C) 2003-2010 Egervary Jeno Kombinatorikus Optimalizalasi
5 5
Kutatocsoport (Egervary Combinatorial Optimization Research Group,
6 6
EGRES).
7 7

	
8 8
===========================================================================
9 9
Boost Software License, Version 1.0
10 10
===========================================================================
11 11

	
12 12
Permission is hereby granted, free of charge, to any person or organization
Ignore white space 6 line context
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

	
1 81
2009-05-13 Version 1.1 released
2 82

	
3 83
        This is the second stable release of the 1.x series. It
4 84
        features a better coverage of the tools available in the 0.x
5 85
        series, a thoroughly reworked LP/MIP interface plus various
6 86
        improvements in the existing tools.
7 87

	
8 88
        * Much improved M$ Windows support
... ...
@@ -67,17 +147,17 @@
67 147
          ----: Update the LEMON icon
68 148
          ----: Enable the component-based installer
69 149
                (in installers made by CPACK)
70 150
          ----: Set the proper version for CMAKE in the tarballs
71 151
                (made by autotools)
72 152
          ----: Minor clarification in the LICENSE file
73 153
          ----: Add missing unistd.h include to time_measure.h
74 154
          #204: Compilation bug fixed in graph_to_eps.h with VS2005
75
          #214,#215: windows.h should never be included by lemon headers
155
          #214,#215: windows.h should never be included by LEMON headers
76 156
          #230: Build systems check the availability of 'long long' type
77 157
          #229: Default implementation of Tolerance<> is used for integer types
78 158
          #211,#212: Various fixes for compiling on AIX
79 159
          ----: Improvements in CMAKE config
80 160
                - docs is installed in share/doc/
81 161
                - detects newer versions of Ghostscript
82 162
          #239: Fix missing 'inline' specifier in time_measure.h
83 163
          #274,#280: Install lemon/config.h
... ...
@@ -89,56 +169,56 @@
89 169

	
90 170
        COIN-OR (Computational Infrastructure for Operations Research,
91 171
        http://www.coin-or.org) project is an initiative to spur the
92 172
        development of open-source software for the operations research
93 173
        community.
94 174

	
95 175
2008-10-13 Version 1.0 released
96 176

	
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.
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.
101 181

	
102
	* The major name changes compared to the 0.x series (see the
182
        * The major name changes compared to the 0.x series (see the
103 183
          Migration Guide in the doc for more details)
104 184
          * Graph -> Digraph, UGraph -> Graph
105 185
          * Edge -> Arc, UEdge -> Edge
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)
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)
124 204
          * Concepts
125
       	    * graph structure concepts (concepts/digraph.h, concepts/graph.h,
205
            * graph structure concepts (concepts/digraph.h, concepts/graph.h,
126 206
              concepts/graph_components.h)
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
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
136 216
              (lgf_reader.h, lgf_writer.h)
137 217
            * tools to handle the anomalies of calculations with
138
	      floating point numbers (tolerance.h)
218
              floating point numbers (tolerance.h)
139 219
            * tools to manage RGB colors (color.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)
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)
Ignore white space 6 line context
... ...
@@ -258,24 +258,16 @@
258 258
Heaps are crucial in several algorithms, such as Dijkstra and Prim.
259 259
The heap implementations have the same interface, thus any of them can be
260 260
used easily in such algorithms.
261 261

	
262 262
\sa \ref concepts::Heap "Heap concept"
263 263
*/
264 264

	
265 265
/**
266
@defgroup matrices Matrices
267
@ingroup datas
268
\brief Two dimensional data storages implemented in LEMON.
269

	
270
This group contains two dimensional data storages implemented in LEMON.
271
*/
272

	
273
/**
274 266
@defgroup auxdat Auxiliary Data Structures
275 267
@ingroup datas
276 268
\brief Auxiliary data structures implemented in LEMON.
277 269

	
278 270
This group contains some data structures implemented in LEMON in
279 271
order to make it easier to implement combinatorial algorithms.
280 272
*/
281 273

	
... ...
@@ -467,29 +459,29 @@
467 459
\e functions, too. A length function on the arcs of a digraph is called
468 460
conservative if and only if there is no directed cycle of negative total
469 461
length. For an arbitrary length function, the negative of the minimum
470 462
cycle mean is the smallest \f$\epsilon\f$ value so that increasing the
471 463
arc lengths uniformly by \f$\epsilon\f$ results in a conservative length
472 464
function.
473 465

	
474 466
LEMON contains three algorithms for solving the minimum mean cycle problem:
475
- \ref Karp "Karp"'s original algorithm \ref amo93networkflows,
467
- \ref KarpMmc Karp's original algorithm \ref amo93networkflows,
476 468
  \ref dasdan98minmeancycle.
477
- \ref HartmannOrlin "Hartmann-Orlin"'s algorithm, which is an improved
469
- \ref HartmannOrlinMmc Hartmann-Orlin's algorithm, which is an improved
478 470
  version of Karp's algorithm \ref dasdan98minmeancycle.
479
- \ref Howard "Howard"'s policy iteration algorithm
471
- \ref HowardMmc Howard's policy iteration algorithm
480 472
  \ref dasdan98minmeancycle.
481 473

	
482
In practice, the Howard algorithm proved to be by far the most efficient
483
one, though the best known theoretical bound on its running time is
484
exponential.
485
Both Karp and HartmannOrlin algorithms run in time O(ne) and use space
486
O(n<sup>2</sup>+e), but the latter one is typically faster due to the
487
applied early termination scheme.
474
In practice, the \ref HowardMmc "Howard" algorithm proved to be by far the
475
most efficient one, though the best known theoretical bound on its running
476
time is exponential.
477
Both \ref KarpMmc "Karp" and \ref HartmannOrlinMmc "Hartmann-Orlin" algorithms
478
run in time O(ne) and use space O(n<sup>2</sup>+e), but the latter one is
479
typically faster due to the applied early termination scheme.
488 480
*/
489 481

	
490 482
/**
491 483
@defgroup matching Matching Algorithms
492 484
@ingroup algs
493 485
\brief Algorithms for finding matchings in graphs and bipartite graphs.
494 486

	
495 487
This group contains the algorithms for calculating
Ignore white space 16 line context
... ...
@@ -30,22 +30,29 @@
30 30

	
31 31
///\ingroup misc
32 32
///\file
33 33
///\brief A tool to parse command line arguments.
34 34

	
35 35
namespace lemon {
36 36

	
37 37
  ///Exception used by ArgParser
38

	
39
  ///Exception used by ArgParser.
40
  ///
38 41
  class ArgParserException : public Exception {
39 42
  public:
43
    /// Reasons for failure
44

	
45
    /// Reasons for failure.
46
    ///
40 47
    enum Reason {
41
      HELP,         /// <tt>--help</tt> option was given
42
      UNKNOWN_OPT,  /// Unknown option was given
43
      INVALID_OPT   /// Invalid combination of options
48
      HELP,         ///< <tt>--help</tt> option was given.
49
      UNKNOWN_OPT,  ///< Unknown option was given.
50
      INVALID_OPT   ///< Invalid combination of options.
44 51
    };
45 52

	
46 53
  private:
47 54
    Reason _reason;
48 55

	
49 56
  public:
50 57
    ///Constructor
51 58
    ArgParserException(Reason r) throw() : _reason(r) {}
Ignore white space 6 line context
... ...
@@ -23,37 +23,34 @@
23 23
/// \file
24 24
/// \brief Bellman-Ford algorithm.
25 25

	
26 26
#include <lemon/list_graph.h>
27 27
#include <lemon/bits/path_dump.h>
28 28
#include <lemon/core.h>
29 29
#include <lemon/error.h>
30 30
#include <lemon/maps.h>
31
#include <lemon/tolerance.h>
32 31
#include <lemon/path.h>
33 32

	
34 33
#include <limits>
35 34

	
36 35
namespace lemon {
37 36

	
38
  /// \brief Default operation traits for the BellmanFord algorithm class.
37
  /// \brief Default OperationTraits for the BellmanFord algorithm class.
39 38
  ///
40 39
  /// This operation traits class defines all computational operations
41 40
  /// and constants that are used in the Bellman-Ford algorithm.
42 41
  /// The default implementation is based on the \c numeric_limits class.
43 42
  /// If the numeric type does not have infinity value, then the maximum
44 43
  /// value is used as extremal infinity value.
45
  ///
46
  /// \see BellmanFordToleranceOperationTraits
47 44
  template <
48 45
    typename V,
49 46
    bool has_inf = std::numeric_limits<V>::has_infinity>
50 47
  struct BellmanFordDefaultOperationTraits {
51
    /// \brief Value type for the algorithm.
48
    /// \e
52 49
    typedef V Value;
53 50
    /// \brief Gives back the zero value of the type.
54 51
    static Value zero() {
55 52
      return static_cast<Value>(0);
56 53
    }
57 54
    /// \brief Gives back the positive infinity value of the type.
58 55
    static Value infinity() {
59 56
      return std::numeric_limits<Value>::infinity();
... ...
@@ -82,61 +79,16 @@
82 79
      if (left == infinity() || right == infinity()) return infinity();
83 80
      return left + right;
84 81
    }
85 82
    static bool less(const Value& left, const Value& right) {
86 83
      return left < right;
87 84
    }
88 85
  };
89 86

	
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;
132
    }
133
  };
134

	
135 87
  /// \brief Default traits class of BellmanFord class.
136 88
  ///
137 89
  /// Default traits class of BellmanFord class.
138 90
  /// \param GR The type of the digraph.
139 91
  /// \param LEN The type of the length map.
140 92
  template<typename GR, typename LEN>
141 93
  struct BellmanFordDefaultTraits {
142 94
    /// The type of the digraph the algorithm runs on.
... ...
@@ -150,18 +102,17 @@
150 102

	
151 103
    /// The type of the arc lengths.
152 104
    typedef typename LEN::Value Value;
153 105

	
154 106
    /// \brief Operation traits for Bellman-Ford algorithm.
155 107
    ///
156 108
    /// It defines the used operations and the infinity value for the
157 109
    /// given \c Value type.
158
    /// \see BellmanFordDefaultOperationTraits,
159
    /// BellmanFordToleranceOperationTraits
110
    /// \see BellmanFordDefaultOperationTraits
160 111
    typedef BellmanFordDefaultOperationTraits<Value> OperationTraits;
161 112

	
162 113
    /// \brief The type of the map that stores the last arcs of the
163 114
    /// shortest paths.
164 115
    ///
165 116
    /// The type of the map that stores the last
166 117
    /// arcs of the shortest paths.
167 118
    /// It must conform to the \ref concepts::WriteMap "WriteMap" concept.
... ...
@@ -881,18 +832,17 @@
881 832

	
882 833
    /// The type of the arc lengths.
883 834
    typedef typename LEN::Value Value;
884 835

	
885 836
    /// \brief Operation traits for Bellman-Ford algorithm.
886 837
    ///
887 838
    /// It defines the used operations and the infinity value for the
888 839
    /// given \c Value type.
889
    /// \see BellmanFordDefaultOperationTraits,
890
    /// BellmanFordToleranceOperationTraits
840
    /// \see BellmanFordDefaultOperationTraits
891 841
    typedef BellmanFordDefaultOperationTraits<Value> OperationTraits;
892 842

	
893 843
    /// \brief The type of the map that stores the last
894 844
    /// arcs of the shortest paths.
895 845
    ///
896 846
    /// The type of the map that stores the last arcs of the shortest paths.
897 847
    /// It must conform to the \ref concepts::WriteMap "WriteMap" concept.
898 848
    typedef typename GR::template NodeMap<typename GR::Arc> PredMap;
Ignore white space 6 line context
... ...
@@ -33,17 +33,17 @@
33 33

	
34 34
namespace lemon {
35 35

	
36 36
  /// \brief Default traits class of HartmannOrlinMmc class.
37 37
  ///
38 38
  /// Default traits class of HartmannOrlinMmc class.
39 39
  /// \tparam GR The type of the digraph.
40 40
  /// \tparam CM The type of the cost map.
41
  /// It must conform to the \ref concepts::Rea_data "Rea_data" concept.
41
  /// It must conform to the \ref concepts::ReadMap "ReadMap" concept.
42 42
#ifdef DOXYGEN
43 43
  template <typename GR, typename CM>
44 44
#else
45 45
  template <typename GR, typename CM,
46 46
    bool integer = std::numeric_limits<typename CM::Value>::is_integer>
47 47
#endif
48 48
  struct HartmannOrlinMmcDefaultTraits
49 49
  {
... ...
@@ -94,17 +94,17 @@
94 94
  /// @{
95 95

	
96 96
  /// \brief Implementation of the Hartmann-Orlin algorithm for finding
97 97
  /// a minimum mean cycle.
98 98
  ///
99 99
  /// This class implements the Hartmann-Orlin algorithm for finding
100 100
  /// a directed cycle of minimum mean cost in a digraph
101 101
  /// \ref amo93networkflows, \ref dasdan98minmeancycle.
102
  /// It is an improved version of \ref Karp "Karp"'s original algorithm,
102
  /// It is an improved version of \ref KarpMmc "Karp"'s original algorithm,
103 103
  /// it applies an efficient early termination scheme.
104 104
  /// It runs in time O(ne) and uses space O(n<sup>2</sup>+e).
105 105
  ///
106 106
  /// \tparam GR The type of the digraph the algorithm runs on.
107 107
  /// \tparam CM The type of the cost map. The default
108 108
  /// map type is \ref concepts::Digraph::ArcMap "GR::ArcMap<int>".
109 109
  /// \tparam TR The traits class that defines various types used by the
110 110
  /// algorithm. By default, it is \ref HartmannOrlinMmcDefaultTraits
Ignore white space 6 line context
... ...
@@ -99,17 +99,16 @@
99 99
    pp = const_bf_test.negativeCycle();
100 100

	
101 101
    for (BF::ActiveIt it(const_bf_test); it != INVALID; ++it) {}
102 102
  }
103 103
  {
104 104
    BF::SetPredMap<concepts::ReadWriteMap<Node,Arc> >
105 105
      ::SetDistMap<concepts::ReadWriteMap<Node,Value> >
106 106
      ::SetOperationTraits<BellmanFordDefaultOperationTraits<Value> >
107
      ::SetOperationTraits<BellmanFordToleranceOperationTraits<Value, 0> >
108 107
      ::Create bf_test(gr,length);
109 108

	
110 109
    LengthMap length_map;
111 110
    concepts::ReadWriteMap<Node,Arc> pred_map;
112 111
    concepts::ReadWriteMap<Node,Value> dist_map;
113 112

	
114 113
    bf_test
115 114
      .lengthMap(length_map)
0 comments (0 inline)