Downloading a MIPLIB Instance

Downloading a MIPLIB Instance#

The OMMX repository provides mixed-integer programming benchmark instances from MIPLIB 2017 in OMMX Artifact format.

Note

More details: The MIPLIB 2017 instances in OMMX Artifact format are hosted in the GitHub Container Registry for the OMMX repository (link).

Please see this page for information on GitHub Container Registry.

You can easily download these instances with the OMMX SDK, then directly use them as inputs to OMMX Adapters. For example, to solve the neos-1122047 instance from MIPLIB 2017 (reference) with PySCIPOpt, you can:

  1. Download the neos-1122047 instance with dataset.miplib2017 from the OMMX Python SDK.

  2. Solve with PySCIPOpt via the OMMX PySCIPOpt Adapter.

Here is a sample Python code:

# OMMX Python SDK
from ommx import dataset
# OMMX PySCIPOpt Adapter
from ommx_pyscipopt_adapter import OMMXPySCIPOptAdapter

# Step 1: Download the neos-1122047 instance from MIPLIB 2017
instance = dataset.miplib2017("neos-1122047")

# Step 2: Solve with PySCIPOpt via the OMMX PySCIPOpt Adapter
solution = OMMXPySCIPOptAdapter.solve(instance)

This functionality makes it easy to run benchmark tests on multiple OMMX-compatible solvers using the same MIPLIB instances.

Note about Annotations with the Instance#

The downloaded instance includes various annotations accessible via the annotations property:

import pandas as pd
# Display annotations in tabular form using pandas
pd.DataFrame.from_dict(instance.annotations, orient="index", columns=["Value"]).sort_index()
Value
org.ommx.miplib.binaries 100
org.ommx.miplib.continuous 5000
org.ommx.miplib.group neos-pseudoapplication-46
org.ommx.miplib.integers 0
org.ommx.miplib.non_zero 163640
org.ommx.miplib.objective 161
org.ommx.miplib.status easy
org.ommx.miplib.tags benchmark,benchmark_suitable,precedence,variab...
org.ommx.miplib.url https://miplib.zib.de/instance_details_neos-11...
org.ommx.v1.instance.authors NEOS Server Submission
org.ommx.v1.instance.constraints 57791
org.ommx.v1.instance.created 2025-07-23T20:56:05.897657+09:00
org.ommx.v1.instance.dataset MIPLIB2017
org.ommx.v1.instance.license CC-BY-SA-4.0
org.ommx.v1.instance.title neos-1122047
org.ommx.v1.instance.variables 5100

These instances have both dataset-level annotations and dataset-specific annotations.

There are seven dataset-wide annotations with dedicated properties:

Annotation

Property

Description

org.ommx.v1.instance.authors

authors

The authors of the instance

org.ommx.v1.instance.constraints

num_constraints

The number of constraint conditions in the instance

org.ommx.v1.instance.created

created

The date of the instance was saved as an OMMX Artifact

org.ommx.v1.instance.dataset

dataset

The name of the dataset to which this instance belongs

org.ommx.v1.instance.license

license

The license of this dataset

org.ommx.v1.instance.title

title

The name of the instance

org.ommx.v1.instance.variables

num_variables

The total number of decision variables in the instance

MIPLIB-specific annotations are prefixed with org.ommx.miplib.*.

For example, the optimal objective of the neos-1122047 instance is 161, which you can check with the key org.ommx.miplib.objective:

# Note that the values of annotations are all strings (str)!
instance.annotations["org.ommx.miplib.objective"]
'161'

Thus, we can verify that the optimization result from the OMMX PySCIPOpt Adapter matches the expected optimal value.

import numpy as np

best = float(instance.annotations["org.ommx.miplib.objective"])
assert np.isclose(solution.objective, best)