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 access to the SCIP Optimization Suite. See also the list of readable file formats.
C API
The main access point for SCIP is its API to 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.
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 provides an extensive open-source interface for Python. PySCIPOpt can be installed via conda-forge, which automatically includes SCIP. PySCIPOpt uses 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 as well as allow customizing the solving process.
- SCIP.jl is a Julia interface that 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 Matlab interface to use SCIP and SCIP-SDP from Matlab and Octave.
- JSCIPOpt is an interface for Java.
- Russcip is an interface for Rust.
- SCIP++ is a modeling interface for C++.
Contributions to these projects are very welcome.
There are also many third-party python interfaces to the SCIP Optimization Suite, for example:
- 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 (not maintained anymore).
- 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, which is 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.
- YALMIP by Johan Löfberg provides a free modeling language.
The AMPL and ZIMPL interfaces are included in the SCIP distribution, the GAMS interface is available here.