gravatar
ladanyi@tmit.bme.hu
ladanyi@tmit.bme.hu
Add 'demo' make target for building the demo programs
0 7 0
default
7 files changed with 27 insertions and 41 deletions:
↑ Collapse diff ↑
Ignore white space 6 line context
1 1
Installation Instructions
2 2
=========================
3 3

	
4 4
Since you are reading this I assume you already obtained one of the release
5 5
tarballs and successfully extracted it. The latest version of LEMON is
6 6
available at our web page (http://lemon.cs.elte.hu/).
7 7

	
8 8
LEMON provides two different build environments, one is based on "autotool",
9 9
while the other is based on "cmake". This file contains instructions only for
10 10
the former one, which is the recommended build environment on Linux, Mac OSX
11 11
and other unices or if you use Cygwin on Windows. For cmake installation
12 12
instructions visit http://lemon.cs.elte.hu.
13 13

	
14 14
In order to install LEMON from the extracted source tarball you have to
15 15
issue the following commands:
16 16

	
17 17
   1. `cd lemon-x.y.z'
18 18

	
19 19
      This command changes to the directory which was created when you
20 20
      extracted the sources. The x.y.z part is a version number.
21 21

	
22 22
   2. `./configure'
23 23

	
24 24
      This command runs the configure shell script, which does some checks and
25 25
      creates the makefiles.
26 26

	
27 27
   3. `make'
28 28

	
29 29
      This command compiles the non-template part of LEMON into libemon.a
30
      file. It also compiles the programs in the tools and demo subdirectories
31
      when enabled.
30
      file. It also compiles the programs in the tools subdirectory by
31
      default.
32 32

	
33 33
   4. `make check'
34 34

	
35 35
      This step is optional, but recommended. It runs the test programs that
36 36
      we developed for LEMON to check whether the library works properly on
37 37
      your platform.
38 38

	
39 39
   5. `make install'
40 40

	
41 41
      This command installs LEMON under /usr/local (you will need root
42 42
      privileges to be able to do that). If you want to install it to some
43 43
      other location, then pass the --prefix=DIRECTORY flag to configure in
44 44
      step 2. For example: `./configure --prefix=/home/username/lemon'.
45 45

	
46 46
   6. `make install-html'
47 47

	
48 48
      This command installs the documentation under share/doc/lemon/docs. The
49 49
      generated documentation is included in the tarball. If you want to
50 50
      generate it yourself, then run `make html'. Note that for this you need
51 51
      to have the following programs installed: Doxygen, Graphviz, Ghostscript,
52 52
      Latex.
53 53

	
54 54

	
55 55
Configure Options and Variables
56 56
===============================
57 57

	
58 58
In step 2 you can customize the actions of configure by setting variables
59 59
and passing options to it. This can be done like this:
60 60
`./configure [OPTION]... [VARIABLE=VALUE]...'
61 61

	
62 62
Below you will find some useful variables and options (see `./configure --help'
63 63
for more):
64 64

	
65 65
CXX='comp'
66 66

	
67 67
  Change the C++ compiler to 'comp'.
68 68

	
69 69
CXXFLAGS='flags'
70 70

	
71 71
  Pass the 'flags' to the compiler. For example CXXFLAGS='-O3 -march=pentium-m'
72 72
  turns on generation of aggressively optimized Pentium-M specific code.
73 73

	
74 74
--prefix=PREFIX
75 75

	
76 76
  Set the installation prefix to PREFIX. By default it is /usr/local.
77 77

	
78
--enable-demo
79

	
80
   Build the examples in the demo subdirectory.
81

	
82
--disable-demo
83

	
84
   Do not build the examples in the demo subdirectory (default).
85

	
86 78
--enable-tools
87 79

	
88 80
   Build the programs in the tools subdirectory (default).
89 81

	
90 82
--disable-tools
91 83

	
92 84
   Do not build the programs in the tools subdirectory.
93 85

	
94 86
--with-glpk[=PREFIX]
95 87

	
96 88
   Enable GLPK support (default). You should specify the prefix too if
97 89
   you installed GLPK to some non-standard location (e.g. your home
98 90
   directory). If it is not found, GLPK support will be disabled.
99 91

	
100 92
--with-glpk-includedir=DIR
101 93

	
102 94
   The directory where the GLPK header files are located. This is only
103 95
   useful when the GLPK headers and libraries are not under the same
104 96
   prefix (which is unlikely).
105 97

	
106 98
--with-glpk-libdir=DIR
107 99

	
108 100
   The directory where the GLPK libraries are located. This is only
109 101
   useful when the GLPK headers and libraries are not under the same
110 102
   prefix (which is unlikely).
111 103

	
112 104
--without-glpk
113 105

	
114 106
   Disable GLPK support.
115 107

	
116 108
--with-cplex[=PREFIX]
117 109

	
118 110
   Enable CPLEX support (default). You should specify the prefix too
119 111
   if you installed CPLEX to some non-standard location
120 112
   (e.g. /opt/ilog/cplex75). If it is not found, CPLEX support will be
121 113
   disabled.
122 114

	
123 115
--with-cplex-includedir=DIR
124 116

	
125 117
   The directory where the CPLEX header files are located. This is
126 118
   only useful when the CPLEX headers and libraries are not under the
127 119
   same prefix (e.g.  /usr/local/cplex/cplex75/include).
128 120

	
129 121
--with-cplex-libdir=DIR
130 122

	
131 123
   The directory where the CPLEX libraries are located. This is only
132 124
   useful when the CPLEX headers and libraries are not under the same
133 125
   prefix (e.g.
134 126
   /usr/local/cplex/cplex75/lib/i86_linux2_glibc2.2_gcc3.0/static_pic_mt).
135 127

	
136 128
--without-cplex
137 129

	
138 130
   Disable CPLEX support.
139 131

	
140 132
--with-soplex[=PREFIX]
141 133

	
142 134
   Enable SoPlex support (default). You should specify the prefix too if
143 135
   you installed SoPlex to some non-standard location (e.g. your home
144 136
   directory). If it is not found, SoPlex support will be disabled.
145 137

	
146 138
--with-soplex-includedir=DIR
147 139

	
148 140
   The directory where the SoPlex header files are located. This is only
149 141
   useful when the SoPlex headers and libraries are not under the same
150 142
   prefix (which is unlikely).
151 143

	
152 144
--with-soplex-libdir=DIR
153 145

	
154 146
   The directory where the SoPlex libraries are located. This is only
155 147
   useful when the SoPlex headers and libraries are not under the same
156 148
   prefix (which is unlikely).
157 149

	
158 150
--without-soplex
159 151

	
160 152
   Disable SoPlex support.
Ignore white space 1024 line context
1 1
ACLOCAL_AMFLAGS = -I m4
2 2

	
3 3
AM_CXXFLAGS = $(WARNINGCXXFLAGS)
4 4

	
5 5
AM_CPPFLAGS = -I$(top_srcdir) -I$(top_builddir)
6 6
LDADD = $(top_builddir)/lemon/libemon.la
7 7

	
8 8
EXTRA_DIST = \
9 9
	AUTHORS \
10 10
	LICENSE \
11 11
	m4/lx_check_cplex.m4 \
12 12
	m4/lx_check_glpk.m4 \
13 13
	m4/lx_check_soplex.m4 \
14 14
	CMakeLists.txt \
15 15
	cmake/FindGhostscript.cmake \
16 16
	cmake/FindGLPK.cmake \
17 17
	cmake/version.cmake.in \
18 18
	cmake/version.cmake \
19 19
	cmake/nsis/lemon.ico \
20 20
	cmake/nsis/uninstall.ico
21 21

	
22 22
pkgconfigdir = $(libdir)/pkgconfig
23 23
lemondir = $(pkgincludedir)
24 24
bitsdir = $(lemondir)/bits
25 25
conceptdir = $(lemondir)/concepts
26 26
pkgconfig_DATA =
27 27
lib_LTLIBRARIES =
28 28
lemon_HEADERS =
29 29
bits_HEADERS =
30 30
concept_HEADERS =
31 31
noinst_HEADERS =
32 32
noinst_PROGRAMS =
33 33
bin_PROGRAMS =
34 34
check_PROGRAMS =
35 35
dist_bin_SCRIPTS =
36 36
TESTS =
37 37
XFAIL_TESTS =
38 38

	
39 39
include lemon/Makefile.am
40 40
include test/Makefile.am
41 41
include doc/Makefile.am
42
include demo/Makefile.am
43 42
include tools/Makefile.am
44 43

	
44
DIST_SUBDIRS = demo
45

	
46
demo:
47
	$(MAKE) $(AM_MAKEFLAGS) -C demo
48

	
45 49
MRPROPERFILES = \
46 50
	aclocal.m4 \
47 51
	config.h.in \
48 52
	config.h.in~ \
49 53
	configure \
50 54
	Makefile.in \
51 55
	build-aux/config.guess \
52 56
	build-aux/config.sub \
53 57
	build-aux/depcomp \
54 58
	build-aux/install-sh \
55 59
	build-aux/ltmain.sh \
56 60
	build-aux/missing \
57 61
	doc/doxygen.log
58 62

	
59 63
mrproper:
60 64
	$(MAKE) $(AM_MAKEFLAGS) maintainer-clean
61 65
	-rm -f $(MRPROPERFILES)
62 66

	
63 67
dist-bz2: dist
64 68
	zcat $(PACKAGE)-$(VERSION).tar.gz | \
65 69
	bzip2 --best -c > $(PACKAGE)-$(VERSION).tar.bz2
66 70

	
67 71
distcheck-bz2: distcheck
68 72
	zcat $(PACKAGE)-$(VERSION).tar.gz | \
69 73
	bzip2 --best -c > $(PACKAGE)-$(VERSION).tar.bz2
70 74

	
71
.PHONY: mrproper dist-bz2 distcheck-bz2
75
.PHONY: demo mrproper dist-bz2 distcheck-bz2
Ignore white space 6 line context
1 1
dnl Process this file with autoconf to produce a configure script.
2 2

	
3 3
dnl Version information.
4 4
m4_define([lemon_version_number],
5 5
	[m4_normalize(esyscmd([echo ${LEMON_VERSION}]))])
6 6
dnl m4_define([lemon_version_number], [])
7 7
m4_define([lemon_hg_path], [m4_normalize(esyscmd([./scripts/chg-len.py]))])
8 8
m4_define([lemon_hg_revision], [m4_normalize(esyscmd([hg id -i]))])
9 9
m4_define([lemon_version], [ifelse(lemon_version_number(),
10 10
			   [],
11 11
			   [lemon_hg_path().lemon_hg_revision()],
12 12
			   [lemon_version_number()])])
13 13

	
14 14
AC_PREREQ([2.59])
15 15
AC_INIT([LEMON], [lemon_version()], [lemon-user@lemon.cs.elte.hu], [lemon])
16 16
AC_CONFIG_AUX_DIR([build-aux])
17 17
AC_CONFIG_MACRO_DIR([m4])
18 18
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects nostdinc])
19 19
AC_CONFIG_SRCDIR([lemon/list_graph.h])
20 20
AC_CONFIG_HEADERS([config.h lemon/config.h])
21 21

	
22 22
dnl Do compilation tests using the C++ compiler.
23 23
AC_LANG([C++])
24 24

	
25 25
dnl Check the existence of long long type.
26 26
AC_CHECK_TYPE(long long, [long_long_found=yes], [long_long_found=no])
27 27
if test x"$long_long_found" = x"yes"; then
28 28
  AC_DEFINE([HAVE_LONG_LONG], [1], [Define to 1 if you have long long.])
29 29
fi
30 30

	
31 31
dnl Checks for programs.
32 32
AC_PROG_CXX
33 33
AC_PROG_CXXCPP
34 34
AC_PROG_INSTALL
35 35
AC_DISABLE_SHARED
36 36
AC_PROG_LIBTOOL
37 37

	
38 38
AC_CHECK_PROG([doxygen_found],[doxygen],[yes],[no])
39 39
AC_CHECK_PROG([gs_found],[gs],[yes],[no])
40 40

	
41 41
dnl Detect Intel compiler.
42 42
AC_MSG_CHECKING([whether we are using the Intel C++ compiler])
43 43
AC_COMPILE_IFELSE([#ifndef __INTEL_COMPILER
44 44
choke me
45 45
#endif], [ICC=[yes]], [ICC=[no]])
46 46
if test x"$ICC" = x"yes"; then
47 47
  AC_MSG_RESULT([yes])
48 48
else
49 49
  AC_MSG_RESULT([no])
50 50
fi
51 51

	
52 52
dnl Set custom compiler flags when using g++.
53 53
if test "$GXX" = yes -a "$ICC" = no; then
54 54
  WARNINGCXXFLAGS="-Wall -W -Wall -W -Wunused -Wformat=2 -Wctor-dtor-privacy -Wnon-virtual-dtor -Wno-char-subscripts -Wwrite-strings -Wno-char-subscripts -Wreturn-type -Wcast-qual -Wcast-align -Wsign-promo -Woverloaded-virtual -ansi -fno-strict-aliasing -Wold-style-cast -Wno-unknown-pragmas"
55 55
fi
56 56
AC_SUBST([WARNINGCXXFLAGS])
57 57

	
58 58
dnl Checks for libraries.
59 59
LX_CHECK_GLPK
60 60
LX_CHECK_CPLEX
61 61
LX_CHECK_SOPLEX
62 62
LX_CHECK_CLP
63 63

	
64 64
AM_CONDITIONAL([HAVE_LP], [test x"$lx_lp_found" = x"yes"])
65 65
AM_CONDITIONAL([HAVE_MIP], [test x"$lx_mip_found" = x"yes"])
66 66

	
67
dnl Disable/enable building the demo programs.
68
AC_ARG_ENABLE([demo],
69
AS_HELP_STRING([--enable-demo], [build the demo programs])
70
AS_HELP_STRING([--disable-demo], [do not build the demo programs @<:@default@:>@]),
71
              [], [enable_demo=no])
72
AC_MSG_CHECKING([whether to build the demo programs])
73
if test x"$enable_demo" != x"no"; then
74
  AC_MSG_RESULT([yes])
75
else
76
  AC_MSG_RESULT([no])
77
fi
78
AM_CONDITIONAL([WANT_DEMO], [test x"$enable_demo" != x"no"])
79

	
80 67
dnl Disable/enable building the binary tools.
81 68
AC_ARG_ENABLE([tools],
82 69
AS_HELP_STRING([--enable-tools], [build additional tools @<:@default@:>@])
83 70
AS_HELP_STRING([--disable-tools], [do not build additional tools]),
84 71
              [], [enable_tools=yes])
85 72
AC_MSG_CHECKING([whether to build the additional tools])
86 73
if test x"$enable_tools" != x"no"; then
87 74
  AC_MSG_RESULT([yes])
88 75
else
89 76
  AC_MSG_RESULT([no])
90 77
fi
91 78
AM_CONDITIONAL([WANT_TOOLS], [test x"$enable_tools" != x"no"])
92 79

	
93 80
dnl Checks for header files.
94 81
AC_CHECK_HEADERS(limits.h sys/time.h sys/times.h unistd.h)
95 82

	
96 83
dnl Checks for typedefs, structures, and compiler characteristics.
97 84
AC_C_CONST
98 85
AC_C_INLINE
99 86
AC_TYPE_SIZE_T
100 87
AC_HEADER_TIME
101 88
AC_STRUCT_TM
102 89

	
103 90
dnl Checks for library functions.
104 91
AC_HEADER_STDC
105 92
AC_CHECK_FUNCS(gettimeofday times ctime_r)
106 93

	
107 94
dnl Add dependencies on files generated by configure.
108 95
AC_SUBST([CONFIG_STATUS_DEPENDENCIES],
109 96
  ['$(top_srcdir)/doc/Doxyfile.in $(top_srcdir)/lemon/lemon.pc.in $(top_srcdir)/cmake/version.cmake.in'])
110 97

	
111 98
AC_CONFIG_FILES([
112 99
Makefile
100
demo/Makefile
113 101
cmake/version.cmake
114 102
doc/Doxyfile
115 103
lemon/lemon.pc
116 104
])
117 105

	
118 106
AC_OUTPUT
119 107

	
120 108
echo
121 109
echo '****************************** SUMMARY ******************************'
122 110
echo
123 111
echo Package version............... : $PACKAGE-$VERSION
124 112
echo
125 113
echo C++ compiler.................. : $CXX
126 114
echo C++ compiles flags............ : $WARNINGCXXFLAGS $CXXFLAGS
127 115
echo
128 116
echo Compiler supports long long... : $long_long_found
129 117
echo
130 118
echo GLPK support.................. : $lx_glpk_found
131 119
echo CPLEX support................. : $lx_cplex_found
132 120
echo SOPLEX support................ : $lx_soplex_found
133 121
echo CLP support................... : $lx_clp_found
134 122
echo
135
echo Build demo programs........... : $enable_demo
136 123
echo Build additional tools........ : $enable_tools
137 124
echo
138 125
echo The packace will be installed in
139 126
echo -n '  '
140 127
echo $prefix.
141 128
echo
142 129
echo '*********************************************************************'
143 130

	
144 131
echo
145 132
echo Configure complete, now type \'make\' and then \'make install\'.
146 133
echo
Ignore white space 6 line context
1
EXTRA_DIST += \
2
	demo/CMakeLists.txt \
3
	demo/digraph.lgf
1
AM_CXXFLAGS = $(WARNINGCXXFLAGS)
4 2

	
5
if WANT_DEMO
3
AM_CPPFLAGS = -I$(top_srcdir) -I$(top_builddir)
4
LDADD = $(top_builddir)/lemon/libemon.la
6 5

	
7
noinst_PROGRAMS += \
8
	demo/arg_parser_demo \
9
	demo/graph_to_eps_demo \
10
	demo/lgf_demo
6
EXTRA_DIST = \
7
	CMakeLists.txt \
8
	digraph.lgf
11 9

	
12
endif WANT_DEMO
10
noinst_PROGRAMS = \
11
	arg_parser_demo \
12
	graph_to_eps_demo \
13
	lgf_demo
13 14

	
14
demo_arg_parser_demo_SOURCES = demo/arg_parser_demo.cc
15
demo_graph_to_eps_demo_SOURCES = demo/graph_to_eps_demo.cc
16
demo_lgf_demo_SOURCES = demo/lgf_demo.cc
15
arg_parser_demo_SOURCES = arg_parser_demo.cc
16
graph_to_eps_demo_SOURCES = graph_to_eps_demo.cc
17
lgf_demo_SOURCES = lgf_demo.cc
Ignore white space 6 line context
... ...
@@ -162,526 +162,526 @@
162 162

	
163 163
/**
164 164
@defgroup graph_maps Graph Maps
165 165
@ingroup maps
166 166
\brief Special graph-related maps.
167 167

	
168 168
This group contains maps that are specifically designed to assign
169 169
values to the nodes and arcs/edges of graphs.
170 170

	
171 171
If you are looking for the standard graph maps (\c NodeMap, \c ArcMap,
172 172
\c EdgeMap), see the \ref graph_concepts "Graph Structure Concepts".
173 173
*/
174 174

	
175 175
/**
176 176
\defgroup map_adaptors Map Adaptors
177 177
\ingroup maps
178 178
\brief Tools to create new maps from existing ones
179 179

	
180 180
This group contains map adaptors that are used to create "implicit"
181 181
maps from other maps.
182 182

	
183 183
Most of them are \ref concepts::ReadMap "read-only maps".
184 184
They can make arithmetic and logical operations between one or two maps
185 185
(negation, shifting, addition, multiplication, logical 'and', 'or',
186 186
'not' etc.) or e.g. convert a map to another one of different Value type.
187 187

	
188 188
The typical usage of this classes is passing implicit maps to
189 189
algorithms.  If a function type algorithm is called then the function
190 190
type map adaptors can be used comfortable. For example let's see the
191 191
usage of map adaptors with the \c graphToEps() function.
192 192
\code
193 193
  Color nodeColor(int deg) {
194 194
    if (deg >= 2) {
195 195
      return Color(0.5, 0.0, 0.5);
196 196
    } else if (deg == 1) {
197 197
      return Color(1.0, 0.5, 1.0);
198 198
    } else {
199 199
      return Color(0.0, 0.0, 0.0);
200 200
    }
201 201
  }
202 202

	
203 203
  Digraph::NodeMap<int> degree_map(graph);
204 204

	
205 205
  graphToEps(graph, "graph.eps")
206 206
    .coords(coords).scaleToA4().undirected()
207 207
    .nodeColors(composeMap(functorToMap(nodeColor), degree_map))
208 208
    .run();
209 209
\endcode
210 210
The \c functorToMap() function makes an \c int to \c Color map from the
211 211
\c nodeColor() function. The \c composeMap() compose the \c degree_map
212 212
and the previously created map. The composed map is a proper function to
213 213
get the color of each node.
214 214

	
215 215
The usage with class type algorithms is little bit harder. In this
216 216
case the function type map adaptors can not be used, because the
217 217
function map adaptors give back temporary objects.
218 218
\code
219 219
  Digraph graph;
220 220

	
221 221
  typedef Digraph::ArcMap<double> DoubleArcMap;
222 222
  DoubleArcMap length(graph);
223 223
  DoubleArcMap speed(graph);
224 224

	
225 225
  typedef DivMap<DoubleArcMap, DoubleArcMap> TimeMap;
226 226
  TimeMap time(length, speed);
227 227

	
228 228
  Dijkstra<Digraph, TimeMap> dijkstra(graph, time);
229 229
  dijkstra.run(source, target);
230 230
\endcode
231 231
We have a length map and a maximum speed map on the arcs of a digraph.
232 232
The minimum time to pass the arc can be calculated as the division of
233 233
the two maps which can be done implicitly with the \c DivMap template
234 234
class. We use the implicit minimum time map as the length map of the
235 235
\c Dijkstra algorithm.
236 236
*/
237 237

	
238 238
/**
239 239
@defgroup matrices Matrices
240 240
@ingroup datas
241 241
\brief Two dimensional data storages implemented in LEMON.
242 242

	
243 243
This group contains two dimensional data storages implemented in LEMON.
244 244
*/
245 245

	
246 246
/**
247 247
@defgroup paths Path Structures
248 248
@ingroup datas
249 249
\brief %Path structures implemented in LEMON.
250 250

	
251 251
This group contains the path structures implemented in LEMON.
252 252

	
253 253
LEMON provides flexible data structures to work with paths.
254 254
All of them have similar interfaces and they can be copied easily with
255 255
assignment operators and copy constructors. This makes it easy and
256 256
efficient to have e.g. the Dijkstra algorithm to store its result in
257 257
any kind of path structure.
258 258

	
259 259
\sa lemon::concepts::Path
260 260
*/
261 261

	
262 262
/**
263 263
@defgroup auxdat Auxiliary Data Structures
264 264
@ingroup datas
265 265
\brief Auxiliary data structures implemented in LEMON.
266 266

	
267 267
This group contains some data structures implemented in LEMON in
268 268
order to make it easier to implement combinatorial algorithms.
269 269
*/
270 270

	
271 271
/**
272 272
@defgroup algs Algorithms
273 273
\brief This group contains the several algorithms
274 274
implemented in LEMON.
275 275

	
276 276
This group contains the several algorithms
277 277
implemented in LEMON.
278 278
*/
279 279

	
280 280
/**
281 281
@defgroup search Graph Search
282 282
@ingroup algs
283 283
\brief Common graph search algorithms.
284 284

	
285 285
This group contains the common graph search algorithms, namely
286 286
\e breadth-first \e search (BFS) and \e depth-first \e search (DFS).
287 287
*/
288 288

	
289 289
/**
290 290
@defgroup shortest_path Shortest Path Algorithms
291 291
@ingroup algs
292 292
\brief Algorithms for finding shortest paths.
293 293

	
294 294
This group contains the algorithms for finding shortest paths in digraphs.
295 295

	
296 296
 - \ref Dijkstra algorithm for finding shortest paths from a source node
297 297
   when all arc lengths are non-negative.
298 298
 - \ref BellmanFord "Bellman-Ford" algorithm for finding shortest paths
299 299
   from a source node when arc lenghts can be either positive or negative,
300 300
   but the digraph should not contain directed cycles with negative total
301 301
   length.
302 302
 - \ref FloydWarshall "Floyd-Warshall" and \ref Johnson "Johnson" algorithms
303 303
   for solving the \e all-pairs \e shortest \e paths \e problem when arc
304 304
   lenghts can be either positive or negative, but the digraph should
305 305
   not contain directed cycles with negative total length.
306 306
 - \ref Suurballe A successive shortest path algorithm for finding
307 307
   arc-disjoint paths between two nodes having minimum total length.
308 308
*/
309 309

	
310 310
/**
311 311
@defgroup max_flow Maximum Flow Algorithms
312 312
@ingroup algs
313 313
\brief Algorithms for finding maximum flows.
314 314

	
315 315
This group contains the algorithms for finding maximum flows and
316 316
feasible circulations.
317 317

	
318 318
The \e maximum \e flow \e problem is to find a flow of maximum value between
319 319
a single source and a single target. Formally, there is a \f$G=(V,A)\f$
320 320
digraph, a \f$cap:A\rightarrow\mathbf{R}^+_0\f$ capacity function and
321 321
\f$s, t \in V\f$ source and target nodes.
322 322
A maximum flow is an \f$f:A\rightarrow\mathbf{R}^+_0\f$ solution of the
323 323
following optimization problem.
324 324

	
325 325
\f[ \max\sum_{a\in\delta_{out}(s)}f(a) - \sum_{a\in\delta_{in}(s)}f(a) \f]
326 326
\f[ \sum_{a\in\delta_{out}(v)} f(a) = \sum_{a\in\delta_{in}(v)} f(a)
327 327
    \qquad \forall v\in V\setminus\{s,t\} \f]
328 328
\f[ 0 \leq f(a) \leq cap(a) \qquad \forall a\in A \f]
329 329

	
330 330
LEMON contains several algorithms for solving maximum flow problems:
331 331
- \ref EdmondsKarp Edmonds-Karp algorithm.
332 332
- \ref Preflow Goldberg-Tarjan's preflow push-relabel algorithm.
333 333
- \ref DinitzSleatorTarjan Dinitz's blocking flow algorithm with dynamic trees.
334 334
- \ref GoldbergTarjan Preflow push-relabel algorithm with dynamic trees.
335 335

	
336 336
In most cases the \ref Preflow "Preflow" algorithm provides the
337 337
fastest method for computing a maximum flow. All implementations
338 338
provides functions to also query the minimum cut, which is the dual
339 339
problem of the maximum flow.
340 340
*/
341 341

	
342 342
/**
343 343
@defgroup min_cost_flow Minimum Cost Flow Algorithms
344 344
@ingroup algs
345 345

	
346 346
\brief Algorithms for finding minimum cost flows and circulations.
347 347

	
348 348
This group contains the algorithms for finding minimum cost flows and
349 349
circulations.
350 350

	
351 351
The \e minimum \e cost \e flow \e problem is to find a feasible flow of
352 352
minimum total cost from a set of supply nodes to a set of demand nodes
353 353
in a network with capacity constraints and arc costs.
354 354
Formally, let \f$G=(V,A)\f$ be a digraph,
355 355
\f$lower, upper: A\rightarrow\mathbf{Z}^+_0\f$ denote the lower and
356 356
upper bounds for the flow values on the arcs,
357 357
\f$cost: A\rightarrow\mathbf{Z}^+_0\f$ denotes the cost per unit flow
358 358
on the arcs, and
359 359
\f$supply: V\rightarrow\mathbf{Z}\f$ denotes the supply/demand values
360 360
of the nodes.
361 361
A minimum cost flow is an \f$f:A\rightarrow\mathbf{R}^+_0\f$ solution of
362 362
the following optimization problem.
363 363

	
364 364
\f[ \min\sum_{a\in A} f(a) cost(a) \f]
365 365
\f[ \sum_{a\in\delta_{out}(v)} f(a) - \sum_{a\in\delta_{in}(v)} f(a) =
366 366
    supply(v) \qquad \forall v\in V \f]
367 367
\f[ lower(a) \leq f(a) \leq upper(a) \qquad \forall a\in A \f]
368 368

	
369 369
LEMON contains several algorithms for solving minimum cost flow problems:
370 370
 - \ref CycleCanceling Cycle-canceling algorithms.
371 371
 - \ref CapacityScaling Successive shortest path algorithm with optional
372 372
   capacity scaling.
373 373
 - \ref CostScaling Push-relabel and augment-relabel algorithms based on
374 374
   cost scaling.
375 375
 - \ref NetworkSimplex Primal network simplex algorithm with various
376 376
   pivot strategies.
377 377
*/
378 378

	
379 379
/**
380 380
@defgroup min_cut Minimum Cut Algorithms
381 381
@ingroup algs
382 382

	
383 383
\brief Algorithms for finding minimum cut in graphs.
384 384

	
385 385
This group contains the algorithms for finding minimum cut in graphs.
386 386

	
387 387
The \e minimum \e cut \e problem is to find a non-empty and non-complete
388 388
\f$X\f$ subset of the nodes with minimum overall capacity on
389 389
outgoing arcs. Formally, there is a \f$G=(V,A)\f$ digraph, a
390 390
\f$cap: A\rightarrow\mathbf{R}^+_0\f$ capacity function. The minimum
391 391
cut is the \f$X\f$ solution of the next optimization problem:
392 392

	
393 393
\f[ \min_{X \subset V, X\not\in \{\emptyset, V\}}
394 394
    \sum_{uv\in A, u\in X, v\not\in X}cap(uv) \f]
395 395

	
396 396
LEMON contains several algorithms related to minimum cut problems:
397 397

	
398 398
- \ref HaoOrlin "Hao-Orlin algorithm" for calculating minimum cut
399 399
  in directed graphs.
400 400
- \ref NagamochiIbaraki "Nagamochi-Ibaraki algorithm" for
401 401
  calculating minimum cut in undirected graphs.
402 402
- \ref GomoryHu "Gomory-Hu tree computation" for calculating
403 403
  all-pairs minimum cut in undirected graphs.
404 404

	
405 405
If you want to find minimum cut just between two distinict nodes,
406 406
see the \ref max_flow "maximum flow problem".
407 407
*/
408 408

	
409 409
/**
410 410
@defgroup graph_prop Connectivity and Other Graph Properties
411 411
@ingroup algs
412 412
\brief Algorithms for discovering the graph properties
413 413

	
414 414
This group contains the algorithms for discovering the graph properties
415 415
like connectivity, bipartiteness, euler property, simplicity etc.
416 416

	
417 417
\image html edge_biconnected_components.png
418 418
\image latex edge_biconnected_components.eps "bi-edge-connected components" width=\textwidth
419 419
*/
420 420

	
421 421
/**
422 422
@defgroup planar Planarity Embedding and Drawing
423 423
@ingroup algs
424 424
\brief Algorithms for planarity checking, embedding and drawing
425 425

	
426 426
This group contains the algorithms for planarity checking,
427 427
embedding and drawing.
428 428

	
429 429
\image html planar.png
430 430
\image latex planar.eps "Plane graph" width=\textwidth
431 431
*/
432 432

	
433 433
/**
434 434
@defgroup matching Matching Algorithms
435 435
@ingroup algs
436 436
\brief Algorithms for finding matchings in graphs and bipartite graphs.
437 437

	
438 438
This group contains algorithm objects and functions to calculate
439 439
matchings in graphs and bipartite graphs. The general matching problem is
440 440
finding a subset of the arcs which does not shares common endpoints.
441 441

	
442 442
There are several different algorithms for calculate matchings in
443 443
graphs.  The matching problems in bipartite graphs are generally
444 444
easier than in general graphs. The goal of the matching optimization
445 445
can be finding maximum cardinality, maximum weight or minimum cost
446 446
matching. The search can be constrained to find perfect or
447 447
maximum cardinality matching.
448 448

	
449 449
The matching algorithms implemented in LEMON:
450 450
- \ref MaxBipartiteMatching Hopcroft-Karp augmenting path algorithm
451 451
  for calculating maximum cardinality matching in bipartite graphs.
452 452
- \ref PrBipartiteMatching Push-relabel algorithm
453 453
  for calculating maximum cardinality matching in bipartite graphs.
454 454
- \ref MaxWeightedBipartiteMatching
455 455
  Successive shortest path algorithm for calculating maximum weighted
456 456
  matching and maximum weighted bipartite matching in bipartite graphs.
457 457
- \ref MinCostMaxBipartiteMatching
458 458
  Successive shortest path algorithm for calculating minimum cost maximum
459 459
  matching in bipartite graphs.
460 460
- \ref MaxMatching Edmond's blossom shrinking algorithm for calculating
461 461
  maximum cardinality matching in general graphs.
462 462
- \ref MaxWeightedMatching Edmond's blossom shrinking algorithm for calculating
463 463
  maximum weighted matching in general graphs.
464 464
- \ref MaxWeightedPerfectMatching
465 465
  Edmond's blossom shrinking algorithm for calculating maximum weighted
466 466
  perfect matching in general graphs.
467 467

	
468 468
\image html bipartite_matching.png
469 469
\image latex bipartite_matching.eps "Bipartite Matching" width=\textwidth
470 470
*/
471 471

	
472 472
/**
473 473
@defgroup spantree Minimum Spanning Tree Algorithms
474 474
@ingroup algs
475 475
\brief Algorithms for finding a minimum cost spanning tree in a graph.
476 476

	
477 477
This group contains the algorithms for finding a minimum cost spanning
478 478
tree in a graph.
479 479
*/
480 480

	
481 481
/**
482 482
@defgroup auxalg Auxiliary Algorithms
483 483
@ingroup algs
484 484
\brief Auxiliary algorithms implemented in LEMON.
485 485

	
486 486
This group contains some algorithms implemented in LEMON
487 487
in order to make it easier to implement complex algorithms.
488 488
*/
489 489

	
490 490
/**
491 491
@defgroup approx Approximation Algorithms
492 492
@ingroup algs
493 493
\brief Approximation algorithms.
494 494

	
495 495
This group contains the approximation and heuristic algorithms
496 496
implemented in LEMON.
497 497
*/
498 498

	
499 499
/**
500 500
@defgroup gen_opt_group General Optimization Tools
501 501
\brief This group contains some general optimization frameworks
502 502
implemented in LEMON.
503 503

	
504 504
This group contains some general optimization frameworks
505 505
implemented in LEMON.
506 506
*/
507 507

	
508 508
/**
509 509
@defgroup lp_group Lp and Mip Solvers
510 510
@ingroup gen_opt_group
511 511
\brief Lp and Mip solver interfaces for LEMON.
512 512

	
513 513
This group contains Lp and Mip solver interfaces for LEMON. The
514 514
various LP solvers could be used in the same manner with this
515 515
interface.
516 516
*/
517 517

	
518 518
/**
519 519
@defgroup lp_utils Tools for Lp and Mip Solvers
520 520
@ingroup lp_group
521 521
\brief Helper tools to the Lp and Mip solvers.
522 522

	
523 523
This group adds some helper tools to general optimization framework
524 524
implemented in LEMON.
525 525
*/
526 526

	
527 527
/**
528 528
@defgroup metah Metaheuristics
529 529
@ingroup gen_opt_group
530 530
\brief Metaheuristics for LEMON library.
531 531

	
532 532
This group contains some metaheuristic optimization tools.
533 533
*/
534 534

	
535 535
/**
536 536
@defgroup utils Tools and Utilities
537 537
\brief Tools and utilities for programming in LEMON
538 538

	
539 539
Tools and utilities for programming in LEMON.
540 540
*/
541 541

	
542 542
/**
543 543
@defgroup gutils Basic Graph Utilities
544 544
@ingroup utils
545 545
\brief Simple basic graph utilities.
546 546

	
547 547
This group contains some simple basic graph utilities.
548 548
*/
549 549

	
550 550
/**
551 551
@defgroup misc Miscellaneous Tools
552 552
@ingroup utils
553 553
\brief Tools for development, debugging and testing.
554 554

	
555 555
This group contains several useful tools for development,
556 556
debugging and testing.
557 557
*/
558 558

	
559 559
/**
560 560
@defgroup timecount Time Measuring and Counting
561 561
@ingroup misc
562 562
\brief Simple tools for measuring the performance of algorithms.
563 563

	
564 564
This group contains simple tools for measuring the performance
565 565
of algorithms.
566 566
*/
567 567

	
568 568
/**
569 569
@defgroup exceptions Exceptions
570 570
@ingroup utils
571 571
\brief Exceptions defined in LEMON.
572 572

	
573 573
This group contains the exceptions defined in LEMON.
574 574
*/
575 575

	
576 576
/**
577 577
@defgroup io_group Input-Output
578 578
\brief Graph Input-Output methods
579 579

	
580 580
This group contains the tools for importing and exporting graphs
581 581
and graph related data. Now it supports the \ref lgf-format
582 582
"LEMON Graph Format", the \c DIMACS format and the encapsulated
583 583
postscript (EPS) format.
584 584
*/
585 585

	
586 586
/**
587 587
@defgroup lemon_io LEMON Graph Format
588 588
@ingroup io_group
589 589
\brief Reading and writing LEMON Graph Format.
590 590

	
591 591
This group contains methods for reading and writing
592 592
\ref lgf-format "LEMON Graph Format".
593 593
*/
594 594

	
595 595
/**
596 596
@defgroup eps_io Postscript Exporting
597 597
@ingroup io_group
598 598
\brief General \c EPS drawer and graph exporter
599 599

	
600 600
This group contains general \c EPS drawing methods and special
601 601
graph exporting tools.
602 602
*/
603 603

	
604 604
/**
605 605
@defgroup dimacs_group DIMACS format
606 606
@ingroup io_group
607 607
\brief Read and write files in DIMACS format
608 608

	
609 609
Tools to read a digraph from or write it to a file in DIMACS format data.
610 610
*/
611 611

	
612 612
/**
613 613
@defgroup nauty_group NAUTY Format
614 614
@ingroup io_group
615 615
\brief Read \e Nauty format
616 616

	
617 617
Tool to read graphs from \e Nauty format data.
618 618
*/
619 619

	
620 620
/**
621 621
@defgroup concept Concepts
622 622
\brief Skeleton classes and concept checking classes
623 623

	
624 624
This group contains the data/algorithm skeletons and concept checking
625 625
classes implemented in LEMON.
626 626

	
627 627
The purpose of the classes in this group is fourfold.
628 628

	
629 629
- These classes contain the documentations of the %concepts. In order
630 630
  to avoid document multiplications, an implementation of a concept
631 631
  simply refers to the corresponding concept class.
632 632

	
633 633
- These classes declare every functions, <tt>typedef</tt>s etc. an
634 634
  implementation of the %concepts should provide, however completely
635 635
  without implementations and real data structures behind the
636 636
  interface. On the other hand they should provide nothing else. All
637 637
  the algorithms working on a data structure meeting a certain concept
638 638
  should compile with these classes. (Though it will not run properly,
639 639
  of course.) In this way it is easily to check if an algorithm
640 640
  doesn't use any extra feature of a certain implementation.
641 641

	
642 642
- The concept descriptor classes also provide a <em>checker class</em>
643 643
  that makes it possible to check whether a certain implementation of a
644 644
  concept indeed provides all the required features.
645 645

	
646 646
- Finally, They can serve as a skeleton of a new implementation of a concept.
647 647
*/
648 648

	
649 649
/**
650 650
@defgroup graph_concepts Graph Structure Concepts
651 651
@ingroup concept
652 652
\brief Skeleton and concept checking classes for graph structures
653 653

	
654 654
This group contains the skeletons and concept checking classes of LEMON's
655 655
graph structures and helper classes used to implement these.
656 656
*/
657 657

	
658 658
/**
659 659
@defgroup map_concepts Map Concepts
660 660
@ingroup concept
661 661
\brief Skeleton and concept checking classes for maps
662 662

	
663 663
This group contains the skeletons and concept checking classes of maps.
664 664
*/
665 665

	
666 666
/**
667 667
\anchor demoprograms
668 668

	
669 669
@defgroup demos Demo Programs
670 670

	
671 671
Some demo programs are listed here. Their full source codes can be found in
672 672
the \c demo subdirectory of the source tree.
673 673

	
674
It order to compile them, use <tt>--enable-demo</tt> configure option when
675
build the library.
674
In order to compile them, use the <tt>make demo</tt> or the
675
<tt>make check</tt> commands.
676 676
*/
677 677

	
678 678
/**
679 679
@defgroup tools Standalone Utility Applications
680 680

	
681 681
Some utility applications are listed here.
682 682

	
683 683
The standard compilation procedure (<tt>./configure;make</tt>) will compile
684 684
them, as well.
685 685
*/
686 686

	
687 687
}
Ignore white space 6 line context
1 1
#!/bin/bash
2 2

	
3 3
set -e
4 4

	
5 5
if [ $# = 0 ]; then
6 6
    echo "Usage: $0 release-id"
7 7
    exit 1
8 8
else
9 9
    export LEMON_VERSION=$1
10 10
fi
11 11

	
12 12
echo '*****************************************************************'
13 13
echo ' Start making release tarballs for version '${LEMON_VERSION}
14 14
echo '*****************************************************************'
15 15

	
16 16
autoreconf -vif
17
./configure --enable-demo
17
./configure
18 18

	
19 19
make
20 20
make html
21 21
make distcheck
22 22
tar xf lemon-${LEMON_VERSION}.tar.gz
23 23
zip -r lemon-${LEMON_VERSION}.zip lemon-${LEMON_VERSION}
24 24
mv lemon-${LEMON_VERSION}/doc/html lemon-doc-${LEMON_VERSION}
25 25
tar czf lemon-doc-${LEMON_VERSION}.tar.gz lemon-doc-${LEMON_VERSION}
26 26
zip -r lemon-doc-${LEMON_VERSION}.zip lemon-doc-${LEMON_VERSION}
27 27
tar czf lemon-nodoc-${LEMON_VERSION}.tar.gz lemon-${LEMON_VERSION}
28 28
zip -r lemon-nodoc-${LEMON_VERSION}.zip lemon-${LEMON_VERSION}
29 29
hg tag -m 'LEMON '${LEMON_VERSION}' released ('$(hg par --template="{node|short}")' tagged as r'${LEMON_VERSION}')' r${LEMON_VERSION}
30 30

	
31 31
rm -rf lemon-${LEMON_VERSION} lemon-doc-${LEMON_VERSION}
32 32

	
33 33
echo '*****************************************************************'
34 34
echo '  Release '${LEMON_VERSION}' has been created' 
35 35
echo '*****************************************************************'
Ignore white space 6 line context
1 1
EXTRA_DIST += \
2 2
	test/CMakeLists.txt
3 3

	
4 4
noinst_HEADERS += \
5 5
	test/graph_test.h \
6 6
	test/test_tools.h
7 7

	
8 8
check_PROGRAMS += \
9 9
	test/adaptors_test \
10 10
	test/bfs_test \
11 11
	test/circulation_test \
12 12
	test/counter_test \
13 13
	test/dfs_test \
14 14
	test/digraph_test \
15 15
	test/dijkstra_test \
16 16
	test/dim_test \
17 17
	test/edge_set_test \
18 18
	test/error_test \
19 19
	test/euler_test \
20 20
	test/gomory_hu_test \
21 21
	test/graph_copy_test \
22 22
	test/graph_test \
23 23
	test/graph_utils_test \
24 24
	test/hao_orlin_test \
25 25
	test/heap_test \
26 26
	test/kruskal_test \
27 27
	test/maps_test \
28 28
	test/max_matching_test \
29 29
	test/min_cost_arborescence_test \
30 30
	test/path_test \
31 31
	test/preflow_test \
32 32
	test/radix_sort_test \
33 33
	test/random_test \
34 34
	test/suurballe_test \
35 35
	test/test_tools_fail \
36 36
	test/test_tools_pass \
37 37
	test/time_measure_test \
38 38
	test/unionfind_test
39 39

	
40
test_test_tools_pass_DEPENDENCIES = demo
41

	
40 42
if HAVE_LP
41 43
check_PROGRAMS += test/lp_test
42 44
endif HAVE_LP
43 45
if HAVE_MIP
44 46
check_PROGRAMS += test/mip_test
45 47
endif HAVE_MIP
46 48

	
47 49
TESTS += $(check_PROGRAMS)
48 50
XFAIL_TESTS += test/test_tools_fail$(EXEEXT)
49 51

	
50 52
test_adaptors_test_SOURCES = test/adaptors_test.cc
51 53
test_bfs_test_SOURCES = test/bfs_test.cc
52 54
test_circulation_test_SOURCES = test/circulation_test.cc
53 55
test_counter_test_SOURCES = test/counter_test.cc
54 56
test_dfs_test_SOURCES = test/dfs_test.cc
55 57
test_digraph_test_SOURCES = test/digraph_test.cc
56 58
test_dijkstra_test_SOURCES = test/dijkstra_test.cc
57 59
test_dim_test_SOURCES = test/dim_test.cc
58 60
test_edge_set_test_SOURCES = test/edge_set_test.cc
59 61
test_error_test_SOURCES = test/error_test.cc
60 62
test_euler_test_SOURCES = test/euler_test.cc
61 63
test_gomory_hu_test_SOURCES = test/gomory_hu_test.cc
62 64
test_graph_copy_test_SOURCES = test/graph_copy_test.cc
63 65
test_graph_test_SOURCES = test/graph_test.cc
64 66
test_graph_utils_test_SOURCES = test/graph_utils_test.cc
65 67
test_heap_test_SOURCES = test/heap_test.cc
66 68
test_kruskal_test_SOURCES = test/kruskal_test.cc
67 69
test_hao_orlin_test_SOURCES = test/hao_orlin_test.cc
68 70
test_lp_test_SOURCES = test/lp_test.cc
69 71
test_maps_test_SOURCES = test/maps_test.cc
70 72
test_mip_test_SOURCES = test/mip_test.cc
71 73
test_max_matching_test_SOURCES = test/max_matching_test.cc
72 74
test_min_cost_arborescence_test_SOURCES = test/min_cost_arborescence_test.cc
73 75
test_path_test_SOURCES = test/path_test.cc
74 76
test_preflow_test_SOURCES = test/preflow_test.cc
75 77
test_radix_sort_test_SOURCES = test/radix_sort_test.cc
76 78
test_suurballe_test_SOURCES = test/suurballe_test.cc
77 79
test_random_test_SOURCES = test/random_test.cc
78 80
test_test_tools_fail_SOURCES = test/test_tools_fail.cc
79 81
test_test_tools_pass_SOURCES = test/test_tools_pass.cc
80 82
test_time_measure_test_SOURCES = test/time_measure_test.cc
81 83
test_unionfind_test_SOURCES = test/unionfind_test.cc
0 comments (0 inline)