CGL-Conic is library for generation of conic cuts for Mixed Integer Second Order Conic Optimization (MISOCO) problems. CGL-Conic can be considered as a generalization of COIN-OR's Cut Generation Library (CGL).
CGL-Conic depends on CGL and other COIN-OR projects. CGL-Conic implements the following cut procedures,
- Disjunctive Cuts given by Belotti et. al., see related paper
- Conic mixed-integer rounding cuts by Atamturk and Narayanan, see related paper
- Outer approximation cuts, related paper to be published soon.
- Interior Point Method (IPM) approximation cuts, related paper to be published soon.
Cut procedures that are considered for implementation.
- Two-term disjunctions on the second-order cone by Karzan and Yildiz, see [related paper][Karzan Yildiz 2015]
- Cuts for 0-1 mixed convex programming by Stubbs and Mehrotra, see related paper.
- Cuts for mixed 0-1 conic programming by Cezik and Iyengar, see related paper
CGL-Conic is used by DisCO to solve MISOCO problems.
CGL-Conic is tested/works in Linux environment only for now. You can use COIN-OR BuildTools fetch and build utility for building and installing CGL-Conic. After cloning CGL-Conic, typing following commands should work.
git clone --branch=stable/0.8 https://github.com/coin-or-tools/BuildTools
bash BuildTools/get.dependencies.sh fetch
bash BuildTools/get.dependencies.sh build
First command clones BuildTools, second fetches CGL-Conic dependencies and third builds/installs GGL-Conic.
CGL-Conic can find dependencies using pkg-config
. If your .pc
files
are at your PKG_CONFIG_PATH
CGL-Conic configure script will find
them. Running make install
should work once the configure script is
successful.
Some cut implementations in CGL-Conic depends on solving SOCO problems using IPM method. You can specify the solver to use for this purpose. CGL-Conic uses Ipopt by default. You can use Cplex1 or Mosek2 through their OsiConic interface.
To specify the solver, you need to give --with-ipm-solver
flag to
configure script. For example, following command configures OSI-Conic with
Mosek.
./configure --with-ipm-solver=mosek
Similarly you can use cplex
or ipopt
instead of mosek
. If no
IPM solver is specified CGL-Conic will use Ipopt.