Skip to main content

Python interface and modeling environment for SCIP

Project description

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

Gitter PySCIPOpt on PyPI TravisCI Status AppVeyor Status TravisCI Test Coverage Code Health

Installation

See INSTALL.rst for instructions.

Building and solving a model

There are several examples provided in the tests folder. 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()

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()

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-2.1.1.tar.gz (515.1 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

PySCIPOpt-2.1.1-cp36-cp36m-win_amd64.whl (535.7 kB view details)

Uploaded CPython 3.6mWindows x86-64

PySCIPOpt-2.1.1-cp35-cp35m-win_amd64.whl (493.8 kB view details)

Uploaded CPython 3.5mWindows x86-64

PySCIPOpt-2.1.1-cp27-cp27m-win_amd64.whl (520.0 kB view details)

Uploaded CPython 2.7mWindows x86-64

File details

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

File metadata

  • Download URL: PySCIPOpt-2.1.1.tar.gz
  • Upload date:
  • Size: 515.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.29.1 CPython/2.7.15

File hashes

Hashes for PySCIPOpt-2.1.1.tar.gz
Algorithm Hash digest
SHA256 6da2f87cb56f386b8650067f6c0ef00ac11c6ae1a5dc8c7a8f0e855ee6a62463
MD5 0737074ac31fcaad338de7ef4920dc6f
BLAKE2b-256 fe5604651b865bf5ab41fd5108088129a6045e1e79757541a05d92264f878f6c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: PySCIPOpt-2.1.1-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 535.7 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.29.1 CPython/3.6.7

File hashes

Hashes for PySCIPOpt-2.1.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 a2bc456626d4816167a860de3286faf0f24f306247ab77ee5f34f5650a660236
MD5 19fb12afe015e9e1cc3633e82bf0f150
BLAKE2b-256 84adc0dcc928b6bb6d777a26d1b68df8fc6cf7ac34ad351e233f00b34fe7cb37

See more details on using hashes here.

File details

Details for the file PySCIPOpt-2.1.1-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: PySCIPOpt-2.1.1-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 493.8 kB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.29.1 CPython/3.5.4

File hashes

Hashes for PySCIPOpt-2.1.1-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 e5d706b786def312657a47dd56aa2587011fe82cf67e4693e4d911fdf7de8854
MD5 11ac1fb1601a2f6b1d81caefdfe471b0
BLAKE2b-256 d1d99da8755f49d0e8d7516253a04ba818279ab176ffdd1bc10d988cac8f617c

See more details on using hashes here.

File details

Details for the file PySCIPOpt-2.1.1-cp27-cp27m-win_amd64.whl.

File metadata

  • Download URL: PySCIPOpt-2.1.1-cp27-cp27m-win_amd64.whl
  • Upload date:
  • Size: 520.0 kB
  • Tags: CPython 2.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.29.1 CPython/2.7.15

File hashes

Hashes for PySCIPOpt-2.1.1-cp27-cp27m-win_amd64.whl
Algorithm Hash digest
SHA256 9a7964c5c1939c0d24091480e682c6fc66cd02c97a741effd65ce4b6c2712746
MD5 4b082a655d7d7a39064da7e39aa70879
BLAKE2b-256 8f1f85bcd88da4a2c658731561745a5a5b9620241f5c5e5987b5b10f9d0cee60

See more details on using hashes here.

Supported by

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