COIN-OR::LEMON - Graph Library

Changeset 6:da96f28684f7 in lemon-tutorial

10/23/08 14:07:30 (16 years ago)
Peter Kovacs <kpeter@…>

Extend and improve the first two chapters

2 edited


  • getting_started.dox

    r3 r6  
    20 \page getting_started How to Start Using LEMON
     20\page getting_started Getting Started
    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=""><b>ask</b></a>.
    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.
    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.
    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.
    4449\subsection requirements_lp LP Solver Requirements
    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.
    5156\section download_lemon How to Download LEMON
    53 You can download LEMON from the LEMON web site:
    54 <a href=""></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=""></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.
    6167\section install_lemon How to Install LEMON
    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.
    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.
    136141\section hg_checkout How to Checkout LEMON from our Mercurial Repository
    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 lemon-src
     143You can obtain the latest (developer) version of LEMON from our Mercurial
     144repository. To do this issue the following command.
     146hg clone lemon-src
    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="">Doxygen</a> for this.
     165\section hello_lemon Compile Your First Code
     167If you have installed LEMON on your system you can paste the following
     168code segment into a file called <tt></tt> to have a first
     169working program that uses LEMON.
     172\skip #include
     173\until }
     175First let us briefly explain how this example program works.
     176(The used notions will be discussed in detail in the following chapter.)
     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.
     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.
     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.
     198Now let's compile this simple example program.
     200\subsection hello_lemon_system If LEMON is Installed System-Wide
     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):
     208g++ -o hello_lemon -lemon
     211As a result you will get the exacutable \c hello_lemon in the current
     212directory, which you can run by the following command.
     218\subsection hello_lemon_user If LEMON is Installed User-Local
     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.
     226g++ -I ~/lemon -o hello_lemon -lemon -L ~/lemon/lemon/.libs
     229\subsubsection hello_lemon_pkg_config Use pkg-config
     231\todo Write this sub-subsection (\ref hello_lemon_pkg_config).
     233If everything has gone well, then our program prints out the followings.
     236Hello World!
     237This is LEMON library here. We have a direceted graph.
     239Nodes: 3 2 1 0
     240Arcs: (2,3) (1,3) (1,2) (0,2) (0,1)
     242There is a map on the arcs (length):
     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
     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.
     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=""><b>contact us</b></a>.
  • intro.dox

    r3 r6  
    2222\section intro_lemon What is LEMON
    24 LEMON stands for <b>L</b>ibrary of <b>E</b>fficient <b>M</b>odels and
     24<b>LEMON</b> stands for <b>L</b>ibrary of <b>E</b>fficient <b>M</b>odels and
    2525<b>O</b>ptimization in <b>N</b>etworks. It is a C++ template
    26 library aimed at combinatorial optimization tasks which often involve
    27 in working with graphs.
     26library aimed at combinatorial optimization tasks, especially those
     27working with graphs and networks.
    2929<b>LEMON is an <a class="el" href="">open&nbsp;source</a>
    3131You are free to use it in your commercial or non-commercial applications
    32 under very permissive \ref license "license terms".
    33 </b>
     32under very permissive \ref license "license terms".</b>
     34This library helps to write programs that solve optimization problems
     35that arise frequently when designing and testing certain networks,
     36for example in telecommunication, computer networks, logistics, scheduling,
     37and other areas.
     38A very natural way of modelling these networks is by means of a graph.
     39Generally if you want to write any program that works with graphs,
     40then you might find it useful and convenient to use LEMON.
     42For more information visit the LEMON web site:
     43<a href=""><b></b></a>.
    3545\section intro_tutorial LEMON Tutorial
    3747This tutorial introduces the reader to the basic concepts and features of
    38 LEMON, and there are some sections about advanced topics showing the power
    39 of the various tools implemented in the library.
     48LEMON, and there are also some sections about advanced topics showing the
     49power of various tools implemented in the library.
    41 After getting familiar with the basic concepts you may start using LEMON
    42 with the help of the detailed documentation (that can also be used as a
    43 reference manual).
     51After getting familiar with the basics of the library, you may start using
     52LEMON with the help of the detailed documentation (that can also be used
     53as a reference manual).
Note: See TracChangeset for help on using the changeset viewer.