LEMON (C++ library)

LEMON (C++ library)

LEMON is an open source graph library written in C++ language. It is quite a useful tool for solving optimization problems. This means that LEMON can be a basis for applications solving different kind of optimization problems and also a starting point for implementing new algorithms in the area of theoretical research and applications, as well. It provides a set of easy-to-use implementation of common data structures and algorithms in the area of optimization. It is a particularly advantageous toolkit to implement optimization algorithms for design problems of telecommunication networks.

LEMON is an open source software library. This kind of software development has major advantages both for the users and for the developing team itself.The users of an open source package get a higher grade of flexibility. They can clearly see the power and the limitations of the package, for they get direct access to the source code. Since the users also have right to freely modify the code, it can be easily customized to meet the arising special requirements.As the open source makes it easy for researchers and software developers to implement their new ideas based on the package developers can expect to get useful feedback, improvements from them, as well as implementations of new algorithms or data structures.

Use of LEMON is free in commercial or non-commercial applications under very permissive license terms.

Design

A very important design requirement of the interface of data structures and algorithms is genericity. This basically achieved by separation of data structures and algorithms. Clearly the main difficulty in this approach is to make this without any loss of performance and usability. However, once these problems are overcome, this separation gives a huge advantage in flexibility for the user by making it possible to choose the most appropriate data structures or just to adapt an algorithm for an already existing data structure.

Since one can make the most of the advantages of “generic programming” only in the presence of the full source code; that is why commercial packages give very limited support for this programming style, and that is why LEMON is a suppletory product.

Generative programming is achieved in C++ by using templates. For example most of the algorithms implemented in LEMON do not fix the type of the graph it works on, but only asserts that it fulfills a certain graph-concept, i.e. only the interface of the graph is fixed. So the type of the graph appears as a template parameter of the algorithm class.Since the abuse of too many template parameters can result in a flexible but very hard-to-use tool in practice, it is necessary to determine in advance the midway between ease of usage and genericity.

The most important classes in LEMON are the graph classes. An instance of a graph class is the representation of the mathematical graph. It holds the topology and every structural information of the graph. The structural manipulations are also provided by the graph object. There is no universal graph class instead different classes are implemented for different purposes. They can differ in many ways, but all have to satisfy one or more graph concepts which are standardized interfaces to work with the rest of the library. One main advantage of the templates are, that you can write your own graph classes. As long as they provide the interface a concept is defining all the LEMON algorithms and classes will work with it properly - no representation or implementation is written into stone.

Algorithms

In LEMON the following algorithm-groups are present:
* Graph Search
* Shortest Path algorithms
* Maximum Flow algorithms
* Minimum Cost Flow algorithms
* Minimum Cut algorithms
* Connectivity and other graph properties
* Matching algorithms
* Minimum Spanning Tree algorithms
* Auxiliary algorithms
* Approximation algorithms

Many industrially motivated optimization tasks involves in solving computationally hard (NP-hard) problems. In this case, the generic optimization (meta)heuristics are of great importance. LEMON contains some metaheuristic optimization tools.

Linear Programming is the most powerful tool to solve network related optimization problems. Therefore - for a package like LEMON, it is crucial to provide a comfortable and efficient way to create and solve linear programming problem instances.

Linear programming is a central tool not only in optimization, but also in economy, biology, chemistry etc. To satisfy this demand there are several commercial and non-commercial solver packages having been developed for many years. A uniform and comfortable-to-use interface to the most important of these solvers is implemented in LEMON. The advantage of this approach is twofold. Firstly the C++ interface of LEMON is more comfortable than the solvers' native interface. Secondly, changing the underlying solver in a certain software using LEMON's LP interface needs zero effort. So, for example, one may try his idea using a free solver, demonstrate its usability for a customer and if it works well, but the performance should be improved, then one may decide to purchase and use a better commercial solver.

Additional tools

LEMON has its own graph storing format, the so called Lemon Graph Format. It enables one to store graphs and additional maps (i.e. functions on the nodes or edges) in a flexible and efficient way.

LEMON includes general EPS drawing methods and special graph exporting tools.

For testing purpose simple tools for measuring the performance of algorithms are present in LEMON. With them it is possible to compare different implementations of the same problem.

External links

LEMON webpage:
* [https://lemon.cs.elte.hu Lemon site]

Other graph libraries:
* [http://www.boost.org/ Boost]
* [http://www.mpi-inf.mpg.de/LEDA/leda.html Leda]
* [http://www.math.uni-augsburg.de/~fremuth/goblin.html Goblin]
* [http://www.infosun.fim.uni-passau.de/GTL/ GTL]


Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Look at other dictionaries:

  • Lemon (disambiguation) — A lemon is the citrus fruit from the tree Citrus limon . Lemon can also refer to:* lemon (automobile), a defective car * lemon (color), a shade of yellow similar to that of the fruit or, in dogs, a coat color that is a pale reddish yellow * LEMON …   Wikipedia

  • Lemon Creek, Staten Island — Lemon Creek is a stream located on the South Shore of Staten Island, one of the five boroughs of New York City. It is one of the few remaining ground level creeks in New York City.NameKnown in 1830 as Seguine s Creek, for a prominent local family …   Wikipedia

  • Lemon Grove, California — Infobox Settlement official name = City of Lemon Grove other name = native name = nickname = motto = Best Climate on Earth imagesize = 200px image caption = Lemon Grove Trolley Station flag size = image seal size = image shield = shield size =… …   Wikipedia

  • Miami-Dade Public Library System — The Miami Dade Public Library System (MDPLS) is a system of libraries in Miami, Florida and Miami Dade County in the United States. Contents 1 History 1.1 Early years 1.2 Unification 1.3 …   Wikipedia

  • Miami-Dade Public Library — The Miami Dade Public Library System is a system of libraries in Miami, Florida and Miami Dade County in the United States.HistoryThe Miami Dade Public Library System traces its origin to the late nineteenth century. In 1894 libraries were… …   Wikipedia

  • Tacoma Public Library — The Tacoma Public Library system serves residents of Tacoma, Washington. It operates ten library branches, which include a central library in downtown Tacoma, two regional locations in north and south Tacoma, and in seven neighborhoods. The… …   Wikipedia

  • San Diego County Library — This library serves the county of San Diego. For the library serving the city, see San Diego Public Library. Infobox Library library name = San Diego County Library library location = established = num branches = 33 collection size = annual… …   Wikipedia

  • Upper Eastside — This article is about the neighborhood in Miami. For the neighborhood in New York City, see Upper East Side. Upper Eastside   Neighborhood of Miami   …   Wikipedia

  • Minimum-cost flow problem — The minimum cost flow problem is finding the cheapest possible way of sending a certain amount of flow through a flow network. Contents 1 Definition 2 Relation to other problems 3 Solutions 4 See also …   Wikipedia

  • Flow network — In graph theory, a flow network is a directed graph where each edge has a capacity and each edge receives a flow. The amount of flow on an edge cannot exceed the capacity of the edge. Often in Operations Research, a directed graph is called a… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”