OsiCplex is a conic solver interface for Cplex solver. OsiCplex implements OsiConic interface, which extends Open Solver Interface (OSI) to second order conic optimization problems.
OsiCplex depends on CoinUtils, OSI and OsiConic. OsiCplex extends COIN-OR's linear Cplex interface OsiCpx.
OsiCplex is used by DisCO to solve mixed integer conic optimization problems.
Following code snippet reads problem from an MPS file (an extended MPS format for second order cone problems) and solves it using Cplex.
#include <OsiCplexSolverInterface.hpp>
int main(int argc, char ** argv) {
OsiConicSolverInterface * si = new OsiCplexSolverInterface();
si->readMps(argv[1]);
si->initialSolve();
std::cout << "Optimal solution is " << si->getObjValue() << std::endl;
delete si;
return 0;
}
Currently only Mosek style MPS files are supported. You can find the complete example in the examples directory.
OsiCplex is tested/works in Linux environment only for now. To install OsiCplex you need to have a Cplex solver with a valid license installed in your computer. You should compile OSI with Cplex first. You can do this with the following command.
./configure --prefix=build_dir --with-cplex-incdir=/cplex_include_dir --with-cplex-lib="-L/cplex_lib_dir -lcplex -lm -lpthread"
make install
First command configures OSI with Cplex. You need to replace build_dir
for the directory that you want to install OSI. You need to replace
cplex_include_dir
and cplex_lib_dir
with your Cplex
directories. Second command install OSI to build_dir
. Please see Osi
documentation for details.
You need to configure CoinUtils and OsiConic the same way using the same build_dir
.
Once Osi and other dependencies are installed you can install OsiCplex with the following command
./configure --prefix=build_dir && make install
OsiCplex configure script will find dependencies as long as you use same
build_dir
that you used during configuration of them.
If you already have the dependencies somewhere else in your computer and you do
not want to install them again, you are covered. First you need to make sure
that dependencies can be found with package config (pkgconfig
command). For this you need to add the directory that has .pc
files of
dependencies to your PKG_CONFIG_PATH
. You can test whether the
dependencies are accesible with pkg-config with the following command,
pkg-config --cflags --libs osi-cplex
.
Once the dependencies are accessible through pkg-config you can install
OsiCplex by using regular configure
, make
and make install
sequence. Configure script will find the dependencies through pkg-config and
link OsiCplex to them.