COIN-OR::LEMON - Graph Library

Changeset 6:da96f28684f7 in lemon-tutorial for getting_started.dox


Ignore:
Timestamp:
10/23/08 14:07:30 (16 years ago)
Author:
Peter Kovacs <kpeter@…>
Branch:
default
Phase:
public
Message:

Extend and improve the first two chapters

File:
1 edited

Legend:

Unmodified
Added
Removed
  • getting_started.dox

    r3 r6  
    1818
    1919/**
    20 \page getting_started How to Start Using LEMON
     20\page getting_started Getting Started
    2121
    2222In this page we detail how to start using LEMON, from downloading it to
     
    2525have a basic knowledge of your operating system and C++ programming
    2626language. The procedure is pretty straightforward, but if you have any
    27 difficulties don't hesitate to
     27difficulties do not hesitate to
    2828<a href="mailto:lemon-user@lemon.cs.elte.hu"><b>ask</b></a>.
    2929
     
    3232In LEMON we use C++ templates heavily, thus compilation takes a
    3333considerable amount of time and memory. So some decent box would be
    34 advantageous. But otherwise there are no special hardware requirements.
     34advantageousm, but otherwise there are no special hardware requirements.
    3535
    3636You will need a recent C++ compiler. Our primary target is the GNU C++
    3737Compiler (g++), from version 3.3 upwards. We also checked the Intel C++
    38 Compiler (icc) and Microsoft Visual C++ .NET 2003, 2005.
    39 If you want to develop with LEMON under Windows you could consider
    40 using Cygwin.
     38Compiler (icc) and Microsoft Visual C++ (on Windows).
     39If you want to develop with LEMON under Windows, you can use a Windows
     40installer or you can consider using Cygwin.
    4141
    4242In this description we will suppose a Linux environment and GNU C++ Compiler.
     43If you would like to develop under Windows and use a Windows installer,
     44you could skip the following sections and continue reading \ref hello_lemon.
     45However keep in mind that you have to make appropriate steps instead of
     46the instructions detailed here to be able to compile the example code
     47with your compiler.
    4348
    4449\subsection requirements_lp LP Solver Requirements
    4550
    4651The LEMON LP solver interface can use the GLPK (GNU Linear Programming
    47 Kit), CPLEX (was tested with CPLEX 7.5) and SoPlex solver. If you want
    48 to use it you will need at least one of these. See \ref configure_flags
    49 how to enable these at compile time.
     52Kit), CPLEX and SoPlex solver. If you want to use it, you will need at
     53least one of these.
     54See the <b><tt>INSTALL</tt></b> file how to enable these at compile time.
    5055
    5156\section download_lemon How to Download LEMON
    5257
    53 You can download LEMON from the LEMON web site:
    54 <a href="http://lemon.cs.elte.hu/">https://lemon.cs.elte.hu/</a>.
    55 There you will find released versions in form of <tt>.tar.gz</tt> files.
     58You can download LEMON from our web site:
     59<a href="http://lemon.cs.elte.hu/">http://lemon.cs.elte.hu/</a>.
     60There you will find released versions in form of <tt>.tar.gz</tt> files
     61(and Windows installers).
    5662If you want a developer version (for example you want to contribute in
    57 developing the library LEMON) then you might want to use our Mercurial
    58 repository. This case is detailed later, so from now on we suppose that
    59 you downloaded a <tt>.tar.gz</tt> file.
     63developing LEMON) then you might want to use our Mercurial repository.
     64This case is detailed \ref hg_checkout "later", so from now on we
     65suppose that you downloaded a <tt>.tar.gz</tt> file.
    6066
    6167\section install_lemon How to Install LEMON
     
    118124\endverbatim
    119125This step is optional, but recommended. It runs the test programs that
    120 we developed for LEMON to check whether the library works properly on
     126have been developed for LEMON to check whether the library works properly on
    121127your platform.
    122128
     
    131137
    132138Several other configure flags can be passed to <tt>./configure</tt>.
    133 For more information see <tt>./configure --help</tt> and the INSTALL
    134 file in the install directory.
     139For more information see the <b><tt>INSTALL</tt></b> file.
    135140
    136141\section hg_checkout How to Checkout LEMON from our Mercurial Repository
    137142
    138 You can obtain the latest version of LEMON from our Mercurial repository.
    139 To do this issue the following command:
    140 \verbatim
    141 hg clone http://lemon.cs.elte.hu/hg/lemon lemon-src
     143You can obtain the latest (developer) version of LEMON from our Mercurial
     144repository. To do this issue the following command.
     145\verbatim
     146hg clone http://lemon.cs.elte.hu/hg/lemon-main lemon-src
    142147\endverbatim
    143148
     
    145150
    146151You can compile the code from the repository similarly to the packaged
    147 version, but you will need to run <b><tt>autoreconf -vif</tt></b> or
    148 <b><tt>./bootstrap</tt></b> in some older environment before
     152version, but you will need to run <b><tt>autoreconf -vif</tt></b>
     153(or <b><tt>./bootstrap</tt></b> in some older environment) before
    149154<tt>./configure</tt>. See <tt>./configure --help</tt> for options.
    150155For bootstrapping you will need the following tools:
     
    158163You will need <a href="http://www.doxygen.org/">Doxygen</a> for this.
    159164
     165\section hello_lemon Compile Your First Code
     166
     167If you have installed LEMON on your system you can paste the following
     168code segment into a file called <tt>hello_lemon.cc</tt> to have a first
     169working program that uses LEMON.
     170
     171\dontinclude hello_lemon.cc
     172\skip #include
     173\until }
     174
     175First let us briefly explain how this example program works.
     176(The used notions will be discussed in detail in the following chapter.)
     177
     178After some convenience typedefs we create a directed graph (\e digraph)
     179and add some nodes and arcs to it.
     180ListDigraph is one of the digraph classes implemented in LEMON.
     181It is based on linked lists, therefore iterating through its nodes and
     182arcs is fast.
     183
     184Then we iterate through all nodes of the digraph and print their unique
     185IDs. We use a constructor of the node iterator to initialize it to the
     186first node.
     187The <tt>operator++</tt> is used to step to the next node. After the last
     188node the iterator becomes invalid (i.e. it is set to \c INVALID).
     189This is what we exploit in the stop condition.
     190We iterate through all arcs of the digraph very similarly and print the
     191IDs of their source (tail) and target (head) nodes using the \c source()
     192and \c target() member functions.
     193
     194After that we create an arc map, which is actually a mapping that assigns
     195an \c int value (length) to each arc, and we set this value for each arc.
     196Finally we iterate through all arcs again and print their lengths.
     197
     198Now let's compile this simple example program.
     199
     200\subsection hello_lemon_system If LEMON is Installed System-Wide
     201
     202If your installation of LEMON into directory \c /usr/local was
     203successful, then it is very easy to compile this program with the
     204following command (the argument <tt>-lemon</tt> tells the compiler
     205that we are using the installed LEMON):
     206
     207\verbatim
     208g++ hello_lemon.cc -o hello_lemon -lemon
     209\endverbatim
     210
     211As a result you will get the exacutable \c hello_lemon in the current
     212directory, which you can run by the following command.
     213
     214\verbatim
     215./hello_lemon
     216\endverbatim
     217
     218\subsection hello_lemon_user If LEMON is Installed User-Local
     219
     220Compiling the code is a bit more difficult if you installed LEMON
     221user-local into a directory (e.g. <tt>~/lemon</tt>) or if you just
     222skipped the step <tt>make install</tt>.
     223You have to issue a command like this.
     224
     225\verbatim
     226g++ -I ~/lemon hello_lemon.cc -o hello_lemon -lemon -L ~/lemon/lemon/.libs
     227\endverbatim
     228
     229\subsubsection hello_lemon_pkg_config Use pkg-config
     230
     231\todo Write this sub-subsection (\ref hello_lemon_pkg_config).
     232
     233If everything has gone well, then our program prints out the followings.
     234
     235\verbatim
     236Hello World!
     237This is LEMON library here. We have a direceted graph.
     238
     239Nodes: 3 2 1 0
     240Arcs: (2,3) (1,3) (1,2) (0,2) (0,1)
     241
     242There is a map on the arcs (length):
     243
     244length(2,3)=10
     245length(1,3)=25
     246length(1,2)=5
     247length(0,2)=20
     248length(0,1)=10
     249\endverbatim
     250
     251You may note that iterating through the nodes and arcs is done in the
     252reverse order compared to the creating order (the IDs are in decreasing
     253order).
     254This is due to implementation aspects, that may differ at other graph
     255types, moreover it may be changed in the next releases.
     256Thus you should not exploit this method in any way, you should not
     257suppose anything about the iteration order.
     258
     259If you managed to compile and run this example code without any problems,
     260you can go on reading this tutorial to get to know more features and tools
     261of LEMON.
     262Otherwise if you encountered problems that you did not manage to solve,
     263do not hesitate to
     264<a href="mailto:lemon-user@lemon.cs.elte.hu"><b>contact us</b></a>.
     265
    160266*/
Note: See TracChangeset for help on using the changeset viewer.