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:
Download the air05 instance with
dataset.miplib2017
from the OMMX Python SDK.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 |
---|---|---|
|
|
The authors of the instance |
|
|
The number of constraint conditions in the instance |
|
|
The date of the instance was saved as an OMMX Artifact |
|
|
The name of the dataset to which this instance belongs |
|
|
The license of this dataset |
|
|
The name of the instance |
|
|
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)