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.

Extend the interface

The interface python-scip already provides many of the SCIP callable library methods. You may also extend python-scip 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.

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.

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

Uploaded Source

Built Distributions

PySCIPOpt-1.4.9-cp36-cp36m-win_amd64.whl (513.9 kB view details)

Uploaded CPython 3.6m Windows x86-64

PySCIPOpt-1.4.9-cp35-cp35m-win_amd64.whl (481.5 kB view details)

Uploaded CPython 3.5m Windows x86-64

PySCIPOpt-1.4.9-cp27-cp27m-win_amd64.whl (512.5 kB view details)

Uploaded CPython 2.7m Windows x86-64

File details

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

File metadata

  • Download URL: PySCIPOpt-1.4.9.tar.gz
  • Upload date:
  • Size: 496.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for PySCIPOpt-1.4.9.tar.gz
Algorithm Hash digest
SHA256 e4de159ab30d604c37b4b2069f142f80f246c23b85baef38d72d77cb99effa37
MD5 31f5dae89893ce98d6a5f4e005a646ef
BLAKE2b-256 6d861f43d131705b5e30750ca814f021008ed47ea5906d5f975d7eff7dee1eae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PySCIPOpt-1.4.9-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 5ae0629ef4c1a45425b276748feb3d45e9d816d1a6fb71cc3dd49a68102844ef
MD5 e75caed0b505316a2f6a229936a306ad
BLAKE2b-256 2177428c4f7846b83cbcb8eed8ae70744853d0dc3f73d7b553173d5d5be9a0db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PySCIPOpt-1.4.9-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 f66f9eb25ea9b0b5ad2edd842ba81a68e22b2b1252f3ef3f8899f577c4c83fd7
MD5 967612b0236e6f432147a4ffa8f85d8b
BLAKE2b-256 a17f2d0d49f2007ba7d7a640d575a4a00cb56e733d85e81cdd3ed9982cc581e7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PySCIPOpt-1.4.9-cp27-cp27m-win_amd64.whl
Algorithm Hash digest
SHA256 c5fe9851003396911c14a700f653d12c384b6fd0d3beb6fc827d8877e1a4b10d
MD5 51b8f770bda05e50dd9a9c3bc366472c
BLAKE2b-256 7b64f76ec81d8dec3419024ee6ecf812fe4614579776ac03dfd8375f80086b48

See more details on using hashes here.

Supported by

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