2012-04-30 (April 30, 2015)
-----------------------------------------------
C-Library cddlib (version 0.94h) README FILE
-----------------------------------------------
1. The C-library  cddlib is a C implementation of the Double Description 
Method of Motzkin et al. for generating all vertices (i.e. extreme points)
and extreme rays of a general convex polyhedron in R^d given by a system 
of linear inequalities:

   P = { x=(x1, ..., xd)^T :  b - A  x  >= 0 }

where  A  is a given m x d real matrix, b is a given m-vector 
and 0 is the m-vector of all zeros.

The program can be used for the reverse operation (i.e. convex hull
computation).  This means that  one can move back and forth between 
an inequality representation  and a generator (i.e. vertex and ray) 
representation of a polyhedron with cdd.  Also, cdd can solve a linear
programming problem, i.e. a problem of maximizing and minimizing 
a linear function over P.

The version 0.94 is the seventh release of libcdd. New functions
added in this release include dd_MatrixCanonicalize,
dd_FindRelativeInterior and dd_ExistsRestrictedFace.  These
functions are LP-based and should be reasonably efficient.
The sample programs such as redcheck.c, testlp1.c and allfaces.c
show how these functions can be used to remove redundancies,
to compute the dimension and all faces of an H-polyhedron.

In addition to the new functionalities, many small bugs have
been fixed.  For example, the mishandling of empty H-polyhedra
has been fixed for the representation conversion.

If you find some problems or bugs, please kindly report them to
fukuda@ifor.math.ethz.ch.  Please read README.whatsnew for the changes 
over the last release.

The documentation (cddlibman.tex) is still incomplete but contains 
descriptions of the most important functions. Please look at the examples,
testcdd*.c, testlp*.c, simplecdd.c, lcdd.c, redcheck,c for how 
the library functions can be used in user's C-codes.

2. One convenient feature of cddlib is the ability
to handle essentially any data.  More precisely, it can
generate an H-representation of a V-polyhedron which is not
full-dimensional, and it can generate a V-representation
of an H-polyhedron which has no extreme points.

3. A little caution is in order.  Many people have seen 
numerical problems when the floating version of cddlib
is used.   As we all know, floating-point computation
might not give a correct answer, especially when an input
data is very sensitive to a small perturbation.  When
some strange behavior is observed, it is always wise
to create a rational approximation of the input
(for example, one can replace 0.3333333 with 1/3)
and to compute it with cddlib compiled with gmp rational
to see what a correct behavior should be.  Whenever the time
is not important, it is safer to use gmp rational arithmetic.

If you need speedy computation with floating-point arithmetic, 
you might want to "play with" the constant "dd_almostzero" defined 
in cdd.h:

   #define dd_almostzero  1.0E-6

This number is used to recognize whether a number is zero: 
a number whose absolute value is smaller
than dd_almostzero is considered zero, and nonzero otherwise.
You might want to change this to modify the behavior of cddlib.
Another thing one can do is scaling.  If the values in one column of
an input is of smaller magnitude than those in another column, 
scale one so that they become comparable.

4. The cddlib package is in "tar"ed and "gzip"ed format with name
cddlib-***.tar.gz, where *** is the version number.  The standard
download site for the package is

     web site : http://www-oldurls.inf.ethz.ch/personal/fukudak/cdd_home/
     file name: cddlib-***.tar.gz

In order to unpack the package in a standard unix environment, type 
   
     % tar xvfz cddlib-***.tar.gz

where *** must be replaced by the appropriate version number, and
% is a unix prompt. 

For compilation of libcdd, go to the cddlib top directorycddlib
and follow the general instruction of autoconf.  In generic
unix/linux environment, use "./configure" and "make".
To enforce a certain compiler to be used, specify it as

   CXX=g++ ./configure

The default compiler is gcc.
Note that one must install GMP-4.* (or higher) first.

For compilation of MathLink programs,
you need a binary "mprep", MathLink library "libML.a" and include file
"mathlink.h" which come with Mathematica.   I have tested for Mathematica 4.1
and 3.* on MacOSX and Linux.  This part is not "autoconf"igured
and thus one needs to edit Makefile in the src-mathlink and src-mathlink2 subdirectories. 

To install the library in public directory of unix environment, 
just type "make install".  The default installation directory
is /usr/local.  If you want to select other places, use
"./configure --prefix=<DIRNAME>" to configure with your favorite
<DIRNAME>. 

One might have to make the files publicly readable by chmod.
Once the files are properly installed, any user can use compile
one's own code (e.g. testcdd1.c) and link it with libcdd by
  
   % gcc -I/usr/local/include -L/usr/local/lib testcdd1.c -lcdd

or (with GMP rational arithmetic)

   % gcc -I/usr/local/include -L/usr/local/lib -DGMPRATIONAL testcdd1.c -lcddgmp -lgmp


5. cddlib comes with a MathLink version of cddlib that can be
called from Mathematica (tested for Mathematica 2.2, 3.0, 4.1, 5.1).
A few Mathematica notebooks are included to explain how one can 
use this program "cddmathlink" from Mathematica
to manipulate polytopes.  Please check the files, 
cddml-notbook.ma, cddml-PolytopeSkeleton.ma, cddml-DietProblem.ma,
and cddml-Zonotope.ma, in the mma subdirectory.  I could 
compile cddmathlink.c for Macintosh and Windows.  Please use
gcc instead of g++ to compile cddlib.  I have put 
binaries for different platforms in 
http://www.cs.mcgill.ca/~fukuda/download/cdd/cddlibml_binary/  .


6. The library cddlib is free software, but if cddlib turns out to be useful, 
please kindly send me (at the address below) a note or a paper mentioning 
what purpose and how cdd has been used for. The most powerful support 
for free software development is user's appreciation.   

For more information, contact

Komei Fukuda <fukuda@math.ethz.ch>
Institute of Theoretical Computer Science
ETH Zentrum, CH-8092 Zurich, Switzerland
Tel +41-1-632-4023, Fax +41-1-632-1063
http://www.ifor.math.ethz.ch/staff/fukuda/

// END of README 

