The program cddlib is an efficient implementation [12] of
the double description Method [14]
for generating all vertices (i.e. extreme points)
and extreme rays of a general
convex polyhedron given by
a system of linear inequalities:
cddlib is a C-library version of the previously released C-code cdd/cdd+. In order to make this library version, a large part of the cdd source (Version 0.61) has been rewritten. This library version is more flexible since it can be called from other programs in C/C++. Unlike cdd/cdd+, cddlib can handle any general input and is more general. Furtthermore, additional functions have been written to extend its functionality.
One useful feature of cddlib/cdd/cdd+ is its capability
of handling the dual (reverse) problem without any transformation
of data. The dual transformation problem of a V-representation
to a minimal H-representation and is often called the
(convex) hull problem. More explicitly,
is to obtain a linear inequality representation
of a convex polyhedron given as the Minkowski sum of
the convex hull of a finite set of points and the nonnegative
hull of a finite set of points in :
cddlib comes with an LP code to solve the general linear programming (LP) problem to maximize (or minimize) a linear function over polyhedron . It is useful mainly for solving dense LP's with large (say, up to few hundred thousands) and small (say, up to 100). It implements a revised dual simplex method that updates matrix for a pivot operation.
The program cddlib has an I/O routines that read and write files in Polyhedra format which was defined by David Avis and the author in 1993, and has been updated in 1997. The program called lrs [2] developed by David Avis is a C-implementation of the reverse search algorithm [4] for the same enumeration purpose, and it conforms to Polyhedra format as well. Hopefully, this compatibility of the two programs enables users to use both programs for the same input files and to choose whichever is useful for their purposes. From our experiences with relatively large problems, the two methods are both useful and perhaps complementary to each other. In general, the program cddlib tends to be efficient for highly degenerate inputs and the program rs tends to be efficient for nondegenerate or slightly degenerate problems.
Although the program can be used for nondegenerate inputs, it might not be very efficient. For nondegenerate inputs, other available programs, such as the reverse search code lrs or qhull (developed by the Geometry Center), might be more efficient. See Section 8 for pointers to these codes. The paper [3] contains many interesting results on polyhedral computation and experimental results on cdd+, lrs, qhull and porta.
This program can be distributed freely under the GNU GENERAL PUBLIC LICENSE. Please read the file COPYING carefully before using.
I will not take any responsibility of any problems you might have with this program. But I will be glad to receive bug reports or suggestions at the e-mail addresses above. If cddlib turns out to be useful, please kindly inform me of what purposes cdd has been used for. I will be happy to include a list of applications in future distribution if I receive enough replies. The most powerful support for free software development is user's appreciation and collaboration.