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.
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/.
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.
The solution method for linear programs LP::Barrier is replaced by the methods LP::BarrierAndCrossover and LP::BarrierNoCrossover.
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.
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.
|
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.
|
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
where <interfaces> is an interface string or a combination of interface strings concatenated by the character -.
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.
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.
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.
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.
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.
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.
|