ABACUS is a software system for the implementation of linear-programming based branch-and-bound \ algorithms, i.e., branch-and-cut algorithms, branch-and-price algorithms, and their combination. It applies the concepts of object oriented programming (programming language C++). An implementation of a problem specific algorithm is obtained by deriving some classes from abstract base classes of ABACUS in order to embed problem specific functions.
While the Chapters 1 to 4 of this manual are a user's guide describing
the installation, design, and application of ABACUS the last
chapter contains the reference manual.
Chapter
explains how ABACUS is installed
on your computer system and what hardware and software environment is
required. In order to simplify the user understanding ABACUS\
I describe in Chapter
the design of the software
framework. While I recommend to study in any case the basic concepts outlined
in Section
before beginning with the
implementation of an application, it should be sufficient to return
to Section
only for rather advanced
usage. Also Chapter
is split into two
sections. The first one, Section
,
explains the first steps that have to be performed to implement an
application. This section should be studied together with the example
included in the ABACUS distribution. The second one,
Chapter
, shows how default strategies
of ABACUS can be modified and outlines some additional features
of the system. The reference manual of
Chapter
is complemented by the index that
simplifies finding a certain class or one of its members.
This manual is both available in Postscript and HTML format. The HTML form turns out to be quite useful for finding members of the reference manual.
This user's guide is not intended to teach the concepts of
linear-programming based branch-and-bound , but I assume that the reader of this manual and the user
of ABACUS is familiar with these algorithms. For an introduction
to branch-and-cut I refer to [JRT95], for an introduction to branch-and-price\
algorithms I recommend to [BJN
97]. Both approaches are described
in [Thi95].
Moreover, I also assume that the user of ABACUS is familiar with the concepts of object oriented programming. For the reader who is unexperienced in object oriented programming I refer to [KM90] for a good brief introduction and to [Boo94] for a detailed description. There are many books about the programming language C++. The classical introduction is [Str93]. Very useful reference manuals are [ES92] and the current working paper of the C++ standardization committee [ASC95].
ABACUS originates from the dissertation of its author [Thi95] and has since then been tested, slightly modified and improved. Here, I would like to thank all initial testers, in particular Thomas Christof, Meinrad Funke, and François Margot for their bug reports and helpful comments. I am very grateful to Joachim Kupke for carefully proofreading an earlier version. I also want to thank Denis Naddef, LMC-IMAG, Grenoble, France, for his hospitality while writing the major part of this manual.
Despite these successful tests I consider ABACUS still as an experimental system. Therefore, feedback of the users is appreciated. Some parts of the user's guide were adapted from [Thi95], while the reference manual has been compiled for the first time. Therefore, I also encourage the reader to send me error reports and improvement suggestions for the user's guide and the reference manual.
I am aware that neither the software nor its documentation is perfect, but I think it is time to dare a first public release.
Grenoble, August 1996 Stefan Thienel