Solving Constraint Integer Programs


There are several ways of accessing the SCIP Optimization Suite from other software packages or programming platforms.

File formats

The easiest way to load a problem into SCIP is via an input file, given in a format that SCIP can parse directly, see the tutorial on how to use the interactive shell. SCIP is capable of reading more than ten different file formats, including formats for nonlinear problems and constraint programs. This gives researchers from different communities an easy, first access to the SCIP Optimization Suite. See also the list of readable file formats.

C and C++ API

For SCIP there exists an API to C and C++. Please refer to the Public API of SCIP documentation for further details.

C++ wrapper classes

Since SCIP is written in C, its callable library can be directly accessed from C++. If a user wants to program own plugins in C++, there are wrapper classes for all different types of plugins available in the src/objscip directory of the SCIP standard distribution. SCIP provides several examples that were written in C++, see Examples and select an example written in C++.

Interfaces for other programming languages

Interfaces for other programming languages are developed and maintained independently from the SCIP Optimization Suite on GitHub in order to provide extensions and patches faster and to collaborate on them more easily.

  • PySCIPOpt for Python PySCIPOpt can be installed via conda-forge, which automatically includes SCIP. PySCIPOpt is our open-source python API for SCIP, using wrappers to allow users to build their own plugins without accessing the C code of SCIP itself. Since Python is one of the most commonly used programming languages, especially in the field of machine learning, the API gives easy access to the solvers functionality to incorporate SCIP into any python project pipeline, extract data for further analysis and computation and allow customizing the solving process from the outside.
  • SCIP.jl for Julia The Julia interface exposes an API identical to the SCIP-C_API and implements the MathOptInterface used by most constrained solvers in Julia. It can be accessed through the Julia package manager and will install a pre-built version of SCIP if none is provided by the user.
  • There is a separate interface available from Matlab to SCIP and SCIP-SDP.
  • JSCIPOpt for Java

Contributions to these projects are very welcome.

There are also several third-party python interfaces to the SCIP Optimization Suite, e.g., NUMBERJACK and python-zibopt. NUMBERJACK is a constraint programming platform implemented in python. It supports a variety of different solvers, one of them being the SCIP Optimization Suite. python-zibopt was developed by Ryan J. O'Neil and is a python extension of the SCIP Optimization Suite. PICOS is a python interface for conic optimization, provided by Guillaume Sagnol.

Modeling languages

A natural way of formulating an optimization problem is to use a modeling language. Besides ZIMPL, that is a part of the SCIP Optimization Suite, there are several other modeling tools with a direct interface to SCIP.

  • ZIMPL, a modeling language for constraint programming,
  • both AMPL and GAMS, are well-suited for modeling mixed-integer linear and nonlinear optimization problems,
  • and CMPL for mixed-integer linear problems.
  • JuMP accesses SCIP through the Julia interface.

The AMPL and ZIMPL interfaces are included in the SCIP distribution, the GAMS interface is available here.

The OPTI project by Jonathan Currie provides an external MATLAB interface for the SCIP Optimization Suite. Furthermore, YALMIP by Johan Löfberg provides a free modeling language.