3.1 New Features of ABACUS 3.0

3.1.1 Open Solver Interface

ABACUS now supports the Open Solver Interface (Osi) developed by the COIN-OR (COmputational INfrastructure for Operations Research) project. All interface classes (|CPLEXIF|, |SOPLEXIF|, |XPRESSIF|) have been replaced by the single new class |OSIIF|. This change has the advantage that every solver supported by Osi can be used to solve LP relaxations. For the user only small modifications (if any) to existing code should be necessary. The setting of parameters for specific solvers now has to be implemented by the user in the problem specific derived class using Osi functions. For this we provide a new virtual function |ABA_MASTER::setSolverParameters()| that can be redefined by the user.

3.1.2 Compilers

New supported compilers are the GNU-C++  compilers g++ 3.3 - 4.1. Support for some older compilers has been dropped.

3.1.3 Library creation by the user

As there is now a single interface to all supported solvers, library creation is greatly simplified. Calling make and make install after adapting the Makefile compiles the library libabacus-osi.a and installs the header files to the specified location.

3.1.4 Documentation System

The reference manual is now extracted directly from the c++ source files using the doxygen documentation system. cweave and ctangle are no longer needed to compile the library.

3.1.5 Approximate solver

ABACUS now can use approximate instead of exact methods for solving LP relaxations. Currently, only the Volume Algorithm is supported, as it is the only approximate method provided by Osi. The new parameter |SolveApprox| and the virtual function |ABA_MASTER::solveApprox()| are provided to switch between exact and approximate solvers. See Section 5.2.11, the reference manual and the example included in the ABACUS distribution for details.

3.1.6 Memory management

The allocation and management of memory for the internal represantation of the LP is completely handled by Osi. The corresponding ABACUS functions are kept only for compatibility reasons.

3.1.7 Preprocessor Flags and Include Paths

A lot of preprocessor flags are no longer used. Especially the flag ABACUS_OLD_INCLUDE introduced in version 2.0 is obsolete. To include the array header file, for example, do:

#include ~abacus/array.h~