Skip to main content

Python interface and modeling environment for SCIP

Project description

PySCIPOpt

This project provides an interface from Python to the SCIP Optimization Suite.

Gitter PySCIPOpt on PyPI TravisCI Status AppVeyor Status

Documentation

Please consult the online documentation or use the help() function directly in Python or ? in IPython/Jupyter.

See CHANGELOG.md for added, removed or fixed functionality.

Installation

See INSTALL.md for instructions. Please note that the latest PySCIPOpt version is usually only compatible with the latest major release of the SCIP Optimization Suite. Information which version of PySCIPOpt is required for a given SCIP version can also be found in INSTALL.md.

Building and solving a model

There are several examples and tutorials. These display some functionality of the interface and can serve as an entry point for writing more complex code. You might also want to have a look at this article about PySCIPOpt: https://opus4.kobv.de/opus4-zib/frontdoor/index/index/docId/6045. The following steps are always required when using the interface:

  1. It is necessary to import python-scip in your code. This is achieved by including the line
from pyscipopt import Model
  1. Create a solver instance.
model = Model("Example")  # model name is optional
  1. Access the methods in the scip.pyx file using the solver/model instance model, e.g.:
x = model.addVar("x")
y = model.addVar("y", vtype="INTEGER")
model.setObjective(x + y)
model.addCons(2*x - y*y >= 0)
model.optimize()
sol = model.getBestSol()
print("x: {}".format(sol[x]))
print("y: {}".format(sol[y]))

Writing new plugins

The Python interface can be used to define custom plugins to extend the functionality of SCIP. You may write a pricer, heuristic or even constraint handler using pure Python code and SCIP can call their methods using the callback system. Every available plugin has a base class that you need to extend, overwriting the predefined but empty callbacks. Please see test_pricer.py and test_heur.py for two simple examples.

Please notice that in most cases one needs to use a dictionary to specify the return values needed by SCIP.

Extending the interface

PySCIPOpt already covers many of the SCIP callable library methods. You may also extend it to increase the functionality of this interface. The following will provide some directions on how this can be achieved:

The two most important files in PySCIPOpt are the scip.pxd and scip.pyx. These two files specify the public functions of SCIP that can be accessed from your python code.

To make PySCIPOpt aware of the public functions you would like to access, you must add them to scip.pxd. There are two things that must be done in order to properly add the functions:

  1. Ensure any enums, structs or SCIP variable types are included in scip.pxd
  2. Add the prototype of the public function you wish to access to scip.pxd

After following the previous two steps, it is then possible to create functions in python that reference the SCIP public functions included in scip.pxd. This is achieved by modifying the scip.pyx file to add the functionality you require.

We are always happy to accept pull request containing patches or extensions!

Please have a look at our contribution guidelines.

Gotchas

Ranged constraints

While ranged constraints of the form

lhs <= expression <= rhs

are supported, the Python syntax for chained comparisons can't be hijacked with operator overloading. Instead, parenthesis must be used, e.g.,

lhs <= (expression <= rhs)

Alternatively, you may call model.chgRhs(cons, newrhs) or model.chgLhs(cons, newlhs) after the single-sided constraint has been created.

Variable objects

You can't use Variable objects as elements of sets or as keys of dicts. They are not hashable and comparable. The issue is that comparisons such as x == y will be interpreted as linear constraints, since Variables are also Expr objects.

Dual values

While PySCIPOpt supports access to the dual values of a solution, there are some limitations involved:

  • Can only be used when presolving and propagation is disabled to ensure that the LP solver - which is providing the dual information - actually solves the unmodified problem.
  • Heuristics should also be disabled to avoid that the problem is solved before the LP solver is called.
  • There should be no bound constraints, i.e., constraints with only one variable. This can cause incorrect values as explained in #136

Therefore, you should use the following settings when trying to work with dual information:

model.setPresolve(pyscipopt.SCIP_PARAMSETTING.OFF)
model.setHeuristics(pyscipopt.SCIP_PARAMSETTING.OFF)
model.disablePropagation()

Citing PySCIPOpt

Please cite this paper

@incollection{MaherMiltenbergerPedrosoRehfeldtSchwarzSerrano2016,
  author = {Stephen Maher and Matthias Miltenberger and Jo{\~{a}}o Pedro Pedroso and Daniel Rehfeldt and Robert Schwarz and Felipe Serrano},
  title = {{PySCIPOpt}: Mathematical Programming in Python with the {SCIP} Optimization Suite},
  booktitle = {Mathematical Software {\textendash} {ICMS} 2016}
  publisher = {Springer International Publishing},
  pages = {301--307},
  year = {2016},
  doi = {10.1007/978-3-319-42432-3_37},
}

as well as the corresponding SCIP Optimization Suite report when you use this tool for a publication or other scientific work.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

PySCIPOpt-3.0.3.tar.gz (617.3 kB view details)

Uploaded Source

Built Distributions

PySCIPOpt-3.0.3-cp38-cp38-win_amd64.whl (573.5 kB view details)

Uploaded CPython 3.8 Windows x86-64

PySCIPOpt-3.0.3-cp37-cp37m-win_amd64.whl (546.8 kB view details)

Uploaded CPython 3.7m Windows x86-64

PySCIPOpt-3.0.3-cp36-cp36m-win_amd64.whl (546.7 kB view details)

Uploaded CPython 3.6m Windows x86-64

File details

Details for the file PySCIPOpt-3.0.3.tar.gz.

File metadata

  • Download URL: PySCIPOpt-3.0.3.tar.gz
  • Upload date:
  • Size: 617.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.2.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.5.7

File hashes

Hashes for PySCIPOpt-3.0.3.tar.gz
Algorithm Hash digest
SHA256 05c5892d5cde68615de0b07f63aab7caba96758f9b73fb73291d0355bbcad77b
MD5 32aec8b1050444a4740a4fdb68567c0a
BLAKE2b-256 991240333996820d993c93addfbc79c253a152af7cca3e8fae4b30570ec67f21

See more details on using hashes here.

File details

Details for the file PySCIPOpt-3.0.3-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: PySCIPOpt-3.0.3-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 573.5 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.0

File hashes

Hashes for PySCIPOpt-3.0.3-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 06355783e3174297ba84f3cdb48d158a56c38c7f2923ffa2fc92f9cb5e87ecea
MD5 a88f283cb1d6a0e9f1c8191b65f38fa7
BLAKE2b-256 2acbc54e01422d9a1954e1bbbf7f0f5f63c802bf886e5d97fe58379d80633249

See more details on using hashes here.

File details

Details for the file PySCIPOpt-3.0.3-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: PySCIPOpt-3.0.3-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 546.8 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.5

File hashes

Hashes for PySCIPOpt-3.0.3-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 4fe1eb5d664163666811dd7678b600f4f09c675140790a4599779488cc028871
MD5 c71775c520247bef3cc08d7fa22e3e88
BLAKE2b-256 21e866eccca0b9c0739c71ea946413c22c2534420c04728ddae3bb99c1095160

See more details on using hashes here.

File details

Details for the file PySCIPOpt-3.0.3-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: PySCIPOpt-3.0.3-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 546.7 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.8

File hashes

Hashes for PySCIPOpt-3.0.3-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 2550b68ef6dfea892990188e4b84500eb7c48758e67574ff8a254747e2b67504
MD5 2c603a3914919f620e009743971f0aa1
BLAKE2b-256 8660fd796e85512dcd8cd72e786d4520bc1a3b2c4b8246c85394930227feaad5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page