Skip to main content

A Python wrapper for the MiniZinc tool pipeline.

Project description


**PyMzn** is a Python library that wraps and enhances the
[MiniZinc]( tools for constraint programming. PyMzn is built
on top of the [minizinc]( toolkit and
provides a number of off-the-shelf functions to readily solve problems encoded
with the MiniZinc language and return solutions as Python dictionaries.

First, we need to define a constraint program via MiniZinc.
Here is a simple 0-1 knapsack problem encoded with MiniZinc:

``` minizinc
%% knapsack01.mzn %%
int: n; % number of objects
set of int: OBJ = 1..n;
int: capacity; % the capacity of the knapsack
array[OBJ] of int: profit; % the profit of each object
array[OBJ] of int: size; % the size of each object

var set of OBJ: x;
constraint sum(i in x)(size[i]) <= capacity;
var int: obj = sum(i in x)(profit[i]);
solve maximize obj;

%% knapsack01.dzn %%
n = 5;
profit = [10, 3, 9, 4, 8];
size = [14, 4, 10, 6, 9];

You can solve the above problem using the `pymzn.minizinc` function:

``` python3
import pymzn
solns = pymzn.minizinc('knapsack01.mzn', 'knapsack01.dzn', data={'capacity': 20})

The result will be:

``` python3
[{'x': {3, 5}}]

The returned object is a lazy solution stream, which can either be iterated or
directly indexed as a list. The `pymzn.minizinc` function takes care of all the
preprocessing, the communication with the `minizinc` executable, and the parsing
of the solutions stream into Python dictionaries.

PyMzn is also able to:

* Convert Python dictionaries to
[dzn]( format and back (e.g. when
passing data to the `pymzn.minizinc` function);
* Interface with many different
* Preprocess MiniZinc models (a.k.a. [dynamic
modelling]( by embedding code
from the [Jinja2]( templating language;
* Perform [concurrent]( MiniZinc
execution using Python coroutines.

For a follow-up of the previous example, read the
[Quick Start guide](

For more information on the PyMzn classes and functions refer to the
[reference manual](


PyMzn can be installed via Pip:

``` bash
pip install pymzn

or from the source code available
on [GitHub](

``` bash
python install

PyMzn is developed and maintained in Python 3.5. Starting from version 0.18.0,
support for Python 2 and versions previous to 3.5 has been dropped (its just too
much work mainintaining them). Using the package `pymzn.aio` for concurrent
execution requires Python 3.6 (though it is optional).

PyMzn requires the MiniZinc toolkit to be installed on your machine. Starting
from PyMzn 0.18.0, the minimum MiniZinc version required is the 2.2.0. If you
need to work with previous versions of MiniZinc, PyMzn 0.17.1 should work fine.

The easiest way to install MiniZinc is to download the
[MiniZincIDE]( package, which
contains both the MiniZinc binaries and several solvers. After downloading the
package, make sure the executables are visible to PyMzn either by setting the
`PATH` environment variable or by configuring it using the `pymzn.config`

For more details take a look at the
[Install section]( in the

Optional dependencies include:
* [Jinja2](, for preprocessing
through Jinja templating language;
* [PyYAML]( and
[appdirs](, for loading and saving
configuration files.


[Paolo Dragone](, PhD student at the University of
Trento (Italy).

Project details

Download files

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

Filename, size & hash SHA256 hash help File type Python version Upload date
pymzn-0.18.1-py3-none-any.whl (40.3 kB) Copy SHA256 hash SHA256 Wheel py3
pymzn-0.18.1.tar.gz (34.4 kB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page