3.3 New Features of ABACUS 2.2

Version 2.2 includes a new interface to the Lp-Solver Xpress and Cplex 6.0 and it provides enhaced functionality for parameter handling. Moreover, the library is now available for different native compilers. It can be configured for any combination of supported LP-Solvers by the user. ABACUS now intensively uses inline functions to improve performance.

3.3.1 Lp-Solver Xpress

In addition to the LP-Solvers Cplex and Soplex ABACUS now also provides an interface to the LP-Solver Xpress-MP Version 10. The Xpress libraries libxosl.a and libmp-opt.a have both to be linked.

Xpress-MP is a commercial product by Dash Associates. You find further information about Xpress at http://www.dash.co.uk/.

3.3.2 Lp-Solver Cplex

Cplex 6.0 is now supported.

In addition, a new parameter CplexHoldEnvironment is introduced. If this parameter is true, then the Cplex environment is held open during the branch-and-cut optimization. This reserves a Cplex license for the complete time of optimization.

3.3.3 Lp-Methods

The solution method for linear programs LP::Barrier is replaced by the methods LP::BarrierAndCrossover and LP::BarrierNoCrossover.

3.3.4 New Compilers

New supported compilers are the GNU C++ compiler gcc 2.8 and the Sun WorkShop Compiler C++ 4.2. We now provide 32 and 64 bit versions of the ABACUS library compiled with the SGI MIPSpro 7.2 C++ compiler.

3.3.5 Library Architectures

The ABACUS library is provided for different combinations of hardware, operating systems and compilers. These combinations are identified by an <arch> name. Some architectures are shown in table 3.1.






Hardware Operating System Compiler <arch>




SUN SPARC SUN-OS 4.1.3 GNU C++ Compiler 2.8.1 sunos-gcc28
SUN SPARC SUN-OS 5.6 GNU C++ Compiler 2.8.1 solaris-gcc28
SUN SPARC SUN-OS 5.6 GNU C++ Compiler 2.7.2 solaris-gcc27
SUN SPARC SUN-OS 5.6 SUN WorkShop Compiler C++ 4.2 solaris-CC
IBM RS6000 AIX 4.1.5 GNU C++ Compiler 2.8.1 aix4-gcc28
IBM RS6000 AIX 4.1.5 GNU C++ Compiler 2.7.2 aix4-gcc27
DEC ALPHA OSF 3.2 GNU C++ Compiler 2.8.1 osf-gcc28
DEC ALPHA OSF 3.2 GNU C++ Compiler 2.7.2 osf-gcc27
SILICON GRAPHICS Irix 6.2 GNU C++ Compiler 2.7.2 irix6-gcc27
SILICON GRAPHICS Irix 6.2 MIPSpro 7.2 C++ compiler 32 Bit, irix6-CCn32
mips4
SILICON GRAPHICS Irix 6.2 MIPSpro 7.2 C++ compiler 64 Bit, irix6-CC64
mips4
HP 9000 HP-UX 10.20 GNU C++ Compiler 2.8.1 hpux10-gcc28
PC Linux 2.0.27 GNU C++ Compiler 2.8.1 linux20-gcc28
PC Linux 2.0.27 GNU C++ Compiler 2.7.2 linux20-gcc27
PC Windows NT MS Visual C++ 5.0 winnt





Table 3.1: Architecture names.

3.3.6 Library Creation by the User

The library archive file abacus-<version>-<arch>.tar.gz contains the basic ABACUS library and libraries for each supported Interface to an LP-Solver. Currently supported Interfaces are shown in table 3.2.




Interface name LP-Solver


cplex22 Cplex 2.2
cplex30 Cplex 3.0
cplex40 Cplex 4.0
cplex50 Cplex 5.0
cplex60 Cplex 6.0
soplex Soplex 1.0
xpress Xpress-MP 10



Table 3.2: Interface names.

You can create ABACUS libraries for any combination of supported LP-Solvers by yourself. Downloaded and unpack the library ditribution archive with the right <arch> in the installation root directiry (e.g. /usr/local/abacus). A directory abacus-<version/lib/<arch>/stuff is created which contains all required files to build specific ABACUS libraries. Then create LP-Solver specific ABACUS libraries by using the command make-lib in the directory lib/<arch> for any desired combination of different LP-solvers.

For example if you want to have ABACUS libraries for Solaris compiled with gcc 2.8 download the file abacus-2.2-solaris-gcc28.tar.gz.

  gunzip abacus-2.2-solaris-gcc28.tar.gz  
  tar xvf abacus-2.2-solaris-gcc28.tar

To create libraries with interfaces for Cplex 6.0, Soplex, Xpress and all three together type

  cd abacus-2.2/lib/solaris-gcc28  
  make-lib cplex60  
  make-lib soplex  
  make-lib xpress  
  make-lib cplex60-soplex-xpress

The make-lib <interfaces> command creates the file

abacus-<version>/lib/solaris-gcc28/libabacus-<interfaces>.a,

where <interfaces> is an interface string or a combination of interface strings concatenated by the character -.

3.3.7 New or Changed Preprocessor Flags

A list of preprocessor flags with new or changed meaning follows:



Preprocessor Flag Meaning


ABACUS_COMPILER_GCC28 GNU C++ compiler 2.8
ABACUS_COMPILER_GCC27 GNU C++ compiler 2.7
ABACUS_COMPILER_GCC defaults to ABACUS_COMPILER_GCC28
ABACUS_COMPILER_SUN SUN WorkShop C++ Compiler 4.2


ABACUS_EXPLICIT_TEMPLATES no longer needed
ABACUS_CPP_MATH no longer needed
ABACUS_SYS_xxxxxx no longer needed
ABACUS_LP_SOPLEX no longer needed
ABACUS_LP_CPLEXxx needed only if lpmastercplex.h or cplexif.h is included.


See the updated Makefile of the TSP example in abacus-2.2/example/Makefile for a description of the valid compiler and linker flags. This file also explains how to link an application with more than one LP solver.

3.3.8 Templates

It is no longer needed to include template definition files (*.inc). These files are now automatically included by the coresponding header files (*.h).

If you are using gcc 2.8 no special flags for template instatiation need to be defined. If you are using gcc 2.7 we recommended to define the compilerflag -fno-implicit-templates and to manually instantiate the templates which are needed, but not contained in the ABACUS library as described in section 5.3.

3.3.9 New LP Master Classes

There is a new abstract class ABA_LPMASTER and subclasses ABA_LPMASTERCPLEX, ABA_LPMASTERSOPLEX and ABA_LPMASTERXPRESS. These classes handle LP solver specific parameters and global data. As a consequence some LP solver specific functions which were located in ABA_MASTER are now located in one of these classes. If you are using such a function you have to change your code as shown in the example below:

    master->cplexOutputLevel(level);

should be changed to

    ABA_LPMASTERCPLEX *cplexMaster = master->lpMasterCplex();  
    lpMasterCplex->cplexOutputLevel(level);

or simply

    master->lpMasterCplex()->cplexOutputLevel(level);

The corresponding header files are abacus/lpmastercplex.h, abacus/lpmastersoplex.h, and abacus/lpmasterxpress.h.

3.3.10 HTML Documentation

In the HTML version of the Reference Manual (Section 6), we added links in the declaration part of the class which point to other classes and to the descriptions of the class members.

3.3.11 Parameter Handling

The system parameter table and the functions for handling parameters moved from class ABA_MASTER to its base class ABA_GLOBAL. Now, it is possible to use the parameter concept of ABACUS even without generating an object of ABA_MASTER. (This might be useful when writing some experimental code using the Tools and Templates of ABACUS, but not writting an complete branch-and-cut-application.)

In addition to the overloaded functions ABA_GLOBAL::getParameter(), we now provide the overloaded functions ABA_GLOBAL::assignParameter() and ABA_GLOBAL::findParameter() with enhanched functionality. The new functions test for the existence of a parameter in the table, compare the current setting with feasible settings and allow for termination of the program if a required paramter is not found, or if it is found but if its setting is not feasible.

Moreover, a branch-and-cut-optimization can be started without reading the parameter file .abacus.

See section 5.2.28 for further details on using parameters.

3.3.12 Name changings

This version contains some changings of names that seemed reasonable to us. Most changings were guided by the principle that we want to have the feasible values of the ABACUS parameters coinciding with the enumerators of the corresponding enumeration type. (As all enumerators in one class have to be different, an exception to that rule is the parameter value None which is feasible for different paramaters.)

In addition, we changed in general in SoPlex the upper P to a lower one.

Table 3.3 summarizes the changings. We provide Perl scripts for performing the changings on your ABACUS application. For a parameter file, use

upd-parameter-2.2 <parameter-file>

and apply

upd-sources-2.2 <code-filse>

to your C++ code files.


Location Old New



Parameter EnumerationStrategy Best BestFirst
Parameter EnumerationStrategy Depth DepthFirst
Parameter EnumerationStrategy Breadth BreadthFirst
ABA_MASTER::PRIMALBOUNDMODE OptimalPrimalBound Optimum
ABA_MASTER::PRIMALBOUNDMODE OptimalOnePrimalBound OptimumOne
ABA_MASTER::VBCMODE None NoVbcLog
various SoPlex Soplex
ABA_LP::METHOD Barrier BarrierAndCrossover

Table 3.3: Name changings.