ConicBundle
Download and Installation

Get the current version of the ConicBundle package (a file named like CB_v?.?.?.tgz) from

http://www.tu-chemnitz.de/~helmberg/ConicBundle/

After having downloaded the file, do the following:

   tar xzvf CB_v?.?.?.tgz
   cd ConicBundle
   more README

and follow the instructions in the README file. For the time being, you may also follow the ones given here, but the README file might be more up to date.

It is assumed that

In the same directory as the README file you will find a

Makefile

In this Makefile the compilers are currently set to

CXX             =       g++
CC              =       gcc

If you want to use other compilers, you have to replace g++ and gcc by the appropriate names.

Choose one of the two compilation modes corresponding to a mode for debugging and an optimized mode without range and dimension checks.

MODE            =       DEBU
#MODE           =       OPTI

It is recommended to start with the DEBU mode first.

The Makefile is set up to allow the use of distinct compiler flags for each (operating_system.cpu.compiler)-configuration. You will find a few examples in the Makefile; we illustrate the concept for a Linux system with an "x86_64"-cpu and compiler g++,

#--- linux.x86_64.g++ settings ---------------------------------------------------
DEBU.linux.x86_64.g++ =  -g
OPTI.linux.x86_64.g++ =  -DNDEBUG -O3 -march=native -funroll-loops
WARN.linux.x86_64.g++ = $(GCCWARN)
DEPD.linux.x86_64.g++ = -MM
LINK.linux.x86_64.g++ = -lm 
AR.linux.x86_64.g++   = ar
ARFLAGS.linux.x86_64.g++ =      cr
RANLIB.linux.x86_64.g++ =       ranlib
OPTI.linux.x86_64.gcc = -DNDEBUG -O3
WARN.linux.x86_64.gcc = $(GCCWARN)
DEBU.linux.x86_64.gcc =         -g 
DEPD.linux.x86_64.gcc = -MM
LINK.linux.x86_64.gcc = -lm

These have the following purpose:

You may have to generate your own set if your configuration is not present. To find out your configuration simply plug in your compiler at CXX and run (gnu) make. Besides printing a lot of nonsense, make will create a subdirectory "<mode>.<os>.<cpu>.<CXX>". The last three terms of the subdirectory give you the names you have to use in order to add your options in the Makefile as in the example above.

After having adapted the Makefile to your needs run make by typing

make

After this you should find the library at

 ConicBundle/lib/libcb.a

and some small example programs showing the use of the ConicBundle interfaces,

 ConicBundle/t_c
 ConicBundle/t_cxx
 ConicBundle/t_mat
 ConicBundle/mc_triangle

generated from the files

 ConicBundle/c_main.c
 ConicBundle/cxx_main.cxx
 ConicBundle/mat_main.cxx
 ConicBundle/mc_triangle.cxx

Note: mc_triangle is a tutorial implementation for solving the semidefinite max-cut relaxation with dynamic separation of triangle inequalities on a dense matrix variable. Comment out the triangle separation for a sparse max-cut variant. The code solves the unweighted version for the support of an input graph that is piped into standard input (integers in the format "n_nodes m_edges from_node_1 to_node_1 val_1 ... from_node_m to_node_m val_m").

If you only plan to use the standard C or C++ interfaces, then all headers that you need can be found in the subdirectory include

 ConicBundle/include/cb_cinterface.h
 ConicBundle/include/CBSolver.hxx

If you plan to use the full interface with matrix classes, you will certainly need the subdirectory CBsources (with the main interface MatrixCBsolver.hxx) and most likely the subdirectories Matrix and Tools, as well.

The starting point for the html Manual is

  ConicBundle/html/index.html