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 air05 instance from MIPLIB 2017 (reference) with PySCIPOpt, you can:

  1. Download the air05 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 air05 instance from MIPLIB 2017
instance = dataset.miplib2017("air05")

# 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 7195
org.ommx.miplib.continuous 0
org.ommx.miplib.group air
org.ommx.miplib.integers 0
org.ommx.miplib.non_zero 52121
org.ommx.miplib.objective 26374
org.ommx.miplib.status easy
org.ommx.miplib.tags benchmark,binary,benchmark_suitable,set_partit...
org.ommx.miplib.url https://miplib.zib.de/instance_details_air05.html
org.ommx.v1.instance.authors G. Astfalk
org.ommx.v1.instance.constraints 426
org.ommx.v1.instance.created 2024-11-11T20:38:59.242221+09:00
org.ommx.v1.instance.dataset MIPLIB2017
org.ommx.v1.instance.license CC-BY-SA-4.0
org.ommx.v1.instance.title air05
org.ommx.v1.instance.variables 7195

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 air05 instance is 26374, which you can check with the key org.ommx.miplib.objective:

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

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)